شركة التطبيقات المتكاملة لتصميم النظم البرمجية الخاصة ش.ش.و.

Integrated Applications Programming Company

Skip Navigation LinksHome » Code Library » Default

Public general use code classes and xml files that we've compiled and used over the years:

Defaul general support class for Huawei's Optical Fiber Network (OFN) data model.

   1:  using Microsoft.EntityFrameworkCore;
   2:  using System;
   3:  using System.Collections.Generic;
   4:  using System.Data;
   5:  using System.Linq;
   6:   
   7:  namespace Ia.Ngn.Cl.Model.Data.Huawei
   8:  {
   9:      ////////////////////////////////////////////////////////////////////////////
  10:   
  11:      /// <summary publish="true">
  12:      /// Defaul general support class for Huawei's Optical Fiber Network (OFN) data model.
  13:      /// </summary>
  14:      /// 
  15:      /// <remarks> 
  16:      /// Copyright © 2014-2019 Jasem Y. Al-Shamlan (info@ia.com.kw), Integrated Applications - Kuwait. All Rights Reserved.
  17:      ///
  18:      /// This library is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by
  19:      /// the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
  20:      ///
  21:      /// This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
  22:      /// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
  23:      /// 
  24:      /// You should have received a copy of the GNU General Public License along with this library. If not, see http://www.gnu.org/licenses.
  25:      /// 
  26:      /// Copyright notice: This notice may not be removed or altered from any source distribution.
  27:      /// </remarks> 
  28:      public class Default
  29:      {
  30:          private static string[] list;
  31:          private static List<Ia.Ngn.Cl.Model.Business.Huawei.Board.MduDevBoard> mduDevBoardList;
  32:          private static List<Ia.Ngn.Cl.Model.Business.Huawei.Dev.MduDev> mduDevList;
  33:          private static List<Ia.Ngn.Cl.Model.Business.Huawei.Dev.MsanDev> msanDevList;
  34:          private static Dictionary<string, Ia.Ngn.Cl.Model.Business.Huawei.Dev.MduDev> accessNameToMduDevDictionary, accessIdToMduDevDictionary, nddOntIdToMduDevDictionary;
  35:          private static Dictionary<int, Ia.Ngn.Cl.Model.Business.Huawei.Dev.MduDev> didToMduDevDictionary;
  36:   
  37:          private static readonly object objectLock = new object();
  38:   
  39:          ////////////////////////////////////////////////////////////////////////////
  40:   
  41:          /// <summary>
  42:          ///
  43:          /// </summary>
  44:          public Default() { }
  45:   
  46:          ////////////////////////////////////////////////////////////////////////////
  47:   
  48:          /// <summary>
  49:          ///
  50:          /// </summary>
  51:          public static Dictionary<string, Ia.Ngn.Cl.Model.Business.Huawei.Dev.MduDev> AccessNameToMduDevDictionary
  52:          {
  53:              get
  54:              {
  55:                  if (accessNameToMduDevDictionary == null || accessNameToMduDevDictionary.Count == 0)
  56:                  {
  57:                      lock (objectLock)
  58:                      {
  59:                          accessNameToMduDevDictionary = Ia.Ngn.Cl.Model.Data.Huawei.Default._AccessNameToMduDevDictionary();
  60:                      }
  61:                  }
  62:   
  63:                  return accessNameToMduDevDictionary;
  64:              }
  65:          }
  66:   
  67:          ////////////////////////////////////////////////////////////////////////////
  68:   
  69:          /// <summary>
  70:          ///
  71:          /// </summary>
  72:          private static Dictionary<string, Ia.Ngn.Cl.Model.Business.Huawei.Dev.MduDev> _AccessNameToMduDevDictionary()
  73:          {
  74:              accessNameToMduDevDictionary = new Dictionary<string, Ia.Ngn.Cl.Model.Business.Huawei.Dev.MduDev>();
  75:   
  76:              var mduDevList = Ia.Ngn.Cl.Model.Data.Huawei.Default.MduDevList;
  77:   
  78:              foreach (var mduDev in mduDevList)
  79:              {
  80:                  if (!string.IsNullOrEmpty(mduDev.AccessName) && !string.IsNullOrEmpty(mduDev.NddOntId))
  81:                  {
  82:                      if (!accessNameToMduDevDictionary.ContainsKey(mduDev.AccessName))
  83:                      {
  84:                          accessNameToMduDevDictionary[mduDev.AccessName] = mduDev;
  85:                      }
  86:                      else
  87:                      {
  88:   
  89:                      }
  90:                  }
  91:                  else
  92:                  {
  93:   
  94:                  }
  95:              }
  96:   
  97:              return accessNameToMduDevDictionary;
  98:          }
  99:   
 100:          ////////////////////////////////////////////////////////////////////////////
 101:   
 102:          /// <summary>
 103:          ///
 104:          /// </summary>
 105:          public static Ia.Ngn.Cl.Model.Business.Huawei.Dev.MduDev MduDevByAccessName(string accessName)
 106:          {
 107:              Ia.Ngn.Cl.Model.Business.Huawei.Dev.MduDev mduDev;
 108:   
 109:              var accessNameToMduDevDictionary = Ia.Ngn.Cl.Model.Data.Huawei.Default.AccessNameToMduDevDictionary;
 110:   
 111:              if (accessNameToMduDevDictionary.ContainsKey(accessName))
 112:              {
 113:                  mduDev = accessNameToMduDevDictionary[accessName];
 114:              }
 115:              else mduDev = null;
 116:   
 117:              return mduDev;
 118:          }
 119:   
 120:          ////////////////////////////////////////////////////////////////////////////
 121:   
 122:          /// <summary>
 123:          ///
 124:          /// </summary>
 125:          public static void AccessNameToMduDevDictionaryReset()
 126:          {
 127:              accessNameToMduDevDictionary = null;
 128:              mduDevList = null;
 129:              mduDevBoardList = null;
 130:              accessIdToMduDevDictionary = null;
 131:              nddOntIdToMduDevDictionary = null;
 132:              didToMduDevDictionary = null;
 133:          }
 134:   
 135:          ////////////////////////////////////////////////////////////////////////////
 136:          ////////////////////////////////////////////////////////////////////////////
 137:   
 138:          /// <summary>
 139:          ///
 140:          /// </summary>
 141:          public static Dictionary<string, Ia.Ngn.Cl.Model.Business.Huawei.Dev.MduDev> AccessIdToMduDevDictionary
 142:          {
 143:              get
 144:              {
 145:                  if (accessIdToMduDevDictionary == null || accessIdToMduDevDictionary.Count == 0)
 146:                  {
 147:                      lock (objectLock)
 148:                      {
 149:                          accessIdToMduDevDictionary = Ia.Ngn.Cl.Model.Data.Huawei.Default._AccessIdToMduDevDictionary();
 150:                      }
 151:                  }
 152:   
 153:                  return accessIdToMduDevDictionary;
 154:              }
 155:          }
 156:   
 157:          ////////////////////////////////////////////////////////////////////////////
 158:   
 159:          /// <summary>
 160:          ///
 161:          /// </summary>
 162:          private static Dictionary<string, Ia.Ngn.Cl.Model.Business.Huawei.Dev.MduDev> _AccessIdToMduDevDictionary()
 163:          {
 164:              accessIdToMduDevDictionary = new Dictionary<string, Ia.Ngn.Cl.Model.Business.Huawei.Dev.MduDev>();
 165:   
 166:              var mduDevList = Ia.Ngn.Cl.Model.Data.Huawei.Default.MduDevList;
 167:   
 168:              foreach (var mduDev in mduDevList)
 169:              {
 170:                  if (!string.IsNullOrEmpty(mduDev.AccessName) && !string.IsNullOrEmpty(mduDev.AccessId) && !string.IsNullOrEmpty(mduDev.NddOntId))
 171:                  {
 172:                      if (!accessIdToMduDevDictionary.ContainsKey(mduDev.AccessId))
 173:                      {
 174:                          accessIdToMduDevDictionary[mduDev.AccessId] = mduDev;
 175:                      }
 176:                      else
 177:                      {
 178:   
 179:                      }
 180:                  }
 181:                  else
 182:                  {
 183:   
 184:                  }
 185:              }
 186:   
 187:              return accessIdToMduDevDictionary;
 188:          }
 189:   
 190:          ////////////////////////////////////////////////////////////////////////////
 191:   
 192:          /// <summary>
 193:          ///
 194:          /// </summary>
 195:          public static Ia.Ngn.Cl.Model.Business.Huawei.Dev.MduDev MduDevByAccessId(string accessId)
 196:          {
 197:              Ia.Ngn.Cl.Model.Business.Huawei.Dev.MduDev mduDev;
 198:   
 199:              var accessIdToMduDevDictionary = Ia.Ngn.Cl.Model.Data.Huawei.Default.AccessIdToMduDevDictionary;
 200:   
 201:              if (accessIdToMduDevDictionary.ContainsKey(accessId))
 202:              {
 203:                  mduDev = accessIdToMduDevDictionary[accessId];
 204:              }
 205:              else mduDev = null;
 206:   
 207:              return mduDev;
 208:          }
 209:   
 210:          ////////////////////////////////////////////////////////////////////////////
 211:   
 212:          /// <summary>
 213:          ///
 214:          /// </summary>
 215:          public static int MduDevPortByAccessIdFnSnPn(string accessId, int fn, int sn, int pn)
 216:          {
 217:              var mduDev = Ia.Ngn.Cl.Model.Data.Huawei.Default.MduDevByAccessId(accessId);
 218:   
 219:              var port = (mduDev != null) ? mduDev.PortByFnSnPn(fn, sn, pn) : Ia.Ngn.Cl.Model.Business.Default.PortUndefinedOrInvalidOrUnknown;
 220:   
 221:              return port;
 222:          }
 223:   
 224:          ////////////////////////////////////////////////////////////////////////////
 225:          ////////////////////////////////////////////////////////////////////////////
 226:   
 227:          /// <summary>
 228:          ///
 229:          /// </summary>
 230:          public static Dictionary<string, Ia.Ngn.Cl.Model.Business.Huawei.Dev.MduDev> NddOntIdToMduDevDictionary
 231:          {
 232:              get
 233:              {
 234:                  if (nddOntIdToMduDevDictionary == null || nddOntIdToMduDevDictionary.Count == 0)
 235:                  {
 236:                      lock (objectLock)
 237:                      {
 238:                          nddOntIdToMduDevDictionary = Ia.Ngn.Cl.Model.Data.Huawei.Default._NddOntIdToMduDevDictionary();
 239:                      }
 240:                  }
 241:   
 242:                  return nddOntIdToMduDevDictionary;
 243:              }
 244:          }
 245:   
 246:          ////////////////////////////////////////////////////////////////////////////
 247:   
 248:          /// <summary>
 249:          ///
 250:          /// </summary>
 251:          private static Dictionary<string, Ia.Ngn.Cl.Model.Business.Huawei.Dev.MduDev> _NddOntIdToMduDevDictionary()
 252:          {
 253:              nddOntIdToMduDevDictionary = new Dictionary<string, Ia.Ngn.Cl.Model.Business.Huawei.Dev.MduDev>();
 254:   
 255:              var mduDevList = Ia.Ngn.Cl.Model.Data.Huawei.Default.MduDevList;
 256:   
 257:              foreach (var mduDev in mduDevList)
 258:              {
 259:                  if (!string.IsNullOrEmpty(mduDev.NddOntId))
 260:                  {
 261:                      if (!nddOntIdToMduDevDictionary.ContainsKey(mduDev.NddOntId))
 262:                      {
 263:                          nddOntIdToMduDevDictionary[mduDev.NddOntId] = mduDev;
 264:                      }
 265:                      else
 266:                      {
 267:   
 268:                      }
 269:                  }
 270:                  else
 271:                  {
 272:   
 273:                  }
 274:              }
 275:   
 276:              return nddOntIdToMduDevDictionary;
 277:          }
 278:   
 279:          ////////////////////////////////////////////////////////////////////////////
 280:   
 281:          /// <summary>
 282:          ///
 283:          /// </summary>
 284:          public static Ia.Ngn.Cl.Model.Business.Huawei.Dev.MduDev MduDevByNddOntId(string nddOntId)
 285:          {
 286:              Ia.Ngn.Cl.Model.Business.Huawei.Dev.MduDev mduDev;
 287:   
 288:              var nddOntIdToMduDevDictionary = Ia.Ngn.Cl.Model.Data.Huawei.Default.NddOntIdToMduDevDictionary;
 289:   
 290:              if (nddOntIdToMduDevDictionary.ContainsKey(nddOntId))
 291:              {
 292:                  mduDev = nddOntIdToMduDevDictionary[nddOntId];
 293:              }
 294:              else mduDev = null;
 295:   
 296:              return mduDev;
 297:          }
 298:   
 299:          ////////////////////////////////////////////////////////////////////////////
 300:          ////////////////////////////////////////////////////////////////////////////
 301:   
 302:          /// <summary>
 303:          ///
 304:          /// </summary>
 305:          public static Dictionary<int, Ia.Ngn.Cl.Model.Business.Huawei.Dev.MduDev> DidToMduDevDictionary
 306:          {
 307:              get
 308:              {
 309:                  if (didToMduDevDictionary == null || didToMduDevDictionary.Count == 0)
 310:                  {
 311:                      lock (objectLock)
 312:                      {
 313:                          didToMduDevDictionary = Ia.Ngn.Cl.Model.Data.Huawei.Default._DidToMduDevDictionary();
 314:                      }
 315:                  }
 316:   
 317:                  return didToMduDevDictionary;
 318:              }
 319:          }
 320:   
 321:          ////////////////////////////////////////////////////////////////////////////
 322:   
 323:          /// <summary>
 324:          ///
 325:          /// </summary>
 326:          private static Dictionary<int, Ia.Ngn.Cl.Model.Business.Huawei.Dev.MduDev> _DidToMduDevDictionary()
 327:          {
 328:              didToMduDevDictionary = new Dictionary<int, Ia.Ngn.Cl.Model.Business.Huawei.Dev.MduDev>();
 329:   
 330:              var mduDevList = Ia.Ngn.Cl.Model.Data.Huawei.Default.MduDevList;
 331:   
 332:              foreach (var mduDev in mduDevList)
 333:              {
 334:                  if (mduDev.Did > -1)
 335:                  {
 336:                      if (!didToMduDevDictionary.ContainsKey(mduDev.Did))
 337:                      {
 338:                          didToMduDevDictionary[mduDev.Did] = mduDev;
 339:                      }
 340:                      else
 341:                      {
 342:   
 343:                      }
 344:                  }
 345:                  else
 346:                  {
 347:   
 348:                  }
 349:              }
 350:   
 351:              return didToMduDevDictionary;
 352:          }
 353:   
 354:          ////////////////////////////////////////////////////////////////////////////
 355:   
 356:          /// <summary>
 357:          ///
 358:          /// </summary>
 359:          public static Ia.Ngn.Cl.Model.Business.Huawei.Dev.MduDev MduDevByDid(int did)
 360:          {
 361:              Ia.Ngn.Cl.Model.Business.Huawei.Dev.MduDev mduDev;
 362:   
 363:              var didToMduDevDictionary = Ia.Ngn.Cl.Model.Data.Huawei.Default.DidToMduDevDictionary;
 364:   
 365:              if (didToMduDevDictionary.ContainsKey(did))
 366:              {
 367:                  mduDev = didToMduDevDictionary[did];
 368:              }
 369:              else mduDev = null;
 370:   
 371:              return mduDev;
 372:          }
 373:   
 374:          ////////////////////////////////////////////////////////////////////////////
 375:          ////////////////////////////////////////////////////////////////////////////
 376:   
 377:          /// <summary>
 378:          ///
 379:          /// </summary>
 380:          public static List<Ia.Ngn.Cl.Model.Business.Huawei.Board.MduDevBoard> MduDevBoardList
 381:          {
 382:              get
 383:              {
 384:                  if (mduDevBoardList == null || mduDevBoardList.Count == 0)
 385:                  {
 386:                      lock (objectLock)
 387:                      {
 388:                          mduDevBoardList = new List<Ia.Ngn.Cl.Model.Business.Huawei.Board.MduDevBoard>();
 389:   
 390:                          var boardList = Ia.Ngn.Cl.Model.Data.Huawei.Default.BoardListByPstnOrEthBoardTypeAndMA5616OrMA5878DevType();
 391:   
 392:                          foreach (var board in boardList)
 393:                          {
 394:                              var mduDevBoard = new Ia.Ngn.Cl.Model.Business.Huawei.Board.MduDevBoard(board.DID, board.BT, board.BNAME, board.BVER, board.EmsDev.Type, board.EmsDev.DEVIP, board.FN, board.SN);
 395:   
 396:                              mduDevBoardList.Add(mduDevBoard);
 397:                          }
 398:                      }
 399:                  }
 400:   
 401:                  return mduDevBoardList;
 402:              }
 403:          }
 404:   
 405:          ////////////////////////////////////////////////////////////////////////////
 406:   
 407:          /// <summary>
 408:          ///
 409:          /// </summary>
 410:          public static List<Ia.Ngn.Cl.Model.Business.Huawei.Dev.MduDev> MduDevList
 411:          {
 412:              get
 413:              {
 414:                  if (mduDevList == null || mduDevList.Count == 0)
 415:                  {
 416:                      lock (objectLock)
 417:                      {
 418:                          mduDevList = new List<Ia.Ngn.Cl.Model.Business.Huawei.Dev.MduDev>();
 419:   
 420:                          var mduDevBoardList = Ia.Ngn.Cl.Model.Data.Huawei.Default.MduDevBoardList;
 421:   
 422:                          foreach (var mduDevBoard in mduDevBoardList)
 423:                          {
 424:                              var did = mduDevBoard.Did;
 425:   
 426:                              var mduDev = (from m in mduDevList where m.Did == did select m).SingleOrDefault();
 427:   
 428:                              if (mduDev != null)
 429:                              {
 430:                                  mduDev.MduDevBoardList.Add(mduDevBoard);
 431:                              }
 432:                              else
 433:                              {
 434:                                  mduDev = new Ia.Ngn.Cl.Model.Business.Huawei.Dev.MduDev(did)
 435:                                  {
 436:                                      DevType = mduDevBoard.EmsDevType,
 437:                                      DevIp = mduDevBoard.EmsDevIp,
 438:                                  };
 439:   
 440:                                  mduDev.MduDevBoardList = new List<Ia.Ngn.Cl.Model.Business.Huawei.Board.MduDevBoard>();
 441:                                  mduDev.MduDevBoardList.Add(mduDevBoard);
 442:   
 443:                                  mduDevList.Add(mduDev);
 444:                              }
 445:                          }
 446:   
 447:                          foreach (var mduDev in mduDevList)
 448:                          {
 449:                              mduDev.TelPortCount = mduDev.MduDevBoardList.Select(i => i.TelPortCount).Sum();
 450:                              mduDev.EthernetPortCount = mduDev.MduDevBoardList.Select(i => i.EthernetPortCount).Sum();
 451:   
 452:                              mduDev.PossibleFnSnPnPortList = Ia.Ngn.Cl.Model.Business.Huawei.Ems.PossibleFnSnPnForMduDevList(mduDev);
 453:                              mduDev.FirstFnSnPnPort = Ia.Ngn.Cl.Model.Business.Huawei.Ems.FirstFnSnPnForMduDevList(mduDev);
 454:                          }
 455:                      }
 456:                  }
 457:   
 458:                  return mduDevList;
 459:              }
 460:          }
 461:   
 462:          ////////////////////////////////////////////////////////////////////////////
 463:   
 464:          /// <summary>
 465:          ///
 466:          /// </summary>
 467:          public static List<Ia.Ngn.Cl.Model.Business.Huawei.Dev.MsanDev> MsanDevList
 468:          {
 469:              get
 470:              {
 471:                  if (msanDevList == null || msanDevList.Count == 0)
 472:                  {
 473:                      lock (objectLock)
 474:                      {
 475:                          int did;
 476:                          Ia.Ngn.Cl.Model.Business.Huawei.Dev.MsanDev msanDev;
 477:   
 478:                          msanDevList = new List<Ia.Ngn.Cl.Model.Business.Huawei.Dev.MsanDev>();
 479:   
 480:                          foreach (var dev in Ia.Ngn.Cl.Model.Data.Huawei.Dev.MsanDevList())
 481:                          {
 482:                              //if (dev.DEV == "SLM_MSAN_A01_F00");
 483:                              //else
 484:                              //{
 485:                              did = dev.DID;
 486:   
 487:                              msanDev = new Ia.Ngn.Cl.Model.Business.Huawei.Dev.MsanDev(did);
 488:   
 489:                              if (!string.IsNullOrEmpty(msanDev.Id)) msanDevList.Add(msanDev);
 490:                              //}
 491:                          }
 492:   
 493:                          foreach (var msanDev0 in msanDevList)
 494:                          {
 495:                              msanDev0.PossibleFnSnPnList = Ia.Ngn.Cl.Model.Business.Huawei.Ems.PossibleFnSnPnForMsanDevList();
 496:                              msanDev0.FirstFnSnPn = Ia.Ngn.Cl.Model.Business.Huawei.Ems.FirstFnSnPnForMsanDevList();
 497:                          }
 498:                      }
 499:                  }
 500:   
 501:                  return msanDevList;
 502:              }
 503:          }
 504:   
 505:          ////////////////////////////////////////////////////////////////////////////
 506:   
 507:          /// <summary>
 508:          ///
 509:          /// </summary>
 510:          public static Dictionary<Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Site, int> MsanSiteToServiceCountDictionary()
 511:          {
 512:              int count;
 513:              Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Site site;
 514:              List<int> didList;
 515:   
 516:              var msanDevDidToDnCountDictionary = Ia.Ngn.Cl.Model.Data.Huawei.VoipPstnUser.MsanDevDidToDnCountDictionary;
 517:   
 518:              var msanSiteToDidListDictionary = Ia.Ngn.Cl.Model.Data.Huawei.Dev.MsanSiteToDidListDictionary();
 519:   
 520:              var dictionary = new Dictionary<Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Site, int>();
 521:   
 522:              foreach (KeyValuePair<Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Site, List<int>> kvp in msanSiteToDidListDictionary)
 523:              {
 524:                  site = kvp.Key;
 525:                  didList = kvp.Value;
 526:   
 527:                  foreach (int did in didList)
 528:                  {
 529:                      count = msanDevDidToDnCountDictionary.ContainsKey(did) ? msanDevDidToDnCountDictionary[did] : 0;
 530:   
 531:                      if (!dictionary.ContainsKey(site)) dictionary[site] = count;
 532:                      else dictionary[site] += count;
 533:                  }
 534:              }
 535:   
 536:              return dictionary;
 537:          }
 538:   
 539:          ////////////////////////////////////////////////////////////////////////////
 540:   
 541:          /// <summary>
 542:          ///
 543:          /// </summary>
 544:          public static Dictionary<string, int> MsanDevDevToDnCountDictionary
 545:          {
 546:              get
 547:              {
 548:                  var msanDevList = Ia.Ngn.Cl.Model.Data.Huawei.Default.MsanDevList;
 549:   
 550:                  var msanDevDidToDnCountDictionary = Ia.Ngn.Cl.Model.Data.Huawei.VoipPstnUser.MsanDevDidToDnCountDictionary;
 551:   
 552:                  var dictionary = new Dictionary<string, int>();
 553:   
 554:                  foreach (var msanDev in msanDevList)
 555:                  {
 556:                      dictionary[msanDev.Dev] = msanDevDidToDnCountDictionary.ContainsKey(msanDev.Did) ? msanDevDidToDnCountDictionary[msanDev.Did] : 0;
 557:                  }
 558:   
 559:                  return dictionary;
 560:              }
 561:          }
 562:   
 563:          ////////////////////////////////////////////////////////////////////////////
 564:   
 565:          /// <summary>
 566:          ///
 567:          /// </summary>
 568:          public static List<string> MsanServiceListBySiteId(int siteId)
 569:          {
 570:              var msanSiteToDidListDictionary = Ia.Ngn.Cl.Model.Data.Huawei.Dev.MsanSiteToDidListDictionary();
 571:   
 572:              var didList = (from l in msanSiteToDidListDictionary
 573:                             where l.Key.Id == siteId
 574:                             select l.Value).SingleOrDefault();
 575:   
 576:              if (didList == null) didList = new List<int>();
 577:   
 578:              var dnServiceList = Ia.Ngn.Cl.Model.Data.Huawei.VoipPstnUser.DnServiceListByMsanDevDidList(didList);
 579:   
 580:              return dnServiceList;
 581:          }
 582:   
 583:          ////////////////////////////////////////////////////////////////////////////
 584:   
 585:          /// <summary>
 586:          ///
 587:          /// </summary>
 588:          public static List<Ia.Ngn.Cl.Model.Business.Huawei.Dev.MsanDev.Lic> MsanDevLicListByNddMsan(Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Msan msan)
 589:          {
 590:              return Ia.Ngn.Cl.Model.Data.Huawei.VoipPstnUser.MsanDevLicListByNddMsan(msan);
 591:          }
 592:   
 593:          ////////////////////////////////////////////////////////////////////////////
 594:   
 595:          /// <summary>
 596:          ///
 597:          /// </summary>
 598:          public static List<Ia.Ngn.Cl.Model.Business.Huawei.Dev.MsanDev.Lic> MsanDevLicListByNddMsanAndCabinet(Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Msan msan, int cabinet)
 599:          {
 600:              return Ia.Ngn.Cl.Model.Data.Huawei.VoipPstnUser.MsanDevLicListByNddMsanAndCabinet(msan, cabinet);
 601:          }
 602:   
 603:          ////////////////////////////////////////////////////////////////////////////
 604:   
 605:          /// <summary>
 606:          ///
 607:          /// </summary>
 608:          public static List<Ia.Ngn.Cl.Model.Business.Huawei.Dev.MsanDev.Lic> MsanDevLicListByNddMsanAndCabinetAndFrame(Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Msan msan, int cabinet, int frame)
 609:          {
 610:              return Ia.Ngn.Cl.Model.Data.Huawei.VoipPstnUser.MsanDevLicListByNddMsanAndCabinetAndFrame(msan, cabinet, frame);
 611:          }
 612:   
 613:          ////////////////////////////////////////////////////////////////////////////
 614:   
 615:          /// <summary>
 616:          ///
 617:          /// </summary>
 618:          public static List<Ia.Ngn.Cl.Model.Business.Huawei.Dev.MsanDev.Lic> MsanDevLicListByNddMsanAndCabinetAndFrameAndFn(Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Msan msan, int cabinet, int frame, int fn)
 619:          {
 620:              return Ia.Ngn.Cl.Model.Data.Huawei.VoipPstnUser.MsanDevLicListByNddMsanAndCabinetAndFrameAndFn(msan, cabinet, frame, fn);
 621:          }
 622:   
 623:          ////////////////////////////////////////////////////////////////////////////
 624:   
 625:          /// <summary>
 626:          ///
 627:          /// </summary>
 628:          public static List<Ia.Ngn.Cl.Model.Business.Huawei.Dev.MsanDev.Lic> MsanDevLicListByNddMsanAndCabinetAndFrameAndFnAndSn(Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Msan msan, int cabinet, int frame, int fn, int sn)
 629:          {
 630:              return Ia.Ngn.Cl.Model.Data.Huawei.VoipPstnUser.MsanDevLicListByNddMsanAndCabinetAndFrameAndFnAndSn(msan, cabinet, frame, fn, sn);
 631:          }
 632:   
 633:          ////////////////////////////////////////////////////////////////////////////
 634:   
 635:          /// <summary>
 636:          ///
 637:          /// </summary>
 638:          public static Ia.Ngn.Cl.Model.Business.Huawei.Dev.MsanDev.Lic MsanDevLicByEmsVoipPstnUserId(string emsVoipPstnUserId)
 639:          {
 640:              return Ia.Ngn.Cl.Model.Data.Huawei.VoipPstnUser.MsanDevLicByEmsVoipPstnUserId(emsVoipPstnUserId);
 641:          }
 642:   
 643:          ////////////////////////////////////////////////////////////////////////////
 644:   
 645:          /// <summary>
 646:          ///
 647:          /// </summary>
 648:          public static Ia.Ngn.Cl.Model.Business.Huawei.Dev.MsanDev.Lic MsanDevLicByNddMsanAndCabinetAndFrameAndFnAndSnAndPn(Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Msan msan, int cabinet, int frame, int fn, int sn, int pn)
 649:          {
 650:              return Ia.Ngn.Cl.Model.Data.Huawei.VoipPstnUser.MsanDevLicByNddMsanAndCabinetAndFrameAndFnAndSnAndPn(msan, cabinet, frame, fn, sn, pn);
 651:          }
 652:   
 653:          ////////////////////////////////////////////////////////////////////////////
 654:   
 655:          /// <summary>
 656:          ///
 657:          /// </summary>
 658:          public static Dictionary<Ia.Ngn.Cl.Model.Business.Huawei.Dev.MsanDev.Lic, string> MsanDevLicToServiceByMsanDictionary(Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Msan msan)
 659:          {
 660:              var msanDevLicList = Ia.Ngn.Cl.Model.Data.Huawei.VoipPstnUser.MsanDevLicListByNddMsan(msan);
 661:   
 662:              var dictionary = new Dictionary<Ia.Ngn.Cl.Model.Business.Huawei.Dev.MsanDev.Lic, string>();
 663:   
 664:              foreach (var msanDevLic in msanDevLicList)
 665:              {
 666:                  dictionary[msanDevLic] = msanDevLic.Service;
 667:              }
 668:   
 669:              return dictionary;
 670:          }
 671:   
 672:          ////////////////////////////////////////////////////////////////////////////
 673:   
 674:          /// <summary>
 675:          ///
 676:          /// </summary>
 677:          public static Dictionary<string, string> MsanDevLicCabinetFrameSnPnTextStringToServiceByMsanDictionary(Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Msan msan)
 678:          {
 679:              string cabinetFrameSnPnTextString;
 680:   
 681:              var msanDevLicList = Ia.Ngn.Cl.Model.Data.Huawei.VoipPstnUser.MsanDevLicListByNddMsan(msan);
 682:   
 683:              var dictionary = new Dictionary<string, string>();
 684:   
 685:              foreach (var msanDevLic in msanDevLicList)
 686:              {
 687:                  cabinetFrameSnPnTextString = msanDevLic.ToCabinetFrameSnPnTextString();
 688:   
 689:                  dictionary[cabinetFrameSnPnTextString] = msanDevLic.Service;
 690:              }
 691:   
 692:              return dictionary;
 693:          }
 694:   
 695:          ////////////////////////////////////////////////////////////////////////////
 696:   
 697:          /// <summary>
 698:          ///
 699:          /// </summary>
 700:          public static List<Ia.Ngn.Cl.Model.Huawei.EmsBoard> BoardListByPstnOrEthBoardTypeAndMA5616OrMA5878DevType()
 701:          {
 702:              List<Ia.Ngn.Cl.Model.Huawei.EmsBoard> list;
 703:   
 704:              using (var db = new Ia.Ngn.Cl.Model.Ngn())
 705:              {
 706:                  list = (from ed in db.EmsDevs
 707:                          join eb in db.EmsBoards on ed.Id equals eb.EmsDev.Id
 708:                          where (ed.DT == "MA5616" || ed.DT == "MA5878") && (eb.BT == "PSTN" || eb.BT == "ETH")
 709:                          select eb).Include(u => u.EmsDev).ToList();
 710:   
 711:                  /*
 712:  select distinct * from EmsDevs ed
 713:  left outer join EmsBoards eb on ed.Id = eb.EmsDev_Id
 714:  where (ed.DT = 'MA5616' or ed.DT = 'MA5878') and (eb.BT = 'PSTN' or eb.BT = 'ETH')
 715:  order by ed.DT, ed.DEV 
 716:                  */
 717:              }
 718:   
 719:              return list;
 720:          }
 721:   
 722:          ////////////////////////////////////////////////////////////////////////////
 723:   
 724:          /// <summary>
 725:          ///
 726:          /// </summary>
 727:          public static List<Ia.Ngn.Cl.Model.Access> AccessListBy5616Or5878OntEquipmentId()
 728:          {
 729:              List<Ia.Ngn.Cl.Model.Access> list;
 730:   
 731:              using (var db = new Ia.Ngn.Cl.Model.Ngn())
 732:              {
 733:                  list = (from a in db.Accesses
 734:                          join eo in db.EmsOnts on a equals eo.Access
 735:                          join ed in db.EmsDevs on eo.NAME equals ed.DEVIP into gj
 736:                          from sgj in gj.DefaultIfEmpty()
 737:                          where eo.EQUIPMENTID == "5616" || eo.EQUIPMENTID == "5878"
 738:                          select a).ToList(); //.Include(u => u.EmsDev).ToList();
 739:                  /*
 740:                  select a.Id, eo.NAME, eo.ALIAS, eo.EQUIPMENTID, ed.DEVIP, ed.DEV from Accesses a
 741:                  inner join EmsOnts eo on a.Id = eo.Access_Id
 742:                  left outer join EmsDevs ed on ed.DEVIP = eo.NAME 
 743:                  where eo.EQUIPMENTID = '5616' or eo.EQUIPMENTID = '5878'
 744:                  */
 745:              }
 746:   
 747:              return list;
 748:          }
 749:   
 750:          ////////////////////////////////////////////////////////////////////////////
 751:   
 752:          /// <summary>
 753:          ///
 754:          /// </summary>
 755:          public static List<string> MsanPortIdList()
 756:          {
 757:              List<string> list;
 758:   
 759:              //var possibleSnList = Ia.Ngn.Cl.Model.Business.Huawei.Dev.MsanDev.PossibleSnList; or just check if EmsBoard.BT = "PSTN"
 760:   
 761:              //  var dev = Ia.Ngn.Cl.Model.Data.Huawei.Dev.MsanDevDidList();
 762:   
 763:              // The EmsPort list is about 230K big. I can't LINQ directly.
 764:   
 765:              using (var db = new Ia.Ngn.Cl.Model.Ngn())
 766:              {
 767:                  var emsDevDidDevList = (from ed in db.EmsDevs select new { ed.DID, ed.DEV }).ToList();
 768:   
 769:                  var emsMsanDevDidList = emsDevDidDevList.Where(u => u.DEV.Contains("_MSAN_")).Select(u => u.DID).ToList();
 770:   
 771:                  /*
 772:                   * too slow
 773:                  list = (from ed in db.EmsDevs
 774:                          join eb in db.EmsBoards on ed.Id equals eb.EmsDev.Id
 775:                          join ep in db.EmsPorts on eb.Id equals ep.EmsBoard.Id
 776:                          where ed.DEV.Contains("_MSAN_") && eb.BT == "PSTN"
 777:                          select ep).ToList();
 778:                  */
 779:   
 780:                  /*
 781:                   * too slow
 782:                  list = (from ed in db.EmsDevs
 783:                          where emsMsanDevDidList.Contains(ed.DID)
 784:                          join eb in db.EmsBoards on ed.Id equals eb.EmsDev.Id
 785:                          join ep in db.EmsPorts on eb.Id equals ep.EmsBoard.Id
 786:                          select ep).ToList();
 787:                  */
 788:   
 789:                  var portIdDidList = (from ep in db.EmsPorts select new { ep.Id, ep.DID }).ToList();
 790:   
 791:                  list = (from ep in portIdDidList where emsMsanDevDidList.Contains(ep.DID) select ep.Id).ToList();
 792:              }
 793:   
 794:              return list;
 795:          }
 796:   
 797:          ////////////////////////////////////////////////////////////////////////////
 798:   
 799:          /// <summary>
 800:          ///
 801:          /// </summary>
 802:          public static List<Ia.Ngn.Cl.Model.Huawei.EmsPort> MsanPortList(Ia.Ngn.Cl.Model.Business.Huawei.Dev.MsanDev msanDev)
 803:          {
 804:              List<Ia.Ngn.Cl.Model.Huawei.EmsPort> list;
 805:   
 806:              using (var db = new Ia.Ngn.Cl.Model.Ngn())
 807:              {
 808:                  list = (from ed in db.EmsDevs
 809:                          where ed.DID == msanDev.Did
 810:                          join eb in db.EmsBoards on ed.Id equals eb.EmsDev.Id
 811:                          join ep in db.EmsPorts on eb.Id equals ep.EmsBoard.Id
 812:                          select ep).Include(ep => ep.EmsBoard).Include(ep => ep.EmsBoard.EmsDev).AsNoTracking().ToList();
 813:              }
 814:   
 815:              return list;
 816:          }
 817:   
 818:          ////////////////////////////////////////////////////////////////////////////
 819:   
 820:          /// <summary>
 821:          ///
 822:          /// </summary>
 823:          public static List<string> DuplicateEmsOntSipInfoSipUserNameAndEmsVoipPstnUserMduDnServiceWithCountryCodeOrMsanDnServiceImpuAidServiceList()
 824:          {
 825:              var list0 = Ia.Ngn.Cl.Model.Data.Huawei.OntSipInfo.DuplicateSipUserNameServiceList();
 826:              var list1 = Ia.Ngn.Cl.Model.Data.Huawei.VoipPstnUser.DuplicateMduDnServiceWithCountryCodeOrMsanDnServiceImpuAidServiceList();
 827:   
 828:              var list = list0.Union(list1).Distinct().ToList();
 829:   
 830:              return list;
 831:          }
 832:   
 833:          ////////////////////////////////////////////////////////////////////////////
 834:   
 835:          /// <summary>
 836:          ///
 837:          /// </summary>
 838:          public static void UnrecognizedEmsDevAndEmsOntList(out List<string> unrecognizedDevList, out List<string> unrecognizedOntList)
 839:          {
 840:              string name;
 841:              unrecognizedDevList = new List<string>();
 842:              unrecognizedOntList = new List<string>();
 843:   
 844:              var devList = Ia.Ngn.Cl.Model.Data.Huawei.Dev.DevList();
 845:              var msanDevDevList = Ia.Ngn.Cl.Model.Data.Huawei.Dev.MsanDevDevList();
 846:              var nddOltList = Ia.Ngn.Cl.Model.Data.NetworkDesignDocument.OltList;
 847:   
 848:              foreach (var dev in devList)
 849:              {
 850:                  name = Ia.Ngn.Cl.Model.Business.Huawei.Ems.HuaweiAccessNameFormatFromInaccurateHuaweiFileAndEmsNameFormat(dev);
 851:                  name = Ia.Ngn.Cl.Model.Business.Default.StandardizeAccessNameInLegalFormatFromValue(name);
 852:   
 853:                  if (string.IsNullOrEmpty(name))
 854:                  {
 855:                      if (msanDevDevList.Contains(dev))
 856:                      {
 857:                      }
 858:                      else
 859:                      {
 860:                          if (nddOltList.Any(u => u.EmsName == dev))
 861:                          {
 862:                          }
 863:                          else
 864:                          {
 865:                              unrecognizedDevList.Add(dev);
 866:                          }
 867:                      }
 868:                  }
 869:              }
 870:   
 871:              var emsOntNullAccessList = Ia.Ngn.Cl.Model.Data.Huawei.Ont.ListWithNullAccess();
 872:   
 873:              foreach (var o in emsOntNullAccessList)
 874:              {
 875:                  unrecognizedOntList.Add(o.ALIAS + ":" + o.NAME);
 876:              }
 877:          }
 878:   
 879:          ////////////////////////////////////////////////////////////////////////////
 880:   
 881:          /// <summary>
 882:          ///
 883:          /// </summary>
 884:          public static string[] ListOfHuaweiOntThatWereIntiallyInstalledAndProvisionedWithNokiaMgcIp10_16_5_37BeforeNewMgcIpToCableDistributionAgreement
 885:          {
 886:              get
 887:              {
 888:                  if (list == null || list.Length == 0)
 889:                  {
 890:                      list = new string[] { "SAA.501.2","SAA.501.10","SAA.501.11","SAA.501.13","SAA.501.19","SAA.501.20","SAA.501.21","SAA.501.22","SAA.502.1","SAA.502.7","SAA.502.8","SAA.502.11","SAA.502.12","SAA.502.14","SAA.502.16","SAA.502.18","SAA.502.19","SAA.502.22","SAA.503.1","SAA.503.2","SAA.504.4","SAA.504.6","SAA.504.10","SAA.504.11","SAA.504.12","SAA.504.13","SAA.504.15","SAA.504.17","SAA.504.18","SAA.504.24","SAA.505.2","SAA.506.8","SAA.506.10","SAA.506.16","SAA.506.18","SAA.507.16","SAA.508.3","SAA.508.8","SAA.508.16","SAA.508.17","SAA.508.18","SAA.508.20","SAA.508.21","SAA.509.5","SAA.509.7","SAA.509.8","SAA.509.12","SAA.509.13","SAA.509.14","SAA.509.17","SAA.509.19","SAA.509.20","SAA.510.4","SAA.510.5","SAA.510.14","SAA.511.3","SAA.511.4","SAA.511.9","SAA.511.10","SAA.511.13","SAA.511.16","SAA.512.2","SAA.512.13","SAA.512.14","SAA.512.15","SAA.514.1","SAA.514.2","SAA.514.5","SAA.514.6","SAA.514.8","SAA.514.11","SAA.514.12","SAA.514.13","SAA.514.14","SAA.514.15","SAA.514.16","SAA.514.22","SAA.517.7","SAA.517.8","SAA.517.9","SAA.517.10","SAA.517.12","SAA.517.15","SAA.517.16","SAA.518.2","SAA.518.3","SAA.518.5","SAA.518.11","SAA.518.14","SAA.518.16","SAA.519.1","SAA.519.2","SAA.519.6","SAA.519.10","SAA.519.15","SAA.519.16","SAA.519.17","SAA.519.18","SAA.519.23","SAA.521.4","SAA.521.10",
 891:                          "SAA.521.20","SAA.521.23","SAA.522.1","SAA.522.6","SAA.522.9","SAA.522.10","SAA.522.11","SAA.522.13","SAA.522.16","SAA.523.1","SAA.523.2","SAA.523.3","SAA.523.5","SAA.523.7","SAA.523.9","SAA.523.10","SAA.523.12","SAA.523.13","SAA.523.14","SAA.523.15","SAA.523.16","SAA.523.18","SAA.523.19","SAA.524.1","SAA.524.3","SAA.524.6","SAA.524.8","SAA.524.9","SAA.524.10","SAA.524.11","SAA.524.12","SAA.524.14","SAA.524.17","SAA.524.18","SAA.528.3","SAA.528.5","SAA.528.6","SAA.528.7","SAA.528.10","SAA.528.11","SAA.528.15","SAA.528.17","SAA.528.19","SAA.528.20","SAA.528.21","SAA.530.1","SAA.530.5","SAA.530.6","SAA.530.7","SAA.530.8","SAA.530.9","SAA.530.10","SAA.530.11","SAA.530.12","SAA.530.13","SAA.530.16","SAA.530.17","SAA.530.19","SAA.531.1","SAA.531.4","SAA.531.6","SAA.531.7","SAA.531.15","SAA.531.17","SAA.531.19","SAA.531.20","SAA.531.22","SAA.531.23","SAA.533.2","SAA.533.8","SAA.533.9","SAA.533.17","SAA.533.19","SAA.533.20","SAA.533.21","SAA.533.23","SAA.534.1","SAA.534.2","SAA.534.3","SAA.534.4","SAA.534.10","SAA.534.12","SAA.534.18","SAA.534.20","SAA.534.21","SAA.535.1","SAA.535.15","SAA.535.16","SAA.535.17","SAA.535.18",
 892:                          "SAA.536.1","SAA.536.2","SAA.536.3","SAA.536.4","SAA.536.6","SAA.536.9","SAA.536.13","SAA.536.15","SAA.537.1","SAA.537.4","SAA.537.6","SAA.537.7","SAA.537.8","SAA.537.9","SAA.537.10","SAA.537.13","SAA.537.14","SAA.537.15","SAA.537.16","SAA.537.22","SAA.538.1","SAA.538.4","SAA.538.9","SAA.538.10","SAA.538.14","SAA.538.15","SAA.538.17","SAA.538.18","SAA.538.19","SAA.539.2","SAA.539.3","SAA.539.5","SAA.539.6","SAA.539.7","SAA.539.8","SAA.539.9","SAA.539.18","SAA.539.19","SAA.539.20","SAA.541.2","SAA.541.6","SAA.541.7","SAA.541.9","SAA.541.10","SAA.541.13","SAA.541.15","SAA.541.21","SAA.541.23","SAA.541.24","SAA.542.1","SAA.542.3","SAA.542.6","SAA.542.7","SAA.542.8","SAA.542.9","SAA.542.21","SAA.543.5","SAA.543.9","SAA.543.10","SAA.543.16","SAA.544.4","SAA.544.10","SAA.544.11","SAA.544.12","SAA.544.15","SAA.544.22","SAA.544.23","SAA.545.9","SAA.701.1","SAA.701.2","SAA.701.3","SAA.701.4","SAA.701.5","SAA.701.6","SAA.701.7","SAA.701.9","SAA.701.10","SAA.701.11","SAA.701.13","SAA.701.14","SAA.701.15","SAA.701.16","SAA.701.17","SAA.702.1","SAA.702.2","SAA.702.3","SAA.702.4","SAA.702.5","SAA.702.8","SAA.702.9","SAA.702.10","SAA.702.12","SAA.702.14","SAA.702.16","SAA.702.17","SAA.702.21","SAA.702.22","SAA.702.23","SAA.702.24","SAA.703.2","SAA.703.3","SAA.703.11","SAA.703.14","SAA.703.15",
 893:                          "SAA.703.17","SAA.703.19","SAA.703.20","SAA.703.23","SAA.704.3","SAA.704.4","SAA.704.6","SAA.704.7","SAA.704.9","SAA.704.10","SAA.704.13","SAA.704.15","SAA.704.16","SAA.704.17","SAA.704.18","SAA.706.5","SAA.706.6","SAA.706.7","SAA.706.8","SAA.706.11","SAA.706.12","SAA.706.15","SAA.706.16","SAA.706.17","SAA.706.20","SAA.706.21","SAA.706.23","SAA.706.24","SAA.707.2","SAA.707.5","SAA.707.7","SAA.707.10","SAA.707.12","SAA.707.13","SAA.707.15","SAA.707.17","SAA.707.19","SAA.707.20","SAA.707.21","SAA.707.22","SAA.709.1","SAA.709.3","SAA.709.7","SAA.709.8","SAA.709.14","SAA.709.15","SAA.709.18","SAA.709.19","SAA.709.23","SAA.709.24","SAA.710.3","SAA.710.4","SAA.710.12","SAA.710.15","SAA.710.16","SAA.710.19","SAA.710.21","SAA.710.22","SAA.710.24","SAA.711.1","SAA.711.3","SAA.711.5","SAA.711.9","SAA.711.11","SAA.711.12","SAA.711.13","SAA.711.14","SAA.711.16","SAA.711.18","SAA.711.19","SAA.711.20","SAA.711.23","SAA.711.24","SAA.712.2","SAA.712.3","SAA.712.4","SAA.712.6","SAA.712.7","SAA.712.9","SAA.712.12",
 894:                          "SAA.712.16","SAA.712.18","SAA.712.19","SAA.712.20","SAA.712.21","SAA.712.26","SAA.712.27","SAA.714.2","SAA.714.3","SAA.714.8","SAA.714.11","SAA.715.5","SAA.715.7","SAA.715.8","SAA.715.9","SAA.715.10","SAA.715.11","SAA.715.12","SAA.715.15","SAA.715.18","SAA.715.19","SAA.716.2","SAA.716.3","SAA.716.4","SAA.716.6","SAA.716.8","SAA.716.11","SAA.716.12","SAA.716.15","SAA.716.17","SAA.716.20","SAA.716.21","SAA.717.3","SAA.717.5","SAA.717.7","SAA.717.10","SAA.717.13","SAA.717.14","SAA.717.15","SAA.717.18","SAA.717.20","SAA.717.21","SAA.717.22","SAA.718.1","SAA.718.2","SAA.718.3","SAA.718.5","SAA.718.6","SAA.718.7","SAA.718.11","SAA.718.22","SAA.718.23","SAA.718.24","SAA.718.25","SAA.719.2","SAA.719.4","SAA.719.8","SAA.719.9","SAA.719.10","SAA.719.11","SAA.719.12","SAA.719.14","SAA.719.17","SAA.719.20","SAA.719.23","SAA.720.3","SAA.720.4","SAA.720.6","SAA.720.7","SAA.720.10","SAA.720.13","SAA.720.14","SAA.721.2","SAA.721.3","SAA.721.4","SAA.721.7","SAA.721.8","SAA.721.10","SAA.721.11","SAA.721.12","SAA.721.13","SAA.721.14","SAA.721.18","SAA.721.19","SAA.721.20","SAA.721.23","SAA.722.11","SAA.722.12","SAA.722.13","SAA.722.16","SAA.722.17","SAA.722.18","SAA.722.19","SAA.722.22","SAA.722.24","SAA.723.2","SAA.723.3","SAA.723.4","SAA.723.7","SAA.723.9","SAA.723.13","SAA.723.15","SAA.723.17",
 895:                          "SAA.723.19","SAA.723.20","SAA.723.22","SAA.723.23","SAA.724.5","SAA.724.6","SAA.724.8","SAA.724.11","SAA.724.14","SAA.724.15","SAA.724.16","SAA.724.17","SAA.724.18","SAA.726.2","SAA.726.7","SAA.726.8","SAA.726.9","SAA.726.10","SAA.726.11","SAA.726.12","SAA.726.13","SAA.726.14","SAA.726.17","SAA.726.20","SAA.726.21","SAA.726.22","SAA.726.23","SAA.729.2","SAA.729.3","SAA.729.4","SAA.729.5","SAA.729.6","SAA.729.10","SAA.729.11","SAA.729.14","SAA.729.17","SAA.729.18","SAA.729.19","SAA.729.20","SAA.729.21","SAA.730.4","SAA.730.5","SAA.730.8","SAA.730.9","SAA.730.11","SAA.730.12","SAA.730.13","SAA.730.14","SAA.730.22","SAA.733.2","SAA.733.3","SAA.733.5","SAA.733.6","SAA.733.9","SAA.733.10","SAA.734.1","SAA.734.2","SAA.734.3","SAA.734.4","SAA.734.5","SAA.734.6","SAA.734.7","SAA.734.11","SAA.734.12","SAA.734.13","SAA.734.15","SAA.734.17","SAA.734.19","SAA.734.20","SAA.735.7","SAA.735.8","SAA.735.10","SAA.735.12","SAA.735.14","SAA.735.19","SAA.735.22","SAA.736.3","SAA.736.4","SAA.736.7","SAA.736.8","SAA.736.9","SAA.736.10","SAA.736.17","SAA.736.18","SAA.736.21","SAA.736.22","SAA.736.23","SAA.737.5","SAA.737.6","SAA.737.8",
 896:                          "SAA.737.11","SAA.737.13","SAA.737.15","SAA.737.16","SAA.737.18","SAA.738.4","SAA.738.7","SAA.738.8","SAA.738.11","SAA.738.13","SAA.738.14","SAA.738.16","SAA.738.18","SAA.739.1","SAA.739.2","SAA.739.3","SAA.739.13","SAA.739.14","SAA.739.15","SAA.739.18","SAA.739.19","SAA.739.20","SAA.740.7","SAA.740.20","SAA.742.2","SAA.742.3","SAA.742.5","SAA.742.6","SAA.742.7","SAA.742.11","SAA.742.12","SAA.742.14","SAA.742.15","SAA.742.17","SAA.742.18","SAA.742.20","SAA.742.21","SAA.742.23","SAA.742.25","SAA.743.4","SAA.743.7","SAA.743.9","SAA.743.10","SAA.743.13","SAA.743.16","SAA.743.19","SAA.743.21","SAA.743.22","SAA.743.23","SAA.743.24","SAA.744.5","SAA.744.6","SAA.744.7","SAA.744.22","SAA.745.12","SAA.746.12","SAA.747.2","SAA.747.4","SAA.750.1","SAA.750.6","SAA.750.7","SAA.750.12","SAA.750.16","SAA.750.19","SAA.750.20","SAA.750.26","SAA.751.1","SAA.751.2","SAA.751.3","SAA.751.7","SAA.751.8","SAA.751.13","SAA.751.16","SAA.751.17","SAA.751.18","SAA.751.22","SAA.752.1","SAA.752.3","SAA.752.5","SAA.752.11","SAA.752.13","SAA.752.14","SAA.752.15","SAA.752.17","SAA.752.18","SAA.752.21","SAA.802.6","SAA.802.8","SAA.802.10","SAA.802.11","SAA.802.12","SAA.802.13","SAA.802.16","SAA.802.17","SAA.802.20","SAA.804.3","SAA.804.4","SAA.804.5","SAA.804.6","SAA.804.11","SAA.805.21","SAA.806.24","SAA.807.1",
 897:                          "SAA.807.7","SAA.807.16","SAA.807.17","SAA.807.20","SAA.808.2","SAA.808.4","SAA.808.5","SAA.808.8","SAA.808.9","SAA.808.13","SAA.811.3","SAA.813.1","SAA.813.3","SAA.813.4","SAA.813.5","SAA.813.10","SAA.813.12","SAA.813.15","SAA.813.16","SAA.814.2","SAA.814.3","SAA.814.5","SAA.814.9","SAA.814.11","SAA.814.16","SAA.814.18","SAA.814.19","SAA.814.23","SAA.814.24","SAA.815.1","SAA.815.2","SAA.815.7","SAA.815.9","SAA.815.10","SAA.815.11","SAA.815.12","SAA.815.13","SAA.815.14","SAA.815.15","SAA.815.16","SAA.815.18","SAA.815.19","SAA.815.20","SAA.815.21","SAA.815.26","SAA.819.1","SAA.819.2","SAA.819.4","SAA.819.5","SAA.819.6","SAA.819.8","SAA.819.13","SAA.819.17","SAA.822.9","SAA.826.18","SAA.827.13","SAA.827.14","SAA.837.21","SAA.846.4","SAA.846.10"
 898:                      };
 899:                  }
 900:   
 901:                  return list;
 902:              }
 903:          }
 904:   
 905:          ////////////////////////////////////////////////////////////////////////////
 906:          ////////////////////////////////////////////////////////////////////////////   
 907:      }
 908:   
 909:      ////////////////////////////////////////////////////////////////////////////
 910:      ////////////////////////////////////////////////////////////////////////////   
 911:  }