private void addCountryStructures(string rootNodeText_, CountryGroupNodeMode mode_)
    {
      var otrTop = new CountryGroupNode(rootNodeText_, LiveMarkets.Markets,
        StructureGrouping.Outrights | StructureGrouping.Butterflies | StructureGrouping.Curves, mode_);
      otrTop.LeftImages.Add(BSAResources.folder_icon_16black);
      ultraTree1.Nodes.Add(otrTop);

      foreach (var market in LiveMarkets.Markets)
      {
        var marketNode = new CountryGroupNode(market.ToString(), new[] { market },
          StructureGrouping.Outrights | StructureGrouping.Butterflies | StructureGrouping.Curves, mode_);
        marketNode.LeftImages.Add(BSAResources.folder_icon_16black);
        otrTop.Nodes.Add(marketNode);


        foreach (var group in new[] { StructureGrouping.Outrights, StructureGrouping.Curves, StructureGrouping.Butterflies })
        {
          var marketGroupNode = new CountryGroupNode(group.ToString(), new[] { market }, group,mode_);
          marketGroupNode.LeftImages.Add(BSAResources.folder_arrow_icon_16);
          marketNode.Nodes.Add(marketGroupNode);
        }

        {
          var topXMarketNode = new CountryGroupNode("X-Mkt Spreads", new[] { BondMarket.None }, StructureGrouping.None, mode_);
          topXMarketNode.LeftImages.Add(BSAResources.globe_1_icon_16);
          marketNode.Nodes.Add(topXMarketNode);

          for (int i = 0; i < LiveMarkets.Markets.Length; ++i)
          {
            if (LiveMarkets.Markets[i] == market) continue;

            var xmktNode = new CountryGroupNode(string.Format("{0}.{1}", market, LiveMarkets.Markets[i]),
              new[] { market, LiveMarkets.Markets[i] }, StructureGrouping.XMarketSpreads, mode_);
            xmktNode.LeftImages.Add(BSAResources.globe_2_icon_16);
            topXMarketNode.Nodes.Add(xmktNode);
          }
        }

        {
          var topXMarketNode = new CountryGroupNode("X-Mkt Boxes", new[] { BondMarket.None }, StructureGrouping.None, mode_);
          topXMarketNode.LeftImages.Add(BSAResources.globe_1_icon_16);
          marketNode.Nodes.Add(topXMarketNode);

          for (int i = 0; i < LiveMarkets.Markets.Length; ++i)
          {
            if (LiveMarkets.Markets[i] == market) continue;

            var xmktNode = new CountryGroupNode(string.Format("{0}.{1}", market, LiveMarkets.Markets[i]),
              new[] { market, LiveMarkets.Markets[i] }, StructureGrouping.XMarketBoxes,mode_);
            xmktNode.LeftImages.Add(BSAResources.globe_2_icon_16);
            topXMarketNode.Nodes.Add(xmktNode);
          }
        }
      }

      // outrights
      {
        var outrightNode = new CountryGroupNode("Outrights", LiveMarkets.Markets, StructureGrouping.None, mode_, -1);
        outrightNode.LeftImages.Add(BSAResources.folder_icon_16black);
        otrTop.Nodes.Add(outrightNode);

        var allPoints = CMTLine.DisplayPoints;

        for (int index = 0; index < allPoints.Length; ++index)
        {
          var node = new CountryGroupNode(string.Format("{0}", allPoints[index]), LiveMarkets.Markets,
            StructureGrouping.Outrights, mode_, index);
          node.LeftImages.Add(BSAResources.folder_icon_16black);
          outrightNode.Nodes.Add(node);
        }
      }

      // curves
      {
        var curvesNode = new CountryGroupNode("Curves", LiveMarkets.Markets, StructureGrouping.None, mode_, -1);
        curvesNode.LeftImages.Add(BSAResources.folder_icon_16black);
        otrTop.Nodes.Add(curvesNode);

        var allPoints = StructureConfigs.IntraCountryCurves;

        for (int index = 0; index < allPoints.Count; ++index)
        {
          var node = new CountryGroupNode(string.Format("{0} {1}", allPoints[index][0], allPoints[index][1]), LiveMarkets.Markets,
            StructureGrouping.Curves, mode_, index);
          node.LeftImages.Add(BSAResources.folder_icon_16black);
          curvesNode.Nodes.Add(node);
        }
      }

      // butterflies
      {
        var bflyNode = new CountryGroupNode("Butterflies", LiveMarkets.Markets, StructureGrouping.None, mode_, -1);
        bflyNode.LeftImages.Add(BSAResources.folder_icon_16black);
        otrTop.Nodes.Add(bflyNode);

        var allPoints = StructureConfigs.IntraCountryButterflies;

        for (int index = 0; index < allPoints.Count; ++index)
        {
          var node = new CountryGroupNode(string.Format("{0} {1} {2}", allPoints[index][0], allPoints[index][1], allPoints[index][2]), LiveMarkets.Markets,
            StructureGrouping.Butterflies, mode_, index);
          node.LeftImages.Add(BSAResources.folder_icon_16black);
          bflyNode.Nodes.Add(node);
        }
      }

      // boxes
      {
        var boxesNode = new CountryGroupNode("Boxes", LiveMarkets.Markets, StructureGrouping.None, mode_, -1);
        boxesNode.LeftImages.Add(BSAResources.folder_icon_16black);
        otrTop.Nodes.Add(boxesNode);

        var allPoints = StructureConfigs.InterCountryBoxSides;
        for (int index = 0; index < allPoints.Count; ++index)
        {
          var node = new CountryGroupNode(string.Format("Boxes {0} {1}", allPoints[index][0], allPoints[index][1]),
            LiveMarkets.Markets, StructureGrouping.XMarketBoxes, mode_, index);
          node.LeftImages.Add(BSAResources.folder_icon_16black);
          boxesNode.Nodes.Add(node);
        }
      }

      ultraTree1.RefreshSort(otrTop.Nodes, true);
    }
    private void collectStatLineCreatorsFromFolder(CountryGroupNode node_, IList<IStatLineCreator> addToThis_)
    {
      var toAdd = BondStructureCountryGroupHelper.GetItems(node_.Markets, node_.Grouping, node_.Mode,
        node_.StructureIndex);

      if(toAdd!=null)
        foreach (var v in toAdd)
          addToThis_.Add(v);
    }