System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 0901a6efa68fc81ce24853d2d6851cbf313ce923:


0000: 2f 2a 0d 0a 20 2a 20 49 6e 73 74 61 6c 6c 65 72  /*.. * Installer
0010: 2e 63 73 20 2d 2d 0d 0a 20 2a 0d 0a 20 2a 20 57  .cs --.. *.. * W
0020: 72 69 74 74 65 6e 20 62 79 20 4a 6f 65 20 4d 69  ritten by Joe Mi
0030: 73 74 61 63 68 6b 69 6e 2e 0d 0a 20 2a 20 52 65  stachkin... * Re
0040: 6c 65 61 73 65 64 20 74 6f 20 74 68 65 20 70 75  leased to the pu
0050: 62 6c 69 63 20 64 6f 6d 61 69 6e 2c 20 75 73 65  blic domain, use
0060: 20 61 74 20 79 6f 75 72 20 6f 77 6e 20 72 69 73   at your own ris
0070: 6b 21 0d 0a 20 2a 2f 0d 0a 0d 0a 75 73 69 6e 67  k!.. */....using
0080: 20 53 79 73 74 65 6d 3b 0d 0a 75 73 69 6e 67 20   System;..using 
0090: 53 79 73 74 65 6d 2e 43 6f 6c 6c 65 63 74 69 6f  System.Collectio
00a0: 6e 73 2e 47 65 6e 65 72 69 63 3b 0d 0a 75 73 69  ns.Generic;..usi
00b0: 6e 67 20 53 79 73 74 65 6d 2e 44 69 61 67 6e 6f  ng System.Diagno
00c0: 73 74 69 63 73 3b 0d 0a 75 73 69 6e 67 20 53 79  stics;..using Sy
00d0: 73 74 65 6d 2e 45 6e 74 65 72 70 72 69 73 65 53  stem.EnterpriseS
00e0: 65 72 76 69 63 65 73 2e 49 6e 74 65 72 6e 61 6c  ervices.Internal
00f0: 3b 0d 0a 75 73 69 6e 67 20 53 79 73 74 65 6d 2e  ;..using System.
0100: 49 4f 3b 0d 0a 75 73 69 6e 67 20 53 79 73 74 65  IO;..using Syste
0110: 6d 2e 52 65 66 6c 65 63 74 69 6f 6e 3b 0d 0a 75  m.Reflection;..u
0120: 73 69 6e 67 20 53 79 73 74 65 6d 2e 52 75 6e 74  sing System.Runt
0130: 69 6d 65 2e 43 6f 6d 70 69 6c 65 72 53 65 72 76  ime.CompilerServ
0140: 69 63 65 73 3b 0d 0a 0d 0a 23 69 66 20 57 49 4e  ices;....#if WIN
0150: 44 4f 57 53 0d 0a 75 73 69 6e 67 20 53 79 73 74  DOWS..using Syst
0160: 65 6d 2e 52 75 6e 74 69 6d 65 2e 49 6e 74 65 72  em.Runtime.Inter
0170: 6f 70 53 65 72 76 69 63 65 73 3b 0d 0a 23 65 6e  opServices;..#en
0180: 64 69 66 0d 0a 0d 0a 75 73 69 6e 67 20 53 79 73  dif....using Sys
0190: 74 65 6d 2e 53 65 63 75 72 69 74 79 3b 0d 0a 0d  tem.Security;...
01a0: 0a 23 69 66 20 4e 45 54 5f 32 30 20 7c 7c 20 4e  .#if NET_20 || N
01b0: 45 54 5f 33 35 0d 0a 75 73 69 6e 67 20 53 79 73  ET_35..using Sys
01c0: 74 65 6d 2e 53 65 63 75 72 69 74 79 2e 50 65 72  tem.Security.Per
01d0: 6d 69 73 73 69 6f 6e 73 3b 0d 0a 23 65 6e 64 69  missions;..#endi
01e0: 66 0d 0a 0d 0a 75 73 69 6e 67 20 53 79 73 74 65  f....using Syste
01f0: 6d 2e 54 68 72 65 61 64 69 6e 67 3b 0d 0a 75 73  m.Threading;..us
0200: 69 6e 67 20 53 79 73 74 65 6d 2e 57 69 6e 64 6f  ing System.Windo
0210: 77 73 2e 46 6f 72 6d 73 3b 0d 0a 75 73 69 6e 67  ws.Forms;..using
0220: 20 53 79 73 74 65 6d 2e 58 6d 6c 3b 0d 0a 75 73   System.Xml;..us
0230: 69 6e 67 20 4d 69 63 72 6f 73 6f 66 74 2e 57 69  ing Microsoft.Wi
0240: 6e 33 32 3b 0d 0a 0d 0a 6e 61 6d 65 73 70 61 63  n32;....namespac
0250: 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  e System.Data.SQ
0260: 4c 69 74 65 0d 0a 7b 0d 0a 20 20 20 20 23 72 65  Lite..{..    #re
0270: 67 69 6f 6e 20 50 75 62 6c 69 63 20 44 65 6c 65  gion Public Dele
0280: 67 61 74 65 73 0d 0a 20 20 20 20 69 6e 74 65 72  gates..    inter
0290: 6e 61 6c 20 64 65 6c 65 67 61 74 65 20 76 6f 69  nal delegate voi
02a0: 64 20 54 72 61 63 65 43 61 6c 6c 62 61 63 6b 28  d TraceCallback(
02b0: 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e 67  ..        string
02c0: 20 6d 65 73 73 61 67 65 2c 20 2f 2a 20 69 6e 20   message, /* in 
02d0: 2a 2f 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69  */..        stri
02e0: 6e 67 20 63 61 74 65 67 6f 72 79 20 2f 2a 20 69  ng category /* i
02f0: 6e 20 2a 2f 0d 0a 20 20 20 20 29 3b 0d 0a 0d 0a  n */..    );....
0300: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
0310: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0320: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0330: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0340: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
0350: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
0360: 64 65 6c 65 67 61 74 65 20 62 6f 6f 6c 20 46 72  delegate bool Fr
0370: 61 6d 65 77 6f 72 6b 43 6f 6e 66 69 67 43 61 6c  ameworkConfigCal
0380: 6c 62 61 63 6b 28 0d 0a 20 20 20 20 20 20 20 20  lback(..        
0390: 73 74 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65 2c  string fileName,
03a0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e             /* in
03b0: 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 73 74 72   */..        str
03c0: 69 6e 67 20 69 6e 76 61 72 69 61 6e 74 4e 61 6d  ing invariantNam
03d0: 65 2c 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f  e,      /* in */
03e0: 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e 67  ..        string
03f0: 20 6e 61 6d 65 2c 20 20 20 20 20 20 20 20 20 20   name,          
0400: 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20       /* in */.. 
0410: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 64 65         string de
0420: 73 63 72 69 70 74 69 6f 6e 2c 20 20 20 20 20 20  scription,      
0430: 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20    /* in */..    
0440: 20 20 20 20 73 74 72 69 6e 67 20 74 79 70 65 4e      string typeN
0450: 61 6d 65 2c 20 20 20 20 20 20 20 20 20 20 20 2f  ame,           /
0460: 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20  * in */..       
0470: 20 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20 61 73   AssemblyName as
0480: 73 65 6d 62 6c 79 4e 61 6d 65 2c 20 2f 2a 20 69  semblyName, /* i
0490: 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 73 74  n */..        st
04a0: 72 69 6e 67 20 64 69 72 65 63 74 6f 72 79 2c 20  ring directory, 
04b0: 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a           /* in *
04c0: 2f 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a 65 63  /..        objec
04d0: 74 20 63 6c 69 65 6e 74 44 61 74 61 2c 20 20 20  t clientData,   
04e0: 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a        /* in */..
04f0: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 70 65 72          bool per
0500: 55 73 65 72 2c 20 20 20 20 20 20 20 20 20 20 20  User,           
0510: 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20     /* in */..   
0520: 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c       bool wow64,
0530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0540: 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20  /* in */..      
0550: 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69    bool throwOnMi
0560: 73 73 69 6e 67 2c 20 20 20 20 20 20 20 2f 2a 20  ssing,       /* 
0570: 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 62  in */..        b
0580: 6f 6f 6c 20 77 68 61 74 49 66 2c 20 20 20 20 20  ool whatIf,     
0590: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20            /* in 
05a0: 2a 2f 0d 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c  */..        bool
05b0: 20 76 65 72 62 6f 73 65 2c 20 20 20 20 20 20 20   verbose,       
05c0: 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d         /* in */.
05d0: 0a 20 20 20 20 20 20 20 20 72 65 66 20 62 6f 6f  .        ref boo
05e0: 6c 20 73 61 76 65 64 2c 20 20 20 20 20 20 20 20  l saved,        
05f0: 20 20 20 20 2f 2a 20 6f 75 74 20 2a 2f 0d 0a 20      /* out */.. 
0600: 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e         ref strin
0610: 67 20 65 72 72 6f 72 20 20 20 20 20 20 20 20 20  g error         
0620: 20 20 2f 2a 20 6f 75 74 20 2a 2f 0d 0a 20 20 20    /* out */..   
0630: 20 29 3b 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f   );....    /////
0640: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0650: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0660: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0670: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0680: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 69 6e  //////....    in
0690: 74 65 72 6e 61 6c 20 64 65 6c 65 67 61 74 65 20  ternal delegate 
06a0: 62 6f 6f 6c 20 46 72 61 6d 65 77 6f 72 6b 52 65  bool FrameworkRe
06b0: 67 69 73 74 72 79 43 61 6c 6c 62 61 63 6b 28 0d  gistryCallback(.
06c0: 0a 20 20 20 20 20 20 20 20 49 6e 73 74 61 6c 6c  .        Install
06d0: 65 72 2e 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  er.MockRegistryK
06e0: 65 79 20 72 6f 6f 74 4b 65 79 2c 20 2f 2a 20 69  ey rootKey, /* i
06f0: 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 73 74  n */..        st
0700: 72 69 6e 67 20 66 72 61 6d 65 77 6f 72 6b 4e 61  ring frameworkNa
0710: 6d 65 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  me,             
0720: 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20   /* in */..     
0730: 20 20 20 56 65 72 73 69 6f 6e 20 66 72 61 6d 65     Version frame
0740: 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 20 20 20 20  workVersion,    
0750: 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a        /* in */..
0760: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 70          string p
0770: 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 20 20 20 20  latformName,    
0780: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e             /* in
0790: 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 73 74 72   */..        str
07a0: 69 6e 67 20 64 69 72 65 63 74 6f 72 79 2c 20 20  ing directory,  
07b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
07c0: 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20  /* in */..      
07d0: 20 20 6f 62 6a 65 63 74 20 63 6c 69 65 6e 74 44    object clientD
07e0: 61 74 61 2c 20 20 20 20 20 20 20 20 20 20 20 20  ata,            
07f0: 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20       /* in */.. 
0800: 20 20 20 20 20 20 20 62 6f 6f 6c 20 70 65 72 55         bool perU
0810: 73 65 72 2c 20 20 20 20 20 20 20 20 20 20 20 20  ser,            
0820: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20            /* in 
0830: 2a 2f 0d 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c  */..        bool
0840: 20 77 6f 77 36 34 2c 20 20 20 20 20 20 20 20 20   wow64,         
0850: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
0860: 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20  * in */..       
0870: 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73   bool throwOnMis
0880: 73 69 6e 67 2c 20 20 20 20 20 20 20 20 20 20 20  sing,           
0890: 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20      /* in */..  
08a0: 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49        bool whatI
08b0: 66 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  f,              
08c0: 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a           /* in *
08d0: 2f 0d 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c 20  /..        bool 
08e0: 76 65 72 62 6f 73 65 2c 20 20 20 20 20 20 20 20  verbose,        
08f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
0900: 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20   in */..        
0910: 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72  ref string error
0920: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0930: 20 20 20 2f 2a 20 6f 75 74 20 2a 2f 0d 0a 20 20     /* out */..  
0940: 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f    );....    ////
0950: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0960: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0970: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0980: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0990: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 69  ///////....    i
09a0: 6e 74 65 72 6e 61 6c 20 64 65 6c 65 67 61 74 65  nternal delegate
09b0: 20 62 6f 6f 6c 20 56 69 73 75 61 6c 53 74 75 64   bool VisualStud
09c0: 69 6f 52 65 67 69 73 74 72 79 43 61 6c 6c 62 61  ioRegistryCallba
09d0: 63 6b 28 0d 0a 20 20 20 20 20 20 20 20 49 6e 73  ck(..        Ins
09e0: 74 61 6c 6c 65 72 2e 4d 6f 63 6b 52 65 67 69 73  taller.MockRegis
09f0: 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 20  tryKey rootKey, 
0a00: 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20  /* in */..      
0a10: 20 20 56 65 72 73 69 6f 6e 20 76 73 56 65 72 73    Version vsVers
0a20: 69 6f 6e 2c 20 20 20 20 20 20 20 20 20 20 20 20  ion,            
0a30: 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20       /* in */.. 
0a40: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 73 75         string su
0a50: 66 66 69 78 2c 20 20 20 20 20 20 20 20 20 20 20  ffix,           
0a60: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 2c            /* in,
0a70: 20 6f 70 74 69 6f 6e 61 6c 20 2a 2f 0d 0a 20 20   optional */..  
0a80: 20 20 20 20 20 20 49 6e 73 74 61 6c 6c 65 72 2e        Installer.
0a90: 50 61 63 6b 61 67 65 20 70 61 63 6b 61 67 65 2c  Package package,
0aa0: 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a           /* in *
0ab0: 2f 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e  /..        strin
0ac0: 67 20 64 69 72 65 63 74 6f 72 79 2c 20 20 20 20  g directory,    
0ad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
0ae0: 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20   in */..        
0af0: 6f 62 6a 65 63 74 20 63 6c 69 65 6e 74 44 61 74  object clientDat
0b00: 61 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  a,              
0b10: 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20     /* in */..   
0b20: 20 20 20 20 20 62 6f 6f 6c 20 70 65 72 55 73 65       bool perUse
0b30: 72 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r,              
0b40: 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f          /* in */
0b50: 0d 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77  ..        bool w
0b60: 6f 77 36 34 2c 20 20 20 20 20 20 20 20 20 20 20  ow64,           
0b70: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
0b80: 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 62  in */..        b
0b90: 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69  ool throwOnMissi
0ba0: 6e 67 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  ng,             
0bb0: 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20    /* in */..    
0bc0: 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c      bool whatIf,
0bd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0be0: 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d         /* in */.
0bf0: 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65  .        bool ve
0c00: 72 62 6f 73 65 2c 20 20 20 20 20 20 20 20 20 20  rbose,          
0c10: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69              /* i
0c20: 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 72 65  n */..        re
0c30: 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 20 20  f string error  
0c40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0c50: 20 2f 2a 20 6f 75 74 20 2a 2f 0d 0a 20 20 20 20   /* out */..    
0c60: 29 3b 0d 0a 20 20 20 20 23 65 6e 64 72 65 67 69  );..    #endregi
0c70: 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f  on....    //////
0c80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0c90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0ca0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0cb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0cc0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 23 72 65  /////....    #re
0cd0: 67 69 6f 6e 20 50 75 62 6c 69 63 20 45 6e 75 6d  gion Public Enum
0ce0: 65 72 61 74 69 6f 6e 73 0d 0a 20 20 20 20 5b 46  erations..    [F
0cf0: 6c 61 67 73 28 29 5d 0d 0a 20 20 20 20 70 75 62  lags()]..    pub
0d00: 6c 69 63 20 65 6e 75 6d 20 49 6e 73 74 61 6c 6c  lic enum Install
0d10: 46 6c 61 67 73 0d 0a 20 20 20 20 7b 0d 0a 20 20  Flags..    {..  
0d20: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 4e 6f        #region No
0d30: 72 6d 61 6c 20 56 61 6c 75 65 73 0d 0a 20 20 20  rmal Values..   
0d40: 20 20 20 20 20 4e 6f 6e 65 20 3d 20 30 78 30 2c       None = 0x0,
0d50: 0d 0a 20 20 20 20 20 20 20 20 47 6c 6f 62 61 6c  ..        Global
0d60: 41 73 73 65 6d 62 6c 79 43 61 63 68 65 20 3d 20  AssemblyCache = 
0d70: 30 78 31 2c 0d 0a 20 20 20 20 20 20 20 20 41 73  0x1,..        As
0d80: 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73 20 3d 20  semblyFolders = 
0d90: 30 78 32 2c 0d 0a 20 20 20 20 20 20 20 20 44 62  0x2,..        Db
0da0: 50 72 6f 76 69 64 65 72 46 61 63 74 6f 72 79 20  ProviderFactory 
0db0: 3d 20 30 78 34 2c 0d 0a 20 20 20 20 20 20 20 20  = 0x4,..        
0dc0: 56 73 50 61 63 6b 61 67 65 20 3d 20 30 78 38 2c  VsPackage = 0x8,
0dd0: 0d 0a 20 20 20 20 20 20 20 20 56 73 50 61 63 6b  ..        VsPack
0de0: 61 67 65 47 6c 6f 62 61 6c 41 73 73 65 6d 62 6c  ageGlobalAssembl
0df0: 79 43 61 63 68 65 20 3d 20 30 78 31 30 2c 0d 0a  yCache = 0x10,..
0e00: 20 20 20 20 20 20 20 20 56 73 44 61 74 61 53 6f          VsDataSo
0e10: 75 72 63 65 20 3d 20 30 78 32 30 2c 0d 0a 20 20  urce = 0x20,..  
0e20: 20 20 20 20 20 20 56 73 44 61 74 61 50 72 6f 76        VsDataProv
0e30: 69 64 65 72 20 3d 20 30 78 34 30 2c 0d 0a 20 20  ider = 0x40,..  
0e40: 20 20 20 20 20 20 56 73 44 65 76 45 6e 76 53 65        VsDevEnvSe
0e50: 74 75 70 20 3d 20 30 78 38 30 2c 0d 0a 20 20 20  tup = 0x80,..   
0e60: 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
0e70: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
0e80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0e90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0ea0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0eb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0ec0: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72  //....        #r
0ed0: 65 67 69 6f 6e 20 43 6f 6d 70 6f 73 69 74 65 20  egion Composite 
0ee0: 56 61 6c 75 65 73 0d 0a 20 20 20 20 20 20 20 20  Values..        
0ef0: 46 72 61 6d 65 77 6f 72 6b 20 3d 20 47 6c 6f 62  Framework = Glob
0f00: 61 6c 41 73 73 65 6d 62 6c 79 43 61 63 68 65 20  alAssemblyCache 
0f10: 7c 20 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72  | AssemblyFolder
0f20: 73 20 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s |..           
0f30: 20 20 20 20 20 20 20 20 20 44 62 50 72 6f 76 69           DbProvi
0f40: 64 65 72 46 61 63 74 6f 72 79 2c 0d 0a 0d 0a 20  derFactory,.... 
0f50: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
0f60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0f70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0f80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0f90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
0fa0: 0d 0a 20 20 20 20 20 20 20 20 56 73 20 3d 20 56  ..        Vs = V
0fb0: 73 50 61 63 6b 61 67 65 20 7c 20 56 73 50 61 63  sPackage | VsPac
0fc0: 6b 61 67 65 47 6c 6f 62 61 6c 41 73 73 65 6d 62  kageGlobalAssemb
0fd0: 6c 79 43 61 63 68 65 20 7c 20 56 73 44 61 74 61  lyCache | VsData
0fe0: 53 6f 75 72 63 65 20 7c 0d 0a 20 20 20 20 20 20  Source |..      
0ff0: 20 20 20 20 20 20 20 56 73 44 61 74 61 50 72 6f         VsDataPro
1000: 76 69 64 65 72 20 7c 20 56 73 44 65 76 45 6e 76  vider | VsDevEnv
1010: 53 65 74 75 70 2c 0d 0a 0d 0a 20 20 20 20 20 20  Setup,....      
1020: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
1030: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1040: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1050: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1060: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
1070: 20 20 20 20 20 41 6c 6c 20 3d 20 46 72 61 6d 65       All = Frame
1080: 77 6f 72 6b 20 7c 20 56 73 2c 0d 0a 0d 0a 20 20  work | Vs,....  
1090: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
10a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
10e0: 0a 20 20 20 20 20 20 20 20 41 6c 6c 45 78 63 65  .        AllExce
10f0: 70 74 47 6c 6f 62 61 6c 41 73 73 65 6d 62 6c 79  ptGlobalAssembly
1100: 43 61 63 68 65 20 3d 20 41 6c 6c 20 26 20 7e 28  Cache = All & ~(
1110: 47 6c 6f 62 61 6c 41 73 73 65 6d 62 6c 79 43 61  GlobalAssemblyCa
1120: 63 68 65 20 7c 0d 0a 20 20 20 20 20 20 20 20 20  che |..         
1130: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 56 73                Vs
1150: 50 61 63 6b 61 67 65 47 6c 6f 62 61 6c 41 73 73  PackageGlobalAss
1160: 65 6d 62 6c 79 43 61 63 68 65 29 2c 0d 0a 20 20  emblyCache),..  
1170: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
1180: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
1190: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11d0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ///....        #
11e0: 72 65 67 69 6f 6e 20 53 75 67 67 65 73 74 65 64  region Suggested
11f0: 20 44 65 66 61 75 6c 74 20 56 61 6c 75 65 73 0d   Default Values.
1200: 0a 20 20 20 20 20 20 20 20 44 65 66 61 75 6c 74  .        Default
1210: 20 3d 20 41 6c 6c 0d 0a 20 20 20 20 20 20 20 20   = All..        
1220: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20  #endregion..    
1230: 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  }....    ///////
1240: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1250: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1260: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1270: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1280: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 5b 46 6c 61  ////....    [Fla
1290: 67 73 28 29 5d 0d 0a 20 20 20 20 70 75 62 6c 69  gs()]..    publi
12a0: 63 20 65 6e 75 6d 20 50 72 6f 76 69 64 65 72 46  c enum ProviderF
12b0: 6c 61 67 73 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  lags..    {..   
12c0: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 4e 6f 72       #region Nor
12d0: 6d 61 6c 20 56 61 6c 75 65 73 0d 0a 20 20 20 20  mal Values..    
12e0: 20 20 20 20 4e 6f 6e 65 20 3d 20 30 78 30 2c 0d      None = 0x0,.
12f0: 0a 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 45  .        SystemE
1300: 66 36 4d 75 73 74 42 65 47 6c 6f 62 61 6c 20 3d  f6MustBeGlobal =
1310: 20 30 78 31 2c 0d 0a 20 20 20 20 20 20 20 20 44   0x1,..        D
1320: 69 64 4c 69 6e 71 57 61 72 6e 69 6e 67 20 3d 20  idLinqWarning = 
1330: 30 78 32 2c 0d 0a 20 20 20 20 20 20 20 20 44 69  0x2,..        Di
1340: 64 45 66 36 57 61 72 6e 69 6e 67 20 3d 20 30 78  dEf6Warning = 0x
1350: 34 2c 0d 0a 20 20 20 20 20 20 20 20 46 6f 72 63  4,..        Forc
1360: 65 4c 69 6e 71 45 6e 61 62 6c 65 64 20 3d 20 30  eLinqEnabled = 0
1370: 78 38 2c 0d 0a 20 20 20 20 20 20 20 20 46 6f 72  x8,..        For
1380: 63 65 4c 69 6e 71 44 69 73 61 62 6c 65 64 20 3d  ceLinqDisabled =
1390: 20 30 78 31 30 2c 0d 0a 20 20 20 20 20 20 20 20   0x10,..        
13a0: 46 6f 72 63 65 45 66 36 45 6e 61 62 6c 65 64 20  ForceEf6Enabled 
13b0: 3d 20 30 78 32 30 2c 0d 0a 20 20 20 20 20 20 20  = 0x20,..       
13c0: 20 46 6f 72 63 65 45 66 36 44 69 73 61 62 6c 65   ForceEf6Disable
13d0: 64 20 3d 20 30 78 34 30 2c 0d 0a 20 20 20 20 20  d = 0x40,..     
13e0: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
13f0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
1400: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1410: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1420: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1430: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1440: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67  ....        #reg
1450: 69 6f 6e 20 53 75 67 67 65 73 74 65 64 20 44 65  ion Suggested De
1460: 66 61 75 6c 74 20 56 61 6c 75 65 73 0d 0a 20 20  fault Values..  
1470: 20 20 20 20 20 20 44 65 66 61 75 6c 74 20 3d 20        Default = 
1480: 4e 6f 6e 65 0d 0a 20 20 20 20 20 20 20 20 23 65  None..        #e
1490: 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20 7d 0d  ndregion..    }.
14a0: 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f  ...    /////////
14b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14f0: 2f 2f 0d 0a 0d 0a 20 20 20 20 5b 46 6c 61 67 73  //....    [Flags
1500: 28 29 5d 0d 0a 20 20 20 20 70 75 62 6c 69 63 20  ()]..    public 
1510: 65 6e 75 6d 20 54 72 61 63 65 50 72 69 6f 72 69  enum TracePriori
1520: 74 79 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  ty..    {..     
1530: 20 20 20 23 72 65 67 69 6f 6e 20 4e 6f 72 6d 61     #region Norma
1540: 6c 20 56 61 6c 75 65 73 0d 0a 20 20 20 20 20 20  l Values..      
1550: 20 20 4e 6f 6e 65 20 3d 20 30 78 30 2c 0d 0a 20    None = 0x0,.. 
1560: 20 20 20 20 20 20 20 4c 6f 77 65 73 74 20 3d 20         Lowest = 
1570: 30 78 31 2c 0d 0a 20 20 20 20 20 20 20 20 4c 6f  0x1,..        Lo
1580: 77 65 72 20 3d 20 30 78 32 2c 0d 0a 20 20 20 20  wer = 0x2,..    
1590: 20 20 20 20 4c 6f 77 20 3d 20 30 78 34 2c 0d 0a      Low = 0x4,..
15a0: 20 20 20 20 20 20 20 20 4d 65 64 69 75 6d 4c 6f          MediumLo
15b0: 77 20 3d 20 30 78 38 2c 0d 0a 20 20 20 20 20 20  w = 0x8,..      
15c0: 20 20 4d 65 64 69 75 6d 20 3d 20 30 78 31 30 2c    Medium = 0x10,
15d0: 0d 0a 20 20 20 20 20 20 20 20 4d 65 64 69 75 6d  ..        Medium
15e0: 48 69 67 68 20 3d 20 30 78 32 30 2c 0d 0a 20 20  High = 0x20,..  
15f0: 20 20 20 20 20 20 48 69 67 68 20 3d 20 30 78 34        High = 0x4
1600: 30 2c 0d 0a 20 20 20 20 20 20 20 20 48 69 67 68  0,..        High
1610: 65 72 20 3d 20 30 78 38 30 2c 0d 0a 20 20 20 20  er = 0x80,..    
1620: 20 20 20 20 48 69 67 68 65 73 74 20 3d 20 30 78      Highest = 0x
1630: 31 30 30 2c 0d 0a 20 20 20 20 20 20 20 20 23 65  100,..        #e
1640: 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
1650: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
1660: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1670: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1680: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1690: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
16a0: 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 53         #region S
16b0: 75 67 67 65 73 74 65 64 20 44 65 66 61 75 6c 74  uggested Default
16c0: 20 46 6c 61 67 73 0d 0a 20 20 20 20 20 20 20 20   Flags..        
16d0: 44 65 66 61 75 6c 74 20 3d 20 4d 65 64 69 75 6d  Default = Medium
16e0: 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
16f0: 67 69 6f 6e 0d 0a 20 20 20 20 7d 0d 0a 20 20 20  gion..    }..   
1700: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
1710: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
1720: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1730: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1740: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1750: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
1760: 0d 0a 20 20 20 20 23 72 65 67 69 6f 6e 20 49 6e  ..    #region In
1770: 73 74 61 6c 6c 65 72 20 43 6c 61 73 73 0d 0a 23  staller Class..#
1780: 69 66 20 4e 45 54 5f 34 30 20 7c 7c 20 4e 45 54  if NET_40 || NET
1790: 5f 34 35 20 7c 7c 20 4e 45 54 5f 34 35 31 0d 0a  _45 || NET_451..
17a0: 20 20 20 20 5b 53 65 63 75 72 69 74 79 43 72 69      [SecurityCri
17b0: 74 69 63 61 6c 28 29 5d 0d 0a 23 65 6c 73 65 0d  tical()]..#else.
17c0: 0a 20 20 20 20 5b 53 65 63 75 72 69 74 79 50 65  .    [SecurityPe
17d0: 72 6d 69 73 73 69 6f 6e 28 53 65 63 75 72 69 74  rmission(Securit
17e0: 79 41 63 74 69 6f 6e 2e 4c 69 6e 6b 44 65 6d 61  yAction.LinkDema
17f0: 6e 64 2c 20 55 6e 6d 61 6e 61 67 65 64 43 6f 64  nd, UnmanagedCod
1800: 65 20 3d 20 74 72 75 65 29 5d 0d 0a 23 65 6e 64  e = true)]..#end
1810: 69 66 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  if..    internal
1820: 20 73 74 61 74 69 63 20 63 6c 61 73 73 20 49 6e   static class In
1830: 73 74 61 6c 6c 65 72 0d 0a 20 20 20 20 7b 0d 0a  staller..    {..
1840: 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
1850: 55 6e 73 61 66 65 20 4e 61 74 69 76 65 20 4d 65  Unsafe Native Me
1860: 74 68 6f 64 73 20 43 6c 61 73 73 0d 0a 20 20 20  thods Class..   
1870: 20 20 20 20 20 5b 53 75 70 70 72 65 73 73 55 6e       [SuppressUn
1880: 6d 61 6e 61 67 65 64 43 6f 64 65 53 65 63 75 72  managedCodeSecur
1890: 69 74 79 28 29 5d 0d 0a 20 20 20 20 20 20 20 20  ity()]..        
18a0: 70 72 69 76 61 74 65 20 73 65 61 6c 65 64 20 63  private sealed c
18b0: 6c 61 73 73 20 55 6e 73 61 66 65 4e 61 74 69 76  lass UnsafeNativ
18c0: 65 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20  eMethods..      
18d0: 20 20 7b 0d 0a 23 69 66 20 57 49 4e 44 4f 57 53    {..#if WINDOWS
18e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72  ..            #r
18f0: 65 67 69 6f 6e 20 4e 61 74 69 76 65 20 57 69 6e  egion Native Win
1900: 33 32 20 43 6f 6e 73 74 61 6e 74 73 0d 0a 20 20  32 Constants..  
1910: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
1920: 65 20 63 6f 6e 73 74 20 69 6e 74 20 4d 41 58 5f  e const int MAX_
1930: 50 41 54 48 20 3d 20 32 36 30 3b 0d 0a 0d 0a 20  PATH = 260;.... 
1940: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
1950: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1960: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1970: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1980: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
1990: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
19a0: 69 76 61 74 65 20 63 6f 6e 73 74 20 69 6e 74 20  ivate const int 
19b0: 43 53 49 44 4c 5f 53 59 53 54 45 4d 58 38 36 20  CSIDL_SYSTEMX86 
19c0: 3d 20 30 78 30 30 32 39 3b 0d 0a 0d 0a 20 20 20  = 0x0029;....   
19d0: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
19e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
1a20: 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
1a30: 61 74 65 20 63 6f 6e 73 74 20 69 6e 74 20 53 48  ate const int SH
1a40: 47 46 50 5f 54 59 50 45 5f 43 55 52 52 45 4e 54  GFP_TYPE_CURRENT
1a50: 20 3d 20 30 3b 0d 0a 0d 0a 20 20 20 20 20 20 20   = 0;....       
1a60: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
1a70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1aa0: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
1ab0: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
1ac0: 63 6f 6e 73 74 20 69 6e 74 20 53 5f 4f 4b 20 3d  const int S_OK =
1ad0: 20 30 3b 20 2f 2a 20 48 52 45 53 55 4c 54 20 2a   0; /* HRESULT *
1ae0: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  /..            #
1af0: 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
1b00: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
1b10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
1b50: 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67              #reg
1b60: 69 6f 6e 20 4e 61 74 69 76 65 20 57 69 6e 64 6f  ion Native Windo
1b70: 77 73 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20  ws Methods..    
1b80: 20 20 20 20 20 20 20 20 5b 44 6c 6c 49 6d 70 6f          [DllImpo
1b90: 72 74 28 22 73 68 66 6f 6c 64 65 72 2e 64 6c 6c  rt("shfolder.dll
1ba0: 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
1bb0: 20 20 20 20 43 61 6c 6c 69 6e 67 43 6f 6e 76 65      CallingConve
1bc0: 6e 74 69 6f 6e 20 3d 20 43 61 6c 6c 69 6e 67 43  ntion = CallingC
1bd0: 6f 6e 76 65 6e 74 69 6f 6e 2e 57 69 6e 61 70 69  onvention.Winapi
1be0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1bf0: 20 20 20 43 68 61 72 53 65 74 20 3d 20 43 68 61     CharSet = Cha
1c00: 72 53 65 74 2e 41 75 74 6f 2c 20 42 65 73 74 46  rSet.Auto, BestF
1c10: 69 74 4d 61 70 70 69 6e 67 20 3d 20 66 61 6c 73  itMapping = fals
1c20: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
1c30: 20 20 20 20 54 68 72 6f 77 4f 6e 55 6e 6d 61 70      ThrowOnUnmap
1c40: 70 61 62 6c 65 43 68 61 72 20 3d 20 74 72 75 65  pableChar = true
1c50: 2c 20 53 65 74 4c 61 73 74 45 72 72 6f 72 20 3d  , SetLastError =
1c60: 20 74 72 75 65 29 5d 0d 0a 20 20 20 20 20 20 20   true)]..       
1c70: 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
1c80: 74 69 63 20 65 78 74 65 72 6e 20 69 6e 74 20 53  tic extern int S
1c90: 48 47 65 74 46 6f 6c 64 65 72 50 61 74 68 28 0d  HGetFolderPath(.
1ca0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1cb0: 20 49 6e 74 50 74 72 20 68 57 6e 64 4f 77 6e 65   IntPtr hWndOwne
1cc0: 72 2c 20 69 6e 74 20 6e 46 6f 6c 64 65 72 2c 20  r, int nFolder, 
1cd0: 49 6e 74 50 74 72 20 68 54 6f 6b 65 6e 2c 20 75  IntPtr hToken, u
1ce0: 69 6e 74 20 66 6c 61 67 73 2c 0d 0a 20 20 20 20  int flags,..    
1cf0: 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50              IntP
1d00: 74 72 20 62 75 66 66 65 72 20 2f 2a 20 3e 3d 20  tr buffer /* >= 
1d10: 4d 41 58 5f 50 41 54 48 20 2a 2f 29 3b 0d 0a 20  MAX_PATH */);.. 
1d20: 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72             #endr
1d30: 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
1d40: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
1d50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d80: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
1d90: 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
1da0: 50 75 62 6c 69 63 20 57 72 61 70 70 65 72 20 4d  Public Wrapper M
1db0: 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20  ethods..        
1dc0: 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
1dd0: 63 20 73 74 72 69 6e 67 20 47 65 74 53 79 73 74  c string GetSyst
1de0: 65 6d 44 69 72 65 63 74 6f 72 79 28 29 0d 0a 20  emDirectory().. 
1df0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1e00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e                In
1e10: 74 50 74 72 20 62 75 66 66 65 72 20 3d 20 49 6e  tPtr buffer = In
1e20: 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 0d 0a 20 20  tPtr.Zero;....  
1e30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
1e40: 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  y..             
1e50: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1e60: 20 20 20 20 20 20 20 20 20 20 62 75 66 66 65 72            buffer
1e70: 20 3d 20 4d 61 72 73 68 61 6c 2e 41 6c 6c 6f 63   = Marshal.Alloc
1e80: 43 6f 54 61 73 6b 4d 65 6d 28 0d 0a 20 20 20 20  CoTaskMem(..    
1e90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ea0: 20 20 20 20 73 69 7a 65 6f 66 28 63 68 61 72 29      sizeof(char)
1eb0: 20 2a 20 28 4d 41 58 5f 50 41 54 48 20 2b 20 31   * (MAX_PATH + 1
1ec0: 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ));....         
1ed0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 62             if (b
1ee0: 75 66 66 65 72 20 21 3d 20 49 6e 74 50 74 72 2e  uffer != IntPtr.
1ef0: 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20  Zero)..         
1f00: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1f10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f20: 20 20 20 20 20 20 69 66 20 28 53 48 47 65 74 46        if (SHGetF
1f30: 6f 6c 64 65 72 50 61 74 68 28 49 6e 74 50 74 72  olderPath(IntPtr
1f40: 2e 5a 65 72 6f 2c 0d 0a 20 20 20 20 20 20 20 20  .Zero,..        
1f50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f60: 20 20 20 20 20 20 20 20 43 53 49 44 4c 5f 53 59          CSIDL_SY
1f70: 53 54 45 4d 58 38 36 2c 20 49 6e 74 50 74 72 2e  STEMX86, IntPtr.
1f80: 5a 65 72 6f 2c 0d 0a 20 20 20 20 20 20 20 20 20  Zero,..         
1f90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fa0: 20 20 20 20 20 20 20 53 48 47 46 50 5f 54 59 50         SHGFP_TYP
1fb0: 45 5f 43 55 52 52 45 4e 54 2c 20 62 75 66 66 65  E_CURRENT, buffe
1fc0: 72 29 20 3d 3d 20 53 5f 4f 4b 29 0d 0a 20 20 20  r) == S_OK)..   
1fd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fe0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1ff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2000: 20 20 20 20 72 65 74 75 72 6e 20 4d 61 72 73 68      return Marsh
2010: 61 6c 2e 50 74 72 54 6f 53 74 72 69 6e 67 41 75  al.PtrToStringAu
2020: 74 6f 28 62 75 66 66 65 72 29 3b 0d 0a 20 20 20  to(buffer);..   
2030: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2040: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
2050: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
2060: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
2070: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2080: 20 20 63 61 74 63 68 20 28 45 78 63 65 70 74 69    catch (Excepti
2090: 6f 6e 20 65 29 0d 0a 20 20 20 20 20 20 20 20 20  on e)..         
20a0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
20b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
20c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
20d0: 20 20 20 20 20 20 2f 2f 20 54 4f 44 4f 3a 20 49        // TODO: I
20e0: 73 20 74 68 69 73 20 74 68 65 20 72 69 67 68 74  s this the right
20f0: 20 65 72 72 6f 72 20 68 61 6e 64 6c 69 6e 67 20   error handling 
2100: 73 6f 6c 75 74 69 6f 6e 0d 0a 20 20 20 20 20 20  solution..      
2110: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
2120: 20 20 20 20 20 20 20 74 6f 20 75 73 65 20 61 74         to use at
2130: 20 74 68 69 73 20 70 6f 69 6e 74 3f 0d 0a 20 20   this point?..  
2140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2150: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
2160: 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
2170: 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
2180: 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4d  (TracePriority.M
2190: 65 64 69 75 6d 48 69 67 68 2c 0d 0a 20 20 20 20  ediumHigh,..    
21a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21b0: 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63      debugCallbac
21c0: 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  k, traceCallback
21d0: 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
21e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
21f0: 20 20 20 20 20 20 20 20 20 20 22 43 6f 75 6c 64            "Could
2200: 20 6e 6f 74 20 67 65 74 20 73 79 73 74 65 6d 20   not get system 
2210: 64 69 72 65 63 74 6f 72 79 3a 20 7b 30 7d 22 2c  directory: {0}",
2220: 20 65 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20   e),..          
2230: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
2240: 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
2250: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2260: 20 20 20 20 20 74 68 72 6f 77 3b 0d 0a 20 20 20       throw;..   
2270: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
2280: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2290: 66 69 6e 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20  finally..       
22a0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
22b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22c0: 69 66 20 28 62 75 66 66 65 72 20 21 3d 20 49 6e  if (buffer != In
22d0: 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20  tPtr.Zero)..    
22e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22f0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2300: 20 20 20 20 20 20 20 20 20 20 20 4d 61 72 73 68             Marsh
2310: 61 6c 2e 46 72 65 65 43 6f 54 61 73 6b 4d 65 6d  al.FreeCoTaskMem
2320: 28 62 75 66 66 65 72 29 3b 0d 0a 20 20 20 20 20  (buffer);..     
2330: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2340: 20 20 20 62 75 66 66 65 72 20 3d 20 49 6e 74 50     buffer = IntP
2350: 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20 20 20  tr.Zero;..      
2360: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
2370: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2380: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
2390: 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c        return nul
23a0: 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l;..            
23b0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  }..            #
23c0: 65 6e 64 72 65 67 69 6f 6e 0d 0a 23 65 6e 64 69  endregion..#endi
23d0: 66 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  f..        }..  
23e0: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
23f0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
2400: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2410: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2420: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2430: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2440: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ///....        #
2450: 72 65 67 69 6f 6e 20 50 72 69 76 61 74 65 20 48  region Private H
2460: 65 6c 70 65 72 20 43 6c 61 73 73 65 73 0d 0a 20  elper Classes.. 
2470: 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 41         #region A
2480: 6e 79 50 61 69 72 20 43 6c 61 73 73 0d 0a 20 20  nyPair Class..  
2490: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 65        private se
24a0: 61 6c 65 64 20 63 6c 61 73 73 20 41 6e 79 50 61  aled class AnyPa
24b0: 69 72 3c 54 31 2c 20 54 32 3e 0d 0a 20 20 20 20  ir<T1, T2>..    
24c0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
24d0: 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69     #region Publi
24e0: 63 20 43 6f 6e 73 74 72 75 63 74 6f 72 73 0d 0a  c Constructors..
24f0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
2500: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 57              // W
2510: 41 52 4e 49 4e 47 3a 20 54 68 69 73 20 63 6f 6e  ARNING: This con
2520: 73 74 72 75 63 74 6f 72 20 70 72 6f 64 75 63 65  structor produce
2530: 73 20 61 6e 20 69 6d 6d 75 74 61 62 6c 65 20 22  s an immutable "
2540: 65 6d 70 74 79 22 20 70 61 69 72 0d 0a 20 20 20  empty" pair..   
2550: 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
2560: 20 20 20 20 20 6f 62 6a 65 63 74 2e 0d 0a 20 20       object...  
2570: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
2580: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
2590: 20 41 6e 79 50 61 69 72 28 29 0d 0a 20 20 20 20   AnyPair()..    
25a0: 20 20 20 20 20 20 20 20 20 20 20 20 3a 20 62 61              : ba
25b0: 73 65 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20  se()..          
25c0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
25d0: 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69       // do nothi
25e0: 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ng...           
25f0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
2600: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
2610: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2620: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2630: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2640: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
2650: 20 20 20 20 20 70 75 62 6c 69 63 20 41 6e 79 50       public AnyP
2660: 61 69 72 28 54 31 20 78 29 0d 0a 20 20 20 20 20  air(T1 x)..     
2670: 20 20 20 20 20 20 20 20 20 20 20 3a 20 74 68 69             : thi
2680: 73 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s()..           
2690: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
26a0: 20 20 20 20 74 68 69 73 2e 78 20 3d 20 78 3b 0d      this.x = x;.
26b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
26c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
26d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2700: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2710: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
2720: 20 70 75 62 6c 69 63 20 41 6e 79 50 61 69 72 28   public AnyPair(
2730: 54 31 20 78 2c 20 54 32 20 79 29 0d 0a 20 20 20  T1 x, T2 y)..   
2740: 20 20 20 20 20 20 20 20 20 20 20 20 20 3a 20 74               : t
2750: 68 69 73 28 78 29 0d 0a 20 20 20 20 20 20 20 20  his(x)..        
2760: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2770: 20 20 20 20 20 20 20 74 68 69 73 2e 79 20 3d 20         this.y = 
2780: 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y;..            
2790: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  }..            #
27a0: 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
27b0: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
27c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
2800: 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67              #reg
2810: 69 6f 6e 20 50 75 62 6c 69 63 20 50 72 6f 70 65  ion Public Prope
2820: 72 74 69 65 73 0d 0a 20 20 20 20 20 20 20 20 20  rties..         
2830: 20 20 20 70 72 69 76 61 74 65 20 54 31 20 78 3b     private T1 x;
2840: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
2850: 62 6c 69 63 20 54 31 20 58 0d 0a 20 20 20 20 20  blic T1 X..     
2860: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2870: 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
2880: 72 65 74 75 72 6e 20 78 3b 20 7d 0d 0a 20 20 20  return x; }..   
2890: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
28a0: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
28b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
28f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
2900: 76 61 74 65 20 54 32 20 79 3b 0d 0a 20 20 20 20  vate T2 y;..    
2910: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 54          public T
2920: 32 20 59 0d 0a 20 20 20 20 20 20 20 20 20 20 20  2 Y..           
2930: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2940: 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
2950: 20 79 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20   y; }..         
2960: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
2970: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20    #endregion..  
2980: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
2990: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
29a0: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
29b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
29f0: 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
2a00: 6e 20 54 72 61 63 65 4f 70 73 20 43 6c 61 73 73  n TraceOps Class
2a10: 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
2a20: 65 20 73 74 61 74 69 63 20 63 6c 61 73 73 20 54  e static class T
2a30: 72 61 63 65 4f 70 73 0d 0a 20 20 20 20 20 20 20  raceOps..       
2a40: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2a50: 23 72 65 67 69 6f 6e 20 50 72 69 76 61 74 65 20  #region Private 
2a60: 43 6f 6e 73 74 61 6e 74 73 0d 0a 20 20 20 20 20  Constants..     
2a70: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 63         private c
2a80: 6f 6e 73 74 20 73 74 72 69 6e 67 20 44 65 66 61  onst string Defa
2a90: 75 6c 74 44 65 62 75 67 46 6f 72 6d 61 74 20 3d  ultDebugFormat =
2aa0: 20 22 23 7b 30 3a 30 30 30 7d 20 40 20 7b 31 7d   "#{0:000} @ {1}
2ab0: 3a 20 7b 32 7d 22 3b 0d 0a 20 20 20 20 20 20 20  : {2}";..       
2ac0: 20 20 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e       private con
2ad0: 73 74 20 73 74 72 69 6e 67 20 44 65 66 61 75 6c  st string Defaul
2ae0: 74 54 72 61 63 65 46 6f 72 6d 61 74 20 3d 20 22  tTraceFormat = "
2af0: 23 7b 30 3a 30 30 30 7d 20 40 20 7b 31 7d 3a 20  #{0:000} @ {1}: 
2b00: 7b 32 7d 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  {2}";....       
2b10: 20 20 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e       private con
2b20: 73 74 20 73 74 72 69 6e 67 20 49 73 6f 38 36 30  st string Iso860
2b30: 31 44 61 74 65 54 69 6d 65 4f 75 74 70 75 74 46  1DateTimeOutputF
2b40: 6f 72 6d 61 74 20 3d 0d 0a 20 20 20 20 20 20 20  ormat =..       
2b50: 20 20 20 20 20 20 20 20 20 22 79 79 79 79 2e 4d           "yyyy.M
2b60: 4d 2e 64 64 54 48 48 3a 6d 6d 3a 73 73 2e 66 66  M.ddTHH:mm:ss.ff
2b70: 66 66 66 66 66 22 3b 0d 0a 20 20 20 20 20 20 20  fffff";..       
2b80: 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
2b90: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
2ba0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2be0: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
2bf0: 20 20 23 72 65 67 69 6f 6e 20 50 72 69 76 61 74    #region Privat
2c00: 65 20 53 74 61 74 69 63 20 44 61 74 61 0d 0a 20  e Static Data.. 
2c10: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
2c20: 74 65 20 73 74 61 74 69 63 20 6f 62 6a 65 63 74  te static object
2c30: 20 73 79 6e 63 52 6f 6f 74 20 3d 20 6e 65 77 20   syncRoot = new 
2c40: 6f 62 6a 65 63 74 28 29 3b 0d 0a 20 20 20 20 20  object();..     
2c50: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
2c60: 74 61 74 69 63 20 6c 6f 6e 67 20 6e 65 78 74 44  tatic long nextD
2c70: 65 62 75 67 49 64 3b 0d 0a 20 20 20 20 20 20 20  ebugId;..       
2c80: 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
2c90: 74 69 63 20 6c 6f 6e 67 20 6e 65 78 74 54 72 61  tic long nextTra
2ca0: 63 65 49 64 3b 0d 0a 20 20 20 20 20 20 20 20 20  ceId;..         
2cb0: 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
2cc0: 63 20 49 4c 69 73 74 3c 54 72 61 63 65 4c 69 73  c IList<TraceLis
2cd0: 74 65 6e 65 72 3e 20 64 65 62 75 67 4c 69 73 74  tener> debugList
2ce0: 65 6e 65 72 73 3b 0d 0a 20 20 20 20 20 20 20 20  eners;..        
2cf0: 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
2d00: 69 63 20 54 72 61 63 65 50 72 69 6f 72 69 74 79  ic TracePriority
2d10: 20 64 65 62 75 67 50 72 69 6f 72 69 74 79 20 3d   debugPriority =
2d20: 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 44   TracePriority.D
2d30: 65 66 61 75 6c 74 3b 0d 0a 20 20 20 20 20 20 20  efault;..       
2d40: 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
2d50: 74 69 63 20 54 72 61 63 65 50 72 69 6f 72 69 74  tic TracePriorit
2d60: 79 20 74 72 61 63 65 50 72 69 6f 72 69 74 79 20  y tracePriority 
2d70: 3d 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e  = TracePriority.
2d80: 44 65 66 61 75 6c 74 3b 0d 0a 20 20 20 20 20 20  Default;..      
2d90: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
2da0: 61 74 69 63 20 73 74 72 69 6e 67 20 64 65 62 75  atic string debu
2db0: 67 46 6f 72 6d 61 74 20 3d 20 44 65 66 61 75 6c  gFormat = Defaul
2dc0: 74 44 65 62 75 67 46 6f 72 6d 61 74 3b 0d 0a 20  tDebugFormat;.. 
2dd0: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
2de0: 74 65 20 73 74 61 74 69 63 20 73 74 72 69 6e 67  te static string
2df0: 20 74 72 61 63 65 46 6f 72 6d 61 74 20 3d 20 44   traceFormat = D
2e00: 65 66 61 75 6c 74 54 72 61 63 65 46 6f 72 6d 61  efaultTraceForma
2e10: 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t;..            
2e20: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
2e30: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
2e40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
2e80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65  .            #re
2e90: 67 69 6f 6e 20 50 75 62 6c 69 63 20 53 74 61 74  gion Public Stat
2ea0: 69 63 20 50 72 6f 70 65 72 74 69 65 73 0d 0a 20  ic Properties.. 
2eb0: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
2ec0: 63 20 73 74 61 74 69 63 20 54 72 61 63 65 50 72  c static TracePr
2ed0: 69 6f 72 69 74 79 20 44 65 62 75 67 50 72 69 6f  iority DebugPrio
2ee0: 72 69 74 79 0d 0a 20 20 20 20 20 20 20 20 20 20  rity..          
2ef0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2f00: 20 20 20 20 20 67 65 74 20 7b 20 6c 6f 63 6b 20       get { lock 
2f10: 28 73 79 6e 63 52 6f 6f 74 29 20 7b 20 72 65 74  (syncRoot) { ret
2f20: 75 72 6e 20 64 65 62 75 67 50 72 69 6f 72 69 74  urn debugPriorit
2f30: 79 3b 20 7d 20 7d 0d 0a 20 20 20 20 20 20 20 20  y; } }..        
2f40: 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 6c 6f          set { lo
2f50: 63 6b 20 28 73 79 6e 63 52 6f 6f 74 29 20 7b 20  ck (syncRoot) { 
2f60: 64 65 62 75 67 50 72 69 6f 72 69 74 79 20 3d 20  debugPriority = 
2f70: 76 61 6c 75 65 3b 20 7d 20 7d 0d 0a 20 20 20 20  value; } }..    
2f80: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
2f90: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
2fa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
2fe0: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
2ff0: 69 63 20 73 74 61 74 69 63 20 54 72 61 63 65 50  ic static TraceP
3000: 72 69 6f 72 69 74 79 20 54 72 61 63 65 50 72 69  riority TracePri
3010: 6f 72 69 74 79 0d 0a 20 20 20 20 20 20 20 20 20  ority..         
3020: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
3030: 20 20 20 20 20 20 67 65 74 20 7b 20 6c 6f 63 6b        get { lock
3040: 20 28 73 79 6e 63 52 6f 6f 74 29 20 7b 20 72 65   (syncRoot) { re
3050: 74 75 72 6e 20 74 72 61 63 65 50 72 69 6f 72 69  turn tracePriori
3060: 74 79 3b 20 7d 20 7d 0d 0a 20 20 20 20 20 20 20  ty; } }..       
3070: 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 6c           set { l
3080: 6f 63 6b 20 28 73 79 6e 63 52 6f 6f 74 29 20 7b  ock (syncRoot) {
3090: 20 74 72 61 63 65 50 72 69 6f 72 69 74 79 20 3d   tracePriority =
30a0: 20 76 61 6c 75 65 3b 20 7d 20 7d 0d 0a 20 20 20   value; } }..   
30b0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
30c0: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
30d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3100: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
3110: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
3120: 6c 69 63 20 73 74 61 74 69 63 20 73 74 72 69 6e  lic static strin
3130: 67 20 44 65 62 75 67 46 6f 72 6d 61 74 0d 0a 20  g DebugFormat.. 
3140: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
3150: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
3160: 74 20 7b 20 6c 6f 63 6b 20 28 73 79 6e 63 52 6f  t { lock (syncRo
3170: 6f 74 29 20 7b 20 72 65 74 75 72 6e 20 64 65 62  ot) { return deb
3180: 75 67 46 6f 72 6d 61 74 3b 20 7d 20 7d 0d 0a 20  ugFormat; } }.. 
3190: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
31a0: 65 74 20 7b 20 6c 6f 63 6b 20 28 73 79 6e 63 52  et { lock (syncR
31b0: 6f 6f 74 29 20 7b 20 64 65 62 75 67 46 6f 72 6d  oot) { debugForm
31c0: 61 74 20 3d 20 76 61 6c 75 65 3b 20 7d 20 7d 0d  at = value; } }.
31d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
31e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
31f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3200: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3210: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3220: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3230: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
3240: 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 73   public static s
3250: 74 72 69 6e 67 20 54 72 61 63 65 46 6f 72 6d 61  tring TraceForma
3260: 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  t..            {
3270: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3280: 20 20 67 65 74 20 7b 20 6c 6f 63 6b 20 28 73 79    get { lock (sy
3290: 6e 63 52 6f 6f 74 29 20 7b 20 72 65 74 75 72 6e  ncRoot) { return
32a0: 20 74 72 61 63 65 46 6f 72 6d 61 74 3b 20 7d 20   traceFormat; } 
32b0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
32c0: 20 20 20 73 65 74 20 7b 20 6c 6f 63 6b 20 28 73     set { lock (s
32d0: 79 6e 63 52 6f 6f 74 29 20 7b 20 74 72 61 63 65  yncRoot) { trace
32e0: 46 6f 72 6d 61 74 20 3d 20 76 61 6c 75 65 3b 20  Format = value; 
32f0: 7d 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  } }..           
3300: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
3310: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
3320: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
3330: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3340: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3350: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3360: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
3370: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65  .            #re
3380: 67 69 6f 6e 20 49 6e 74 65 72 61 63 74 69 76 65  gion Interactive
3390: 20 53 75 70 70 6f 72 74 20 4d 65 74 68 6f 64 73   Support Methods
33a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 4d  ..            [M
33b0: 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64  ethodImpl(Method
33c0: 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e  ImplOptions.NoIn
33d0: 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20  lining)]..      
33e0: 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61        public sta
33f0: 74 69 63 20 44 69 61 6c 6f 67 52 65 73 75 6c 74  tic DialogResult
3400: 20 53 68 6f 77 4d 65 73 73 61 67 65 28 0d 0a 20   ShowMessage(.. 
3410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
3420: 72 61 63 65 50 72 69 6f 72 69 74 79 20 74 72 61  racePriority tra
3430: 63 65 50 72 69 6f 72 69 74 79 2c 0d 0a 20 20 20  cePriority,..   
3440: 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
3450: 63 65 43 61 6c 6c 62 61 63 6b 20 64 65 62 75 67  ceCallback debug
3460: 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20  Callback,..     
3470: 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
3480: 43 61 6c 6c 62 61 63 6b 20 74 72 61 63 65 43 61  Callback traceCa
3490: 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20  llback,..       
34a0: 20 20 20 20 20 20 20 20 20 41 73 73 65 6d 62 6c           Assembl
34b0: 79 20 61 73 73 65 6d 62 6c 79 2c 0d 0a 20 20 20  y assembly,..   
34c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
34d0: 69 6e 67 20 6d 65 73 73 61 67 65 2c 0d 0a 20 20  ing message,..  
34e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
34f0: 72 69 6e 67 20 63 61 74 65 67 6f 72 79 2c 0d 0a  ring category,..
3500: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3510: 4d 65 73 73 61 67 65 42 6f 78 42 75 74 74 6f 6e  MessageBoxButton
3520: 73 20 62 75 74 74 6f 6e 73 2c 0d 0a 20 20 20 20  s buttons,..    
3530: 20 20 20 20 20 20 20 20 20 20 20 20 4d 65 73 73              Mess
3540: 61 67 65 42 6f 78 49 63 6f 6e 20 69 63 6f 6e 0d  ageBoxIcon icon.
3550: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3560: 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
3570: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
3580: 20 20 20 44 69 61 6c 6f 67 52 65 73 75 6c 74 20     DialogResult 
3590: 72 65 73 75 6c 74 20 3d 20 44 69 61 6c 6f 67 52  result = DialogR
35a0: 65 73 75 6c 74 2e 4f 4b 3b 0d 0a 0d 0a 20 20 20  esult.OK;....   
35b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 44 65 62               Deb
35c0: 75 67 41 6e 64 54 72 61 63 65 28 74 72 61 63 65  ugAndTrace(trace
35d0: 50 72 69 6f 72 69 74 79 2c 0d 0a 20 20 20 20 20  Priority,..     
35e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
35f0: 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72  ebugCallback, tr
3600: 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 6d 65 73  aceCallback, mes
3610: 73 61 67 65 2c 20 63 61 74 65 67 6f 72 79 29 3b  sage, category);
3620: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
3630: 20 20 20 20 69 66 20 28 53 79 73 74 65 6d 49 6e      if (SystemIn
3640: 66 6f 72 6d 61 74 69 6f 6e 2e 55 73 65 72 49 6e  formation.UserIn
3650: 74 65 72 61 63 74 69 76 65 29 0d 0a 20 20 20 20  teractive)..    
3660: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
3670: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3680: 20 20 20 73 74 72 69 6e 67 20 74 69 74 6c 65 20     string title 
3690: 3d 20 47 65 74 41 73 73 65 6d 62 6c 79 54 69 74  = GetAssemblyTit
36a0: 6c 65 28 61 73 73 65 6d 62 6c 79 29 3b 0d 0a 0d  le(assembly);...
36b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
36c0: 20 20 20 20 20 69 66 20 28 74 69 74 6c 65 20 3d       if (title =
36d0: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
36e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36f0: 20 74 69 74 6c 65 20 3d 20 41 70 70 6c 69 63 61   title = Applica
3700: 74 69 6f 6e 2e 50 72 6f 64 75 63 74 4e 61 6d 65  tion.ProductName
3710: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
3720: 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 20           result 
3730: 3d 20 4d 65 73 73 61 67 65 42 6f 78 2e 53 68 6f  = MessageBox.Sho
3740: 77 28 6d 65 73 73 61 67 65 2c 20 74 69 74 6c 65  w(message, title
3750: 2c 20 62 75 74 74 6f 6e 73 2c 20 69 63 6f 6e 29  , buttons, icon)
3760: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
3770: 20 20 20 20 20 20 20 20 20 44 65 62 75 67 41 6e           DebugAn
3780: 64 54 72 61 63 65 28 74 72 61 63 65 50 72 69 6f  dTrace(tracePrio
3790: 72 69 74 79 2c 0d 0a 20 20 20 20 20 20 20 20 20  rity,..         
37a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
37b0: 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72  ebugCallback, tr
37c0: 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
37d0: 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
37e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37f0: 20 20 20 20 20 22 55 73 65 72 20 63 68 6f 69 63       "User choic
3800: 65 20 6f 66 20 7b 30 7d 2e 22 2c 20 46 6f 72 44  e of {0}.", ForD
3810: 69 73 70 6c 61 79 28 72 65 73 75 6c 74 29 29 2c  isplay(result)),
3820: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3830: 20 20 20 20 20 20 20 20 20 20 63 61 74 65 67 6f            catego
3840: 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
3850: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
3860: 72 6e 20 72 65 73 75 6c 74 3b 0d 0a 20 20 20 20  rn result;..    
3870: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
3880: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3890: 20 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 74   DebugAndTrace(t
38a0: 72 61 63 65 50 72 69 6f 72 69 74 79 2c 0d 0a 20  racePriority,.. 
38b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38c0: 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b     debugCallback
38d0: 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c  , traceCallback,
38e0: 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
38f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3900: 20 20 20 20 20 22 44 65 66 61 75 6c 74 20 63 68       "Default ch
3910: 6f 69 63 65 20 6f 66 20 7b 30 7d 2e 22 2c 20 46  oice of {0}.", F
3920: 6f 72 44 69 73 70 6c 61 79 28 72 65 73 75 6c 74  orDisplay(result
3930: 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
3940: 20 20 20 20 20 20 20 20 20 63 61 74 65 67 6f 72           categor
3950: 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
3960: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 72 65         return re
3970: 73 75 6c 74 3b 0d 0a 20 20 20 20 20 20 20 20 20  sult;..         
3980: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
3990: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
39a0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
39b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
39c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
39d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
39e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
39f0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  ...            #
3a00: 72 65 67 69 6f 6e 20 54 72 61 63 69 6e 67 20 53  region Tracing S
3a10: 75 70 70 6f 72 74 20 4d 65 74 68 6f 64 73 0d 0a  upport Methods..
3a20: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
3a30: 69 63 20 73 74 61 74 69 63 20 76 6f 69 64 20 53  ic static void S
3a40: 65 74 75 70 44 65 62 75 67 4c 69 73 74 65 6e 65  etupDebugListene
3a50: 72 73 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20  rs()..          
3a60: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
3a70: 20 20 20 20 20 69 66 20 28 64 65 62 75 67 4c 69       if (debugLi
3a80: 73 74 65 6e 65 72 73 20 3d 3d 20 6e 75 6c 6c 29  steners == null)
3a90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3aa0: 20 20 20 20 20 20 64 65 62 75 67 4c 69 73 74 65        debugListe
3ab0: 6e 65 72 73 20 3d 20 6e 65 77 20 4c 69 73 74 3c  ners = new List<
3ac0: 54 72 61 63 65 4c 69 73 74 65 6e 65 72 3e 28 29  TraceListener>()
3ad0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
3ae0: 20 20 20 20 20 64 65 62 75 67 4c 69 73 74 65 6e       debugListen
3af0: 65 72 73 2e 41 64 64 28 6e 65 77 20 43 6f 6e 73  ers.Add(new Cons
3b00: 6f 6c 65 54 72 61 63 65 4c 69 73 74 65 6e 65 72  oleTraceListener
3b10: 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ());..          
3b20: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
3b30: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
3b40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3b50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3b60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3b70: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
3b80: 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61        public sta
3b90: 74 69 63 20 6c 6f 6e 67 20 4e 65 78 74 44 65 62  tic long NextDeb
3ba0: 75 67 49 64 28 29 0d 0a 20 20 20 20 20 20 20 20  ugId()..        
3bb0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
3bc0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 49 6e         return In
3bd0: 74 65 72 6c 6f 63 6b 65 64 2e 49 6e 63 72 65 6d  terlocked.Increm
3be0: 65 6e 74 28 72 65 66 20 6e 65 78 74 44 65 62 75  ent(ref nextDebu
3bf0: 67 49 64 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  gId);..         
3c00: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
3c10: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
3c20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3c30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3c40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3c50: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
3c60: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74         public st
3c70: 61 74 69 63 20 6c 6f 6e 67 20 4e 65 78 74 54 72  atic long NextTr
3c80: 61 63 65 49 64 28 29 0d 0a 20 20 20 20 20 20 20  aceId()..       
3c90: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
3ca0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 49          return I
3cb0: 6e 74 65 72 6c 6f 63 6b 65 64 2e 49 6e 63 72 65  nterlocked.Incre
3cc0: 6d 65 6e 74 28 72 65 66 20 6e 65 78 74 54 72 61  ment(ref nextTra
3cd0: 63 65 49 64 29 3b 0d 0a 20 20 20 20 20 20 20 20  ceId);..        
3ce0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
3cf0: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
3d00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3d10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3d20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3d30: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
3d40: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73          public s
3d50: 74 61 74 69 63 20 73 74 72 69 6e 67 20 54 69 6d  tatic string Tim
3d60: 65 53 74 61 6d 70 28 44 61 74 65 54 69 6d 65 20  eStamp(DateTime 
3d70: 64 61 74 65 54 69 6d 65 29 0d 0a 20 20 20 20 20  dateTime)..     
3d80: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
3d90: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
3da0: 20 64 61 74 65 54 69 6d 65 2e 54 6f 53 74 72 69   dateTime.ToStri
3db0: 6e 67 28 49 73 6f 38 36 30 31 44 61 74 65 54 69  ng(Iso8601DateTi
3dc0: 6d 65 4f 75 74 70 75 74 46 6f 72 6d 61 74 29 3b  meOutputFormat);
3dd0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
3de0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
3df0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3e00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3e10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3e20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3e30: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
3e40: 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65    [MethodImpl(Me
3e50: 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e  thodImplOptions.
3e60: 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20  NoInlining)]..  
3e70: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
3e80: 65 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20  e static string 
3e90: 47 65 74 4d 65 74 68 6f 64 4e 61 6d 65 28 0d 0a  GetMethodName(..
3ea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3eb0: 53 74 61 63 6b 54 72 61 63 65 20 73 74 61 63 6b  StackTrace stack
3ec0: 54 72 61 63 65 2c 0d 0a 20 20 20 20 20 20 20 20  Trace,..        
3ed0: 20 20 20 20 20 20 20 20 69 6e 74 20 6c 65 76 65          int leve
3ee0: 6c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  l..             
3ef0: 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20     )..          
3f00: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
3f10: 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20       try..      
3f20: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
3f30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3f40: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
3f50: 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
3f60: 3a 20 49 66 20 61 20 76 61 6c 69 64 20 73 74 61  : If a valid sta
3f70: 63 6b 20 74 72 61 63 65 20 77 61 73 20 6e 6f 74  ck trace was not
3f80: 20 73 75 70 70 6c 69 65 64 20 62 79 20 74 68 65   supplied by the
3f90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3fa0: 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 63        //       c
3fb0: 61 6c 6c 65 72 2c 20 63 72 65 61 74 65 20 6f 6e  aller, create on
3fc0: 65 20 6e 6f 77 20 62 61 73 65 64 20 6f 6e 20 74  e now based on t
3fd0: 68 65 20 63 75 72 72 65 6e 74 0d 0a 20 20 20 20  he current..    
3fe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3ff0: 2f 2f 20 20 20 20 20 20 20 65 78 65 63 75 74 69  //       executi
4000: 6f 6e 20 73 74 61 63 6b 2e 0d 0a 20 20 20 20 20  on stack...     
4010: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
4020: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
4030: 20 20 20 20 20 20 20 69 66 20 28 73 74 61 63 6b         if (stack
4040: 54 72 61 63 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  Trace == null)..
4050: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4060: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
4070: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
4080: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
4090: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
40a0: 54 45 3a 20 47 72 61 62 20 74 68 65 20 63 75 72  TE: Grab the cur
40b0: 72 65 6e 74 20 65 78 65 63 75 74 69 6f 6e 20 73  rent execution s
40c0: 74 61 63 6b 2e 0d 0a 20 20 20 20 20 20 20 20 20  tack...         
40d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
40e0: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
40f0: 20 20 20 20 20 20 20 20 20 20 20 73 74 61 63 6b             stack
4100: 54 72 61 63 65 20 3d 20 6e 65 77 20 53 74 61 63  Trace = new Stac
4110: 6b 54 72 61 63 65 28 29 3b 0d 0a 0d 0a 20 20 20  kTrace();....   
4120: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4130: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
4140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4150: 20 2f 2f 20 4e 4f 54 45 3a 20 41 6c 77 61 79 73   // NOTE: Always
4160: 20 73 6b 69 70 20 74 68 69 73 20 63 61 6c 6c 20   skip this call 
4170: 66 72 61 6d 65 20 77 68 65 6e 20 77 65 20 63 61  frame when we ca
4180: 70 74 75 72 65 0d 0a 20 20 20 20 20 20 20 20 20  pture..         
4190: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
41a0: 2f 20 20 20 20 20 20 20 74 68 65 20 73 74 61 63  /       the stac
41b0: 6b 20 74 72 61 63 65 2e 0d 0a 20 20 20 20 20 20  k trace...      
41c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
41d0: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
41e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6c 65                le
41f0: 76 65 6c 2b 2b 3b 0d 0a 20 20 20 20 20 20 20 20  vel++;..        
4200: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
4210: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4220: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
4230: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
4240: 4e 4f 54 45 3a 20 47 65 74 20 74 68 65 20 73 70  NOTE: Get the sp
4250: 65 63 69 66 69 65 64 20 73 74 61 63 6b 20 66 72  ecified stack fr
4260: 61 6d 65 20 28 61 6c 77 61 79 73 20 61 64 64 20  ame (always add 
4270: 6f 6e 65 20 74 6f 0d 0a 20 20 20 20 20 20 20 20  one to..        
4280: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
4290: 20 20 20 20 20 73 6b 69 70 20 74 68 69 73 20 6d       skip this m
42a0: 65 74 68 6f 64 29 2e 0d 0a 20 20 20 20 20 20 20  ethod)...       
42b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
42c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
42d0: 20 20 20 20 20 53 74 61 63 6b 46 72 61 6d 65 20       StackFrame 
42e0: 73 74 61 63 6b 46 72 61 6d 65 20 3d 20 73 74 61  stackFrame = sta
42f0: 63 6b 54 72 61 63 65 2e 47 65 74 46 72 61 6d 65  ckTrace.GetFrame
4300: 28 6c 65 76 65 6c 29 3b 0d 0a 0d 0a 20 20 20 20  (level);....    
4310: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4320: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
4330: 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
4340: 20 47 65 74 20 74 68 65 20 6d 65 74 68 6f 64 20   Get the method 
4350: 66 6f 72 20 74 68 65 20 73 74 61 63 6b 20 66 72  for the stack fr
4360: 61 6d 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ame...          
4370: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
4380: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4390: 20 20 4d 65 74 68 6f 64 42 61 73 65 20 6d 65 74    MethodBase met
43a0: 68 6f 64 42 61 73 65 20 3d 20 73 74 61 63 6b 46  hodBase = stackF
43b0: 72 61 6d 65 2e 47 65 74 4d 65 74 68 6f 64 28 29  rame.GetMethod()
43c0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
43d0: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
43e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
43f0: 20 2f 2f 20 4e 4f 54 45 3a 20 47 65 74 20 74 68   // NOTE: Get th
4400: 65 20 74 79 70 65 20 66 6f 72 20 74 68 65 20 6d  e type for the m
4410: 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20  ethod...        
4420: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
4430: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4440: 20 20 20 20 54 79 70 65 20 74 79 70 65 20 3d 20      Type type = 
4450: 6d 65 74 68 6f 64 42 61 73 65 2e 44 65 63 6c 61  methodBase.Decla
4460: 72 69 6e 67 54 79 70 65 3b 0d 0a 0d 0a 20 20 20  ringType;....   
4470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4480: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
4490: 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
44a0: 3a 20 47 65 74 20 74 68 65 20 6e 61 6d 65 20 6f  : Get the name o
44b0: 66 20 74 68 65 20 6d 65 74 68 6f 64 2e 0d 0a 20  f the method... 
44c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
44d0: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
44e0: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
44f0: 67 20 6e 61 6d 65 20 3d 20 6d 65 74 68 6f 64 42  g name = methodB
4500: 61 73 65 2e 4e 61 6d 65 3b 0d 0a 0d 0a 20 20 20  ase.Name;....   
4510: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4520: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
4530: 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
4540: 3a 20 52 65 74 75 72 6e 20 74 68 65 20 70 72 6f  : Return the pro
4550: 70 65 72 6c 79 20 66 6f 72 6d 61 74 74 65 64 20  perly formatted 
4560: 72 65 73 75 6c 74 2e 0d 0a 20 20 20 20 20 20 20  result...       
4570: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
4580: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4590: 20 20 20 20 20 72 65 74 75 72 6e 20 53 74 72 69       return Stri
45a0: 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
45b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
45c0: 20 20 20 20 22 7b 30 7d 7b 31 7d 7b 32 7d 22 2c      "{0}{1}{2}",
45d0: 20 74 79 70 65 2e 4e 61 6d 65 2c 20 54 79 70 65   type.Name, Type
45e0: 2e 44 65 6c 69 6d 69 74 65 72 2c 20 6e 61 6d 65  .Delimiter, name
45f0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
4600: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
4610: 20 20 20 20 20 20 20 63 61 74 63 68 0d 0a 20 20         catch..  
4620: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
4630: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4640: 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69       // do nothi
4650: 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ng...           
4660: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
4670: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
4680: 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20   null;..        
4690: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
46a0: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
46b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
46c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
46d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
46e0: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
46f0: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73          public s
4700: 74 61 74 69 63 20 76 6f 69 64 20 44 65 62 75 67  tatic void Debug
4710: 43 6f 72 65 28 0d 0a 20 20 20 20 20 20 20 20 20  Core(..         
4720: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6d 65         string me
4730: 73 73 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20  ssage,..        
4740: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 63          string c
4750: 61 74 65 67 6f 72 79 0d 0a 20 20 20 20 20 20 20  ategory..       
4760: 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
4770: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
4780: 20 20 20 20 20 20 20 20 20 20 20 6c 6f 63 6b 20             lock 
4790: 28 73 79 6e 63 52 6f 6f 74 29 0d 0a 20 20 20 20  (syncRoot)..    
47a0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
47b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
47c0: 20 20 20 69 66 20 28 64 65 62 75 67 4c 69 73 74     if (debugList
47d0: 65 6e 65 72 73 20 21 3d 20 6e 75 6c 6c 29 0d 0a  eners != null)..
47e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
47f0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
4800: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
4810: 6f 72 65 61 63 68 20 28 54 72 61 63 65 4c 69 73  oreach (TraceLis
4820: 74 65 6e 65 72 20 6c 69 73 74 65 6e 65 72 20 69  tener listener i
4830: 6e 20 64 65 62 75 67 4c 69 73 74 65 6e 65 72 73  n debugListeners
4840: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
4850: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
4860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4870: 20 20 20 20 20 20 20 20 20 20 6c 69 73 74 65 6e            listen
4880: 65 72 2e 57 72 69 74 65 4c 69 6e 65 28 6d 65 73  er.WriteLine(mes
4890: 73 61 67 65 2c 20 63 61 74 65 67 6f 72 79 29 3b  sage, category);
48a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
48b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6c 69                li
48c0: 73 74 65 6e 65 72 2e 46 6c 75 73 68 28 29 3b 0d  stener.Flush();.
48d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
48e0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
48f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4900: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
4910: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
4920: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
4930: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
4940: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4950: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4960: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4970: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
4980: 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61        public sta
4990: 74 69 63 20 76 6f 69 64 20 54 72 61 63 65 43 6f  tic void TraceCo
49a0: 72 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  re(..           
49b0: 20 20 20 20 20 73 74 72 69 6e 67 20 6d 65 73 73       string mess
49c0: 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  age,..          
49d0: 20 20 20 20 20 20 73 74 72 69 6e 67 20 63 61 74        string cat
49e0: 65 67 6f 72 79 0d 0a 20 20 20 20 20 20 20 20 20  egory..         
49f0: 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
4a00: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
4a10: 20 20 20 20 20 20 20 20 20 6c 6f 63 6b 20 28 73           lock (s
4a20: 79 6e 63 52 6f 6f 74 29 0d 0a 20 20 20 20 20 20  yncRoot)..      
4a30: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
4a40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4a50: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
4a60: 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
4a70: 3a 20 57 72 69 74 65 20 74 68 65 20 6d 65 73 73  : Write the mess
4a80: 61 67 65 20 74 6f 20 61 6c 6c 20 74 68 65 20 61  age to all the a
4a90: 63 74 69 76 65 20 74 72 61 63 65 0d 0a 20 20 20  ctive trace..   
4aa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4ab0: 20 2f 2f 20 20 20 20 20 20 20 6c 69 73 74 65 6e   //       listen
4ac0: 65 72 73 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ers...          
4ad0: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
4ae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4af0: 20 20 54 72 61 63 65 2e 57 72 69 74 65 4c 69 6e    Trace.WriteLin
4b00: 65 28 6d 65 73 73 61 67 65 2c 20 63 61 74 65 67  e(message, categ
4b10: 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ory);..         
4b20: 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
4b30: 2e 46 6c 75 73 68 28 29 3b 0d 0a 20 20 20 20 20  .Flush();..     
4b40: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
4b50: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
4b60: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
4b70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4b80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4b90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4ba0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
4bb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 4d  ..            [M
4bc0: 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64  ethodImpl(Method
4bd0: 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e  ImplOptions.NoIn
4be0: 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20  lining)]..      
4bf0: 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61        public sta
4c00: 74 69 63 20 73 74 72 69 6e 67 20 44 65 62 75 67  tic string Debug
4c10: 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20  AndTrace(..     
4c20: 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
4c30: 50 72 69 6f 72 69 74 79 20 74 72 61 63 65 50 72  Priority tracePr
4c40: 69 6f 72 69 74 79 2c 0d 0a 20 20 20 20 20 20 20  iority,..       
4c50: 20 20 20 20 20 20 20 20 20 54 72 61 63 65 43 61           TraceCa
4c60: 6c 6c 62 61 63 6b 20 64 65 62 75 67 43 61 6c 6c  llback debugCall
4c70: 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20  back,..         
4c80: 20 20 20 20 20 20 20 54 72 61 63 65 43 61 6c 6c         TraceCall
4c90: 62 61 63 6b 20 74 72 61 63 65 43 61 6c 6c 62 61  back traceCallba
4ca0: 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ck,..           
4cb0: 20 20 20 20 20 45 78 63 65 70 74 69 6f 6e 20 65       Exception e
4cc0: 78 63 65 70 74 69 6f 6e 2c 0d 0a 20 20 20 20 20  xception,..     
4cd0: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
4ce0: 67 20 63 61 74 65 67 6f 72 79 0d 0a 20 20 20 20  g category..    
4cf0: 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
4d00: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
4d10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
4d20: 20 28 65 78 63 65 70 74 69 6f 6e 20 21 3d 20 6e   (exception != n
4d30: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
4d40: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
4d50: 20 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 74   DebugAndTrace(t
4d60: 72 61 63 65 50 72 69 6f 72 69 74 79 2c 20 64 65  racePriority, de
4d70: 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20  bugCallback,..  
4d80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4d90: 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
4da0: 61 63 6b 2c 20 6e 65 77 20 53 74 61 63 6b 54 72  ack, new StackTr
4db0: 61 63 65 28 65 78 63 65 70 74 69 6f 6e 2c 20 74  ace(exception, t
4dc0: 72 75 65 29 2c 20 30 2c 0d 0a 20 20 20 20 20 20  rue), 0,..      
4dd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4de0: 20 20 65 78 63 65 70 74 69 6f 6e 2e 54 6f 53 74    exception.ToSt
4df0: 72 69 6e 67 28 29 2c 20 63 61 74 65 67 6f 72 79  ring(), category
4e00: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
4e10: 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c        return nul
4e20: 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l;..            
4e30: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
4e40: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
4e50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4e60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4e70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4e80: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
4e90: 20 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28      [MethodImpl(
4ea0: 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e  MethodImplOption
4eb0: 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a  s.NoInlining)]..
4ec0: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
4ed0: 69 63 20 73 74 61 74 69 63 20 73 74 72 69 6e 67  ic static string
4ee0: 20 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d   DebugAndTrace(.
4ef0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4f00: 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 20 74   TracePriority t
4f10: 72 61 63 65 50 72 69 6f 72 69 74 79 2c 0d 0a 20  racePriority,.. 
4f20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
4f30: 72 61 63 65 43 61 6c 6c 62 61 63 6b 20 64 65 62  raceCallback deb
4f40: 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20  ugCallback,..   
4f50: 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
4f60: 63 65 43 61 6c 6c 62 61 63 6b 20 74 72 61 63 65  ceCallback trace
4f70: 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20  Callback,..     
4f80: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
4f90: 67 20 6d 65 73 73 61 67 65 2c 0d 0a 20 20 20 20  g message,..    
4fa0: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
4fb0: 6e 67 20 63 61 74 65 67 6f 72 79 0d 0a 20 20 20  ng category..   
4fc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
4fd0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
4fe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
4ff0: 65 74 75 72 6e 20 44 65 62 75 67 41 6e 64 54 72  eturn DebugAndTr
5000: 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ace(..          
5010: 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 50            traceP
5020: 72 69 6f 72 69 74 79 2c 20 64 65 62 75 67 43 61  riority, debugCa
5030: 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c  llback, traceCal
5040: 6c 62 61 63 6b 2c 20 6e 75 6c 6c 2c 20 31 2c 0d  lback, null, 1,.
5050: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5060: 20 20 20 20 20 6d 65 73 73 61 67 65 2c 20 63 61       message, ca
5070: 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20  tegory);..      
5080: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
5090: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
50a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
50b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
50c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
50d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
50e0: 20 20 20 20 20 20 20 20 20 20 5b 4d 65 74 68 6f            [Metho
50f0: 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c  dImpl(MethodImpl
5100: 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69  Options.NoInlini
5110: 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20 20 20  ng)]..          
5120: 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
5130: 20 73 74 72 69 6e 67 20 44 65 62 75 67 41 6e 64   string DebugAnd
5140: 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20  Trace(..        
5150: 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69          TracePri
5160: 6f 72 69 74 79 20 74 72 61 63 65 50 72 69 6f 72  ority tracePrior
5170: 69 74 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ity,..          
5180: 20 20 20 20 20 20 54 72 61 63 65 43 61 6c 6c 62        TraceCallb
5190: 61 63 6b 20 64 65 62 75 67 43 61 6c 6c 62 61 63  ack debugCallbac
51a0: 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k,..            
51b0: 20 20 20 20 54 72 61 63 65 43 61 6c 6c 62 61 63      TraceCallbac
51c0: 6b 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c  k traceCallback,
51d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
51e0: 20 20 53 74 61 63 6b 54 72 61 63 65 20 73 74 61    StackTrace sta
51f0: 63 6b 54 72 61 63 65 2c 0d 0a 20 20 20 20 20 20  ckTrace,..      
5200: 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 6c 65            int le
5210: 76 65 6c 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  vel,..          
5220: 20 20 20 20 20 20 73 74 72 69 6e 67 20 6d 65 73        string mes
5230: 73 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  sage,..         
5240: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 63 61         string ca
5250: 74 65 67 6f 72 79 0d 0a 20 20 20 20 20 20 20 20  tegory..        
5260: 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
5270: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
5280: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
5290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
52a0: 20 4e 4f 54 45 3a 20 41 6c 77 61 79 73 20 73 6b   NOTE: Always sk
52b0: 69 70 20 74 68 69 73 20 63 61 6c 6c 20 66 72 61  ip this call fra
52c0: 6d 65 20 69 66 20 74 68 65 20 73 74 61 63 6b 20  me if the stack 
52d0: 74 72 61 63 65 20 69 73 0d 0a 20 20 20 20 20 20  trace is..      
52e0: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
52f0: 20 20 20 67 6f 69 6e 67 20 74 6f 20 62 65 20 63     going to be c
5300: 61 70 74 75 72 65 64 20 62 79 20 47 65 74 4d 65  aptured by GetMe
5310: 74 68 6f 64 4e 61 6d 65 2e 0d 0a 20 20 20 20 20  thodName...     
5320: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
5330: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
5340: 66 20 28 73 74 61 63 6b 54 72 61 63 65 20 3d 3d  f (stackTrace ==
5350: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
5360: 20 20 20 20 20 20 20 20 20 20 20 20 6c 65 76 65              leve
5370: 6c 2b 2b 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  l++;....        
5380: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
5390: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
53a0: 4f 54 45 3a 20 46 6f 72 6d 61 74 20 74 68 65 20  OTE: Format the 
53b0: 6d 65 73 73 61 67 65 20 66 6f 72 20 64 69 73 70  message for disp
53c0: 6c 61 79 20 28 6f 6e 63 65 29 2e 0d 0a 20 20 20  lay (once)...   
53d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
53e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
53f0: 20 73 74 72 69 6e 67 20 66 6f 72 6d 61 74 74 65   string formatte
5400: 64 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  d = String.Forma
5410: 74 28 22 7b 30 7d 3a 20 7b 31 7d 22 2c 0d 0a 20  t("{0}: {1}",.. 
5420: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5430: 20 20 20 47 65 74 4d 65 74 68 6f 64 4e 61 6d 65     GetMethodName
5440: 28 73 74 61 63 6b 54 72 61 63 65 2c 20 6c 65 76  (stackTrace, lev
5450: 65 6c 29 2c 20 6d 65 73 73 61 67 65 29 3b 0d 0a  el), message);..
5460: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5470: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
5480: 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 49        // NOTE: I
5490: 66 20 74 68 65 20 64 65 62 75 67 20 63 61 6c 6c  f the debug call
54a0: 62 61 63 6b 20 69 73 20 69 6e 76 61 6c 69 64 20  back is invalid 
54b0: 6f 72 20 74 68 65 20 74 72 61 63 65 20 70 72 69  or the trace pri
54c0: 6f 72 69 74 79 0d 0a 20 20 20 20 20 20 20 20 20  ority..         
54d0: 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
54e0: 6f 66 20 74 68 69 73 20 6d 65 73 73 61 67 65 20  of this message 
54f0: 69 73 20 6c 65 73 73 20 74 68 61 6e 20 77 68 61  is less than wha
5500: 74 20 77 65 20 63 75 72 72 65 6e 74 6c 79 20 77  t we currently w
5510: 61 6e 74 20 74 6f 0d 0a 20 20 20 20 20 20 20 20  ant to..        
5520: 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
5530: 20 64 65 62 75 67 2c 20 73 6b 69 70 20 69 74 2e   debug, skip it.
5540: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5550: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
5560: 20 20 20 20 20 20 69 66 20 28 28 64 65 62 75 67        if ((debug
5570: 43 61 6c 6c 62 61 63 6b 20 21 3d 20 6e 75 6c 6c  Callback != null
5580: 29 20 26 26 0d 0a 20 20 20 20 20 20 20 20 20 20  ) &&..          
5590: 20 20 20 20 20 20 20 20 20 20 28 74 72 61 63 65            (trace
55a0: 50 72 69 6f 72 69 74 79 20 3e 3d 20 44 65 62 75  Priority >= Debu
55b0: 67 50 72 69 6f 72 69 74 79 29 29 0d 0a 20 20 20  gPriority))..   
55c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
55d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
55e0: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
55f0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
5600: 4f 54 45 3a 20 49 6e 76 6f 6b 65 20 74 68 65 20  OTE: Invoke the 
5610: 64 65 62 75 67 20 63 61 6c 6c 62 61 63 6b 20 77  debug callback w
5620: 69 74 68 20 74 68 65 20 66 6f 72 6d 61 74 74 65  ith the formatte
5630: 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  d..             
5640: 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
5650: 6d 65 73 73 61 67 65 20 61 6e 64 20 74 68 65 20  message and the 
5660: 63 61 74 65 67 6f 72 79 20 73 70 65 63 69 66 69  category specifi
5670: 65 64 20 62 79 20 74 68 65 0d 0a 20 20 20 20 20  ed by the..     
5680: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
5690: 2f 20 20 20 20 20 20 20 63 61 6c 6c 65 72 2e 0d  /       caller..
56a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
56b0: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
56c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62               deb
56d0: 75 67 43 61 6c 6c 62 61 63 6b 28 66 6f 72 6d 61  ugCallback(forma
56e0: 74 74 65 64 2c 20 63 61 74 65 67 6f 72 79 29 3b  tted, category);
56f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5700: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
5710: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
5720: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
5730: 54 45 3a 20 49 66 20 74 68 65 20 74 72 61 63 65  TE: If the trace
5740: 20 63 61 6c 6c 62 61 63 6b 20 69 73 20 69 6e 76   callback is inv
5750: 61 6c 69 64 20 6f 72 20 74 68 65 20 74 72 61 63  alid or the trac
5760: 65 20 70 72 69 6f 72 69 74 79 0d 0a 20 20 20 20  e priority..    
5770: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
5780: 20 20 20 20 20 6f 66 20 74 68 69 73 20 6d 65 73       of this mes
5790: 73 61 67 65 20 69 73 20 6c 65 73 73 20 74 68 61  sage is less tha
57a0: 6e 20 77 68 61 74 20 77 65 20 63 75 72 72 65 6e  n what we curren
57b0: 74 6c 79 20 77 61 6e 74 20 74 6f 0d 0a 20 20 20  tly want to..   
57c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
57d0: 20 20 20 20 20 20 74 72 61 63 65 2c 20 73 6b 69        trace, ski
57e0: 70 20 69 74 2e 0d 0a 20 20 20 20 20 20 20 20 20  p it...         
57f0: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
5800: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28             if ((
5810: 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 20 21 3d  traceCallback !=
5820: 20 6e 75 6c 6c 29 20 26 26 0d 0a 20 20 20 20 20   null) &&..     
5830: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28                 (
5840: 74 72 61 63 65 50 72 69 6f 72 69 74 79 20 3e 3d  tracePriority >=
5850: 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 29 29   TracePriority))
5860: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5870: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
5880: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
5890: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
58a0: 20 2f 2f 20 4e 4f 54 45 3a 20 49 6e 76 6f 6b 65   // NOTE: Invoke
58b0: 20 74 68 65 20 74 72 61 63 65 20 63 61 6c 6c 62   the trace callb
58c0: 61 63 6b 20 77 69 74 68 20 74 68 65 20 66 6f 72  ack with the for
58d0: 6d 61 74 74 65 64 0d 0a 20 20 20 20 20 20 20 20  matted..        
58e0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
58f0: 20 20 20 20 20 6d 65 73 73 61 67 65 20 61 6e 64       message and
5900: 20 74 68 65 20 63 61 74 65 67 6f 72 79 20 73 70   the category sp
5910: 65 63 69 66 69 65 64 20 62 79 20 74 68 65 0d 0a  ecified by the..
5920: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5930: 20 20 20 20 2f 2f 20 20 20 20 20 20 20 63 61 6c      //       cal
5940: 6c 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ler...          
5950: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
5960: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5970: 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28    traceCallback(
5980: 66 6f 72 6d 61 74 74 65 64 2c 20 63 61 74 65 67  formatted, categ
5990: 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ory);..         
59a0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
59b0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
59c0: 72 6e 20 6d 65 73 73 61 67 65 3b 0d 0a 20 20 20  rn message;..   
59d0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
59e0: 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
59f0: 6f 6e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  on..        }.. 
5a00: 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
5a10: 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  n....        ///
5a20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5a30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5a40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5a50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5a60: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
5a70: 23 72 65 67 69 6f 6e 20 4d 6f 63 6b 52 65 67 69  #region MockRegi
5a80: 73 74 72 79 20 43 6c 61 73 73 0d 0a 20 20 20 20  stry Class..    
5a90: 20 20 20 20 70 72 69 76 61 74 65 20 73 65 61 6c      private seal
5aa0: 65 64 20 63 6c 61 73 73 20 4d 6f 63 6b 52 65 67  ed class MockReg
5ab0: 69 73 74 72 79 20 3a 20 49 44 69 73 70 6f 73 61  istry : IDisposa
5ac0: 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  ble..        {..
5ad0: 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67              #reg
5ae0: 69 6f 6e 20 50 75 62 6c 69 63 20 43 6f 6e 73 74  ion Public Const
5af0: 72 75 63 74 6f 72 73 0d 0a 20 20 20 20 20 20 20  ructors..       
5b00: 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b       public Mock
5b10: 52 65 67 69 73 74 72 79 28 29 0d 0a 20 20 20 20  Registry()..    
5b20: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
5b30: 20 20 20 20 20 20 20 20 20 20 20 77 68 61 74 49             whatI
5b40: 66 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  f = true;..     
5b50: 20 20 20 20 20 20 20 20 20 20 20 72 65 61 64 4f             readO
5b60: 6e 6c 79 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20  nly = true;..   
5b70: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 61 66               saf
5b80: 65 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  e = true;..     
5b90: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
5ba0: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
5bb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5bc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5bd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5be0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
5bf0: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
5c00: 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 28 0d  c MockRegistry(.
5c10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5c20: 20 62 6f 6f 6c 20 77 68 61 74 49 66 0d 0a 20 20   bool whatIf..  
5c30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d                ).
5c40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5c50: 20 3a 20 74 68 69 73 28 29 0d 0a 20 20 20 20 20   : this()..     
5c60: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
5c70: 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 77            this.w
5c80: 68 61 74 49 66 20 3d 20 77 68 61 74 49 66 3b 0d  hatIf = whatIf;.
5c90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
5ca0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
5cb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5cc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5cd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5ce0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5cf0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
5d00: 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69   public MockRegi
5d10: 73 74 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20  stry(..         
5d20: 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74         bool what
5d30: 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If,..           
5d40: 20 20 20 20 20 62 6f 6f 6c 20 72 65 61 64 4f 6e       bool readOn
5d50: 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ly..            
5d60: 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20      )..         
5d70: 20 20 20 20 20 20 20 3a 20 74 68 69 73 28 77 68         : this(wh
5d80: 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20  atIf)..         
5d90: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
5da0: 20 20 20 20 20 20 74 68 69 73 2e 72 65 61 64 4f        this.readO
5db0: 6e 6c 79 20 3d 20 72 65 61 64 4f 6e 6c 79 3b 0d  nly = readOnly;.
5dc0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
5dd0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
5de0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5df0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5e00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5e10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5e20: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
5e30: 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69   public MockRegi
5e40: 73 74 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20  stry(..         
5e50: 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74         bool what
5e60: 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If,..           
5e70: 20 20 20 20 20 62 6f 6f 6c 20 72 65 61 64 4f 6e       bool readOn
5e80: 6c 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ly,..           
5e90: 20 20 20 20 20 62 6f 6f 6c 20 73 61 66 65 0d 0a       bool safe..
5ea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5eb0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
5ec0: 20 20 20 3a 20 74 68 69 73 28 77 68 61 74 49 66     : this(whatIf
5ed0: 2c 20 72 65 61 64 4f 6e 6c 79 29 0d 0a 20 20 20  , readOnly)..   
5ee0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
5ef0: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
5f00: 2e 73 61 66 65 20 3d 20 73 61 66 65 3b 0d 0a 20  .safe = safe;.. 
5f10: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
5f20: 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65            #endre
5f30: 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
5f40: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
5f50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5f60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5f70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5f80: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
5f90: 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50         #region P
5fa0: 75 62 6c 69 63 20 50 72 6f 70 65 72 74 69 65 73  ublic Properties
5fb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
5fc0: 69 76 61 74 65 20 62 6f 6f 6c 20 77 68 61 74 49  ivate bool whatI
5fd0: 66 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f;..            
5fe0: 70 75 62 6c 69 63 20 62 6f 6f 6c 20 57 68 61 74  public bool What
5ff0: 49 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  If..            
6000: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
6010: 20 20 20 67 65 74 20 7b 20 43 68 65 63 6b 44 69     get { CheckDi
6020: 73 70 6f 73 65 64 28 29 3b 20 72 65 74 75 72 6e  sposed(); return
6030: 20 77 68 61 74 49 66 3b 20 7d 0d 0a 20 20 20 20   whatIf; }..    
6040: 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
6050: 7b 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28  { CheckDisposed(
6060: 29 3b 20 77 68 61 74 49 66 20 3d 20 76 61 6c 75  ); whatIf = valu
6070: 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
6080: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
6090: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
60a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
60b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
60c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
60d0: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
60e0: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f        private bo
60f0: 6f 6c 20 72 65 61 64 4f 6e 6c 79 3b 0d 0a 20 20  ol readOnly;..  
6100: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
6110: 20 62 6f 6f 6c 20 52 65 61 64 4f 6e 6c 79 0d 0a   bool ReadOnly..
6120: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
6130: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
6140: 65 74 20 7b 20 43 68 65 63 6b 44 69 73 70 6f 73  et { CheckDispos
6150: 65 64 28 29 3b 20 72 65 74 75 72 6e 20 72 65 61  ed(); return rea
6160: 64 4f 6e 6c 79 3b 20 7d 0d 0a 20 20 20 20 20 20  dOnly; }..      
6170: 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20            set { 
6180: 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b  CheckDisposed();
6190: 20 72 65 61 64 4f 6e 6c 79 20 3d 20 76 61 6c 75   readOnly = valu
61a0: 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
61b0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
61c0: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
61d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
61e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
61f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6200: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
6210: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f        private bo
6220: 6f 6c 20 73 61 66 65 3b 0d 0a 20 20 20 20 20 20  ol safe;..      
6230: 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f        public boo
6240: 6c 20 53 61 66 65 0d 0a 20 20 20 20 20 20 20 20  l Safe..        
6250: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
6260: 20 20 20 20 20 20 20 67 65 74 20 7b 20 43 68 65         get { Che
6270: 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 20 72 65  ckDisposed(); re
6280: 74 75 72 6e 20 73 61 66 65 3b 20 7d 0d 0a 20 20  turn safe; }..  
6290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
62a0: 74 20 7b 20 43 68 65 63 6b 44 69 73 70 6f 73 65  t { CheckDispose
62b0: 64 28 29 3b 20 73 61 66 65 20 3d 20 76 61 6c 75  d(); safe = valu
62c0: 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
62d0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
62e0: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
62f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6300: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6310: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6320: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
6330: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 4d 6f        private Mo
6340: 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 63 6c  ckRegistryKey cl
6350: 61 73 73 65 73 52 6f 6f 74 3b 0d 0a 20 20 20 20  assesRoot;..    
6360: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d          public M
6370: 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 43  ockRegistryKey C
6380: 6c 61 73 73 65 73 52 6f 6f 74 0d 0a 20 20 20 20  lassesRoot..    
6390: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
63a0: 20 20 20 20 20 20 20 20 20 20 20 67 65 74 0d 0a             get..
63b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
63c0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
63d0: 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70         CheckDisp
63e0: 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  osed();....     
63f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
6400: 66 20 28 63 6c 61 73 73 65 73 52 6f 6f 74 20 3d  f (classesRoot =
6410: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
6420: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6430: 20 63 6c 61 73 73 65 73 52 6f 6f 74 20 3d 20 6e   classesRoot = n
6440: 65 77 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  ew MockRegistryK
6450: 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey(..           
6460: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6470: 20 52 65 67 69 73 74 72 79 2e 43 6c 61 73 73 65   Registry.Classe
6480: 73 52 6f 6f 74 2c 20 77 68 61 74 49 66 2c 20 72  sRoot, whatIf, r
6490: 65 61 64 4f 6e 6c 79 2c 20 73 61 66 65 29 3b 0d  eadOnly, safe);.
64a0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
64b0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 63 6c         return cl
64c0: 61 73 73 65 73 52 6f 6f 74 3b 0d 0a 20 20 20 20  assesRoot;..    
64d0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
64e0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
64f0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
6500: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6510: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6520: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6530: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
6540: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
6550: 72 69 76 61 74 65 20 4d 6f 63 6b 52 65 67 69 73  rivate MockRegis
6560: 74 72 79 4b 65 79 20 63 75 72 72 65 6e 74 43 6f  tryKey currentCo
6570: 6e 66 69 67 3b 0d 0a 20 20 20 20 20 20 20 20 20  nfig;..         
6580: 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65     public MockRe
6590: 67 69 73 74 72 79 4b 65 79 20 43 75 72 72 65 6e  gistryKey Curren
65a0: 74 43 6f 6e 66 69 67 0d 0a 20 20 20 20 20 20 20  tConfig..       
65b0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
65c0: 20 20 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20          get..   
65d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
65e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
65f0: 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65      CheckDispose
6600: 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  d();....        
6610: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
6620: 63 75 72 72 65 6e 74 43 6f 6e 66 69 67 20 3d 3d  currentConfig ==
6630: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
6640: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6650: 63 75 72 72 65 6e 74 43 6f 6e 66 69 67 20 3d 20  currentConfig = 
6660: 6e 65 77 20 4d 6f 63 6b 52 65 67 69 73 74 72 79  new MockRegistry
6670: 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Key(..          
6680: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6690: 20 20 52 65 67 69 73 74 72 79 2e 43 75 72 72 65    Registry.Curre
66a0: 6e 74 43 6f 6e 66 69 67 2c 20 77 68 61 74 49 66  ntConfig, whatIf
66b0: 2c 20 72 65 61 64 4f 6e 6c 79 2c 20 73 61 66 65  , readOnly, safe
66c0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
66d0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
66e0: 20 63 75 72 72 65 6e 74 43 6f 6e 66 69 67 3b 0d   currentConfig;.
66f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6700: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
6710: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
6720: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
6730: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6740: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6750: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6760: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
6770: 20 20 20 20 70 72 69 76 61 74 65 20 4d 6f 63 6b      private Mock
6780: 52 65 67 69 73 74 72 79 4b 65 79 20 63 75 72 72  RegistryKey curr
6790: 65 6e 74 55 73 65 72 3b 0d 0a 20 20 20 20 20 20  entUser;..      
67a0: 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63        public Moc
67b0: 6b 52 65 67 69 73 74 72 79 4b 65 79 20 43 75 72  kRegistryKey Cur
67c0: 72 65 6e 74 55 73 65 72 0d 0a 20 20 20 20 20 20  rentUser..      
67d0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
67e0: 20 20 20 20 20 20 20 20 20 67 65 74 0d 0a 20 20           get..  
67f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
6800: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6810: 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73       CheckDispos
6820: 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ed();....       
6830: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
6840: 28 63 75 72 72 65 6e 74 55 73 65 72 20 3d 3d 20  (currentUser == 
6850: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
6860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
6870: 75 72 72 65 6e 74 55 73 65 72 20 3d 20 6e 65 77  urrentUser = new
6880: 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
6890: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
68a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52                 R
68b0: 65 67 69 73 74 72 79 2e 43 75 72 72 65 6e 74 55  egistry.CurrentU
68c0: 73 65 72 2c 20 77 68 61 74 49 66 2c 20 72 65 61  ser, whatIf, rea
68d0: 64 4f 6e 6c 79 2c 20 73 61 66 65 29 3b 0d 0a 0d  dOnly, safe);...
68e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
68f0: 20 20 20 20 20 72 65 74 75 72 6e 20 63 75 72 72       return curr
6900: 65 6e 74 55 73 65 72 3b 0d 0a 20 20 20 20 20 20  entUser;..      
6910: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
6920: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
6930: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
6940: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6950: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6960: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6970: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
6980: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
6990: 76 61 74 65 20 4d 6f 63 6b 52 65 67 69 73 74 72  vate MockRegistr
69a0: 79 4b 65 79 20 64 79 6e 44 61 74 61 3b 0d 0a 20  yKey dynData;.. 
69b0: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
69c0: 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65  c MockRegistryKe
69d0: 79 20 44 79 6e 44 61 74 61 0d 0a 20 20 20 20 20  y DynData..     
69e0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
69f0: 20 20 20 20 20 20 20 20 20 20 67 65 74 0d 0a 20            get.. 
6a00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
6a10: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
6a20: 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f        CheckDispo
6a30: 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  sed();....      
6a40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
6a50: 20 28 64 79 6e 44 61 74 61 20 3d 3d 20 6e 75 6c   (dynData == nul
6a60: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
6a70: 20 20 20 20 20 20 20 20 20 20 20 20 64 79 6e 44              dynD
6a80: 61 74 61 20 3d 20 6e 65 77 20 4d 6f 63 6b 52 65  ata = new MockRe
6a90: 67 69 73 74 72 79 4b 65 79 28 0d 0a 20 20 20 20  gistryKey(..    
6aa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6ab0: 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79          Registry
6ac0: 2e 44 79 6e 44 61 74 61 2c 20 77 68 61 74 49 66  .DynData, whatIf
6ad0: 2c 20 72 65 61 64 4f 6e 6c 79 2c 20 73 61 66 65  , readOnly, safe
6ae0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
6af0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
6b00: 20 64 79 6e 44 61 74 61 3b 0d 0a 20 20 20 20 20   dynData;..     
6b10: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
6b20: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
6b30: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
6b40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6b50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6b60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6b70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
6b80: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
6b90: 69 76 61 74 65 20 4d 6f 63 6b 52 65 67 69 73 74  ivate MockRegist
6ba0: 72 79 4b 65 79 20 6c 6f 63 61 6c 4d 61 63 68 69  ryKey localMachi
6bb0: 6e 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ne;..           
6bc0: 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69   public MockRegi
6bd0: 73 74 72 79 4b 65 79 20 4c 6f 63 61 6c 4d 61 63  stryKey LocalMac
6be0: 68 69 6e 65 0d 0a 20 20 20 20 20 20 20 20 20 20  hine..          
6bf0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
6c00: 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20       get..      
6c10: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
6c20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6c30: 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
6c40: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
6c50: 20 20 20 20 20 20 20 20 20 69 66 20 28 6c 6f 63           if (loc
6c60: 61 6c 4d 61 63 68 69 6e 65 20 3d 3d 20 6e 75 6c  alMachine == nul
6c70: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
6c80: 20 20 20 20 20 20 20 20 20 20 20 20 6c 6f 63 61              loca
6c90: 6c 4d 61 63 68 69 6e 65 20 3d 20 6e 65 77 20 4d  lMachine = new M
6ca0: 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28 0d  ockRegistryKey(.
6cb0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6cc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67               Reg
6cd0: 69 73 74 72 79 2e 4c 6f 63 61 6c 4d 61 63 68 69  istry.LocalMachi
6ce0: 6e 65 2c 20 77 68 61 74 49 66 2c 20 72 65 61 64  ne, whatIf, read
6cf0: 4f 6e 6c 79 2c 20 73 61 66 65 29 3b 0d 0a 0d 0a  Only, safe);....
6d00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6d10: 20 20 20 20 72 65 74 75 72 6e 20 6c 6f 63 61 6c      return local
6d20: 4d 61 63 68 69 6e 65 3b 0d 0a 20 20 20 20 20 20  Machine;..      
6d30: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
6d40: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
6d50: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
6d60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6d70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6d80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6d90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
6da0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
6db0: 76 61 74 65 20 4d 6f 63 6b 52 65 67 69 73 74 72  vate MockRegistr
6dc0: 79 4b 65 79 20 70 65 72 66 6f 72 6d 61 6e 63 65  yKey performance
6dd0: 44 61 74 61 3b 0d 0a 20 20 20 20 20 20 20 20 20  Data;..         
6de0: 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65     public MockRe
6df0: 67 69 73 74 72 79 4b 65 79 20 50 65 72 66 6f 72  gistryKey Perfor
6e00: 6d 61 6e 63 65 44 61 74 61 0d 0a 20 20 20 20 20  manceData..     
6e10: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
6e20: 20 20 20 20 20 20 20 20 20 20 67 65 74 0d 0a 20            get.. 
6e30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
6e40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
6e50: 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f        CheckDispo
6e60: 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  sed();....      
6e70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
6e80: 20 28 70 65 72 66 6f 72 6d 61 6e 63 65 44 61 74   (performanceDat
6e90: 61 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  a == null)..    
6ea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6eb0: 20 20 20 20 70 65 72 66 6f 72 6d 61 6e 63 65 44      performanceD
6ec0: 61 74 61 20 3d 20 6e 65 77 20 4d 6f 63 6b 52 65  ata = new MockRe
6ed0: 67 69 73 74 72 79 4b 65 79 28 0d 0a 20 20 20 20  gistryKey(..    
6ee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6ef0: 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79          Registry
6f00: 2e 50 65 72 66 6f 72 6d 61 6e 63 65 44 61 74 61  .PerformanceData
6f10: 2c 20 77 68 61 74 49 66 2c 20 72 65 61 64 4f 6e  , whatIf, readOn
6f20: 6c 79 2c 20 73 61 66 65 29 3b 0d 0a 0d 0a 20 20  ly, safe);....  
6f30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6f40: 20 20 72 65 74 75 72 6e 20 70 65 72 66 6f 72 6d    return perform
6f50: 61 6e 63 65 44 61 74 61 3b 0d 0a 20 20 20 20 20  anceData;..     
6f60: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
6f70: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
6f80: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
6f90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6fa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6fb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6fc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
6fd0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
6fe0: 69 76 61 74 65 20 4d 6f 63 6b 52 65 67 69 73 74  ivate MockRegist
6ff0: 72 79 4b 65 79 20 75 73 65 72 73 3b 0d 0a 20 20  ryKey users;..  
7000: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
7010: 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
7020: 20 55 73 65 72 73 0d 0a 20 20 20 20 20 20 20 20   Users..        
7030: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
7040: 20 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20         get..    
7050: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
7060: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7070: 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64     CheckDisposed
7080: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
7090: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 75             if (u
70a0: 73 65 72 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  sers == null).. 
70b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
70c0: 20 20 20 20 20 20 20 75 73 65 72 73 20 3d 20 6e         users = n
70d0: 65 77 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  ew MockRegistryK
70e0: 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey(..           
70f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7100: 20 52 65 67 69 73 74 72 79 2e 55 73 65 72 73 2c   Registry.Users,
7110: 20 77 68 61 74 49 66 2c 20 72 65 61 64 4f 6e 6c   whatIf, readOnl
7120: 79 2c 20 73 61 66 65 29 3b 0d 0a 0d 0a 20 20 20  y, safe);....   
7130: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7140: 20 72 65 74 75 72 6e 20 75 73 65 72 73 3b 0d 0a   return users;..
7150: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7160: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
7170: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65  ..            #e
7180: 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
7190: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
71a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
71b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
71c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
71d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
71e0: 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69             #regi
71f0: 6f 6e 20 50 75 62 6c 69 63 20 22 52 65 67 69 73  on Public "Regis
7200: 74 72 79 22 20 4d 65 74 68 6f 64 73 0d 0a 20 20  try" Methods..  
7210: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
7220: 20 6f 62 6a 65 63 74 20 47 65 74 56 61 6c 75 65   object GetValue
7230: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
7240: 20 20 20 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d     string keyNam
7250: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
7260: 20 20 20 20 73 74 72 69 6e 67 20 76 61 6c 75 65      string value
7270: 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
7280: 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 64 65         object de
7290: 66 61 75 6c 74 56 61 6c 75 65 0d 0a 20 20 20 20  faultValue..    
72a0: 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
72b0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
72c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43 68                Ch
72d0: 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a  eckDisposed();..
72e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
72f0: 20 20 72 65 74 75 72 6e 20 52 65 67 69 73 74 72    return Registr
7300: 79 2e 47 65 74 56 61 6c 75 65 28 6b 65 79 4e 61  y.GetValue(keyNa
7310: 6d 65 2c 20 76 61 6c 75 65 4e 61 6d 65 2c 20 64  me, valueName, d
7320: 65 66 61 75 6c 74 56 61 6c 75 65 29 3b 0d 0a 20  efaultValue);.. 
7330: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
7340: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
7350: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7360: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7370: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7380: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
7390: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
73a0: 75 62 6c 69 63 20 76 6f 69 64 20 53 65 74 56 61  ublic void SetVa
73b0: 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  lue(..          
73c0: 20 20 20 20 20 20 73 74 72 69 6e 67 20 6b 65 79        string key
73d0: 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
73e0: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 76 61         string va
73f0: 6c 75 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  lueName,..      
7400: 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74            object
7410: 20 76 61 6c 75 65 0d 0a 20 20 20 20 20 20 20 20   value..        
7420: 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
7430: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
7440: 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 44            CheckD
7450: 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20  isposed();..    
7460: 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63              Chec
7470: 6b 52 65 61 64 4f 6e 6c 79 28 29 3b 0d 0a 0d 0a  kReadOnly();....
7480: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7490: 69 66 20 28 21 77 68 61 74 49 66 29 0d 0a 20 20  if (!whatIf)..  
74a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
74b0: 20 20 52 65 67 69 73 74 72 79 2e 53 65 74 56 61    Registry.SetVa
74c0: 6c 75 65 28 6b 65 79 4e 61 6d 65 2c 20 76 61 6c  lue(keyName, val
74d0: 75 65 4e 61 6d 65 2c 20 76 61 6c 75 65 29 3b 0d  ueName, value);.
74e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
74f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
7500: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7510: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7520: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7530: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7540: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
7550: 20 70 75 62 6c 69 63 20 76 6f 69 64 20 53 65 74   public void Set
7560: 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20  Value(..        
7570: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6b          string k
7580: 65 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  eyName,..       
7590: 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
75a0: 76 61 6c 75 65 4e 61 6d 65 2c 0d 0a 20 20 20 20  valueName,..    
75b0: 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65              obje
75c0: 63 74 20 76 61 6c 75 65 2c 0d 0a 20 20 20 20 20  ct value,..     
75d0: 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73             Regis
75e0: 74 72 79 56 61 6c 75 65 4b 69 6e 64 20 76 61 6c  tryValueKind val
75f0: 75 65 4b 69 6e 64 0d 0a 20 20 20 20 20 20 20 20  ueKind..        
7600: 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
7610: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
7620: 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 44            CheckD
7630: 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20  isposed();..    
7640: 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63              Chec
7650: 6b 52 65 61 64 4f 6e 6c 79 28 29 3b 0d 0a 0d 0a  kReadOnly();....
7660: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7670: 69 66 20 28 21 77 68 61 74 49 66 29 0d 0a 20 20  if (!whatIf)..  
7680: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7690: 20 20 52 65 67 69 73 74 72 79 2e 53 65 74 56 61    Registry.SetVa
76a0: 6c 75 65 28 6b 65 79 4e 61 6d 65 2c 20 76 61 6c  lue(keyName, val
76b0: 75 65 4e 61 6d 65 2c 20 76 61 6c 75 65 2c 20 76  ueName, value, v
76c0: 61 6c 75 65 4b 69 6e 64 29 3b 0d 0a 20 20 20 20  alueKind);..    
76d0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
76e0: 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
76f0: 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n....           
7700: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
7710: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7720: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7730: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7740: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
7750: 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72 69 76      #region Priv
7760: 61 74 65 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20  ate Methods..   
7770: 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
7780: 20 76 6f 69 64 20 43 68 65 63 6b 52 65 61 64 4f   void CheckReadO
7790: 6e 6c 79 28 29 0d 0a 20 20 20 20 20 20 20 20 20  nly()..         
77a0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
77b0: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
77c0: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
77d0: 45 3a 20 49 6e 20 22 72 65 61 64 2d 6f 6e 6c 79  E: In "read-only
77e0: 22 20 6d 6f 64 65 2c 20 77 65 20 64 69 73 61 6c  " mode, we disal
77f0: 6c 6f 77 20 61 6c 6c 20 77 72 69 74 65 20 61 63  low all write ac
7800: 63 65 73 73 2e 0d 0a 20 20 20 20 20 20 20 20 20  cess...         
7810: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
7820: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
7830: 72 65 61 64 4f 6e 6c 79 29 0d 0a 20 20 20 20 20  readOnly)..     
7840: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
7850: 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20  eturn;....      
7860: 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
7870: 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61  new InvalidOpera
7880: 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 29 3b  tionException();
7890: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
78a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e  .            #en
78b0: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
78c0: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
78d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
78e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
78f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7900: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
7910: 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f            #regio
7920: 6e 20 49 44 69 73 70 6f 73 61 62 6c 65 20 22 50  n IDisposable "P
7930: 61 74 74 65 72 6e 22 20 4d 65 6d 62 65 72 73 0d  attern" Members.
7940: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
7950: 76 61 74 65 20 62 6f 6f 6c 20 64 69 73 70 6f 73  vate bool dispos
7960: 65 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ed;..           
7970: 20 70 72 69 76 61 74 65 20 76 6f 69 64 20 43 68   private void Ch
7980: 65 63 6b 44 69 73 70 6f 73 65 64 28 29 20 2f 2a  eckDisposed() /*
7990: 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20   throw */..     
79a0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
79b0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 64            if (!d
79c0: 69 73 70 6f 73 65 64 29 0d 0a 20 20 20 20 20 20  isposed)..      
79d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
79e0: 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  turn;....       
79f0: 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
7a00: 65 77 20 4f 62 6a 65 63 74 44 69 73 70 6f 73 65  ew ObjectDispose
7a10: 64 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20  dException(..   
7a20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7a30: 20 74 79 70 65 6f 66 28 4d 6f 63 6b 52 65 67 69   typeof(MockRegi
7a40: 73 74 72 79 29 2e 4e 61 6d 65 29 3b 0d 0a 20 20  stry).Name);..  
7a50: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
7a60: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
7a70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7a80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7a90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7aa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
7ab0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
7ac0: 69 76 61 74 65 20 2f 2a 20 70 72 6f 74 65 63 74  ivate /* protect
7ad0: 65 64 20 76 69 72 74 75 61 6c 20 2a 2f 20 76 6f  ed virtual */ vo
7ae0: 69 64 20 44 69 73 70 6f 73 65 28 0d 0a 20 20 20  id Dispose(..   
7af0: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
7b00: 6c 20 64 69 73 70 6f 73 69 6e 67 0d 0a 20 20 20  l disposing..   
7b10: 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
7b20: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
7b30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
7b40: 66 20 28 21 64 69 73 70 6f 73 65 64 29 0d 0a 20  f (!disposed).. 
7b50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
7b60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7b70: 20 20 20 20 20 20 69 66 20 28 64 69 73 70 6f 73        if (dispos
7b80: 69 6e 67 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ing)..          
7b90: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
7ba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7bb0: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
7bc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7bd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20  /////////..     
7be0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7bf0: 20 20 20 2f 2f 20 64 69 73 70 6f 73 65 20 6d 61     // dispose ma
7c00: 6e 61 67 65 64 20 72 65 73 6f 75 72 63 65 73 20  naged resources 
7c10: 68 65 72 65 2e 2e 2e 0d 0a 20 20 20 20 20 20 20  here.....       
7c20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7c30: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
7c40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7c50: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
7c60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7c70: 20 69 66 20 28 63 6c 61 73 73 65 73 52 6f 6f 74   if (classesRoot
7c80: 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   != null)..     
7c90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7ca0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
7cb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7cc0: 20 20 63 6c 61 73 73 65 73 52 6f 6f 74 2e 43 6c    classesRoot.Cl
7cd0: 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  ose();..        
7ce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7cf0: 20 20 20 20 63 6c 61 73 73 65 73 52 6f 6f 74 20      classesRoot 
7d00: 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20  = null;..       
7d10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7d20: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
7d30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
7d40: 20 28 63 75 72 72 65 6e 74 43 6f 6e 66 69 67 20   (currentConfig 
7d50: 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
7d60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7d70: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
7d80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7d90: 20 63 75 72 72 65 6e 74 43 6f 6e 66 69 67 2e 43   currentConfig.C
7da0: 6c 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20 20 20  lose();..       
7db0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7dc0: 20 20 20 20 20 63 75 72 72 65 6e 74 43 6f 6e 66       currentConf
7dd0: 69 67 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20  ig = null;..    
7de0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7df0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
7e00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7e10: 20 69 66 20 28 63 75 72 72 65 6e 74 55 73 65 72   if (currentUser
7e20: 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   != null)..     
7e30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7e40: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
7e50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7e60: 20 20 63 75 72 72 65 6e 74 55 73 65 72 2e 43 6c    currentUser.Cl
7e70: 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  ose();..        
7e80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7e90: 20 20 20 20 63 75 72 72 65 6e 74 55 73 65 72 20      currentUser 
7ea0: 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20  = null;..       
7eb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7ec0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
7ed0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
7ee0: 20 28 64 79 6e 44 61 74 61 20 21 3d 20 6e 75 6c   (dynData != nul
7ef0: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
7f00: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
7f10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7f20: 20 20 20 20 20 20 20 20 20 20 20 64 79 6e 44 61             dynDa
7f30: 74 61 2e 43 6c 6f 73 65 28 29 3b 0d 0a 20 20 20  ta.Close();..   
7f40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7f50: 20 20 20 20 20 20 20 20 20 64 79 6e 44 61 74 61           dynData
7f60: 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20   = null;..      
7f70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7f80: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
7f90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
7fa0: 66 20 28 6c 6f 63 61 6c 4d 61 63 68 69 6e 65 20  f (localMachine 
7fb0: 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
7fc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7fd0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
7fe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7ff0: 20 6c 6f 63 61 6c 4d 61 63 68 69 6e 65 2e 43 6c   localMachine.Cl
8000: 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  ose();..        
8010: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8020: 20 20 20 20 6c 6f 63 61 6c 4d 61 63 68 69 6e 65      localMachine
8030: 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20   = null;..      
8040: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8050: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
8060: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
8070: 66 20 28 70 65 72 66 6f 72 6d 61 6e 63 65 44 61  f (performanceDa
8080: 74 61 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ta != null)..   
8090: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
80a0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
80b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
80c0: 20 20 20 20 70 65 72 66 6f 72 6d 61 6e 63 65 44      performanceD
80d0: 61 74 61 2e 43 6c 6f 73 65 28 29 3b 0d 0a 20 20  ata.Close();..  
80e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
80f0: 20 20 20 20 20 20 20 20 20 20 70 65 72 66 6f 72            perfor
8100: 6d 61 6e 63 65 44 61 74 61 20 3d 20 6e 75 6c 6c  manceData = null
8110: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
8120: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
8130: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8140: 20 20 20 20 20 20 20 20 69 66 20 28 75 73 65 72          if (user
8150: 73 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  s != null)..    
8160: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8170: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
8180: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8190: 20 20 20 75 73 65 72 73 2e 43 6c 6f 73 65 28 29     users.Close()
81a0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
81b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75                 u
81c0: 73 65 72 73 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20  sers = null;..  
81d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
81e0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
81f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
8200: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8210: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
8220: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8230: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20  ////////////..  
8240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8250: 20 20 2f 2f 20 72 65 6c 65 61 73 65 20 75 6e 6d    // release unm
8260: 61 6e 61 67 65 64 20 72 65 73 6f 75 72 63 65 73  anaged resources
8270: 20 68 65 72 65 2e 2e 2e 0d 0a 20 20 20 20 20 20   here.....      
8280: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
8290: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
82a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
82b0: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
82c0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
82d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
82e0: 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 54 68 69      // NOTE: Thi
82f0: 73 20 6f 62 6a 65 63 74 20 69 73 20 6e 6f 77 20  s object is now 
8300: 64 69 73 70 6f 73 65 64 2e 0d 0a 20 20 20 20 20  disposed...     
8310: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
8320: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
8330: 20 20 20 20 20 20 20 64 69 73 70 6f 73 65 64 20         disposed 
8340: 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  = true;..       
8350: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
8360: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
8370: 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
8380: 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n....           
8390: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
83a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
83b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
83c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
83d0: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
83e0: 20 20 20 20 23 72 65 67 69 6f 6e 20 49 44 69 73      #region IDis
83f0: 70 6f 73 61 62 6c 65 20 4d 65 6d 62 65 72 73 0d  posable Members.
8400: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
8410: 6c 69 63 20 76 6f 69 64 20 44 69 73 70 6f 73 65  lic void Dispose
8420: 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ()..            
8430: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
8440: 20 20 20 44 69 73 70 6f 73 65 28 74 72 75 65 29     Dispose(true)
8450: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
8460: 20 20 20 47 43 2e 53 75 70 70 72 65 73 73 46 69     GC.SuppressFi
8470: 6e 61 6c 69 7a 65 28 74 68 69 73 29 3b 0d 0a 20  nalize(this);.. 
8480: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
8490: 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65            #endre
84a0: 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
84b0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
84c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
84d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
84e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
84f0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
8500: 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 44         #region D
8510: 65 73 74 72 75 63 74 6f 72 0d 0a 20 20 20 20 20  estructor..     
8520: 20 20 20 20 20 20 20 7e 4d 6f 63 6b 52 65 67 69         ~MockRegi
8530: 73 74 72 79 28 29 0d 0a 20 20 20 20 20 20 20 20  stry()..        
8540: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
8550: 20 20 20 20 20 20 20 44 69 73 70 6f 73 65 28 66         Dispose(f
8560: 61 6c 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  alse);..        
8570: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
8580: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20     #endregion.. 
8590: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
85a0: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
85b0: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
85c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
85d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
85e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
85f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
8600: 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  ...        #regi
8610: 6f 6e 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  on MockRegistryK
8620: 65 79 20 43 6c 61 73 73 0d 0a 20 20 20 20 20 20  ey Class..      
8630: 20 20 69 6e 74 65 72 6e 61 6c 20 73 65 61 6c 65    internal seale
8640: 64 20 63 6c 61 73 73 20 4d 6f 63 6b 52 65 67 69  d class MockRegi
8650: 73 74 72 79 4b 65 79 20 3a 20 49 44 69 73 70 6f  stryKey : IDispo
8660: 73 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 7b  sable..        {
8670: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72  ..            #r
8680: 65 67 69 6f 6e 20 50 72 69 76 61 74 65 20 43 6f  egion Private Co
8690: 6e 73 74 72 75 63 74 6f 72 73 0d 0a 20 20 20 20  nstructors..    
86a0: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
86b0: 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28  MockRegistryKey(
86c0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
86d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
86e0: 20 20 77 68 61 74 49 66 20 3d 20 74 72 75 65 3b    whatIf = true;
86f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8700: 20 20 72 65 61 64 4f 6e 6c 79 20 3d 20 74 72 75    readOnly = tru
8710: 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
8720: 20 20 20 20 73 61 66 65 20 3d 20 74 72 75 65 3b      safe = true;
8730: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
8740: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e  .            #en
8750: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
8760: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
8770: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8780: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8790: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
87a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
87b0: 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f            #regio
87c0: 6e 20 50 75 62 6c 69 63 20 43 6f 6e 73 74 72 75  n Public Constru
87d0: 63 74 6f 72 73 0d 0a 20 20 20 20 20 20 20 20 20  ctors..         
87e0: 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65     public MockRe
87f0: 67 69 73 74 72 79 4b 65 79 28 0d 0a 20 20 20 20  gistryKey(..    
8800: 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
8810: 73 74 72 79 4b 65 79 20 6b 65 79 0d 0a 20 20 20  stryKey key..   
8820: 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
8830: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8840: 3a 20 74 68 69 73 28 29 0d 0a 20 20 20 20 20 20  : this()..      
8850: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
8860: 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 6b 65           this.ke
8870: 79 20 3d 20 6b 65 79 3b 0d 0a 20 20 20 20 20 20  y = key;..      
8880: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
8890: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
88a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
88b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
88c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
88d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
88e0: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
88f0: 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
8900: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
8910: 20 20 20 52 65 67 69 73 74 72 79 4b 65 79 20 6b     RegistryKey k
8920: 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey,..           
8930: 20 20 20 20 20 73 74 72 69 6e 67 20 73 75 62 4b       string subK
8940: 65 79 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20  eyName..        
8950: 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
8960: 20 20 20 20 20 20 20 20 20 20 20 3a 20 74 68 69             : thi
8970: 73 28 6b 65 79 29 0d 0a 20 20 20 20 20 20 20 20  s(key)..        
8980: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
8990: 20 20 20 20 20 20 20 74 68 69 73 2e 73 75 62 4b         this.subK
89a0: 65 79 4e 61 6d 65 20 3d 20 73 75 62 4b 65 79 4e  eyName = subKeyN
89b0: 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ame;..          
89c0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
89d0: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
89e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
89f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8a00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8a10: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
8a20: 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63        public Moc
8a30: 6b 52 65 67 69 73 74 72 79 4b 65 79 28 0d 0a 20  kRegistryKey(.. 
8a40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52                 R
8a50: 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 2c 0d  egistryKey key,.
8a60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8a70: 20 73 74 72 69 6e 67 20 73 75 62 4b 65 79 4e 61   string subKeyNa
8a80: 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
8a90: 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66       bool whatIf
8aa0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8ab0: 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20    )..           
8ac0: 20 20 20 20 20 3a 20 74 68 69 73 28 6b 65 79 2c       : this(key,
8ad0: 20 73 75 62 4b 65 79 4e 61 6d 65 29 0d 0a 20 20   subKeyName)..  
8ae0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
8af0: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
8b00: 73 2e 77 68 61 74 49 66 20 3d 20 77 68 61 74 49  s.whatIf = whatI
8b10: 66 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f;..            
8b20: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
8b30: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
8b40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8b50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8b60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8b70: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
8b80: 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52      public MockR
8b90: 65 67 69 73 74 72 79 4b 65 79 28 0d 0a 20 20 20  egistryKey(..   
8ba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67               Reg
8bb0: 69 73 74 72 79 4b 65 79 20 6b 65 79 2c 0d 0a 20  istryKey key,.. 
8bc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
8bd0: 74 72 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65  tring subKeyName
8be0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
8bf0: 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d     bool whatIf,.
8c00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8c10: 20 62 6f 6f 6c 20 72 65 61 64 4f 6e 6c 79 0d 0a   bool readOnly..
8c20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8c30: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
8c40: 20 20 20 3a 20 74 68 69 73 28 6b 65 79 2c 20 73     : this(key, s
8c50: 75 62 4b 65 79 4e 61 6d 65 2c 20 77 68 61 74 49  ubKeyName, whatI
8c60: 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f)..            
8c70: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
8c80: 20 20 20 74 68 69 73 2e 72 65 61 64 4f 6e 6c 79     this.readOnly
8c90: 20 3d 20 72 65 61 64 4f 6e 6c 79 3b 0d 0a 20 20   = readOnly;..  
8ca0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
8cb0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
8cc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8cd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8ce0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8cf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
8d00: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
8d10: 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72  blic MockRegistr
8d20: 79 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20  yKey(..         
8d30: 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 4b         RegistryK
8d40: 65 79 20 6b 65 79 2c 0d 0a 20 20 20 20 20 20 20  ey key,..       
8d50: 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
8d60: 73 75 62 4b 65 79 4e 61 6d 65 2c 0d 0a 20 20 20  subKeyName,..   
8d70: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
8d80: 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20  l whatIf,..     
8d90: 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
8da0: 72 65 61 64 4f 6e 6c 79 2c 0d 0a 20 20 20 20 20  readOnly,..     
8db0: 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
8dc0: 73 61 66 65 0d 0a 20 20 20 20 20 20 20 20 20 20  safe..          
8dd0: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
8de0: 20 20 20 20 20 20 20 20 20 3a 20 74 68 69 73 28           : this(
8df0: 6b 65 79 2c 20 73 75 62 4b 65 79 4e 61 6d 65 2c  key, subKeyName,
8e00: 20 77 68 61 74 49 66 2c 20 72 65 61 64 4f 6e 6c   whatIf, readOnl
8e10: 79 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y)..            
8e20: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
8e30: 20 20 20 74 68 69 73 2e 73 61 66 65 20 3d 20 73     this.safe = s
8e40: 61 66 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  afe;..          
8e50: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
8e60: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
8e70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8e80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8e90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8ea0: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
8eb0: 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63        public Moc
8ec0: 6b 52 65 67 69 73 74 72 79 4b 65 79 28 0d 0a 20  kRegistryKey(.. 
8ed0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52                 R
8ee0: 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 2c 0d  egistryKey key,.
8ef0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8f00: 20 62 6f 6f 6c 20 77 68 61 74 49 66 0d 0a 20 20   bool whatIf..  
8f10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d                ).
8f20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8f30: 20 3a 20 74 68 69 73 28 6b 65 79 2c 20 6e 75 6c   : this(key, nul
8f40: 6c 2c 20 77 68 61 74 49 66 29 0d 0a 20 20 20 20  l, whatIf)..    
8f50: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
8f60: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f             // do
8f70: 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20   nothing...     
8f80: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
8f90: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
8fa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8fb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8fc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8fd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
8fe0: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
8ff0: 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65  c MockRegistryKe
9000: 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
9010: 20 20 20 20 52 65 67 69 73 74 72 79 4b 65 79 20      RegistryKey 
9020: 6b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  key,..          
9030: 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49        bool whatI
9040: 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
9050: 20 20 20 20 62 6f 6f 6c 20 72 65 61 64 4f 6e 6c      bool readOnl
9060: 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  y..             
9070: 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20     )..          
9080: 20 20 20 20 20 20 3a 20 74 68 69 73 28 6b 65 79        : this(key
9090: 2c 20 6e 75 6c 6c 2c 20 77 68 61 74 49 66 2c 20  , null, whatIf, 
90a0: 72 65 61 64 4f 6e 6c 79 29 0d 0a 20 20 20 20 20  readOnly)..     
90b0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
90c0: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20            // do 
90d0: 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20  nothing...      
90e0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
90f0: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
9100: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9110: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9120: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9130: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
9140: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
9150: 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
9160: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
9170: 20 20 20 52 65 67 69 73 74 72 79 4b 65 79 20 6b     RegistryKey k
9180: 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey,..           
9190: 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66       bool whatIf
91a0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
91b0: 20 20 20 62 6f 6f 6c 20 72 65 61 64 4f 6e 6c 79     bool readOnly
91c0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
91d0: 20 20 20 62 6f 6f 6c 20 73 61 66 65 0d 0a 20 20     bool safe..  
91e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d                ).
91f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9200: 20 3a 20 74 68 69 73 28 6b 65 79 2c 20 6e 75 6c   : this(key, nul
9210: 6c 2c 20 77 68 61 74 49 66 2c 20 72 65 61 64 4f  l, whatIf, readO
9220: 6e 6c 79 2c 20 73 61 66 65 29 0d 0a 20 20 20 20  nly, safe)..    
9230: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
9240: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f             // do
9250: 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20   nothing...     
9260: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
9270: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
9280: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
9290: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
92a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
92b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
92c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
92d0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
92e0: 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69     #region Publi
92f0: 63 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20 20  c Methods..     
9300: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 76 6f         public vo
9310: 69 64 20 43 6c 6f 73 65 28 29 0d 0a 20 20 20 20  id Close()..    
9320: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
9330: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
9340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
9350: 2f 20 4e 4f 54 45 3a 20 4e 6f 20 64 69 73 70 6f  / NOTE: No dispo
9360: 73 65 64 20 63 68 65 63 6b 20 68 65 72 65 20 62  sed check here b
9370: 65 63 61 75 73 65 20 63 61 6c 6c 69 6e 67 20 74  ecause calling t
9380: 68 69 73 20 6d 65 74 68 6f 64 0d 0a 20 20 20 20  his method..    
9390: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
93a0: 20 20 20 20 20 73 68 6f 75 6c 64 20 62 65 20 6a       should be j
93b0: 75 73 74 20 6c 69 6b 65 20 63 61 6c 6c 69 6e 67  ust like calling
93c0: 20 44 69 73 70 6f 73 65 2e 0d 0a 20 20 20 20 20   Dispose...     
93d0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
93e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 44                 D
93f0: 69 73 70 6f 73 65 28 74 72 75 65 29 3b 0d 0a 20  ispose(true);.. 
9400: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
9410: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
9420: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9430: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9440: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9450: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
9460: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
9470: 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73 74  ublic MockRegist
9480: 72 79 4b 65 79 20 43 72 65 61 74 65 53 75 62 4b  ryKey CreateSubK
9490: 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey(..           
94a0: 20 20 20 20 20 73 74 72 69 6e 67 20 73 75 62 4b       string subK
94b0: 65 79 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20  eyName..        
94c0: 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
94d0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
94e0: 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 44            CheckD
94f0: 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20  isposed();..    
9500: 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63              Chec
9510: 6b 52 65 61 64 4f 6e 6c 79 28 29 3b 0d 0a 0d 0a  kReadOnly();....
9520: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9530: 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29  if (key == null)
9540: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9550: 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c        return nul
9560: 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  l;....          
9570: 20 20 20 20 20 20 69 66 20 28 77 68 61 74 49 66        if (whatIf
9580: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
9590: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
95a0: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
95b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
95c0: 20 20 2f 2f 20 48 41 43 4b 3a 20 41 74 74 65 6d    // HACK: Attem
95d0: 70 74 20 74 6f 20 6f 70 65 6e 20 74 68 65 20 73  pt to open the s
95e0: 70 65 63 69 66 69 65 64 20 73 75 62 2d 6b 65 79  pecified sub-key
95f0: 2e 20 20 49 66 20 74 68 69 73 0d 0a 20 20 20 20  .  If this..    
9600: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9610: 2f 2f 20 20 20 20 20 20 20 66 61 69 6c 73 2c 20  //       fails, 
9620: 77 65 20 77 69 6c 6c 20 73 69 6d 70 6c 79 20 72  we will simply r
9630: 65 74 75 72 6e 20 74 68 65 20 77 72 61 70 70 65  eturn the wrappe
9640: 64 20 72 6f 6f 74 20 6b 65 79 0d 0a 20 20 20 20  d root key..    
9650: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9660: 2f 2f 20 20 20 20 20 20 20 69 74 73 65 6c 66 20  //       itself 
9670: 73 69 6e 63 65 20 6e 6f 20 77 72 69 74 65 73 20  since no writes 
9680: 61 72 65 20 61 6c 6c 6f 77 65 64 20 69 6e 20 22  are allowed in "
9690: 77 68 61 74 2d 69 66 22 0d 0a 20 20 20 20 20 20  what-if"..      
96a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
96b0: 20 20 20 20 20 20 20 6d 6f 64 65 20 61 6e 79 68         mode anyh
96c0: 6f 77 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ow...           
96d0: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
96e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
96f0: 20 52 65 67 69 73 74 72 79 4b 65 79 20 73 75 62   RegistryKey sub
9700: 4b 65 79 20 3d 20 6b 65 79 2e 4f 70 65 6e 53 75  Key = key.OpenSu
9710: 62 4b 65 79 28 73 75 62 4b 65 79 4e 61 6d 65 29  bKey(subKeyName)
9720: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
9730: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
9740: 28 73 75 62 4b 65 79 20 21 3d 20 6e 75 6c 6c 29  (subKey != null)
9750: 20 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   ?..            
9760: 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 20              new 
9770: 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28  MockRegistryKey(
9780: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9790: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
97a0: 20 20 73 75 62 4b 65 79 2c 20 77 68 61 74 49 66    subKey, whatIf
97b0: 2c 20 72 65 61 64 4f 6e 6c 79 2c 20 73 61 66 65  , readOnly, safe
97c0: 29 20 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ) :..           
97d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77               new
97e0: 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
97f0: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
9800: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9810: 20 20 20 6b 65 79 2c 20 73 75 62 4b 65 79 4e 61     key, subKeyNa
9820: 6d 65 2c 20 77 68 61 74 49 66 2c 20 72 65 61 64  me, whatIf, read
9830: 4f 6e 6c 79 2c 20 73 61 66 65 29 3b 0d 0a 20 20  Only, safe);..  
9840: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
9850: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9860: 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20   else..         
9870: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
9880: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
9890: 74 75 72 6e 20 6e 65 77 20 4d 6f 63 6b 52 65 67  turn new MockReg
98a0: 69 73 74 72 79 4b 65 79 28 0d 0a 20 20 20 20 20  istryKey(..     
98b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
98c0: 20 20 20 6b 65 79 2e 43 72 65 61 74 65 53 75 62     key.CreateSub
98d0: 4b 65 79 28 73 75 62 4b 65 79 4e 61 6d 65 29 2c  Key(subKeyName),
98e0: 20 77 68 61 74 49 66 2c 20 72 65 61 64 4f 6e 6c   whatIf, readOnl
98f0: 79 2c 20 73 61 66 65 29 3b 0d 0a 20 20 20 20 20  y, safe);..     
9900: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
9910: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
9920: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
9930: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9940: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9950: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9960: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
9970: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
9980: 62 6c 69 63 20 76 6f 69 64 20 44 65 6c 65 74 65  blic void Delete
9990: 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20  SubKey(..       
99a0: 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
99b0: 73 75 62 4b 65 79 4e 61 6d 65 2c 0d 0a 20 20 20  subKeyName,..   
99c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
99d0: 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67  l throwOnMissing
99e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
99f0: 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20    )..           
9a00: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
9a10: 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65      CheckDispose
9a20: 64 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  d();..          
9a30: 20 20 20 20 20 20 43 68 65 63 6b 52 65 61 64 4f        CheckReadO
9a40: 6e 6c 79 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  nly();....      
9a50: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6b 65            if (ke
9a60: 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y == null)..    
9a70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9a80: 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20  return;....     
9a90: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
9aa0: 77 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20  whatIf)..       
9ab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79               key
9ac0: 2e 44 65 6c 65 74 65 53 75 62 4b 65 79 28 73 75  .DeleteSubKey(su
9ad0: 62 4b 65 79 4e 61 6d 65 2c 20 74 68 72 6f 77 4f  bKeyName, throwO
9ae0: 6e 4d 69 73 73 69 6e 67 29 3b 0d 0a 20 20 20 20  nMissing);..    
9af0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
9b00: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
9b10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9b20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9b30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9b40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
9b50: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
9b60: 69 63 20 76 6f 69 64 20 44 65 6c 65 74 65 53 75  ic void DeleteSu
9b70: 62 4b 65 79 54 72 65 65 28 0d 0a 20 20 20 20 20  bKeyTree(..     
9b80: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
9b90: 67 20 73 75 62 4b 65 79 4e 61 6d 65 0d 0a 20 20  g subKeyName..  
9ba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d                ).
9bb0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
9bc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9bd0: 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b  CheckDisposed();
9be0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9bf0: 20 20 43 68 65 63 6b 52 65 61 64 4f 6e 6c 79 28    CheckReadOnly(
9c00: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
9c10: 20 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d        if (key ==
9c20: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
9c30: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
9c40: 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  rn;....         
9c50: 20 20 20 20 20 20 20 69 66 20 28 21 77 68 61 74         if (!what
9c60: 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If)..           
9c70: 20 20 20 20 20 20 20 20 20 6b 65 79 2e 44 65 6c           key.Del
9c80: 65 74 65 53 75 62 4b 65 79 54 72 65 65 28 73 75  eteSubKeyTree(su
9c90: 62 4b 65 79 4e 61 6d 65 29 3b 0d 0a 20 20 20 20  bKeyName);..    
9ca0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
9cb0: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
9cc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9cd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9ce0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9cf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
9d00: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
9d10: 69 63 20 76 6f 69 64 20 44 65 6c 65 74 65 56 61  ic void DeleteVa
9d20: 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  lue(..          
9d30: 20 20 20 20 20 20 73 74 72 69 6e 67 20 6e 61 6d        string nam
9d40: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
9d50: 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e      bool throwOn
9d60: 4d 69 73 73 69 6e 67 0d 0a 20 20 20 20 20 20 20  Missing..       
9d70: 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
9d80: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
9d90: 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b             Check
9da0: 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20  Disposed();..   
9db0: 20 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65               Che
9dc0: 63 6b 52 65 61 64 4f 6e 6c 79 28 29 3b 0d 0a 0d  ckReadOnly();...
9dd0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9de0: 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c   if (key == null
9df0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
9e00: 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a         return;..
9e10: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9e20: 20 20 69 66 20 28 21 77 68 61 74 49 66 29 0d 0a    if (!whatIf)..
9e30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9e40: 20 20 20 20 6b 65 79 2e 44 65 6c 65 74 65 56 61      key.DeleteVa
9e50: 6c 75 65 28 6e 61 6d 65 2c 20 74 68 72 6f 77 4f  lue(name, throwO
9e60: 6e 4d 69 73 73 69 6e 67 29 3b 0d 0a 20 20 20 20  nMissing);..    
9e70: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
9e80: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
9e90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9ea0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9eb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9ec0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
9ed0: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
9ee0: 69 63 20 73 74 72 69 6e 67 5b 5d 20 47 65 74 53  ic string[] GetS
9ef0: 75 62 4b 65 79 4e 61 6d 65 73 28 29 0d 0a 20 20  ubKeyNames()..  
9f00: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
9f10: 20 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65               Che
9f20: 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d  ckDisposed();...
9f30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9f40: 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c   if (key == null
9f50: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
9f60: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75         return nu
9f70: 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ll;....         
9f80: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6b 65         return ke
9f90: 79 2e 47 65 74 53 75 62 4b 65 79 4e 61 6d 65 73  y.GetSubKeyNames
9fa0: 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ();..           
9fb0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
9fc0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
9fd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9fe0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9ff0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a000: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
a010: 20 20 20 20 20 70 75 62 6c 69 63 20 6f 62 6a 65       public obje
a020: 63 74 20 47 65 74 56 61 6c 75 65 28 0d 0a 20 20  ct GetValue(..  
a030: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
a040: 72 69 6e 67 20 6e 61 6d 65 2c 0d 0a 20 20 20 20  ring name,..    
a050: 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65              obje
a060: 63 74 20 64 65 66 61 75 6c 74 56 61 6c 75 65 0d  ct defaultValue.
a070: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
a080: 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
a090: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
a0a0: 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64     CheckDisposed
a0b0: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
a0c0: 20 20 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d         if (key =
a0d0: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
a0e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
a0f0: 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20  urn null;....   
a100: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
a110: 75 72 6e 20 6b 65 79 2e 47 65 74 56 61 6c 75 65  urn key.GetValue
a120: 28 6e 61 6d 65 2c 20 64 65 66 61 75 6c 74 56 61  (name, defaultVa
a130: 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  lue);..         
a140: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
a150: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
a160: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a170: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a180: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a190: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
a1a0: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f         public Mo
a1b0: 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 4f 70  ckRegistryKey Op
a1c0: 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20  enSubKey(..     
a1d0: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
a1e0: 67 20 73 75 62 4b 65 79 4e 61 6d 65 0d 0a 20 20  g subKeyName..  
a1f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d                ).
a200: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
a210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a220: 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b  CheckDisposed();
a230: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
a240: 20 20 20 20 72 65 74 75 72 6e 20 4f 70 65 6e 53      return OpenS
a250: 75 62 4b 65 79 28 73 75 62 4b 65 79 4e 61 6d 65  ubKey(subKeyName
a260: 2c 20 66 61 6c 73 65 29 3b 0d 0a 20 20 20 20 20  , false);..     
a270: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
a280: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
a290: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a2a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a2b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a2c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
a2d0: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
a2e0: 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65  c MockRegistryKe
a2f0: 79 20 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20  y OpenSubKey(.. 
a300: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
a310: 74 72 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65  tring subKeyName
a320: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
a330: 20 20 20 62 6f 6f 6c 20 77 72 69 74 61 62 6c 65     bool writable
a340: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
a350: 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20    )..           
a360: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
a370: 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65      CheckDispose
a380: 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  d();....        
a390: 20 20 20 20 20 20 20 20 69 66 20 28 77 72 69 74          if (writ
a3a0: 61 62 6c 65 29 0d 0a 20 20 20 20 20 20 20 20 20  able)..         
a3b0: 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b             Check
a3c0: 52 65 61 64 4f 6e 6c 79 28 29 3b 0d 0a 0d 0a 20  ReadOnly();.... 
a3d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
a3e0: 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d  f (key == null).
a3f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
a400: 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c       return null
a410: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
a420: 20 20 20 20 20 52 65 67 69 73 74 72 79 4b 65 79       RegistryKey
a430: 20 73 75 62 4b 65 79 20 3d 20 6b 65 79 2e 4f 70   subKey = key.Op
a440: 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20  enSubKey(..     
a450: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
a460: 75 62 4b 65 79 4e 61 6d 65 2c 20 77 68 61 74 49  ubKeyName, whatI
a470: 66 20 3f 20 66 61 6c 73 65 20 3a 20 77 72 69 74  f ? false : writ
a480: 61 62 6c 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  able);....      
a490: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
a4a0: 20 28 73 75 62 4b 65 79 20 21 3d 20 6e 75 6c 6c   (subKey != null
a4b0: 29 20 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ) ?..           
a4c0: 20 20 20 20 20 20 20 20 20 6e 65 77 20 4d 6f 63           new Moc
a4d0: 6b 52 65 67 69 73 74 72 79 4b 65 79 28 73 75 62  kRegistryKey(sub
a4e0: 4b 65 79 2c 20 77 68 61 74 49 66 2c 20 72 65 61  Key, whatIf, rea
a4f0: 64 4f 6e 6c 79 2c 20 73 61 66 65 29 20 3a 20 6e  dOnly, safe) : n
a500: 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ull;..          
a510: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
a520: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
a530: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a540: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a550: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a560: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
a570: 20 20 20 20 20 20 70 75 62 6c 69 63 20 76 6f 69        public voi
a580: 64 20 53 65 74 56 61 6c 75 65 28 0d 0a 20 20 20  d SetValue(..   
a590: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
a5a0: 69 6e 67 20 6e 61 6d 65 2c 0d 0a 20 20 20 20 20  ing name,..     
a5b0: 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63             objec
a5c0: 74 20 76 61 6c 75 65 0d 0a 20 20 20 20 20 20 20  t value..       
a5d0: 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
a5e0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
a5f0: 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b             Check
a600: 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20  Disposed();..   
a610: 20 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65               Che
a620: 63 6b 52 65 61 64 4f 6e 6c 79 28 29 3b 0d 0a 0d  ckReadOnly();...
a630: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
a640: 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c   if (key == null
a650: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
a660: 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a         return;..
a670: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
a680: 20 20 69 66 20 28 21 77 68 61 74 49 66 29 0d 0a    if (!whatIf)..
a690: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a6a0: 20 20 20 20 6b 65 79 2e 53 65 74 56 61 6c 75 65      key.SetValue
a6b0: 28 6e 61 6d 65 2c 20 76 61 6c 75 65 29 3b 0d 0a  (name, value);..
a6c0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
a6d0: 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72             #endr
a6e0: 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
a6f0: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
a700: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a710: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a720: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a730: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
a740: 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
a750: 50 75 62 6c 69 63 20 50 72 6f 70 65 72 74 69 65  Public Propertie
a760: 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  s..            p
a770: 75 62 6c 69 63 20 73 74 72 69 6e 67 20 4e 61 6d  ublic string Nam
a780: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  e..            {
a790: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
a7a0: 20 20 67 65 74 0d 0a 20 20 20 20 20 20 20 20 20    get..         
a7b0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
a7c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43 68                Ch
a7d0: 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a  eckDisposed();..
a7e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
a7f0: 20 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d        if (key ==
a800: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
a810: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a820: 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a  return null;....
a830: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a840: 20 20 20 20 72 65 74 75 72 6e 20 21 53 74 72 69      return !Stri
a850: 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79  ng.IsNullOrEmpty
a860: 28 73 75 62 4b 65 79 4e 61 6d 65 29 20 3f 0d 0a  (subKeyName) ?..
a870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a880: 20 20 20 20 20 20 20 20 53 74 72 69 6e 67 2e 46          String.F
a890: 6f 72 6d 61 74 28 22 7b 30 7d 5c 5c 7b 31 7d 22  ormat("{0}\\{1}"
a8a0: 2c 20 6b 65 79 2e 4e 61 6d 65 2c 20 73 75 62 4b  , key.Name, subK
a8b0: 65 79 4e 61 6d 65 29 20 3a 0d 0a 20 20 20 20 20  eyName) :..     
a8c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a8d0: 20 20 20 6b 65 79 2e 4e 61 6d 65 3b 0d 0a 20 20     key.Name;..  
a8e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
a8f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
a900: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
a910: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a920: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a930: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a940: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a950: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
a960: 20 70 72 69 76 61 74 65 20 52 65 67 69 73 74 72   private Registr
a970: 79 4b 65 79 20 6b 65 79 3b 0d 0a 20 20 20 20 20  yKey key;..     
a980: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 52 65         public Re
a990: 67 69 73 74 72 79 4b 65 79 20 4b 65 79 0d 0a 20  gistryKey Key.. 
a9a0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
a9b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
a9c0: 74 20 7b 20 43 68 65 63 6b 44 69 73 70 6f 73 65  t { CheckDispose
a9d0: 64 28 29 3b 20 43 68 65 63 6b 53 61 66 65 28 29  d(); CheckSafe()
a9e0: 3b 20 72 65 74 75 72 6e 20 6b 65 79 3b 20 7d 0d  ; return key; }.
a9f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
aa00: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
aa10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aa20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aa30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aa40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aa50: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
aa60: 20 70 72 69 76 61 74 65 20 73 74 72 69 6e 67 20   private string 
aa70: 73 75 62 4b 65 79 4e 61 6d 65 3b 0d 0a 20 20 20  subKeyName;..   
aa80: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
aa90: 73 74 72 69 6e 67 20 53 75 62 4b 65 79 4e 61 6d  string SubKeyNam
aaa0: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  e..            {
aab0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
aac0: 20 20 67 65 74 20 7b 20 43 68 65 63 6b 44 69 73    get { CheckDis
aad0: 70 6f 73 65 64 28 29 3b 20 72 65 74 75 72 6e 20  posed(); return 
aae0: 73 75 62 4b 65 79 4e 61 6d 65 3b 20 7d 0d 0a 20  subKeyName; }.. 
aaf0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
ab00: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
ab10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ab20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ab30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ab40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
ab50: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
ab60: 72 69 76 61 74 65 20 62 6f 6f 6c 20 77 68 61 74  rivate bool what
ab70: 49 66 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If;..           
ab80: 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 57 68 61   public bool Wha
ab90: 74 49 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20  tIf..           
aba0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
abb0: 20 20 20 20 67 65 74 20 7b 20 43 68 65 63 6b 44      get { CheckD
abc0: 69 73 70 6f 73 65 64 28 29 3b 20 72 65 74 75 72  isposed(); retur
abd0: 6e 20 77 68 61 74 49 66 3b 20 7d 0d 0a 20 20 20  n whatIf; }..   
abe0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
abf0: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
ac00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ac10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ac20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ac30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
ac40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
ac50: 76 61 74 65 20 62 6f 6f 6c 20 72 65 61 64 4f 6e  vate bool readOn
ac60: 6c 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ly;..           
ac70: 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 52 65 61   public bool Rea
ac80: 64 4f 6e 6c 79 0d 0a 20 20 20 20 20 20 20 20 20  dOnly..         
ac90: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
aca0: 20 20 20 20 20 20 67 65 74 20 7b 20 43 68 65 63        get { Chec
acb0: 6b 44 69 73 70 6f 73 65 64 28 29 3b 20 72 65 74  kDisposed(); ret
acc0: 75 72 6e 20 72 65 61 64 4f 6e 6c 79 3b 20 7d 0d  urn readOnly; }.
acd0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
ace0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
acf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ad00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ad10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ad20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ad30: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
ad40: 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 73 61 66   public bool saf
ad50: 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
ad60: 70 75 62 6c 69 63 20 62 6f 6f 6c 20 53 61 66 65  public bool Safe
ad70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
ad80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
ad90: 20 67 65 74 20 7b 20 43 68 65 63 6b 44 69 73 70   get { CheckDisp
ada0: 6f 73 65 64 28 29 3b 20 72 65 74 75 72 6e 20 73  osed(); return s
adb0: 61 66 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  afe; }..        
adc0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
add0: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
ade0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
adf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ae00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ae10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ae20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ae30: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
ae40: 23 72 65 67 69 6f 6e 20 50 72 69 76 61 74 65 20  #region Private 
ae50: 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20 20  Methods..       
ae60: 20 20 20 20 20 70 72 69 76 61 74 65 20 76 6f 69       private voi
ae70: 64 20 43 68 65 63 6b 52 65 61 64 4f 6e 6c 79 28  d CheckReadOnly(
ae80: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
ae90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
aea0: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
aeb0: 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 49        // NOTE: I
aec0: 6e 20 22 72 65 61 64 2d 6f 6e 6c 79 22 20 6d 6f  n "read-only" mo
aed0: 64 65 2c 20 77 65 20 64 69 73 61 6c 6c 6f 77 20  de, we disallow 
aee0: 61 6c 6c 20 77 72 69 74 65 20 61 63 63 65 73 73  all write access
aef0: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
af00: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
af10: 20 20 20 20 20 20 20 69 66 20 28 21 72 65 61 64         if (!read
af20: 4f 6e 6c 79 29 0d 0a 20 20 20 20 20 20 20 20 20  Only)..         
af30: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
af40: 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  n;....          
af50: 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
af60: 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e  InvalidOperation
af70: 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 20 20  Exception();..  
af80: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
af90: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
afa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
afb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
afc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
afd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
afe0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
aff0: 69 76 61 74 65 20 76 6f 69 64 20 43 68 65 63 6b  ivate void Check
b000: 53 61 66 65 28 29 0d 0a 20 20 20 20 20 20 20 20  Safe()..        
b010: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
b020: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
b030: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
b040: 54 45 3a 20 49 6e 20 22 73 61 66 65 22 20 6d 6f  TE: In "safe" mo
b050: 64 65 2c 20 77 65 20 64 69 73 61 6c 6c 6f 77 20  de, we disallow 
b060: 61 6c 6c 20 64 69 72 65 63 74 20 61 63 63 65 73  all direct acces
b070: 73 20 74 6f 20 74 68 65 0d 0a 20 20 20 20 20 20  s to the..      
b080: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
b090: 20 20 20 63 6f 6e 74 61 69 6e 65 64 20 72 65 67     contained reg
b0a0: 69 73 74 72 79 20 6b 65 79 2e 0d 0a 20 20 20 20  istry key...    
b0b0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
b0c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b0d0: 69 66 20 28 21 73 61 66 65 29 0d 0a 20 20 20 20  if (!safe)..    
b0e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b0f0: 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20  return;....     
b100: 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
b110: 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72   new InvalidOper
b120: 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 29  ationException()
b130: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
b140: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65  ..            #e
b150: 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
b160: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
b170: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b180: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b190: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b1a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
b1b0: 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69             #regi
b1c0: 6f 6e 20 53 79 73 74 65 6d 2e 4f 62 6a 65 63 74  on System.Object
b1d0: 20 4f 76 65 72 72 69 64 65 73 0d 0a 20 20 20 20   Overrides..    
b1e0: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 6f          public o
b1f0: 76 65 72 72 69 64 65 20 73 74 72 69 6e 67 20 54  verride string T
b200: 6f 53 74 72 69 6e 67 28 29 0d 0a 20 20 20 20 20  oString()..     
b210: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
b220: 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 44            CheckD
b230: 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20  isposed();....  
b240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
b250: 74 75 72 6e 20 74 68 69 73 2e 4e 61 6d 65 3b 0d  turn this.Name;.
b260: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
b270: 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64              #end
b280: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
b290: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
b2a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b2b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b2c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b2d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
b2e0: 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e           #region
b2f0: 20 49 6d 70 6c 69 63 69 74 20 43 6f 6e 76 65 72   Implicit Conver
b300: 73 69 6f 6e 20 4f 70 65 72 61 74 6f 72 73 0d 0a  sion Operators..
b310: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
b320: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 42              // B
b330: 55 47 42 55 47 3a 20 52 65 6d 6f 76 65 20 6d 65  UGBUG: Remove me
b340: 3f 20 20 54 68 69 73 20 73 68 6f 75 6c 64 20 62  ?  This should b
b350: 65 20 73 61 66 65 20 62 65 63 61 75 73 65 20 69  e safe because i
b360: 6e 20 22 77 68 61 74 2d 69 66 22 0d 0a 20 20 20  n "what-if"..   
b370: 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
b380: 20 20 20 20 6d 6f 64 65 20 61 6c 6c 20 6b 65 79      mode all key
b390: 73 20 61 72 65 20 6f 70 65 6e 65 64 20 72 65 61  s are opened rea
b3a0: 64 2d 6f 6e 6c 79 2e 0d 0a 20 20 20 20 20 20 20  d-only...       
b3b0: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
b3c0: 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
b3d0: 69 63 20 69 6d 70 6c 69 63 69 74 20 6f 70 65 72  ic implicit oper
b3e0: 61 74 6f 72 20 52 65 67 69 73 74 72 79 4b 65 79  ator RegistryKey
b3f0: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
b400: 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b     MockRegistryK
b410: 65 79 20 6b 65 79 0d 0a 20 20 20 20 20 20 20 20  ey key..        
b420: 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
b430: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
b440: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
b450: 20 28 6b 65 79 20 21 3d 20 6e 75 6c 6c 29 20 3f   (key != null) ?
b460: 20 6b 65 79 2e 4b 65 79 20 3a 20 6e 75 6c 6c 3b   key.Key : null;
b470: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
b480: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e  .            #en
b490: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
b4a0: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
b4b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b4c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b4d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b4e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
b4f0: 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f            #regio
b500: 6e 20 49 44 69 73 70 6f 73 61 62 6c 65 20 22 50  n IDisposable "P
b510: 61 74 74 65 72 6e 22 20 4d 65 6d 62 65 72 73 0d  attern" Members.
b520: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
b530: 76 61 74 65 20 62 6f 6f 6c 20 64 69 73 70 6f 73  vate bool dispos
b540: 65 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ed;..           
b550: 20 70 72 69 76 61 74 65 20 76 6f 69 64 20 43 68   private void Ch
b560: 65 63 6b 44 69 73 70 6f 73 65 64 28 29 20 2f 2a  eckDisposed() /*
b570: 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20   throw */..     
b580: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
b590: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 64            if (!d
b5a0: 69 73 70 6f 73 65 64 29 0d 0a 20 20 20 20 20 20  isposed)..      
b5b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
b5c0: 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  turn;....       
b5d0: 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
b5e0: 65 77 20 4f 62 6a 65 63 74 44 69 73 70 6f 73 65  ew ObjectDispose
b5f0: 64 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20  dException(..   
b600: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b610: 20 74 79 70 65 6f 66 28 4d 6f 63 6b 52 65 67 69   typeof(MockRegi
b620: 73 74 72 79 4b 65 79 29 2e 4e 61 6d 65 29 3b 0d  stryKey).Name);.
b630: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
b640: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
b650: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b660: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b670: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b680: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b690: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
b6a0: 20 70 72 69 76 61 74 65 20 2f 2a 20 70 72 6f 74   private /* prot
b6b0: 65 63 74 65 64 20 76 69 72 74 75 61 6c 20 2a 2f  ected virtual */
b6c0: 20 76 6f 69 64 20 44 69 73 70 6f 73 65 28 0d 0a   void Dispose(..
b6d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b6e0: 62 6f 6f 6c 20 64 69 73 70 6f 73 69 6e 67 0d 0a  bool disposing..
b6f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b700: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
b710: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
b720: 20 20 69 66 20 28 21 64 69 73 70 6f 73 65 64 29    if (!disposed)
b730: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
b740: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
b750: 20 20 20 20 20 20 20 20 20 69 66 20 28 64 69 73           if (dis
b760: 70 6f 73 69 6e 67 29 0d 0a 20 20 20 20 20 20 20  posing)..       
b770: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
b780: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b790: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
b7a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b7b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20  ////////////..  
b7c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b7d0: 20 20 20 20 20 20 2f 2f 20 64 69 73 70 6f 73 65        // dispose
b7e0: 20 6d 61 6e 61 67 65 64 20 72 65 73 6f 75 72 63   managed resourc
b7f0: 65 73 20 68 65 72 65 2e 2e 2e 0d 0a 20 20 20 20  es here.....    
b800: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b810: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
b820: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b830: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
b840: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b850: 20 20 20 20 69 66 20 28 6b 65 79 20 21 3d 20 6e      if (key != n
b860: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
b870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
b880: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
b890: 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79               key
b8a0: 2e 43 6c 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20  .Close();..     
b8b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b8c0: 20 20 20 20 20 20 20 6b 65 79 20 3d 20 6e 75 6c         key = nul
b8d0: 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l;..            
b8e0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
b8f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b900: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
b910: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
b920: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b930: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b940: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
b950: 20 20 20 20 20 20 20 20 2f 2f 20 72 65 6c 65 61          // relea
b960: 73 65 20 75 6e 6d 61 6e 61 67 65 64 20 72 65 73  se unmanaged res
b970: 6f 75 72 63 65 73 20 68 65 72 65 2e 2e 2e 0d 0a  ources here.....
b980: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b990: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
b9a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b9b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
b9c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b9d0: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
b9e0: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
b9f0: 45 3a 20 54 68 69 73 20 6f 62 6a 65 63 74 20 69  E: This object i
ba00: 73 20 6e 6f 77 20 64 69 73 70 6f 73 65 64 2e 0d  s now disposed..
ba10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
ba20: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
ba30: 20 20 20 20 20 20 20 20 20 20 20 20 20 64 69 73               dis
ba40: 70 6f 73 65 64 20 3d 20 74 72 75 65 3b 0d 0a 20  posed = true;.. 
ba50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
ba60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
ba70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e  .            #en
ba80: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
ba90: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
baa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bab0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bac0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bad0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
bae0: 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f            #regio
baf0: 6e 20 49 44 69 73 70 6f 73 61 62 6c 65 20 4d 65  n IDisposable Me
bb00: 6d 62 65 72 73 0d 0a 20 20 20 20 20 20 20 20 20  mbers..         
bb10: 20 20 20 70 75 62 6c 69 63 20 76 6f 69 64 20 44     public void D
bb20: 69 73 70 6f 73 65 28 29 0d 0a 20 20 20 20 20 20  ispose()..      
bb30: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
bb40: 20 20 20 20 20 20 20 20 20 44 69 73 70 6f 73 65           Dispose
bb50: 28 74 72 75 65 29 3b 0d 0a 20 20 20 20 20 20 20  (true);..       
bb60: 20 20 20 20 20 20 20 20 20 47 43 2e 53 75 70 70           GC.Supp
bb70: 72 65 73 73 46 69 6e 61 6c 69 7a 65 28 74 68 69  ressFinalize(thi
bb80: 73 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s);..           
bb90: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
bba0: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
bbb0: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
bbc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bbd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bbe0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bbf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
bc00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65  .            #re
bc10: 67 69 6f 6e 20 44 65 73 74 72 75 63 74 6f 72 0d  gion Destructor.
bc20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7e 4d 6f  .            ~Mo
bc30: 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28 29 0d  ckRegistryKey().
bc40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
bc50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bc60: 44 69 73 70 6f 73 65 28 66 61 6c 73 65 29 3b 0d  Dispose(false);.
bc70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
bc80: 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64              #end
bc90: 72 65 67 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20  region..        
bca0: 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  }..        #endr
bcb0: 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
bcc0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
bcd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bce0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bcf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bd00: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
bd10: 20 20 20 20 23 72 65 67 69 6f 6e 20 52 65 67 69      #region Regi
bd20: 73 74 72 79 48 65 6c 70 65 72 20 43 6c 61 73 73  stryHelper Class
bd30: 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
bd40: 65 20 73 74 61 74 69 63 20 63 6c 61 73 73 20 52  e static class R
bd50: 65 67 69 73 74 72 79 48 65 6c 70 65 72 0d 0a 20  egistryHelper.. 
bd60: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
bd70: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75        #region Pu
bd80: 62 6c 69 63 20 53 74 61 74 69 63 20 50 72 6f 70  blic Static Prop
bd90: 65 72 74 69 65 73 0d 0a 20 20 20 20 20 20 20 20  erties..        
bda0: 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
bdb0: 69 63 20 69 6e 74 20 73 75 62 4b 65 79 73 43 72  ic int subKeysCr
bdc0: 65 61 74 65 64 3b 0d 0a 20 20 20 20 20 20 20 20  eated;..        
bdd0: 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
bde0: 63 20 69 6e 74 20 53 75 62 4b 65 79 73 43 72 65  c int SubKeysCre
bdf0: 61 74 65 64 0d 0a 20 20 20 20 20 20 20 20 20 20  ated..          
be00: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
be10: 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
be20: 6e 20 73 75 62 4b 65 79 73 43 72 65 61 74 65 64  n subKeysCreated
be30: 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
be40: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
be50: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
be60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
be70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
be80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
be90: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
bea0: 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
beb0: 74 69 63 20 69 6e 74 20 73 75 62 4b 65 79 73 44  tic int subKeysD
bec0: 65 6c 65 74 65 64 3b 0d 0a 20 20 20 20 20 20 20  eleted;..       
bed0: 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
bee0: 69 63 20 69 6e 74 20 53 75 62 4b 65 79 73 44 65  ic int SubKeysDe
bef0: 6c 65 74 65 64 0d 0a 20 20 20 20 20 20 20 20 20  leted..         
bf00: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
bf10: 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75        get { retu
bf20: 72 6e 20 73 75 62 4b 65 79 73 44 65 6c 65 74 65  rn subKeysDelete
bf30: 64 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  d; }..          
bf40: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
bf50: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
bf60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bf70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bf80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bf90: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
bfa0: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
bfb0: 61 74 69 63 20 69 6e 74 20 6b 65 79 56 61 6c 75  atic int keyValu
bfc0: 65 73 53 65 74 3b 0d 0a 20 20 20 20 20 20 20 20  esSet;..        
bfd0: 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
bfe0: 63 20 69 6e 74 20 4b 65 79 56 61 6c 75 65 73 53  c int KeyValuesS
bff0: 65 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  et..            
c000: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
c010: 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
c020: 6b 65 79 56 61 6c 75 65 73 53 65 74 3b 20 7d 0d  keyValuesSet; }.
c030: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
c040: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
c050: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c060: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c070: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c080: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c090: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
c0a0: 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
c0b0: 69 6e 74 20 6b 65 79 56 61 6c 75 65 73 44 65 6c  int keyValuesDel
c0c0: 65 74 65 64 3b 0d 0a 20 20 20 20 20 20 20 20 20  eted;..         
c0d0: 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
c0e0: 20 69 6e 74 20 4b 65 79 56 61 6c 75 65 73 44 65   int KeyValuesDe
c0f0: 6c 65 74 65 64 0d 0a 20 20 20 20 20 20 20 20 20  leted..         
c100: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
c110: 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75        get { retu
c120: 72 6e 20 6b 65 79 56 61 6c 75 65 73 44 65 6c 65  rn keyValuesDele
c130: 74 65 64 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  ted; }..        
c140: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
c150: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
c160: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
c170: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c180: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c190: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c1a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c1b0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
c1c0: 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 53  #region Public S
c1d0: 74 61 74 69 63 20 4d 65 74 68 6f 64 73 0d 0a 20  tatic Methods.. 
c1e0: 20 20 20 20 20 20 20 20 20 20 20 5b 4d 65 74 68             [Meth
c1f0: 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70  odImpl(MethodImp
c200: 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e  lOptions.NoInlin
c210: 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20 20  ing)]..         
c220: 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
c230: 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
c240: 20 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20   OpenSubKey(..  
c250: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f                Mo
c260: 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f  ckRegistryKey ro
c270: 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20  otKey,..        
c280: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 73          string s
c290: 75 62 4b 65 79 4e 61 6d 65 2c 0d 0a 20 20 20 20  ubKeyName,..    
c2a0: 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
c2b0: 20 77 72 69 74 61 62 6c 65 2c 0d 0a 20 20 20 20   writable,..    
c2c0: 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
c2d0: 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20   whatIf,..      
c2e0: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76            bool v
c2f0: 65 72 62 6f 73 65 0d 0a 20 20 20 20 20 20 20 20  erbose..        
c300: 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
c310: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
c320: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 72 6f            if (ro
c330: 6f 74 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  otKey == null)..
c340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c350: 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b      return null;
c360: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
c370: 20 20 20 20 69 66 20 28 76 65 72 62 6f 73 65 29      if (verbose)
c380: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c390: 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44        TraceOps.D
c3a0: 65 62 75 67 41 6e 64 54 72 61 63 65 28 77 72 69  ebugAndTrace(wri
c3b0: 74 61 62 6c 65 20 3f 0d 0a 20 20 20 20 20 20 20  table ?..       
c3c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c3d0: 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48   TracePriority.H
c3e0: 69 67 68 65 73 74 20 3a 20 54 72 61 63 65 50 72  ighest : TracePr
c3f0: 69 6f 72 69 74 79 2e 48 69 67 68 65 72 2c 0d 0a  iority.Higher,..
c400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c410: 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c          debugCal
c420: 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c  lback, traceCall
c430: 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
c440: 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
c450: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 72                "r
c460: 6f 6f 74 4b 65 79 20 3d 20 7b 30 7d 2c 20 73 75  ootKey = {0}, su
c470: 62 4b 65 79 4e 61 6d 65 20 3d 20 7b 31 7d 2c 20  bKeyName = {1}, 
c480: 77 72 69 74 61 62 6c 65 20 3d 20 7b 32 7d 22 2c  writable = {2}",
c490: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c4a0: 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
c4b0: 70 6c 61 79 28 72 6f 6f 74 4b 65 79 29 2c 20 46  play(rootKey), F
c4c0: 6f 72 44 69 73 70 6c 61 79 28 73 75 62 4b 65 79  orDisplay(subKey
c4d0: 4e 61 6d 65 29 2c 0d 0a 20 20 20 20 20 20 20 20  Name),..        
c4e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c4f0: 46 6f 72 44 69 73 70 6c 61 79 28 77 72 69 74 61  ForDisplay(writa
c500: 62 6c 65 29 29 2c 20 74 72 61 63 65 43 61 74 65  ble)), traceCate
c510: 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
c520: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
c530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
c540: 20 48 41 43 4b 3a 20 41 6c 77 61 79 73 20 66 6f   HACK: Always fo
c550: 72 62 69 64 20 77 72 69 74 61 62 6c 65 20 61 63  rbid writable ac
c560: 63 65 73 73 20 77 68 65 6e 20 6f 70 65 72 61 74  cess when operat
c570: 69 6e 67 20 69 6e 0d 0a 20 20 20 20 20 20 20 20  ing in..        
c580: 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
c590: 20 22 77 68 61 74 2d 69 66 22 20 6d 6f 64 65 2e   "what-if" mode.
c5a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c5b0: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
c5c0: 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74        MockRegist
c5d0: 72 79 4b 65 79 20 6b 65 79 20 3d 20 72 6f 6f 74  ryKey key = root
c5e0: 4b 65 79 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d  Key.OpenSubKey(.
c5f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
c600: 20 20 20 20 20 73 75 62 4b 65 79 4e 61 6d 65 2c       subKeyName,
c610: 20 77 68 61 74 49 66 20 3f 20 66 61 6c 73 65 20   whatIf ? false 
c620: 3a 20 77 72 69 74 61 62 6c 65 29 3b 0d 0a 0d 0a  : writable);....
c630: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c640: 72 65 74 75 72 6e 20 28 6b 65 79 20 21 3d 20 6e  return (key != n
c650: 75 6c 6c 29 20 3f 0d 0a 20 20 20 20 20 20 20 20  ull) ?..        
c660: 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 20              new 
c670: 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28  MockRegistryKey(
c680: 6b 65 79 2c 20 77 68 61 74 49 66 2c 20 66 61 6c  key, whatIf, fal
c690: 73 65 2c 20 66 61 6c 73 65 29 20 3a 20 6e 75 6c  se, false) : nul
c6a0: 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l;..            
c6b0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
c6c0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
c6d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c6e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c6f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c700: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
c710: 20 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28      [MethodImpl(
c720: 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e  MethodImplOption
c730: 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a  s.NoInlining)]..
c740: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
c750: 69 63 20 73 74 61 74 69 63 20 4d 6f 63 6b 52 65  ic static MockRe
c760: 67 69 73 74 72 79 4b 65 79 20 43 72 65 61 74 65  gistryKey Create
c770: 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20  SubKey(..       
c780: 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67           MockReg
c790: 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79  istryKey rootKey
c7a0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
c7b0: 20 20 20 73 74 72 69 6e 67 20 73 75 62 4b 65 79     string subKey
c7c0: 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
c7d0: 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74         bool what
c7e0: 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If,..           
c7f0: 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73       bool verbos
c800: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
c810: 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20     )..          
c820: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
c830: 20 20 20 20 20 69 66 20 28 72 6f 6f 74 4b 65 79       if (rootKey
c840: 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
c850: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
c860: 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20  eturn null;.... 
c870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
c880: 66 20 28 76 65 72 62 6f 73 65 29 0d 0a 20 20 20  f (verbose)..   
c890: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c8a0: 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
c8b0: 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69  ndTrace(TracePri
c8c0: 6f 72 69 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a  ority.Highest,..
c8d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c8e0: 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c          debugCal
c8f0: 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c  lback, traceCall
c900: 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
c910: 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
c920: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 72                "r
c930: 6f 6f 74 4b 65 79 20 3d 20 7b 30 7d 2c 20 73 75  ootKey = {0}, su
c940: 62 4b 65 79 4e 61 6d 65 20 3d 20 7b 31 7d 22 2c  bKeyName = {1}",
c950: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c960: 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
c970: 70 6c 61 79 28 72 6f 6f 74 4b 65 79 29 2c 20 46  play(rootKey), F
c980: 6f 72 44 69 73 70 6c 61 79 28 73 75 62 4b 65 79  orDisplay(subKey
c990: 4e 61 6d 65 29 29 2c 0d 0a 20 20 20 20 20 20 20  Name)),..       
c9a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c9b0: 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
c9c0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
c9d0: 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20      try..       
c9e0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
c9f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ca00: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
ca10: 20 20 20 20 20 20 20 20 2f 2f 20 48 41 43 4b 3a          // HACK:
ca20: 20 41 6c 77 61 79 73 20 6f 70 65 6e 20 61 20 6b   Always open a k
ca30: 65 79 2c 20 72 61 74 68 65 72 20 74 68 61 6e 20  ey, rather than 
ca40: 63 72 65 61 74 69 6e 67 20 6f 6e 65 20 77 68 65  creating one whe
ca50: 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  n..             
ca60: 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
ca70: 6f 70 65 72 61 74 69 6e 67 20 69 6e 20 22 77 68  operating in "wh
ca80: 61 74 2d 69 66 22 20 6d 6f 64 65 2e 0d 0a 20 20  at-if" mode...  
ca90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
caa0: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
cab0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 77 68            if (wh
cac0: 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20  atIf)..         
cad0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
cae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
caf0: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
cb00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cb10: 20 20 2f 2f 20 48 41 43 4b 3a 20 41 74 74 65 6d    // HACK: Attem
cb20: 70 74 20 74 6f 20 6f 70 65 6e 20 74 68 65 20 73  pt to open the s
cb30: 70 65 63 69 66 69 65 64 20 73 75 62 2d 6b 65 79  pecified sub-key
cb40: 2e 20 20 49 66 0d 0a 20 20 20 20 20 20 20 20 20  .  If..         
cb50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
cb60: 2f 20 20 20 20 20 20 20 74 68 69 73 20 66 61 69  /       this fai
cb70: 6c 73 2c 20 77 65 20 77 69 6c 6c 20 73 69 6d 70  ls, we will simp
cb80: 6c 79 20 72 65 74 75 72 6e 20 74 68 65 20 72 6f  ly return the ro
cb90: 6f 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ot..            
cba0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
cbb0: 20 20 20 20 20 6b 65 79 20 69 74 73 65 6c 66 20       key itself 
cbc0: 73 69 6e 63 65 20 6e 6f 20 77 72 69 74 65 73 20  since no writes 
cbd0: 61 72 65 20 61 6c 6c 6f 77 65 64 20 69 6e 0d 0a  are allowed in..
cbe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cbf0: 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
cc00: 20 22 77 68 61 74 2d 69 66 22 20 6d 6f 64 65 20   "what-if" mode 
cc10: 61 6e 79 68 6f 77 2e 0d 0a 20 20 20 20 20 20 20  anyhow...       
cc20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cc30: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
cc40: 20 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63               Moc
cc50: 6b 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79  kRegistryKey key
cc60: 20 3d 20 72 6f 6f 74 4b 65 79 2e 4f 70 65 6e 53   = rootKey.OpenS
cc70: 75 62 4b 65 79 28 73 75 62 4b 65 79 4e 61 6d 65  ubKey(subKeyName
cc80: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
cc90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
cca0: 74 75 72 6e 20 28 6b 65 79 20 21 3d 20 6e 75 6c  turn (key != nul
ccb0: 6c 29 20 3f 0d 0a 20 20 20 20 20 20 20 20 20 20  l) ?..          
ccc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ccd0: 20 20 6b 65 79 20 3a 20 6e 65 77 20 4d 6f 63 6b    key : new Mock
cce0: 52 65 67 69 73 74 72 79 4b 65 79 28 0d 0a 20 20  RegistryKey(..  
ccf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cd00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
cd10: 6f 74 4b 65 79 2c 20 73 75 62 4b 65 79 4e 61 6d  otKey, subKeyNam
cd20: 65 2c 20 77 68 61 74 49 66 2c 20 66 61 6c 73 65  e, whatIf, false
cd30: 2c 20 66 61 6c 73 65 29 3b 0d 0a 20 20 20 20 20  , false);..     
cd40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
cd50: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
cd60: 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20        else..    
cd70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cd80: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
cd90: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
cda0: 6e 20 6e 65 77 20 4d 6f 63 6b 52 65 67 69 73 74  n new MockRegist
cdb0: 72 79 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20  ryKey(..        
cdc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cdd0: 20 20 20 20 72 6f 6f 74 4b 65 79 2e 43 72 65 61      rootKey.Crea
cde0: 74 65 53 75 62 4b 65 79 28 73 75 62 4b 65 79 4e  teSubKey(subKeyN
cdf0: 61 6d 65 29 2c 20 77 68 61 74 49 66 2c 20 66 61  ame), whatIf, fa
ce00: 6c 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  lse,..          
ce10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ce20: 20 20 66 61 6c 73 65 29 3b 0d 0a 20 20 20 20 20    false);..     
ce30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
ce40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
ce50: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
ce60: 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20       finally..  
ce70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
ce80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
ce90: 20 20 20 20 20 73 75 62 4b 65 79 73 43 72 65 61       subKeysCrea
cea0: 74 65 64 2b 2b 3b 0d 0a 20 20 20 20 20 20 20 20  ted++;..        
ceb0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
cec0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
ced0: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
cee0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cef0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cf00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cf10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
cf20: 20 20 20 20 20 20 20 20 20 20 20 5b 4d 65 74 68             [Meth
cf30: 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70  odImpl(MethodImp
cf40: 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e  lOptions.NoInlin
cf50: 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20 20  ing)]..         
cf60: 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
cf70: 20 76 6f 69 64 20 44 65 6c 65 74 65 53 75 62 4b   void DeleteSubK
cf80: 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey(..           
cf90: 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72       MockRegistr
cfa0: 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20  yKey rootKey,.. 
cfb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
cfc0: 74 72 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65  tring subKeyName
cfd0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
cfe0: 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d     bool throwOnM
cff0: 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20  issing,..       
d000: 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68           bool wh
d010: 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20  atIf,..         
d020: 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62         bool verb
d030: 6f 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ose..           
d040: 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
d050: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
d060: 20 20 20 20 20 20 20 69 66 20 28 72 6f 6f 74 4b         if (rootK
d070: 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ey == null)..   
d080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d090: 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20   return;....    
d0a0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
d0b0: 76 65 72 62 6f 73 65 29 0d 0a 20 20 20 20 20 20  verbose)..      
d0c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
d0d0: 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
d0e0: 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69  race(TracePriori
d0f0: 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20 20  ty.Highest,..   
d100: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d110: 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61       debugCallba
d120: 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63  ck, traceCallbac
d130: 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
d140: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
d150: 20 20 20 20 20 20 20 20 20 20 20 22 72 6f 6f 74             "root
d160: 4b 65 79 20 3d 20 7b 30 7d 2c 20 73 75 62 4b 65  Key = {0}, subKe
d170: 79 4e 61 6d 65 20 3d 20 7b 31 7d 22 2c 0d 0a 20  yName = {1}",.. 
d180: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d190: 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61         ForDispla
d1a0: 79 28 72 6f 6f 74 4b 65 79 29 2c 20 46 6f 72 44  y(rootKey), ForD
d1b0: 69 73 70 6c 61 79 28 73 75 62 4b 65 79 4e 61 6d  isplay(subKeyNam
d1c0: 65 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  e)),..          
d1d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
d1e0: 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
d1f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
d200: 20 69 66 20 28 21 77 68 61 74 49 66 29 0d 0a 20   if (!whatIf).. 
d210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d220: 20 20 20 72 6f 6f 74 4b 65 79 2e 44 65 6c 65 74     rootKey.Delet
d230: 65 53 75 62 4b 65 79 28 73 75 62 4b 65 79 4e 61  eSubKey(subKeyNa
d240: 6d 65 2c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69  me, throwOnMissi
d250: 6e 67 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ng);....        
d260: 20 20 20 20 20 20 20 20 73 75 62 4b 65 79 73 44          subKeysD
d270: 65 6c 65 74 65 64 2b 2b 3b 0d 0a 20 20 20 20 20  eleted++;..     
d280: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
d290: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
d2a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d2b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d2c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d2d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
d2e0: 20 20 20 20 20 20 20 20 20 20 20 5b 4d 65 74 68             [Meth
d2f0: 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70  odImpl(MethodImp
d300: 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e  lOptions.NoInlin
d310: 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20 20  ing)]..         
d320: 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
d330: 20 76 6f 69 64 20 44 65 6c 65 74 65 53 75 62 4b   void DeleteSubK
d340: 65 79 54 72 65 65 28 0d 0a 20 20 20 20 20 20 20  eyTree(..       
d350: 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67           MockReg
d360: 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79  istryKey rootKey
d370: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
d380: 20 20 20 73 74 72 69 6e 67 20 73 75 62 4b 65 79     string subKey
d390: 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
d3a0: 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74         bool what
d3b0: 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If,..           
d3c0: 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73       bool verbos
d3d0: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
d3e0: 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20     )..          
d3f0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
d400: 20 20 20 20 20 69 66 20 28 72 6f 6f 74 4b 65 79       if (rootKey
d410: 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
d420: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
d430: 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20  eturn;....      
d440: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 65            if (ve
d450: 72 62 6f 73 65 29 0d 0a 20 20 20 20 20 20 20 20  rbose)..        
d460: 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
d470: 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
d480: 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79  ce(TracePriority
d490: 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20 20 20 20  .Highest,..     
d4a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d4b0: 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b     debugCallback
d4c0: 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c  , traceCallback,
d4d0: 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
d4e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
d4f0: 20 20 20 20 20 20 20 20 20 22 72 6f 6f 74 4b 65           "rootKe
d500: 79 20 3d 20 7b 30 7d 2c 20 73 75 62 4b 65 79 4e  y = {0}, subKeyN
d510: 61 6d 65 20 3d 20 7b 31 7d 22 2c 0d 0a 20 20 20  ame = {1}",..   
d520: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d530: 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28       ForDisplay(
d540: 72 6f 6f 74 4b 65 79 29 2c 20 46 6f 72 44 69 73  rootKey), ForDis
d550: 70 6c 61 79 28 73 75 62 4b 65 79 4e 61 6d 65 29  play(subKeyName)
d560: 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
d570: 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
d580: 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
d590: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
d5a0: 66 20 28 21 77 68 61 74 49 66 29 0d 0a 20 20 20  f (!whatIf)..   
d5b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d5c0: 20 72 6f 6f 74 4b 65 79 2e 44 65 6c 65 74 65 53   rootKey.DeleteS
d5d0: 75 62 4b 65 79 54 72 65 65 28 73 75 62 4b 65 79  ubKeyTree(subKey
d5e0: 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Name);....      
d5f0: 20 20 20 20 20 20 20 20 20 20 73 75 62 4b 65 79            subKey
d600: 73 44 65 6c 65 74 65 64 2b 2b 3b 0d 0a 20 20 20  sDeleted++;..   
d610: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
d620: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
d630: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d640: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d650: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d660: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
d670: 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 4d 65  .            [Me
d680: 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49  thodImpl(MethodI
d690: 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c  mplOptions.NoInl
d6a0: 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20  ining)]..       
d6b0: 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
d6c0: 69 63 20 73 74 72 69 6e 67 5b 5d 20 47 65 74 53  ic string[] GetS
d6d0: 75 62 4b 65 79 4e 61 6d 65 73 28 0d 0a 20 20 20  ubKeyNames(..   
d6e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63               Moc
d6f0: 6b 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79  kRegistryKey key
d700: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
d710: 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d     bool whatIf,.
d720: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
d730: 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 0d 0a 20   bool verbose.. 
d740: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29                 )
d750: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
d760: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
d770: 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c   if (key == null
d780: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
d790: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75         return nu
d7a0: 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ll;....         
d7b0: 20 20 20 20 20 20 20 69 66 20 28 76 65 72 62 6f         if (verbo
d7c0: 73 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se)..           
d7d0: 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70           TraceOp
d7e0: 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
d7f0: 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69  TracePriority.Hi
d800: 67 68 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  gh,..           
d810: 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62               deb
d820: 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63  ugCallback, trac
d830: 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
d840: 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
d850: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d860: 20 20 20 22 6b 65 79 20 3d 20 7b 30 7d 22 2c 20     "key = {0}", 
d870: 46 6f 72 44 69 73 70 6c 61 79 28 6b 65 79 29 29  ForDisplay(key))
d880: 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29  , traceCategory)
d890: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
d8a0: 20 20 20 20 20 72 65 74 75 72 6e 20 6b 65 79 2e       return key.
d8b0: 47 65 74 53 75 62 4b 65 79 4e 61 6d 65 73 28 29  GetSubKeyNames()
d8c0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
d8d0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
d8e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d8f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d900: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d910: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d920: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
d930: 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d     [MethodImpl(M
d940: 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73  ethodImplOptions
d950: 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20  .NoInlining)].. 
d960: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
d970: 63 20 73 74 61 74 69 63 20 6f 62 6a 65 63 74 20  c static object 
d980: 47 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20  GetValue(..     
d990: 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52             MockR
d9a0: 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 2c 0d  egistryKey key,.
d9b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
d9c0: 20 73 74 72 69 6e 67 20 6e 61 6d 65 2c 0d 0a 20   string name,.. 
d9d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f                 o
d9e0: 62 6a 65 63 74 20 64 65 66 61 75 6c 74 56 61 6c  bject defaultVal
d9f0: 75 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue,..           
da00: 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66       bool whatIf
da10: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
da20: 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 0d     bool verbose.
da30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
da40: 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
da50: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
da60: 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75     if (key == nu
da70: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
da80: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
da90: 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  null;....       
daa0: 20 20 20 20 20 20 20 20 20 69 66 20 28 76 65 72           if (ver
dab0: 62 6f 73 65 29 0d 0a 20 20 20 20 20 20 20 20 20  bose)..         
dac0: 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
dad0: 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
dae0: 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e  e(TracePriority.
daf0: 48 69 67 68 2c 0d 0a 20 20 20 20 20 20 20 20 20  High,..         
db00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
db10: 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72  ebugCallback, tr
db20: 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
db30: 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
db40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
db50: 20 20 20 20 20 22 6b 65 79 20 3d 20 7b 30 7d 2c       "key = {0},
db60: 20 6e 61 6d 65 20 3d 20 7b 31 7d 2c 20 64 65 66   name = {1}, def
db70: 61 75 6c 74 56 61 6c 75 65 20 3d 20 7b 32 7d 22  aultValue = {2}"
db80: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
db90: 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69             ForDi
dba0: 73 70 6c 61 79 28 6b 65 79 29 2c 20 46 6f 72 44  splay(key), ForD
dbb0: 69 73 70 6c 61 79 28 6e 61 6d 65 29 2c 0d 0a 20  isplay(name),.. 
dbc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dbd0: 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61         ForDispla
dbe0: 79 28 64 65 66 61 75 6c 74 56 61 6c 75 65 29 29  y(defaultValue))
dbf0: 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29  , traceCategory)
dc00: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
dc10: 20 20 20 20 20 72 65 74 75 72 6e 20 6b 65 79 2e       return key.
dc20: 47 65 74 56 61 6c 75 65 28 6e 61 6d 65 2c 20 64  GetValue(name, d
dc30: 65 66 61 75 6c 74 56 61 6c 75 65 29 3b 0d 0a 20  efaultValue);.. 
dc40: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
dc50: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
dc60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
dc70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
dc80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
dc90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
dca0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b  ...            [
dcb0: 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f  MethodImpl(Metho
dcc0: 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49  dImplOptions.NoI
dcd0: 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20  nlining)]..     
dce0: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74         public st
dcf0: 61 74 69 63 20 76 6f 69 64 20 53 65 74 56 61 6c  atic void SetVal
dd00: 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue(..           
dd10: 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72       MockRegistr
dd20: 79 4b 65 79 20 6b 65 79 2c 0d 0a 20 20 20 20 20  yKey key,..     
dd30: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
dd40: 67 20 6e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  g name,..       
dd50: 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20           object 
dd60: 76 61 6c 75 65 2c 0d 0a 20 20 20 20 20 20 20 20  value,..        
dd70: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61          bool wha
dd80: 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf,..          
dd90: 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f        bool verbo
dda0: 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
ddb0: 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20      )..         
ddc0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
ddd0: 20 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d        if (key ==
dde0: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
ddf0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
de00: 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  rn;....         
de10: 20 20 20 20 20 20 20 69 66 20 28 76 65 72 62 6f         if (verbo
de20: 73 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se)..           
de30: 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70           TraceOp
de40: 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
de50: 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69  TracePriority.Hi
de60: 67 68 65 73 74 2c 0d 0a 20 20 20 20 20 20 20 20  ghest,..        
de70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
de80: 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74  debugCallback, t
de90: 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
dea0: 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
deb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dec0: 20 20 20 20 20 20 22 6b 65 79 20 3d 20 7b 30 7d        "key = {0}
ded0: 2c 20 6e 61 6d 65 20 3d 20 7b 31 7d 2c 20 76 61  , name = {1}, va
dee0: 6c 75 65 20 3d 20 7b 32 7d 22 2c 0d 0a 20 20 20  lue = {2}",..   
def0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
df00: 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28       ForDisplay(
df10: 6b 65 79 29 2c 20 46 6f 72 44 69 73 70 6c 61 79  key), ForDisplay
df20: 28 6e 61 6d 65 29 2c 20 46 6f 72 44 69 73 70 6c  (name), ForDispl
df30: 61 79 28 76 61 6c 75 65 29 29 2c 0d 0a 20 20 20  ay(value)),..   
df40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
df50: 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
df60: 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
df70: 20 20 20 20 20 20 20 20 69 66 20 28 21 77 68 61          if (!wha
df80: 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf)..          
df90: 20 20 20 20 20 20 20 20 20 20 6b 65 79 2e 53 65            key.Se
dfa0: 74 56 61 6c 75 65 28 6e 61 6d 65 2c 20 76 61 6c  tValue(name, val
dfb0: 75 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ue);....        
dfc0: 20 20 20 20 20 20 20 20 6b 65 79 56 61 6c 75 65          keyValue
dfd0: 73 53 65 74 2b 2b 3b 0d 0a 20 20 20 20 20 20 20  sSet++;..       
dfe0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
dff0: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
e000: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e010: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e020: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e030: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
e040: 20 20 20 20 20 20 20 20 20 5b 4d 65 74 68 6f 64           [Method
e050: 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f  Impl(MethodImplO
e060: 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e  ptions.NoInlinin
e070: 67 29 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  g)]..           
e080: 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 76   public static v
e090: 6f 69 64 20 44 65 6c 65 74 65 56 61 6c 75 65 28  oid DeleteValue(
e0a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e0b0: 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65    MockRegistryKe
e0c0: 79 20 6b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20  y key,..        
e0d0: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6e          string n
e0e0: 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
e0f0: 20 20 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77        bool throw
e100: 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20  OnMissing,..    
e110: 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
e120: 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20   whatIf,..      
e130: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76            bool v
e140: 65 72 62 6f 73 65 0d 0a 20 20 20 20 20 20 20 20  erbose..        
e150: 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
e160: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
e170: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6b 65            if (ke
e180: 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y == null)..    
e190: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e1a0: 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20  return;....     
e1b0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76             if (v
e1c0: 65 72 62 6f 73 65 29 0d 0a 20 20 20 20 20 20 20  erbose)..       
e1d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
e1e0: 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72  ceOps.DebugAndTr
e1f0: 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74  ace(TracePriorit
e200: 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20 20 20  y.Highest,..    
e210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e220: 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63      debugCallbac
e230: 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  k, traceCallback
e240: 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
e250: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e260: 20 20 20 20 20 20 20 20 20 20 22 6b 65 79 20 3d            "key =
e270: 20 7b 30 7d 2c 20 6e 61 6d 65 20 3d 20 7b 31 7d   {0}, name = {1}
e280: 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6b 65  ", ForDisplay(ke
e290: 79 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  y),..           
e2a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72               For
e2b0: 44 69 73 70 6c 61 79 28 6e 61 6d 65 29 29 2c 20  Display(name)), 
e2c0: 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
e2d0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
e2e0: 20 20 20 69 66 20 28 21 77 68 61 74 49 66 29 0d     if (!whatIf).
e2f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
e300: 20 20 20 20 20 6b 65 79 2e 44 65 6c 65 74 65 56       key.DeleteV
e310: 61 6c 75 65 28 6e 61 6d 65 2c 20 74 68 72 6f 77  alue(name, throw
e320: 4f 6e 4d 69 73 73 69 6e 67 29 3b 0d 0a 0d 0a 20  OnMissing);.... 
e330: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b                 k
e340: 65 79 56 61 6c 75 65 73 44 65 6c 65 74 65 64 2b  eyValuesDeleted+
e350: 2b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  +;..            
e360: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  }..            #
e370: 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20 20  endregion..     
e380: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65     }..        #e
e390: 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
e3a0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
e3b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e3c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e3d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e3e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
e3f0: 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 53         #region S
e400: 74 72 69 6e 67 4c 69 73 74 20 43 6c 61 73 73 0d  tringList Class.
e410: 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
e420: 20 73 65 61 6c 65 64 20 63 6c 61 73 73 20 53 74   sealed class St
e430: 72 69 6e 67 4c 69 73 74 20 3a 20 4c 69 73 74 3c  ringList : List<
e440: 73 74 72 69 6e 67 3e 0d 0a 20 20 20 20 20 20 20  string>..       
e450: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
e460: 70 75 62 6c 69 63 20 53 74 72 69 6e 67 4c 69 73  public StringLis
e470: 74 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t()..           
e480: 20 20 20 20 20 3a 20 62 61 73 65 28 29 0d 0a 20       : base().. 
e490: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
e4a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
e4b0: 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20   do nothing...  
e4c0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
e4d0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
e4e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e4f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e500: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e510: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
e520: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
e530: 62 6c 69 63 20 53 74 72 69 6e 67 4c 69 73 74 28  blic StringList(
e540: 49 45 6e 75 6d 65 72 61 62 6c 65 3c 73 74 72 69  IEnumerable<stri
e550: 6e 67 3e 20 63 6f 6c 6c 65 63 74 69 6f 6e 29 0d  ng> collection).
e560: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
e570: 20 3a 20 62 61 73 65 28 63 6f 6c 6c 65 63 74 69   : base(collecti
e580: 6f 6e 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on)..           
e590: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
e5a0: 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e      // do nothin
e5b0: 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g...            
e5c0: 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  }..        }..  
e5d0: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
e5e0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
e5f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e600: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e610: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e620: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e630: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ///....        #
e640: 72 65 67 69 6f 6e 20 53 74 72 69 6e 67 44 69 63  region StringDic
e650: 74 69 6f 6e 61 72 79 20 43 6c 61 73 73 0d 0a 20  tionary Class.. 
e660: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
e670: 65 61 6c 65 64 20 63 6c 61 73 73 20 53 74 72 69  ealed class Stri
e680: 6e 67 44 69 63 74 69 6f 6e 61 72 79 20 3a 20 44  ngDictionary : D
e690: 69 63 74 69 6f 6e 61 72 79 3c 73 74 72 69 6e 67  ictionary<string
e6a0: 2c 20 73 74 72 69 6e 67 3e 0d 0a 20 20 20 20 20  , string>..     
e6b0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
e6c0: 20 20 70 75 62 6c 69 63 20 53 74 72 69 6e 67 44    public StringD
e6d0: 69 63 74 69 6f 6e 61 72 79 28 29 0d 0a 20 20 20  ictionary()..   
e6e0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
e6f0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64              // d
e700: 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20  o nothing...    
e710: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
e720: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65     }..        #e
e730: 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
e740: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
e750: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e760: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e770: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e780: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
e790: 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 56         #region V
e7a0: 65 72 73 69 6f 6e 4c 69 73 74 20 43 6c 61 73 73  ersionList Class
e7b0: 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
e7c0: 65 20 73 65 61 6c 65 64 20 63 6c 61 73 73 20 56  e sealed class V
e7d0: 65 72 73 69 6f 6e 4c 69 73 74 20 3a 20 4c 69 73  ersionList : Lis
e7e0: 74 3c 56 65 72 73 69 6f 6e 3e 0d 0a 20 20 20 20  t<Version>..    
e7f0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
e800: 20 20 20 70 75 62 6c 69 63 20 56 65 72 73 69 6f     public Versio
e810: 6e 4c 69 73 74 28 29 0d 0a 20 20 20 20 20 20 20  nList()..       
e820: 20 20 20 20 20 20 20 20 20 3a 20 62 61 73 65 28           : base(
e830: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
e840: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e850: 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e    // do nothing.
e860: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
e870: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
e880: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e890: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e8a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e8b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e8c0: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
e8d0: 20 20 70 75 62 6c 69 63 20 56 65 72 73 69 6f 6e    public Version
e8e0: 4c 69 73 74 28 49 45 6e 75 6d 65 72 61 62 6c 65  List(IEnumerable
e8f0: 3c 56 65 72 73 69 6f 6e 3e 20 63 6f 6c 6c 65 63  <Version> collec
e900: 74 69 6f 6e 29 0d 0a 20 20 20 20 20 20 20 20 20  tion)..         
e910: 20 20 20 20 20 20 20 3a 20 62 61 73 65 28 63 6f         : base(co
e920: 6c 6c 65 63 74 69 6f 6e 29 0d 0a 20 20 20 20 20  llection)..     
e930: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
e940: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20            // do 
e950: 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20  nothing...      
e960: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
e970: 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64   }..        #end
e980: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
e990: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
e9a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e9b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e9c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e9d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
e9e0: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 56 65 72       #region Ver
e9f0: 73 69 6f 6e 4d 61 70 20 43 6c 61 73 73 0d 0a 20  sionMap Class.. 
ea00: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
ea10: 65 61 6c 65 64 20 63 6c 61 73 73 20 56 65 72 73  ealed class Vers
ea20: 69 6f 6e 4d 61 70 20 3a 20 44 69 63 74 69 6f 6e  ionMap : Diction
ea30: 61 72 79 3c 73 74 72 69 6e 67 2c 20 56 65 72 73  ary<string, Vers
ea40: 69 6f 6e 4c 69 73 74 3e 0d 0a 20 20 20 20 20 20  ionList>..      
ea50: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
ea60: 20 70 75 62 6c 69 63 20 56 65 72 73 69 6f 6e 4d   public VersionM
ea70: 61 70 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ap()..          
ea80: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
ea90: 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69       // do nothi
eaa0: 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ng...           
eab0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20   }..        }.. 
eac0: 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
ead0: 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  n....        ///
eae0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eaf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eb00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eb10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eb20: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
eb30: 23 72 65 67 69 6f 6e 20 50 61 63 6b 61 67 65 20  #region Package 
eb40: 43 6c 61 73 73 0d 0a 20 20 20 20 20 20 20 20 69  Class..        i
eb50: 6e 74 65 72 6e 61 6c 20 73 65 61 6c 65 64 20 63  nternal sealed c
eb60: 6c 61 73 73 20 50 61 63 6b 61 67 65 0d 0a 20 20  lass Package..  
eb70: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
eb80: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62       #region Pub
eb90: 6c 69 63 20 43 6f 6e 73 74 72 75 63 74 6f 72 73  lic Constructors
eba0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
ebb0: 62 6c 69 63 20 50 61 63 6b 61 67 65 28 29 0d 0a  blic Package()..
ebc0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
ebd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
ebe0: 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20  / do nothing... 
ebf0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
ec00: 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65            #endre
ec10: 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
ec20: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
ec30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ec40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ec50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ec60: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
ec70: 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50         #region P
ec80: 75 62 6c 69 63 20 50 72 6f 70 65 72 74 69 65 73  ublic Properties
ec90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
eca0: 69 76 61 74 65 20 73 74 72 69 6e 67 20 70 72 6f  ivate string pro
ecb0: 76 69 64 65 72 49 6e 76 61 72 69 61 6e 74 4e 61  viderInvariantNa
ecc0: 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me;..           
ecd0: 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20 50   public string P
ece0: 72 6f 76 69 64 65 72 49 6e 76 61 72 69 61 6e 74  roviderInvariant
ecf0: 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20  Name..          
ed00: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
ed10: 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
ed20: 6e 20 70 72 6f 76 69 64 65 72 49 6e 76 61 72 69  n providerInvari
ed30: 61 6e 74 4e 61 6d 65 3b 20 7d 0d 0a 20 20 20 20  antName; }..    
ed40: 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
ed50: 7b 20 70 72 6f 76 69 64 65 72 49 6e 76 61 72 69  { providerInvari
ed60: 61 6e 74 4e 61 6d 65 20 3d 20 76 61 6c 75 65 3b  antName = value;
ed70: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
ed80: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
ed90: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
eda0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
edb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
edc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
edd0: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
ede0: 20 20 20 20 70 72 69 76 61 74 65 20 73 74 72 69      private stri
edf0: 6e 67 20 66 61 63 74 6f 72 79 54 79 70 65 4e 61  ng factoryTypeNa
ee00: 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me;..           
ee10: 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20 46   public string F
ee20: 61 63 74 6f 72 79 54 79 70 65 4e 61 6d 65 0d 0a  actoryTypeName..
ee30: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
ee40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
ee50: 65 74 20 7b 20 72 65 74 75 72 6e 20 66 61 63 74  et { return fact
ee60: 6f 72 79 54 79 70 65 4e 61 6d 65 3b 20 7d 0d 0a  oryTypeName; }..
ee70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ee80: 73 65 74 20 7b 20 66 61 63 74 6f 72 79 54 79 70  set { factoryTyp
ee90: 65 4e 61 6d 65 20 3d 20 76 61 6c 75 65 3b 20 7d  eName = value; }
eea0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
eeb0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
eec0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eed0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eee0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eef0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ef00: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
ef10: 20 20 70 72 69 76 61 74 65 20 41 73 73 65 6d 62    private Assemb
ef20: 6c 79 4e 61 6d 65 20 70 72 6f 76 69 64 65 72 41  lyName providerA
ef30: 73 73 65 6d 62 6c 79 4e 61 6d 65 3b 0d 0a 20 20  ssemblyName;..  
ef40: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
ef50: 20 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20 50 72   AssemblyName Pr
ef60: 6f 76 69 64 65 72 41 73 73 65 6d 62 6c 79 4e 61  oviderAssemblyNa
ef70: 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  me..            
ef80: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
ef90: 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
efa0: 70 72 6f 76 69 64 65 72 41 73 73 65 6d 62 6c 79  providerAssembly
efb0: 4e 61 6d 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  Name; }..       
efc0: 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 70           set { p
efd0: 72 6f 76 69 64 65 72 41 73 73 65 6d 62 6c 79 4e  roviderAssemblyN
efe0: 61 6d 65 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  ame = value; }..
eff0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
f000: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
f010: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f020: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f030: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f040: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f050: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
f060: 70 72 69 76 61 74 65 20 41 73 73 65 6d 62 6c 79  private Assembly
f070: 4e 61 6d 65 20 64 65 73 69 67 6e 65 72 41 73 73  Name designerAss
f080: 65 6d 62 6c 79 4e 61 6d 65 3b 0d 0a 20 20 20 20  emblyName;..    
f090: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 41          public A
f0a0: 73 73 65 6d 62 6c 79 4e 61 6d 65 20 44 65 73 69  ssemblyName Desi
f0b0: 67 6e 65 72 41 73 73 65 6d 62 6c 79 4e 61 6d 65  gnerAssemblyName
f0c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
f0d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
f0e0: 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 64 65   get { return de
f0f0: 73 69 67 6e 65 72 41 73 73 65 6d 62 6c 79 4e 61  signerAssemblyNa
f100: 6d 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  me; }..         
f110: 20 20 20 20 20 20 20 73 65 74 20 7b 20 64 65 73         set { des
f120: 69 67 6e 65 72 41 73 73 65 6d 62 6c 79 4e 61 6d  ignerAssemblyNam
f130: 65 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20  e = value; }..  
f140: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
f150: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
f160: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f170: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f180: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f190: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
f1a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
f1b0: 69 76 61 74 65 20 62 6f 6f 6c 20 67 6c 6f 62 61  ivate bool globa
f1c0: 6c 41 73 73 65 6d 62 6c 79 43 61 63 68 65 3b 0d  lAssemblyCache;.
f1d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
f1e0: 6c 69 63 20 62 6f 6f 6c 20 47 6c 6f 62 61 6c 41  lic bool GlobalA
f1f0: 73 73 65 6d 62 6c 79 43 61 63 68 65 0d 0a 20 20  ssemblyCache..  
f200: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
f210: 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
f220: 20 7b 20 72 65 74 75 72 6e 20 67 6c 6f 62 61 6c   { return global
f230: 41 73 73 65 6d 62 6c 79 43 61 63 68 65 3b 20 7d  AssemblyCache; }
f240: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
f250: 20 20 73 65 74 20 7b 20 67 6c 6f 62 61 6c 41 73    set { globalAs
f260: 73 65 6d 62 6c 79 43 61 63 68 65 20 3d 20 76 61  semblyCache = va
f270: 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  lue; }..        
f280: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
f290: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
f2a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f2b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f2c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f2d0: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
f2e0: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
f2f0: 47 75 69 64 20 70 61 63 6b 61 67 65 49 64 3b 0d  Guid packageId;.
f300: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
f310: 6c 69 63 20 47 75 69 64 20 50 61 63 6b 61 67 65  lic Guid Package
f320: 49 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  Id..            
f330: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
f340: 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
f350: 70 61 63 6b 61 67 65 49 64 3b 20 7d 0d 0a 20 20  packageId; }..  
f360: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
f370: 74 20 7b 20 70 61 63 6b 61 67 65 49 64 20 3d 20  t { packageId = 
f380: 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
f390: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
f3a0: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
f3b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f3c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f3d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f3e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
f3f0: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
f400: 65 20 47 75 69 64 20 73 65 72 76 69 63 65 49 64  e Guid serviceId
f410: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
f420: 75 62 6c 69 63 20 47 75 69 64 20 53 65 72 76 69  ublic Guid Servi
f430: 63 65 49 64 0d 0a 20 20 20 20 20 20 20 20 20 20  ceId..          
f440: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
f450: 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
f460: 6e 20 73 65 72 76 69 63 65 49 64 3b 20 7d 0d 0a  n serviceId; }..
f470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f480: 73 65 74 20 7b 20 73 65 72 76 69 63 65 49 64 20  set { serviceId 
f490: 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
f4a0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
f4b0: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
f4c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f4d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f4e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f4f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
f500: 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
f510: 61 74 65 20 47 75 69 64 20 64 61 74 61 53 6f 75  ate Guid dataSou
f520: 72 63 65 49 64 3b 0d 0a 20 20 20 20 20 20 20 20  rceId;..        
f530: 20 20 20 20 70 75 62 6c 69 63 20 47 75 69 64 20      public Guid 
f540: 44 61 74 61 53 6f 75 72 63 65 49 64 0d 0a 20 20  DataSourceId..  
f550: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
f560: 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
f570: 20 7b 20 72 65 74 75 72 6e 20 64 61 74 61 53 6f   { return dataSo
f580: 75 72 63 65 49 64 3b 20 7d 0d 0a 20 20 20 20 20  urceId; }..     
f590: 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
f5a0: 20 64 61 74 61 53 6f 75 72 63 65 49 64 20 3d 20   dataSourceId = 
f5b0: 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
f5c0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
f5d0: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
f5e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f5f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f600: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f610: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
f620: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
f630: 65 20 47 75 69 64 20 64 61 74 61 50 72 6f 76 69  e Guid dataProvi
f640: 64 65 72 49 64 3b 0d 0a 20 20 20 20 20 20 20 20  derId;..        
f650: 20 20 20 20 70 75 62 6c 69 63 20 47 75 69 64 20      public Guid 
f660: 44 61 74 61 50 72 6f 76 69 64 65 72 49 64 0d 0a  DataProviderId..
f670: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
f680: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
f690: 65 74 20 7b 20 72 65 74 75 72 6e 20 64 61 74 61  et { return data
f6a0: 50 72 6f 76 69 64 65 72 49 64 3b 20 7d 0d 0a 20  ProviderId; }.. 
f6b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
f6c0: 65 74 20 7b 20 64 61 74 61 50 72 6f 76 69 64 65  et { dataProvide
f6d0: 72 49 64 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  rId = value; }..
f6e0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
f6f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
f700: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f710: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f720: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f730: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f740: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
f750: 70 72 69 76 61 74 65 20 47 75 69 64 20 61 64 6f  private Guid ado
f760: 4e 65 74 54 65 63 68 6e 6f 6c 6f 67 79 49 64 3b  NetTechnologyId;
f770: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
f780: 62 6c 69 63 20 47 75 69 64 20 41 64 6f 4e 65 74  blic Guid AdoNet
f790: 54 65 63 68 6e 6f 6c 6f 67 79 49 64 0d 0a 20 20  TechnologyId..  
f7a0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
f7b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
f7c0: 20 7b 20 72 65 74 75 72 6e 20 61 64 6f 4e 65 74   { return adoNet
f7d0: 54 65 63 68 6e 6f 6c 6f 67 79 49 64 3b 20 7d 0d  TechnologyId; }.
f7e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
f7f0: 20 73 65 74 20 7b 20 61 64 6f 4e 65 74 54 65 63   set { adoNetTec
f800: 68 6e 6f 6c 6f 67 79 49 64 20 3d 20 76 61 6c 75  hnologyId = valu
f810: 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
f820: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
f830: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20   #endregion..   
f840: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
f850: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
f860: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
f870: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f880: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f890: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f8a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
f8b0: 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e  .        #region
f8c0: 20 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 43   Configuration C
f8d0: 6c 61 73 73 0d 0a 20 20 20 20 20 20 20 20 70 72  lass..        pr
f8e0: 69 76 61 74 65 20 73 65 61 6c 65 64 20 63 6c 61  ivate sealed cla
f8f0: 73 73 20 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e  ss Configuration
f900: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
f910: 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e           #region
f920: 20 50 72 69 76 61 74 65 20 43 6f 6e 73 74 61 6e   Private Constan
f930: 74 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ts..            
f940: 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 63 68  private const ch
f950: 61 72 20 53 77 69 74 63 68 20 3d 20 27 2d 27 3b  ar Switch = '-';
f960: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
f970: 69 76 61 74 65 20 63 6f 6e 73 74 20 63 68 61 72  ivate const char
f980: 20 41 6c 74 53 77 69 74 63 68 20 3d 20 27 2f 27   AltSwitch = '/'
f990: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
f9a0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
f9b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f9c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f9d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f9e0: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
f9f0: 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
fa00: 69 63 20 72 65 61 64 6f 6e 6c 79 20 63 68 61 72  ic readonly char
fa10: 5b 5d 20 53 77 69 74 63 68 43 68 61 72 73 20 3d  [] SwitchChars =
fa20: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
fa30: 20 20 20 20 53 77 69 74 63 68 2c 20 41 6c 74 53      Switch, AltS
fa40: 77 69 74 63 68 0d 0a 20 20 20 20 20 20 20 20 20  witch..         
fa50: 20 20 20 7d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20     };....       
fa60: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
fa70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fa80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fa90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
faa0: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
fab0: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
fac0: 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 49 6e 76  const string Inv
fad0: 61 72 69 61 6e 74 4e 61 6d 65 20 3d 20 22 53 79  ariantName = "Sy
fae0: 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
faf0: 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ";..            
fb00: 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74  private const st
fb10: 72 69 6e 67 20 45 66 36 49 6e 76 61 72 69 61 6e  ring Ef6Invarian
fb20: 74 4e 61 6d 65 20 3d 20 22 53 79 73 74 65 6d 2e  tName = "System.
fb30: 44 61 74 61 2e 53 51 4c 69 74 65 2e 45 46 36 22  Data.SQLite.EF6"
fb40: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
fb50: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
fb60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fb70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fb80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fb90: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
fba0: 20 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73      private cons
fbb0: 74 20 73 74 72 69 6e 67 20 46 61 63 74 6f 72 79  t string Factory
fbc0: 54 79 70 65 4e 61 6d 65 20 3d 0d 0a 20 20 20 20  TypeName =..    
fbd0: 20 20 20 20 20 20 20 20 20 20 20 20 22 53 79 73              "Sys
fbe0: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e  tem.Data.SQLite.
fbf0: 53 51 4c 69 74 65 46 61 63 74 6f 72 79 22 3b 0d  SQLiteFactory";.
fc00: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
fc10: 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72  rivate const str
fc20: 69 6e 67 20 45 66 36 46 61 63 74 6f 72 79 54 79  ing Ef6FactoryTy
fc30: 70 65 4e 61 6d 65 20 3d 0d 0a 20 20 20 20 20 20  peName =..      
fc40: 20 20 20 20 20 20 20 20 20 20 22 53 79 73 74 65            "Syste
fc50: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 45 46  m.Data.SQLite.EF
fc60: 36 2e 53 51 4c 69 74 65 50 72 6f 76 69 64 65 72  6.SQLiteProvider
fc70: 46 61 63 74 6f 72 79 22 3b 0d 0a 20 20 20 20 20  Factory";..     
fc80: 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
fc90: 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n....           
fca0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
fcb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fcc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fcd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fce0: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
fcf0: 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72 69 76      #region Priv
fd00: 61 74 65 20 53 74 61 74 69 63 20 44 61 74 61 0d  ate Static Data.
fd10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
fd20: 76 61 74 65 20 73 74 61 74 69 63 20 41 73 73 65  vate static Asse
fd30: 6d 62 6c 79 20 73 79 73 74 65 6d 45 66 36 41 73  mbly systemEf6As
fd40: 73 65 6d 62 6c 79 3b 0d 0a 20 20 20 20 20 20 20  sembly;..       
fd50: 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
fd60: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
fd70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fd80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fd90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fda0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fdb0: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
fdc0: 20 20 23 72 65 67 69 6f 6e 20 50 72 69 76 61 74    #region Privat
fdd0: 65 20 44 61 74 61 0d 0a 20 20 20 20 20 20 20 20  e Data..        
fde0: 20 20 20 20 70 72 69 76 61 74 65 20 41 73 73 65      private Asse
fdf0: 6d 62 6c 79 4e 61 6d 65 20 63 6f 72 65 41 73 73  mblyName coreAss
fe00: 65 6d 62 6c 79 4e 61 6d 65 3b 0d 0a 20 20 20 20  emblyName;..    
fe10: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
fe20: 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20 6c 69 6e  AssemblyName lin
fe30: 71 41 73 73 65 6d 62 6c 79 4e 61 6d 65 3b 0d 0a  qAssemblyName;..
fe40: 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
fe50: 61 74 65 20 41 73 73 65 6d 62 6c 79 4e 61 6d 65  ate AssemblyName
fe60: 20 65 66 36 41 73 73 65 6d 62 6c 79 4e 61 6d 65   ef6AssemblyName
fe70: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
fe80: 72 69 76 61 74 65 20 41 73 73 65 6d 62 6c 79 4e  rivate AssemblyN
fe90: 61 6d 65 20 64 65 73 69 67 6e 65 72 41 73 73 65  ame designerAsse
fea0: 6d 62 6c 79 4e 61 6d 65 3b 0d 0a 20 20 20 20 20  mblyName;..     
feb0: 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
fec0: 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n....           
fed0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
fee0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fef0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ff00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ff10: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
ff20: 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72 69 76      #region Priv
ff30: 61 74 65 20 43 6f 6e 73 74 72 75 63 74 6f 72 73  ate Constructors
ff40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
ff50: 69 76 61 74 65 20 43 6f 6e 66 69 67 75 72 61 74  ivate Configurat
ff60: 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ion(..          
ff70: 20 20 20 20 20 20 41 73 73 65 6d 62 6c 79 20 61        Assembly a
ff80: 73 73 65 6d 62 6c 79 2c 0d 0a 20 20 20 20 20 20  ssembly,..      
ff90: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
ffa0: 20 6c 6f 67 46 69 6c 65 4e 61 6d 65 2c 0d 0a 20   logFileName,.. 
ffb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
ffc0: 74 72 69 6e 67 20 64 69 72 65 63 74 6f 72 79 2c  tring directory,
ffd0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
ffe0: 20 20 73 74 72 69 6e 67 20 63 6f 72 65 46 69 6c    string coreFil
fff0: 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  eName,..        
10000 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6c          string l
10010 69 6e 71 46 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20  inqFileName,..  
10020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
10030 72 69 6e 67 20 65 66 36 46 69 6c 65 4e 61 6d 65  ring ef6FileName
10040 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
10050 20 20 20 73 74 72 69 6e 67 20 64 65 73 69 67 6e     string design
10060 65 72 46 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20  erFileName,..   
10070 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
10080 69 6e 67 20 72 65 67 69 73 74 72 79 56 65 72 73  ing registryVers
10090 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ion,..          
100a0 20 20 20 20 20 20 73 74 72 69 6e 67 20 63 6f 6e        string con
100b0 66 69 67 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20  figVersion,..   
100c0 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
100d0 69 6e 67 20 76 73 56 65 72 73 69 6f 6e 53 75 66  ing vsVersionSuf
100e0 66 69 78 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  fix,..          
100f0 20 20 20 20 20 20 73 74 72 69 6e 67 20 64 65 62        string deb
10100 75 67 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20  ugFormat,..     
10110 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
10120 67 20 74 72 61 63 65 46 6f 72 6d 61 74 2c 0d 0a  g traceFormat,..
10130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10140 49 6e 73 74 61 6c 6c 46 6c 61 67 73 20 69 6e 73  InstallFlags ins
10150 74 61 6c 6c 46 6c 61 67 73 2c 0d 0a 20 20 20 20  tallFlags,..    
10160 20 20 20 20 20 20 20 20 20 20 20 20 50 72 6f 76              Prov
10170 69 64 65 72 46 6c 61 67 73 20 70 72 6f 76 69 64  iderFlags provid
10180 65 72 46 6c 61 67 73 2c 0d 0a 20 20 20 20 20 20  erFlags,..      
10190 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50            TraceP
101a0 72 69 6f 72 69 74 79 20 64 65 62 75 67 50 72 69  riority debugPri
101b0 6f 72 69 74 79 2c 0d 0a 20 20 20 20 20 20 20 20  ority,..        
101c0 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69          TracePri
101d0 6f 72 69 74 79 20 74 72 61 63 65 50 72 69 6f 72  ority tracePrior
101e0 69 74 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ity,..          
101f0 20 20 20 20 20 20 62 6f 6f 6c 20 70 65 72 55 73        bool perUs
10200 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  er,..           
10210 20 20 20 20 20 62 6f 6f 6c 20 69 6e 73 74 61 6c       bool instal
10220 6c 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l,..            
10230 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d      bool wow64,.
10240 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10250 20 62 6f 6f 6c 20 6e 6f 52 75 6e 74 69 6d 65 56   bool noRuntimeV
10260 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20  ersion,..       
10270 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f           bool no
10280 44 65 73 6b 74 6f 70 2c 0d 0a 20 20 20 20 20 20  Desktop,..      
10290 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e            bool n
102a0 6f 43 6f 6d 70 61 63 74 2c 0d 0a 20 20 20 20 20  oCompact,..     
102b0 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
102c0 6e 6f 4e 65 74 46 78 32 30 2c 0d 0a 20 20 20 20  noNetFx20,..    
102d0 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
102e0 20 6e 6f 4e 65 74 46 78 33 35 2c 0d 0a 20 20 20   noNetFx35,..   
102f0 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
10300 6c 20 6e 6f 4e 65 74 46 78 34 30 2c 0d 0a 20 20  l noNetFx40,..  
10310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
10320 6f 6c 20 6e 6f 4e 65 74 46 78 34 35 2c 0d 0a 20  ol noNetFx45,.. 
10330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
10340 6f 6f 6c 20 6e 6f 4e 65 74 46 78 34 35 31 2c 0d  ool noNetFx451,.
10350 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10360 20 62 6f 6f 6c 20 6e 6f 56 73 32 30 30 35 2c 0d   bool noVs2005,.
10370 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10380 20 62 6f 6f 6c 20 6e 6f 56 73 32 30 30 38 2c 0d   bool noVs2008,.
10390 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
103a0 20 62 6f 6f 6c 20 6e 6f 56 73 32 30 31 30 2c 0d   bool noVs2010,.
103b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
103c0 20 62 6f 6f 6c 20 6e 6f 56 73 32 30 31 32 2c 0d   bool noVs2012,.
103d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
103e0 20 62 6f 6f 6c 20 6e 6f 56 73 32 30 31 33 2c 0d   bool noVs2013,.
103f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10400 20 62 6f 6f 6c 20 6e 6f 54 72 61 63 65 2c 0d 0a   bool noTrace,..
10410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10420 62 6f 6f 6c 20 6e 6f 43 6f 6e 73 6f 6c 65 2c 0d  bool noConsole,.
10430 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10440 20 62 6f 6f 6c 20 6e 6f 4c 6f 67 2c 0d 0a 20 20   bool noLog,..  
10450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
10460 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e  ol throwOnMissin
10470 67 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g,..            
10480 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c      bool whatIf,
10490 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
104a0 20 20 62 6f 6f 6c 20 64 65 62 75 67 2c 0d 0a 20    bool debug,.. 
104b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
104c0 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20  ool verbose,..  
104d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
104e0 6f 6c 20 63 6f 6e 66 69 72 6d 0d 0a 20 20 20 20  ol confirm..    
104f0 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
10500 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
10510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
10520 69 73 2e 61 73 73 65 6d 62 6c 79 20 3d 20 61 73  is.assembly = as
10530 73 65 6d 62 6c 79 3b 0d 0a 20 20 20 20 20 20 20  sembly;..       
10540 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 6c 6f           this.lo
10550 67 46 69 6c 65 4e 61 6d 65 20 3d 20 6c 6f 67 46  gFileName = logF
10560 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20  ileName;..      
10570 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 64            this.d
10580 69 72 65 63 74 6f 72 79 20 3d 20 64 69 72 65 63  irectory = direc
10590 74 6f 72 79 3b 0d 0a 20 20 20 20 20 20 20 20 20  tory;..         
105a0 20 20 20 20 20 20 20 74 68 69 73 2e 63 6f 72 65         this.core
105b0 46 69 6c 65 4e 61 6d 65 20 3d 20 63 6f 72 65 46  FileName = coreF
105c0 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20  ileName;..      
105d0 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 6c            this.l
105e0 69 6e 71 46 69 6c 65 4e 61 6d 65 20 3d 20 6c 69  inqFileName = li
105f0 6e 71 46 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20  nqFileName;..   
10600 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
10610 73 2e 65 66 36 46 69 6c 65 4e 61 6d 65 20 3d 20  s.ef6FileName = 
10620 65 66 36 46 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20  ef6FileName;..  
10630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
10640 69 73 2e 64 65 73 69 67 6e 65 72 46 69 6c 65 4e  is.designerFileN
10650 61 6d 65 20 3d 20 64 65 73 69 67 6e 65 72 46 69  ame = designerFi
10660 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20  leName;..       
10670 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 72 65           this.re
10680 67 69 73 74 72 79 56 65 72 73 69 6f 6e 20 3d 20  gistryVersion = 
10690 72 65 67 69 73 74 72 79 56 65 72 73 69 6f 6e 3b  registryVersion;
106a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
106b0 20 20 74 68 69 73 2e 63 6f 6e 66 69 67 56 65 72    this.configVer
106c0 73 69 6f 6e 20 3d 20 63 6f 6e 66 69 67 56 65 72  sion = configVer
106d0 73 69 6f 6e 3b 0d 0a 20 20 20 20 20 20 20 20 20  sion;..         
106e0 20 20 20 20 20 20 20 74 68 69 73 2e 76 73 56 65         this.vsVe
106f0 72 73 69 6f 6e 53 75 66 66 69 78 20 3d 20 76 73  rsionSuffix = vs
10700 56 65 72 73 69 6f 6e 53 75 66 66 69 78 3b 0d 0a  VersionSuffix;..
10710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10720 74 68 69 73 2e 64 65 62 75 67 46 6f 72 6d 61 74  this.debugFormat
10730 20 3d 20 64 65 62 75 67 46 6f 72 6d 61 74 3b 0d   = debugFormat;.
10740 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10750 20 74 68 69 73 2e 74 72 61 63 65 46 6f 72 6d 61   this.traceForma
10760 74 20 3d 20 74 72 61 63 65 46 6f 72 6d 61 74 3b  t = traceFormat;
10770 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10780 20 20 74 68 69 73 2e 69 6e 73 74 61 6c 6c 46 6c    this.installFl
10790 61 67 73 20 3d 20 69 6e 73 74 61 6c 6c 46 6c 61  ags = installFla
107a0 67 73 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  gs;..           
107b0 20 20 20 20 20 74 68 69 73 2e 70 72 6f 76 69 64       this.provid
107c0 65 72 46 6c 61 67 73 20 3d 20 70 72 6f 76 69 64  erFlags = provid
107d0 65 72 46 6c 61 67 73 3b 0d 0a 20 20 20 20 20 20  erFlags;..      
107e0 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 64            this.d
107f0 65 62 75 67 50 72 69 6f 72 69 74 79 20 3d 20 64  ebugPriority = d
10800 65 62 75 67 50 72 69 6f 72 69 74 79 3b 0d 0a 20  ebugPriority;.. 
10810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
10820 68 69 73 2e 74 72 61 63 65 50 72 69 6f 72 69 74  his.tracePriorit
10830 79 20 3d 20 74 72 61 63 65 50 72 69 6f 72 69 74  y = tracePriorit
10840 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y;..            
10850 20 20 20 20 74 68 69 73 2e 70 65 72 55 73 65 72      this.perUser
10860 20 3d 20 70 65 72 55 73 65 72 3b 0d 0a 20 20 20   = perUser;..   
10870 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
10880 73 2e 69 6e 73 74 61 6c 6c 20 3d 20 69 6e 73 74  s.install = inst
10890 61 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  all;..          
108a0 20 20 20 20 20 20 74 68 69 73 2e 77 6f 77 36 34        this.wow64
108b0 20 3d 20 77 6f 77 36 34 3b 0d 0a 20 20 20 20 20   = wow64;..     
108c0 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
108d0 6e 6f 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e  noRuntimeVersion
108e0 20 3d 20 6e 6f 52 75 6e 74 69 6d 65 56 65 72 73   = noRuntimeVers
108f0 69 6f 6e 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ion;..          
10900 20 20 20 20 20 20 74 68 69 73 2e 6e 6f 44 65 73        this.noDes
10910 6b 74 6f 70 20 3d 20 6e 6f 44 65 73 6b 74 6f 70  ktop = noDesktop
10920 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
10930 20 20 20 74 68 69 73 2e 6e 6f 43 6f 6d 70 61 63     this.noCompac
10940 74 20 3d 20 6e 6f 43 6f 6d 70 61 63 74 3b 0d 0a  t = noCompact;..
10950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10960 74 68 69 73 2e 6e 6f 4e 65 74 46 78 32 30 20 3d  this.noNetFx20 =
10970 20 6e 6f 4e 65 74 46 78 32 30 3b 0d 0a 20 20 20   noNetFx20;..   
10980 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
10990 73 2e 6e 6f 4e 65 74 46 78 33 35 20 3d 20 6e 6f  s.noNetFx35 = no
109a0 4e 65 74 46 78 33 35 3b 0d 0a 20 20 20 20 20 20  NetFx35;..      
109b0 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 6e            this.n
109c0 6f 4e 65 74 46 78 34 30 20 3d 20 6e 6f 4e 65 74  oNetFx40 = noNet
109d0 46 78 34 30 3b 0d 0a 20 20 20 20 20 20 20 20 20  Fx40;..         
109e0 20 20 20 20 20 20 20 74 68 69 73 2e 6e 6f 4e 65         this.noNe
109f0 74 46 78 34 35 20 3d 20 6e 6f 4e 65 74 46 78 34  tFx45 = noNetFx4
10a00 35 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  5;..            
10a10 20 20 20 20 74 68 69 73 2e 6e 6f 4e 65 74 46 78      this.noNetFx
10a20 34 35 31 20 3d 20 6e 6f 4e 65 74 46 78 34 35 31  451 = noNetFx451
10a30 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
10a40 20 20 20 74 68 69 73 2e 6e 6f 56 73 32 30 30 35     this.noVs2005
10a50 20 3d 20 6e 6f 56 73 32 30 30 35 3b 0d 0a 20 20   = noVs2005;..  
10a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
10a70 69 73 2e 6e 6f 56 73 32 30 30 38 20 3d 20 6e 6f  is.noVs2008 = no
10a80 56 73 32 30 30 38 3b 0d 0a 20 20 20 20 20 20 20  Vs2008;..       
10a90 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 6e 6f           this.no
10aa0 56 73 32 30 31 30 20 3d 20 6e 6f 56 73 32 30 31  Vs2010 = noVs201
10ab0 30 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  0;..            
10ac0 20 20 20 20 74 68 69 73 2e 6e 6f 56 73 32 30 31      this.noVs201
10ad0 32 20 3d 20 6e 6f 56 73 32 30 31 32 3b 0d 0a 20  2 = noVs2012;.. 
10ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
10af0 68 69 73 2e 6e 6f 56 73 32 30 31 33 20 3d 20 6e  his.noVs2013 = n
10b00 6f 56 73 32 30 31 33 3b 0d 0a 20 20 20 20 20 20  oVs2013;..      
10b10 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 6e            this.n
10b20 6f 54 72 61 63 65 20 3d 20 6e 6f 54 72 61 63 65  oTrace = noTrace
10b30 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
10b40 20 20 20 74 68 69 73 2e 6e 6f 43 6f 6e 73 6f 6c     this.noConsol
10b50 65 20 3d 20 6e 6f 43 6f 6e 73 6f 6c 65 3b 0d 0a  e = noConsole;..
10b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10b70 74 68 69 73 2e 6e 6f 4c 6f 67 20 3d 20 6e 6f 4c  this.noLog = noL
10b80 6f 67 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  og;..           
10b90 20 20 20 20 20 74 68 69 73 2e 74 68 72 6f 77 4f       this.throwO
10ba0 6e 4d 69 73 73 69 6e 67 20 3d 20 74 68 72 6f 77  nMissing = throw
10bb0 4f 6e 4d 69 73 73 69 6e 67 3b 0d 0a 20 20 20 20  OnMissing;..    
10bc0 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
10bd0 2e 77 68 61 74 49 66 20 3d 20 77 68 61 74 49 66  .whatIf = whatIf
10be0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
10bf0 20 20 20 74 68 69 73 2e 64 65 62 75 67 20 3d 20     this.debug = 
10c00 64 65 62 75 67 3b 0d 0a 20 20 20 20 20 20 20 20  debug;..        
10c10 20 20 20 20 20 20 20 20 74 68 69 73 2e 76 65 72          this.ver
10c20 62 6f 73 65 20 3d 20 76 65 72 62 6f 73 65 3b 0d  bose = verbose;.
10c30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10c40 20 74 68 69 73 2e 63 6f 6e 66 69 72 6d 20 3d 20   this.confirm = 
10c50 63 6f 6e 66 69 72 6d 3b 0d 0a 20 20 20 20 20 20  confirm;..      
10c60 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
10c70 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
10c80 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
10c90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10ca0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10cb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10cc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10cd0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
10ce0 20 20 23 72 65 67 69 6f 6e 20 50 72 69 76 61 74    #region Privat
10cf0 65 20 53 74 61 74 69 63 20 4d 65 74 68 6f 64 73  e Static Methods
10d00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
10d10 69 76 61 74 65 20 73 74 61 74 69 63 20 76 6f 69  ivate static voi
10d20 64 20 47 65 74 44 65 66 61 75 6c 74 46 69 6c 65  d GetDefaultFile
10d30 4e 61 6d 65 73 28 0d 0a 20 20 20 20 20 20 20 20  Names(..        
10d40 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69          ref stri
10d50 6e 67 20 64 69 72 65 63 74 6f 72 79 2c 0d 0a 20  ng directory,.. 
10d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
10d70 65 66 20 73 74 72 69 6e 67 20 63 6f 72 65 46 69  ef string coreFi
10d80 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  leName,..       
10d90 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72           ref str
10da0 69 6e 67 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65  ing linqFileName
10db0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
10dc0 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 65 66     ref string ef
10dd0 36 46 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20  6FileName,..    
10de0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
10df0 73 74 72 69 6e 67 20 64 65 73 69 67 6e 65 72 46  string designerF
10e00 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20  ileName..       
10e10 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
10e20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
10e30 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74             if (t
10e40 68 69 73 41 73 73 65 6d 62 6c 79 20 3d 3d 20 6e  hisAssembly == n
10e50 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
10e60 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
10e70 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
10e80 20 20 20 20 20 64 69 72 65 63 74 6f 72 79 20 3d       directory =
10e90 20 50 61 74 68 2e 47 65 74 44 69 72 65 63 74 6f   Path.GetDirecto
10ea0 72 79 4e 61 6d 65 28 74 68 69 73 41 73 73 65 6d  ryName(thisAssem
10eb0 62 6c 79 2e 4c 6f 63 61 74 69 6f 6e 29 3b 0d 0a  bly.Location);..
10ec0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10ed0 20 20 69 66 20 28 53 74 72 69 6e 67 2e 49 73 4e    if (String.IsN
10ee0 75 6c 6c 4f 72 45 6d 70 74 79 28 64 69 72 65 63  ullOrEmpty(direc
10ef0 74 6f 72 79 29 29 0d 0a 20 20 20 20 20 20 20 20  tory))..        
10f00 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
10f10 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  rn;....         
10f20 20 20 20 20 20 20 20 63 6f 72 65 46 69 6c 65 4e         coreFileN
10f30 61 6d 65 20 3d 20 50 61 74 68 2e 43 6f 6d 62 69  ame = Path.Combi
10f40 6e 65 28 64 69 72 65 63 74 6f 72 79 2c 0d 0a 20  ne(directory,.. 
10f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10f60 20 20 20 49 6e 73 74 61 6c 6c 65 72 2e 43 6f 72     Installer.Cor
10f70 65 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20  eFileName);.... 
10f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6c                 l
10f90 69 6e 71 46 69 6c 65 4e 61 6d 65 20 3d 20 50 61  inqFileName = Pa
10fa0 74 68 2e 43 6f 6d 62 69 6e 65 28 64 69 72 65 63  th.Combine(direc
10fb0 74 6f 72 79 2c 0d 0a 20 20 20 20 20 20 20 20 20  tory,..         
10fc0 20 20 20 20 20 20 20 20 20 20 20 49 6e 73 74 61             Insta
10fd0 6c 6c 65 72 2e 4c 69 6e 71 46 69 6c 65 4e 61 6d  ller.LinqFileNam
10fe0 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
10ff0 20 20 20 20 20 20 20 65 66 36 46 69 6c 65 4e 61         ef6FileNa
11000 6d 65 20 3d 20 50 61 74 68 2e 43 6f 6d 62 69 6e  me = Path.Combin
11010 65 28 64 69 72 65 63 74 6f 72 79 2c 0d 0a 20 20  e(directory,..  
11020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11030 20 20 49 6e 73 74 61 6c 6c 65 72 2e 45 66 36 46    Installer.Ef6F
11040 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20  ileName);....   
11050 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 73               des
11060 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 20 3d 20  ignerFileName = 
11070 50 61 74 68 2e 43 6f 6d 62 69 6e 65 28 64 69 72  Path.Combine(dir
11080 65 63 74 6f 72 79 2c 0d 0a 20 20 20 20 20 20 20  ectory,..       
11090 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 73               Ins
110a0 74 61 6c 6c 65 72 2e 44 65 73 69 67 6e 65 72 46  taller.DesignerF
110b0 69 6c 65 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 20  ileName);..     
110c0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
110d0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
110e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
110f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11100 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11110 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
11120 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
11130 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 43  te static bool C
11140 68 65 63 6b 4f 70 74 69 6f 6e 28 0d 0a 20 20 20  heckOption(..   
11150 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66               ref
11160 20 73 74 72 69 6e 67 20 61 72 67 0d 0a 20 20 20   string arg..   
11170 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
11180 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
11190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
111a0 74 72 69 6e 67 20 72 65 73 75 6c 74 20 3d 20 61  tring result = a
111b0 72 67 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  rg;....         
111c0 20 20 20 20 20 20 20 69 66 20 28 21 53 74 72 69         if (!Stri
111d0 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79  ng.IsNullOrEmpty
111e0 28 72 65 73 75 6c 74 29 29 0d 0a 20 20 20 20 20  (result))..     
111f0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
11200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11210 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
11220 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
11230 45 3a 20 52 65 6d 6f 76 65 20 61 6c 6c 20 6c 65  E: Remove all le
11240 61 64 69 6e 67 20 73 77 69 74 63 68 20 63 68 61  ading switch cha
11250 72 73 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  rs...           
11260 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
11270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11280 20 72 65 73 75 6c 74 20 3d 20 72 65 73 75 6c 74   result = result
11290 2e 54 72 69 6d 53 74 61 72 74 28 53 77 69 74 63  .TrimStart(Switc
112a0 68 43 68 61 72 73 29 3b 0d 0a 0d 0a 20 20 20 20  hChars);....    
112b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
112c0 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
112d0 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
112e0 20 48 6f 77 20 6d 61 6e 79 20 63 68 61 72 73 20   How many chars 
112f0 77 65 72 65 20 72 65 6d 6f 76 65 64 3f 0d 0a 20  were removed?.. 
11300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11310 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
11320 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 63             int c
11330 6f 75 6e 74 20 3d 20 61 72 67 2e 4c 65 6e 67 74  ount = arg.Lengt
11340 68 20 2d 20 72 65 73 75 6c 74 2e 4c 65 6e 67 74  h - result.Lengt
11350 68 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  h;....          
11360 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
11370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11380 20 20 2f 2f 20 4e 4f 54 45 3a 20 57 61 73 20 74    // NOTE: Was t
11390 68 65 72 65 20 61 74 20 6c 65 61 73 74 20 6f 6e  here at least on
113a0 65 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e?..            
113b0 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
113c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
113d0 69 66 20 28 63 6f 75 6e 74 20 3e 20 30 29 0d 0a  if (count > 0)..
113e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
113f0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
11400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
11410 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
11420 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
11430 54 45 3a 20 4f 6b 2c 20 72 65 70 6c 61 63 65 20  TE: Ok, replace 
11440 74 68 65 69 72 20 6f 72 69 67 69 6e 61 6c 0d 0a  their original..
11450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11460 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
11470 20 61 72 67 75 6d 65 6e 74 2e 0d 0a 20 20 20 20   argument...    
11480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11490 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
114a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
114b0 61 72 67 20 3d 20 72 65 73 75 6c 74 3b 0d 0a 0d  arg = result;...
114c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
114d0 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
114e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
114f0 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 59 65       // NOTE: Ye
11500 73 2c 20 74 68 69 73 20 69 73 20 61 20 73 77 69  s, this is a swi
11510 74 63 68 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  tch...          
11520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
11530 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11540 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
11550 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
11560 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
11570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
11580 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
11590 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
115a0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
115b0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
115c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
115d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
115e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
115f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11600 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
11610 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
11620 63 20 62 6f 6f 6c 20 4d 61 74 63 68 4f 70 74 69  c bool MatchOpti
11630 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on(..           
11640 20 20 20 20 20 73 74 72 69 6e 67 20 61 72 67 2c       string arg,
11650 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11660 20 20 73 74 72 69 6e 67 20 6f 70 74 69 6f 6e 0d    string option.
11670 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11680 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
11690 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
116a0 20 20 20 69 66 20 28 28 61 72 67 20 3d 3d 20 6e     if ((arg == n
116b0 75 6c 6c 29 20 7c 7c 20 28 6f 70 74 69 6f 6e 20  ull) || (option 
116c0 3d 3d 20 6e 75 6c 6c 29 29 0d 0a 20 20 20 20 20  == null))..     
116d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
116e0 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a  eturn false;....
116f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11700 72 65 74 75 72 6e 20 53 74 72 69 6e 67 2e 43 6f  return String.Co
11710 6d 70 61 72 65 28 61 72 67 2c 20 30 2c 20 6f 70  mpare(arg, 0, op
11720 74 69 6f 6e 2c 20 30 2c 0d 0a 20 20 20 20 20 20  tion, 0,..      
11730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 72                ar
11740 67 2e 4c 65 6e 67 74 68 2c 20 53 74 72 69 6e 67  g.Length, String
11750 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e  Comparison.Ordin
11760 61 6c 49 67 6e 6f 72 65 43 61 73 65 29 20 3d 3d  alIgnoreCase) ==
11770 20 30 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20   0;..           
11780 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
11790 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
117a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
117b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
117c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
117d0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
117e0 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
117f0 74 69 63 20 62 6f 6f 6c 3f 20 50 61 72 73 65 42  tic bool? ParseB
11800 6f 6f 6c 65 61 6e 28 0d 0a 20 20 20 20 20 20 20  oolean(..       
11810 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
11820 74 65 78 74 0d 0a 20 20 20 20 20 20 20 20 20 20  text..          
11830 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
11840 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
11850 20 20 20 20 20 20 20 20 69 66 20 28 21 53 74 72          if (!Str
11860 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74  ing.IsNullOrEmpt
11870 79 28 74 65 78 74 29 29 0d 0a 20 20 20 20 20 20  y(text))..      
11880 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
11890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
118a0 20 62 6f 6f 6c 20 76 61 6c 75 65 3b 0d 0a 0d 0a   bool value;....
118b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
118c0 20 20 20 20 69 66 20 28 62 6f 6f 6c 2e 54 72 79      if (bool.Try
118d0 50 61 72 73 65 28 74 65 78 74 2c 20 6f 75 74 20  Parse(text, out 
118e0 76 61 6c 75 65 29 29 0d 0a 20 20 20 20 20 20 20  value))..       
118f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11900 20 72 65 74 75 72 6e 20 76 61 6c 75 65 3b 0d 0a   return value;..
11910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11920 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
11930 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c       return null
11940 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
11950 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
11960 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11970 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11980 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11990 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
119a0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
119b0 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
119c0 63 20 6f 62 6a 65 63 74 20 50 61 72 73 65 45 6e  c object ParseEn
119d0 75 6d 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  um(..           
119e0 20 20 20 20 20 54 79 70 65 20 65 6e 75 6d 54 79       Type enumTy
119f0 70 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  pe,..           
11a00 20 20 20 20 20 73 74 72 69 6e 67 20 74 65 78 74       string text
11a10 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
11a20 20 20 20 62 6f 6f 6c 20 6e 6f 43 61 73 65 0d 0a     bool noCase..
11a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11a40 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
11a50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11a60 20 20 69 66 20 28 28 65 6e 75 6d 54 79 70 65 20    if ((enumType 
11a70 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 65 6e 75  == null) || !enu
11a80 6d 54 79 70 65 2e 49 73 45 6e 75 6d 29 0d 0a 20  mType.IsEnum).. 
11a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11aa0 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d     return null;.
11ab0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
11ac0 20 20 20 69 66 20 28 21 53 74 72 69 6e 67 2e 49     if (!String.I
11ad0 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 74 65 78  sNullOrEmpty(tex
11ae0 74 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t))..           
11af0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
11b00 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d              try.
11b10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11b20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
11b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11b40 72 65 74 75 72 6e 20 45 6e 75 6d 2e 50 61 72 73  return Enum.Pars
11b50 65 28 65 6e 75 6d 54 79 70 65 2c 20 74 65 78 74  e(enumType, text
11b60 2c 20 6e 6f 43 61 73 65 29 3b 0d 0a 20 20 20 20  , noCase);..    
11b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11b80 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
11b90 20 20 20 20 20 20 20 63 61 74 63 68 0d 0a 20 20         catch..  
11ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11bb0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
11bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
11bd0 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20  do nothing...   
11be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11bf0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
11c00 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
11c10 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
11c20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20  null;..         
11c30 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
11c40 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
11c50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11c60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11c70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11c80 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
11c90 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
11ca0 74 61 74 69 63 20 62 6f 6f 6c 20 49 73 53 79 73  tatic bool IsSys
11cb0 74 65 6d 45 66 36 41 73 73 65 6d 62 6c 79 41 76  temEf6AssemblyAv
11cc0 61 69 6c 61 62 6c 65 28 29 0d 0a 20 20 20 20 20  ailable()..     
11cd0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
11ce0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73 79            if (sy
11cf0 73 74 65 6d 45 66 36 41 73 73 65 6d 62 6c 79 20  stemEf6Assembly 
11d00 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
11d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
11d20 74 75 72 6e 20 74 72 75 65 3b 0d 0a 0d 0a 20 20  turn true;....  
11d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
11d40 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  y..             
11d50 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
11d60 20 20 20 20 20 20 20 20 20 20 73 79 73 74 65 6d            system
11d70 45 66 36 41 73 73 65 6d 62 6c 79 20 3d 20 41 73  Ef6Assembly = As
11d80 73 65 6d 62 6c 79 2e 52 65 66 6c 65 63 74 69 6f  sembly.Reflectio
11d90 6e 4f 6e 6c 79 4c 6f 61 64 28 0d 0a 20 20 20 20  nOnlyLoad(..    
11da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11db0 20 20 20 20 53 79 73 74 65 6d 45 66 36 41 73 73      SystemEf6Ass
11dc0 65 6d 62 6c 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20  emblyName);.... 
11dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11de0 20 20 20 69 66 20 28 73 79 73 74 65 6d 45 66 36     if (systemEf6
11df0 41 73 73 65 6d 62 6c 79 20 21 3d 20 6e 75 6c 6c  Assembly != null
11e00 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
11e10 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
11e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11e30 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67    TraceOps.Debug
11e40 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72  AndTrace(TracePr
11e50 69 6f 72 69 74 79 2e 48 69 67 68 65 73 74 2c 0d  iority.Highest,.
11e60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11e70 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62               deb
11e80 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63  ugCallback, trac
11e90 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
11ea0 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
11eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11ec0 20 20 20 20 20 20 20 22 45 6e 74 69 74 79 20 46         "Entity F
11ed0 72 61 6d 65 77 6f 72 6b 20 36 20 61 73 73 65 6d  ramework 6 assem
11ee0 62 6c 79 20 77 61 73 20 72 65 73 6f 6c 76 65 64  bly was resolved
11ef0 20 74 6f 20 7b 30 7d 2e 22 2c 0d 0a 20 20 20 20   to {0}.",..    
11f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11f10 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
11f20 61 79 28 73 79 73 74 65 6d 45 66 36 41 73 73 65  ay(systemEf6Asse
11f30 6d 62 6c 79 2e 4c 6f 63 61 74 69 6f 6e 29 29 2c  mbly.Location)),
11f40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
11f60 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
11f70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11f80 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
11f90 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  true;..         
11fa0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
11fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
11fc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11fd0 20 63 61 74 63 68 0d 0a 20 20 20 20 20 20 20 20   catch..        
11fe0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
11ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
12000 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20  / do nothing... 
12010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
12020 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
12030 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62      TraceOps.Deb
12040 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65  ugAndTrace(Trace
12050 50 72 69 6f 72 69 74 79 2e 48 69 67 68 65 73 74  Priority.Highest
12060 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
12070 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c         debugCall
12080 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62  back, traceCallb
12090 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ack,..          
120a0 20 20 20 20 20 20 20 20 20 20 22 45 6e 74 69 74            "Entit
120b0 79 20 46 72 61 6d 65 77 6f 72 6b 20 36 20 61 73  y Framework 6 as
120c0 73 65 6d 62 6c 79 20 77 61 73 20 6e 6f 74 20 72  sembly was not r
120d0 65 73 6f 6c 76 65 64 2e 22 2c 0d 0a 20 20 20 20  esolved.",..    
120e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
120f0 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
12100 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
12110 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
12120 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
12130 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
12140 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12150 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12160 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12170 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12180 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
12190 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
121a0 20 62 6f 6f 6c 20 49 73 53 79 73 74 65 6d 45 66   bool IsSystemEf
121b0 36 41 73 73 65 6d 62 6c 79 47 6c 6f 62 61 6c 28  6AssemblyGlobal(
121c0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
121d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
121e0 20 20 69 66 20 28 73 79 73 74 65 6d 45 66 36 41    if (systemEf6A
121f0 73 73 65 6d 62 6c 79 20 3d 3d 20 6e 75 6c 6c 29  ssembly == null)
12200 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
12210 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
12220 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  se;....         
12230 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 73 79         return sy
12240 73 74 65 6d 45 66 36 41 73 73 65 6d 62 6c 79 2e  stemEf6Assembly.
12250 47 6c 6f 62 61 6c 41 73 73 65 6d 62 6c 79 43 61  GlobalAssemblyCa
12260 63 68 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  che;..          
12270 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
12280 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
12290 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
122a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
122b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
122c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
122d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
122e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72  ..            #r
122f0 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 53 74 61  egion Public Sta
12300 74 69 63 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20  tic Methods..   
12310 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
12320 73 74 61 74 69 63 20 76 6f 69 64 20 42 72 65 61  static void Brea
12330 6b 49 6e 74 6f 44 65 62 75 67 67 65 72 28 29 0d  kIntoDebugger().
12340 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
12350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12360 43 6f 6e 73 6f 6c 65 2e 57 72 69 74 65 4c 69 6e  Console.WriteLin
12370 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
12380 20 20 20 20 20 20 20 20 22 41 74 74 61 63 68 20          "Attach 
12390 61 20 64 65 62 75 67 67 65 72 20 74 6f 20 70 72  a debugger to pr
123a0 6f 63 65 73 73 20 7b 30 7d 20 61 6e 64 20 70 72  ocess {0} and pr
123b0 65 73 73 20 22 20 2b 0d 0a 20 20 20 20 20 20 20  ess " +..       
123c0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 61 6e               "an
123d0 79 20 6b 65 79 20 74 6f 20 63 6f 6e 74 69 6e 75  y key to continu
123e0 65 2e 22 2c 20 28 74 68 69 73 50 72 6f 63 65 73  e.", (thisProces
123f0 73 20 21 3d 20 6e 75 6c 6c 29 20 3f 0d 0a 20 20  s != null) ?..  
12400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12410 20 20 74 68 69 73 50 72 6f 63 65 73 73 2e 49 64    thisProcess.Id
12420 2e 54 6f 53 74 72 69 6e 67 28 29 20 3a 20 22 3c  .ToString() : "<
12430 75 6e 6b 6e 6f 77 6e 3e 22 29 3b 0d 0a 0d 0a 20  unknown>");.... 
12440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
12450 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ry..            
12460 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
12470 20 20 20 20 20 20 20 20 20 20 20 43 6f 6e 73 6f             Conso
12480 6c 65 2e 52 65 61 64 4b 65 79 28 74 72 75 65 29  le.ReadKey(true)
12490 3b 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20  ; /* throw */.. 
124a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
124b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
124c0 20 20 63 61 74 63 68 20 28 49 6e 76 61 6c 69 64    catch (Invalid
124d0 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70 74 69  OperationExcepti
124e0 6f 6e 29 20 2f 2f 20 43 6f 6e 73 6f 6c 65 2e 52  on) // Console.R
124f0 65 61 64 4b 65 79 0d 0a 20 20 20 20 20 20 20 20  eadKey..        
12500 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
12510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
12520 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20  / do nothing... 
12530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
12540 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
12550 20 20 20 20 44 65 62 75 67 67 65 72 2e 42 72 65      Debugger.Bre
12560 61 6b 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ak();..         
12570 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
12580 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
12590 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
125a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
125b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
125c0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
125d0 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74         public st
125e0 61 74 69 63 20 43 6f 6e 66 69 67 75 72 61 74 69  atic Configurati
125f0 6f 6e 20 43 72 65 61 74 65 44 65 66 61 75 6c 74  on CreateDefault
12600 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ()..            
12610 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
12620 20 20 20 73 74 72 69 6e 67 20 64 69 72 65 63 74     string direct
12630 6f 72 79 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20  ory = null;..   
12640 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
12650 69 6e 67 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65  ing coreFileName
12660 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20   = null;..      
12670 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
12680 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 20 3d 20   linqFileName = 
12690 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20  null;..         
126a0 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 65 66         string ef
126b0 36 46 69 6c 65 4e 61 6d 65 20 3d 20 6e 75 6c 6c  6FileName = null
126c0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
126d0 20 20 20 73 74 72 69 6e 67 20 64 65 73 69 67 6e     string design
126e0 65 72 46 69 6c 65 4e 61 6d 65 20 3d 20 6e 75 6c  erFileName = nul
126f0 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  l;....          
12700 20 20 20 20 20 20 47 65 74 44 65 66 61 75 6c 74        GetDefault
12710 46 69 6c 65 4e 61 6d 65 73 28 0d 0a 20 20 20 20  FileNames(..    
12720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12730 72 65 66 20 64 69 72 65 63 74 6f 72 79 2c 20 72  ref directory, r
12740 65 66 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65 2c  ef coreFileName,
12750 20 72 65 66 20 6c 69 6e 71 46 69 6c 65 4e 61 6d   ref linqFileNam
12760 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
12770 20 20 20 20 20 20 20 20 72 65 66 20 65 66 36 46          ref ef6F
12780 69 6c 65 4e 61 6d 65 2c 20 72 65 66 20 64 65 73  ileName, ref des
12790 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 29 3b 0d  ignerFileName);.
127a0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
127b0 20 20 20 72 65 74 75 72 6e 20 6e 65 77 20 43 6f     return new Co
127c0 6e 66 69 67 75 72 61 74 69 6f 6e 28 0d 0a 20 20  nfiguration(..  
127d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
127e0 20 20 74 68 69 73 41 73 73 65 6d 62 6c 79 2c 20    thisAssembly, 
127f0 6e 75 6c 6c 2c 20 64 69 72 65 63 74 6f 72 79 2c  null, directory,
12800 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65 2c 20 6c   coreFileName, l
12810 69 6e 71 46 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20  inqFileName,..  
12820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12830 20 20 65 66 36 46 69 6c 65 4e 61 6d 65 2c 20 64    ef6FileName, d
12840 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 2c  esignerFileName,
12850 20 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c 20 6e 75 6c   null, null, nul
12860 6c 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l,..            
12870 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
12880 2e 44 65 62 75 67 46 6f 72 6d 61 74 2c 20 54 72  .DebugFormat, Tr
12890 61 63 65 4f 70 73 2e 54 72 61 63 65 46 6f 72 6d  aceOps.TraceForm
128a0 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at,..           
128b0 20 20 20 20 20 20 20 20 20 49 6e 73 74 61 6c 6c           Install
128c0 46 6c 61 67 73 2e 44 65 66 61 75 6c 74 2c 20 50  Flags.Default, P
128d0 72 6f 76 69 64 65 72 46 6c 61 67 73 2e 44 65 66  roviderFlags.Def
128e0 61 75 6c 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  ault,..         
128f0 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
12900 50 72 69 6f 72 69 74 79 2e 44 65 66 61 75 6c 74  Priority.Default
12910 2c 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e  , TracePriority.
12920 44 65 66 61 75 6c 74 2c 20 66 61 6c 73 65 2c 20  Default, false, 
12930 74 72 75 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  true,..         
12940 20 20 20 20 20 20 20 20 20 20 20 66 61 6c 73 65             false
12950 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73 65 2c 20  , false, false, 
12960 66 61 6c 73 65 2c 20 66 61 6c 73 65 2c 20 66 61  false, false, fa
12970 6c 73 65 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73  lse, false, fals
12980 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
12990 20 20 20 20 20 20 20 20 66 61 6c 73 65 2c 20 66          false, f
129a0 61 6c 73 65 2c 20 66 61 6c 73 65 2c 20 66 61 6c  alse, false, fal
129b0 73 65 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73 65  se, false, false
129c0 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73 65 2c 0d  , false, false,.
129d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
129e0 20 20 20 20 20 66 61 6c 73 65 2c 20 74 72 75 65       false, true
129f0 2c 20 74 72 75 65 2c 20 66 61 6c 73 65 2c 20 66  , true, false, f
12a00 61 6c 73 65 2c 20 66 61 6c 73 65 29 3b 0d 0a 20  alse, false);.. 
12a10 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
12a20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
12a30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12a40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12a50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12a60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
12a70 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b  ...            [
12a80 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f  MethodImpl(Metho
12a90 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49  dImplOptions.NoI
12aa0 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20  nlining)]..     
12ab0 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74         public st
12ac0 61 74 69 63 20 62 6f 6f 6c 20 46 72 6f 6d 41 72  atic bool FromAr
12ad0 67 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  gs(..           
12ae0 20 20 20 20 20 73 74 72 69 6e 67 5b 5d 20 61 72       string[] ar
12af0 67 73 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  gs,..           
12b00 20 20 20 20 20 62 6f 6f 6c 20 73 74 72 69 63 74       bool strict
12b10 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
12b20 20 20 20 72 65 66 20 43 6f 6e 66 69 67 75 72 61     ref Configura
12b30 74 69 6f 6e 20 63 6f 6e 66 69 67 75 72 61 74 69  tion configurati
12b40 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on,..           
12b50 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20       ref string 
12b60 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20  error..         
12b70 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
12b80 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
12b90 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20           try..  
12ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
12bb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12bc0 20 20 20 20 20 69 66 20 28 61 72 67 73 20 3d 3d       if (args ==
12bd0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
12be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12bf0 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 0d 0a  return true;....
12c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12c10 20 20 20 20 69 66 20 28 63 6f 6e 66 69 67 75 72      if (configur
12c20 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  ation == null)..
12c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12c40 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
12c50 61 74 69 6f 6e 20 3d 20 43 6f 6e 66 69 67 75 72  ation = Configur
12c60 61 74 69 6f 6e 2e 43 72 65 61 74 65 44 65 66 61  ation.CreateDefa
12c70 75 6c 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ult();....      
12c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e                in
12c90 74 20 6c 65 6e 67 74 68 20 3d 20 61 72 67 73 2e  t length = args.
12ca0 4c 65 6e 67 74 68 3b 0d 0a 0d 0a 20 20 20 20 20  Length;....     
12cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
12cc0 6f 72 20 28 69 6e 74 20 69 6e 64 65 78 20 3d 20  or (int index = 
12cd0 30 3b 20 69 6e 64 65 78 20 3c 20 6c 65 6e 67 74  0; index < lengt
12ce0 68 3b 20 69 6e 64 65 78 2b 2b 29 0d 0a 20 20 20  h; index++)..   
12cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12d00 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
12d10 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
12d20 6e 67 20 61 72 67 20 3d 20 61 72 67 73 5b 69 6e  ng arg = args[in
12d30 64 65 78 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  dex];....       
12d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12d50 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
12d60 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
12d70 4e 4f 54 45 3a 20 53 6b 69 70 20 61 6e 79 20 61  NOTE: Skip any a
12d80 72 67 75 6d 65 6e 74 20 74 68 61 74 20 69 73 20  rgument that is 
12d90 6e 75 6c 6c 20 28 3f 29 20 6f 72 20 61 6e 20 65  null (?) or an e
12da0 6d 70 74 79 0d 0a 20 20 20 20 20 20 20 20 20 20  mpty..          
12db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
12dc0 20 20 20 20 20 20 20 73 74 72 69 6e 67 2e 0d 0a         string...
12dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12de0 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
12df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12e00 20 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e 49      if (String.I
12e10 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 61 72 67  sNullOrEmpty(arg
12e20 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
12e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12e40 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a 20 20 20  continue;....   
12e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12e60 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
12e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12e80 20 2f 2f 20 4e 4f 54 45 3a 20 57 65 20 61 72 65   // NOTE: We are
12e90 20 67 6f 69 6e 67 20 74 6f 20 6d 6f 64 69 66 79   going to modify
12ea0 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 61 72   the original ar
12eb0 67 75 6d 65 6e 74 0d 0a 20 20 20 20 20 20 20 20  gument..        
12ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12ed0 2f 2f 20 20 20 20 20 20 20 62 79 20 72 65 6d 6f  //       by remo
12ee0 76 69 6e 67 20 61 6e 79 20 6c 65 61 64 69 6e 67  ving any leading
12ef0 20 6f 70 74 69 6f 6e 20 63 68 61 72 61 63 74 65   option characte
12f00 72 73 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  rs;..           
12f10 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
12f20 20 20 20 20 20 20 74 68 65 72 65 66 6f 72 65 2c        therefore,
12f30 20 77 65 20 75 73 65 20 61 20 6e 65 77 20 73 74   we use a new st
12f40 72 69 6e 67 20 74 6f 20 68 6f 6c 64 20 74 68 65  ring to hold the
12f50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
12f60 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
12f70 20 20 20 6d 6f 64 69 66 69 65 64 20 61 72 67 75     modified argu
12f80 6d 65 6e 74 2e 0d 0a 20 20 20 20 20 20 20 20 20  ment...         
12f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
12fa0 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
12fb0 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
12fc0 67 20 6e 65 77 41 72 67 20 3d 20 61 72 67 3b 0d  g newArg = arg;.
12fd0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
12fe0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
12ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13000 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
13010 41 6c 6c 20 74 68 65 20 73 75 70 70 6f 72 74 65  All the supporte
13020 64 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20 6f  d command line o
13030 70 74 69 6f 6e 73 20 6d 75 73 74 0d 0a 20 20 20  ptions must..   
13040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13050 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 62 65       //       be
13060 67 69 6e 20 77 69 74 68 20 61 6e 20 6f 70 74 69  gin with an opti
13070 6f 6e 20 63 68 61 72 61 63 74 65 72 20 28 65 2e  on character (e.
13080 67 2e 20 61 20 6d 69 6e 75 73 0d 0a 20 20 20 20  g. a minus..    
13090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
130a0 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6f 72 20      //       or 
130b0 66 6f 72 77 61 72 64 20 73 6c 61 73 68 29 3b 20  forward slash); 
130c0 61 74 74 65 6d 70 74 20 74 6f 20 76 61 6c 69 64  attempt to valid
130d0 61 74 65 20 74 68 61 74 0d 0a 20 20 20 20 20 20  ate that..      
130e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
130f0 20 20 2f 2f 20 20 20 20 20 20 20 6e 6f 77 2e 20    //       now. 
13100 20 49 66 20 77 65 20 66 61 69 6c 20 69 6e 20 73   If we fail in s
13110 74 72 69 63 74 20 6d 6f 64 65 2c 20 77 65 20 61  trict mode, we a
13120 72 65 20 64 6f 6e 65 3b 0d 0a 20 20 20 20 20 20  re done;..      
13130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13140 20 20 2f 2f 20 20 20 20 20 20 20 6f 74 68 65 72    //       other
13150 77 69 73 65 2c 20 6a 75 73 74 20 73 6b 69 70 20  wise, just skip 
13160 74 68 69 73 20 61 72 67 75 6d 65 6e 74 20 61 6e  this argument an
13170 64 20 61 64 76 61 6e 63 65 0d 0a 20 20 20 20 20  d advance..     
13180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13190 20 20 20 2f 2f 20 20 20 20 20 20 20 74 6f 20 74     //       to t
131a0 68 65 20 6e 65 78 74 20 6f 6e 65 2e 0d 0a 20 20  he next one...  
131b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
131c0 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
131d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
131e0 20 20 69 66 20 28 21 43 68 65 63 6b 4f 70 74 69    if (!CheckOpti
131f0 6f 6e 28 72 65 66 20 6e 65 77 41 72 67 29 29 0d  on(ref newArg)).
13200 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13210 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
13220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13230 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
13240 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
13250 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20  dTrace(..       
13260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13270 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72           TracePr
13280 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64  iority.Lowest, d
13290 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20  ebugCallback,.. 
132a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
132b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
132c0 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
132d0 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
132e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
132f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 55                "U
13300 6e 73 75 70 70 6f 72 74 65 64 20 63 6f 6d 6d 61  nsupported comma
13310 6e 64 20 6c 69 6e 65 20 61 72 67 75 6d 65 6e 74  nd line argument
13320 3a 20 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20  : {0}",..       
13330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13340 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
13350 6c 61 79 28 61 72 67 29 29 2c 20 74 72 61 63 65  lay(arg)), trace
13360 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
13370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13380 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74            if (st
13390 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20  rict)..         
133a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
133b0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
133c0 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lse;....        
133d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
133e0 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20      continue;.. 
133f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13400 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
13410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13420 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
13430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13440 2f 2f 20 4e 4f 54 45 3a 20 41 6c 6c 20 74 68 65  // NOTE: All the
13450 20 73 75 70 70 6f 72 74 65 64 20 63 6f 6d 6d 61   supported comma
13460 6e 64 20 6c 69 6e 65 20 6f 70 74 69 6f 6e 73 20  nd line options 
13470 6d 75 73 74 0d 0a 20 20 20 20 20 20 20 20 20 20  must..          
13480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
13490 20 20 20 20 20 20 20 68 61 76 65 20 61 20 76 61         have a va
134a0 6c 75 65 3b 20 74 68 65 72 65 66 6f 72 65 2c 20  lue; therefore, 
134b0 61 74 74 65 6d 70 74 20 74 6f 20 61 64 76 61 6e  attempt to advan
134c0 63 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ce..            
134d0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
134e0 20 20 20 20 20 74 6f 20 69 74 20 6e 6f 77 2e 20       to it now. 
134f0 20 49 66 20 77 65 20 66 61 69 6c 2c 20 77 65 20   If we fail, we 
13500 61 72 65 20 64 6f 6e 65 2e 0d 0a 20 20 20 20 20  are done...     
13510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13520 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
13530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
13540 6e 64 65 78 2b 2b 3b 0d 0a 0d 0a 20 20 20 20 20  ndex++;....     
13550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13560 20 20 20 69 66 20 28 69 6e 64 65 78 20 3e 3d 20     if (index >= 
13570 6c 65 6e 67 74 68 29 0d 0a 20 20 20 20 20 20 20  length)..       
13580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13590 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
135a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
135b0 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73  error = TraceOps
135c0 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d  .DebugAndTrace(.
135d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
135e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
135f0 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c   TracePriority.L
13600 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c  owest, debugCall
13610 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20  back,..         
13620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13630 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
13640 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
13650 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
13660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13670 20 20 20 20 20 20 22 4d 69 73 73 69 6e 67 20 76        "Missing v
13680 61 6c 75 65 20 66 6f 72 20 6f 70 74 69 6f 6e 3a  alue for option:
13690 20 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20   {0}",..        
136a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
136b0 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
136c0 61 79 28 61 72 67 29 29 2c 20 74 72 61 63 65 43  ay(arg)), traceC
136d0 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
136e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
136f0 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74 72           if (str
13700 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ict)..          
13710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13720 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
13730 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  se;....         
13740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13750 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20     break;..     
13760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13770 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
13780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13790 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
137a0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
137b0 4f 54 45 3a 20 47 72 61 62 20 74 68 65 20 74 65  OTE: Grab the te
137c0 78 74 75 61 6c 20 76 61 6c 75 65 20 6f 66 20 74  xtual value of t
137d0 68 69 73 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65  his command line
137e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
137f0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
13800 20 20 20 6f 70 74 69 6f 6e 2e 0d 0a 20 20 20 20     option...    
13810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13820 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
13830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13840 73 74 72 69 6e 67 20 74 65 78 74 20 3d 20 61 72  string text = ar
13850 67 73 5b 69 6e 64 65 78 5d 3b 0d 0a 0d 0a 20 20  gs[index];....  
13860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13870 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
13880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13890 20 20 2f 2f 20 4e 4f 54 45 3a 20 46 69 67 75 72    // NOTE: Figur
138a0 65 20 6f 75 74 20 77 68 69 63 68 20 63 6f 6d 6d  e out which comm
138b0 61 6e 64 20 6c 69 6e 65 20 6f 70 74 69 6f 6e 20  and line option 
138c0 74 68 69 73 20 69 73 0d 0a 20 20 20 20 20 20 20  this is..       
138d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
138e0 20 2f 2f 20 20 20 20 20 20 20 28 62 61 73 65 64   //       (based
138f0 20 6f 6e 20 61 20 70 61 72 74 69 61 6c 20 6e 61   on a partial na
13900 6d 65 20 6d 61 74 63 68 29 20 61 6e 64 20 74 68  me match) and th
13910 65 6e 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20  en try..        
13920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13930 2f 2f 20 20 20 20 20 20 20 74 6f 20 69 6e 74 65  //       to inte
13940 72 70 72 65 74 20 74 68 65 20 74 65 78 74 75 61  rpret the textua
13950 6c 20 76 61 6c 75 65 20 61 73 20 74 68 65 20 63  l value as the c
13960 6f 72 72 65 63 74 0d 0a 20 20 20 20 20 20 20 20  orrect..        
13970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13980 2f 2f 20 20 20 20 20 20 20 74 79 70 65 2e 0d 0a  //       type...
13990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
139a0 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
139b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
139c0 20 20 20 20 69 66 20 28 4d 61 74 63 68 4f 70 74      if (MatchOpt
139d0 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 62 72 65  ion(newArg, "bre
139e0 61 6b 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ak"))..         
139f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
13a00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
13a20 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73  ol? value = Pars
13a30 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d  eBoolean(text);.
13a40 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
13a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
13a60 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c  f (value == null
13a70 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
13a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
13a90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13ab0 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f    error = TraceO
13ac0 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
13ad0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
13ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13af0 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f         TracePrio
13b00 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62  rity.Lowest, deb
13b10 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20  ugCallback,..   
13b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13b40 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
13b50 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
13b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13b80 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d      "Invalid {0}
13b90 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20   boolean value: 
13ba0 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  {1}",..         
13bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13bc0 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69             ForDi
13bd0 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44  splay(arg), ForD
13be0 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a  isplay(text)),..
13bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13c10 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
13c20 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
13c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13c40 20 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63         if (stric
13c50 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t)..            
13c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13c70 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
13c80 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  alse;....       
13c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13ca0 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75           continu
13cb0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
13cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13cd0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
13ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13cf0 20 69 66 20 28 28 62 6f 6f 6c 29 76 61 6c 75 65   if ((bool)value
13d00 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
13d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13d20 20 20 20 42 72 65 61 6b 49 6e 74 6f 44 65 62 75     BreakIntoDebu
13d30 67 67 65 72 28 29 3b 0d 0a 20 20 20 20 20 20 20  gger();..       
13d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13d50 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
13d60 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
13d70 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e   if (MatchOption
13d80 28 6e 65 77 41 72 67 2c 20 22 63 6f 6e 66 69 67  (newArg, "config
13d90 56 65 72 73 69 6f 6e 22 29 29 0d 0a 20 20 20 20  Version"))..    
13da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13db0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
13dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13dd0 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
13de0 2e 63 6f 6e 66 69 67 56 65 72 73 69 6f 6e 20 3d  .configVersion =
13df0 20 74 65 78 74 3b 0d 0a 20 20 20 20 20 20 20 20   text;..        
13e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13e10 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
13e20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20             else 
13e30 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28  if (MatchOption(
13e40 6e 65 77 41 72 67 2c 20 22 63 6f 6e 66 69 72 6d  newArg, "confirm
13e50 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  "))..           
13e60 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
13e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13e80 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
13e90 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42  ? value = ParseB
13ea0 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d  oolean(text);...
13eb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
13ed0 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d  (value == null).
13ee0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
13f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13f20 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73  error = TraceOps
13f30 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d  .DebugAndTrace(.
13f40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13f60 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69       TracePriori
13f70 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67  ty.Lowest, debug
13f80 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20  Callback,..     
13f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
13fb0 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
13fc0 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
13fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13ff0 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62    "Invalid {0} b
14000 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31  oolean value: {1
14010 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }",..           
14020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14030 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
14040 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73  lay(arg), ForDis
14050 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20  play(text)),..  
14060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14080 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
14090 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
140a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
140b0 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29       if (strict)
140c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
140d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
140e0 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
140f0 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  se;....         
14100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14110 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b         continue;
14120 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
14140 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
14150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
14160 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 63 6f 6e  onfiguration.con
14170 66 69 72 6d 20 3d 20 28 62 6f 6f 6c 29 76 61 6c  firm = (bool)val
14180 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
14190 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
141a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
141b0 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20          else if 
141c0 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77  (MatchOption(new
141d0 41 72 67 2c 20 22 63 6f 72 65 46 69 6c 65 4e 61  Arg, "coreFileNa
141e0 6d 65 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20  me"))..         
141f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
14200 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
14220 6e 66 69 67 75 72 61 74 69 6f 6e 2e 63 6f 72 65  nfiguration.core
14230 46 69 6c 65 4e 61 6d 65 20 3d 20 74 65 78 74 3b  FileName = text;
14240 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14250 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
14260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14270 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61       else if (Ma
14280 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67  tchOption(newArg
14290 2c 20 22 64 65 62 75 67 22 29 29 0d 0a 20 20 20  , "debug"))..   
142a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
142b0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
142c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
142d0 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20      bool? value 
142e0 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74  = ParseBoolean(t
142f0 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ext);....       
14300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14310 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d       if (value =
14320 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
14330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14340 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
14350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14360 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
14370 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
14380 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20  dTrace(..       
14390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
143a0 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
143b0 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73  cePriority.Lowes
143c0 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b  t, debugCallback
143d0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
143e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
143f0 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
14400 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
14410 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
14420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14430 20 20 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c            "Inval
14440 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76  id {0} boolean v
14450 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20  alue: {1}",..   
14460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14480 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29   ForDisplay(arg)
14490 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78  , ForDisplay(tex
144a0 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  t)),..          
144b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
144c0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
144d0 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
144e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
144f0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
14500 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20  (strict)..      
14510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
14530 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20  turn false;.... 
14540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
14560 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20  ontinue;..      
14570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14580 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
14590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
145a0 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
145b0 74 69 6f 6e 2e 64 65 62 75 67 20 3d 20 28 62 6f  tion.debug = (bo
145c0 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20  ol)value;..     
145d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
145e0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
145f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
14600 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69  se if (MatchOpti
14610 6f 6e 28 6e 65 77 41 72 67 2c 20 22 64 65 62 75  on(newArg, "debu
14620 67 46 6f 72 6d 61 74 22 29 29 0d 0a 20 20 20 20  gFormat"))..    
14630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14640 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
14650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14660 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
14670 2e 64 65 62 75 67 46 6f 72 6d 61 74 20 3d 20 74  .debugFormat = t
14680 65 78 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ext;..          
14690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
146a0 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67    TraceOps.Debug
146b0 46 6f 72 6d 61 74 20 3d 20 63 6f 6e 66 69 67 75  Format = configu
146c0 72 61 74 69 6f 6e 2e 64 65 62 75 67 46 6f 72 6d  ration.debugForm
146d0 61 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at;..           
146e0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
146f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14700 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20          else if 
14710 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77  (MatchOption(new
14720 41 72 67 2c 20 22 64 65 62 75 67 50 72 69 6f 72  Arg, "debugPrior
14730 69 74 79 22 29 29 0d 0a 20 20 20 20 20 20 20 20  ity"))..        
14740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14750 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
14760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f                 o
14770 62 6a 65 63 74 20 76 61 6c 75 65 20 3d 20 50 61  bject value = Pa
14780 72 73 65 45 6e 75 6d 28 0d 0a 20 20 20 20 20 20  rseEnum(..      
14790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
147a0 20 20 20 20 20 20 20 20 20 20 74 79 70 65 6f 66            typeof
147b0 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 29 2c  (TracePriority),
147c0 20 74 65 78 74 2c 20 74 72 75 65 29 3b 0d 0a 0d   text, true);...
147d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
147e0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
147f0 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d  (value == null).
14800 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14810 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
14820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14840 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73  error = TraceOps
14850 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d  .DebugAndTrace(.
14860 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14880 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69       TracePriori
14890 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67  ty.Lowest, debug
148a0 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20  Callback,..     
148b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
148c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
148d0 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
148e0 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
148f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14910 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 76    "Invalid {0} v
14920 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20  alue: {1}",..   
14930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14950 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29   ForDisplay(arg)
14960 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78  , ForDisplay(tex
14970 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  t)),..          
14980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14990 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
149a0 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
149b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
149c0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
149d0 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20  (strict)..      
149e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
149f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
14a00 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20  turn false;.... 
14a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
14a30 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20  ontinue;..      
14a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14a50 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
14a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14a70 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
14a80 74 69 6f 6e 2e 64 65 62 75 67 50 72 69 6f 72 69  tion.debugPriori
14a90 74 79 20 3d 20 28 54 72 61 63 65 50 72 69 6f 72  ty = (TracePrior
14aa0 69 74 79 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20  ity)value;..    
14ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14ac0 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
14ad0 2e 44 65 62 75 67 50 72 69 6f 72 69 74 79 20 3d  .DebugPriority =
14ae0 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 64   configuration.d
14af0 65 62 75 67 50 72 69 6f 72 69 74 79 3b 0d 0a 20  ebugPriority;.. 
14b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14b10 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
14b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14b30 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68    else if (Match
14b40 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22  Option(newArg, "
14b50 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65  designerFileName
14b60 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  "))..           
14b70 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
14b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14b90 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
14ba0 69 67 75 72 61 74 69 6f 6e 2e 64 65 73 69 67 6e  iguration.design
14bb0 65 72 46 69 6c 65 4e 61 6d 65 20 3d 20 74 65 78  erFileName = tex
14bc0 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t;..            
14bd0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
14be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14bf0 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28         else if (
14c00 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41  MatchOption(newA
14c10 72 67 2c 20 22 64 69 72 65 63 74 6f 72 79 22 29  rg, "directory")
14c20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
14c30 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
14c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14c50 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
14c60 75 72 61 74 69 6f 6e 2e 64 69 72 65 63 74 6f 72  uration.director
14c70 79 20 3d 20 74 65 78 74 3b 0d 0a 0d 0a 20 20 20  y = text;....   
14c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14c90 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
14ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14cb0 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
14cc0 3a 20 2a 53 50 45 43 49 41 4c 2a 20 4d 75 73 74  : *SPECIAL* Must
14cd0 20 72 65 66 72 65 73 68 20 74 68 65 20 66 69 6c   refresh the fil
14ce0 65 20 6e 61 6d 65 73 0d 0a 20 20 20 20 20 20 20  e names..       
14cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14d00 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 68 65       //       he
14d10 72 65 20 62 65 63 61 75 73 65 20 74 68 65 20 75  re because the u
14d20 6e 64 65 72 6c 79 69 6e 67 20 64 69 72 65 63 74  nderlying direct
14d30 6f 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ory..           
14d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14d50 20 2f 2f 20 20 20 20 20 20 20 68 61 73 20 63 68   //       has ch
14d60 61 6e 67 65 64 2e 0d 0a 20 20 20 20 20 20 20 20  anged...        
14d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14d80 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
14d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14da0 20 20 20 20 73 74 72 69 6e 67 20 63 6f 72 65 46      string coreF
14db0 69 6c 65 4e 61 6d 65 20 3d 20 63 6f 6e 66 69 67  ileName = config
14dc0 75 72 61 74 69 6f 6e 2e 63 6f 72 65 46 69 6c 65  uration.coreFile
14dd0 4e 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  Name;....       
14de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14df0 20 20 20 20 20 69 66 20 28 21 53 74 72 69 6e 67       if (!String
14e00 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 63  .IsNullOrEmpty(c
14e10 6f 72 65 46 69 6c 65 4e 61 6d 65 29 29 0d 0a 20  oreFileName)).. 
14e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
14e40 6f 72 65 46 69 6c 65 4e 61 6d 65 20 3d 20 50 61  oreFileName = Pa
14e50 74 68 2e 47 65 74 46 69 6c 65 4e 61 6d 65 28 63  th.GetFileName(c
14e60 6f 72 65 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d  oreFileName);...
14e70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14e80 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
14e90 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72  (String.IsNullOr
14ea0 45 6d 70 74 79 28 63 6f 72 65 46 69 6c 65 4e 61  Empty(coreFileNa
14eb0 6d 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  me))..          
14ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14ed0 20 20 20 20 20 20 63 6f 72 65 46 69 6c 65 4e 61        coreFileNa
14ee0 6d 65 20 3d 20 49 6e 73 74 61 6c 6c 65 72 2e 43  me = Installer.C
14ef0 6f 72 65 46 69 6c 65 4e 61 6d 65 3b 0d 0a 0d 0a  oreFileName;....
14f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14f10 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
14f20 69 67 75 72 61 74 69 6f 6e 2e 63 6f 72 65 46 69  iguration.coreFi
14f30 6c 65 4e 61 6d 65 20 3d 20 50 61 74 68 2e 43 6f  leName = Path.Co
14f40 6d 62 69 6e 65 28 0d 0a 20 20 20 20 20 20 20 20  mbine(..        
14f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14f60 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
14f70 61 74 69 6f 6e 2e 64 69 72 65 63 74 6f 72 79 2c  ation.directory,
14f80 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65 29 3b 0d   coreFileName);.
14f90 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
14fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
14fb0 74 72 69 6e 67 20 6c 69 6e 71 46 69 6c 65 4e 61  tring linqFileNa
14fc0 6d 65 20 3d 20 63 6f 6e 66 69 67 75 72 61 74 69  me = configurati
14fd0 6f 6e 2e 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 3b  on.linqFileName;
14fe0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
14ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15000 69 66 20 28 21 53 74 72 69 6e 67 2e 49 73 4e 75  if (!String.IsNu
15010 6c 6c 4f 72 45 6d 70 74 79 28 6c 69 6e 71 46 69  llOrEmpty(linqFi
15020 6c 65 4e 61 6d 65 29 29 0d 0a 20 20 20 20 20 20  leName))..      
15030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15040 20 20 20 20 20 20 20 20 20 20 6c 69 6e 71 46 69            linqFi
15050 6c 65 4e 61 6d 65 20 3d 20 50 61 74 68 2e 47 65  leName = Path.Ge
15060 74 46 69 6c 65 4e 61 6d 65 28 6c 69 6e 71 46 69  tFileName(linqFi
15070 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20  leName);....    
15080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15090 20 20 20 20 20 20 20 20 69 66 20 28 53 74 72 69          if (Stri
150a0 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79  ng.IsNullOrEmpty
150b0 28 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 29 29 0d  (linqFileName)).
150c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
150d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
150e0 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 20 3d 20   linqFileName = 
150f0 49 6e 73 74 61 6c 6c 65 72 2e 4c 69 6e 71 46 69  Installer.LinqFi
15100 6c 65 4e 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20  leName;....     
15110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15120 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
15130 74 69 6f 6e 2e 6c 69 6e 71 46 69 6c 65 4e 61 6d  tion.linqFileNam
15140 65 20 3d 20 50 61 74 68 2e 43 6f 6d 62 69 6e 65  e = Path.Combine
15150 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
15160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15170 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
15180 2e 64 69 72 65 63 74 6f 72 79 2c 20 6c 69 6e 71  .directory, linq
15190 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20  FileName);....  
151a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
151b0 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
151c0 20 65 66 36 46 69 6c 65 4e 61 6d 65 20 3d 20 63   ef6FileName = c
151d0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 65 66 36  onfiguration.ef6
151e0 46 69 6c 65 4e 61 6d 65 3b 0d 0a 0d 0a 20 20 20  FileName;....   
151f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15200 20 20 20 20 20 20 20 20 20 69 66 20 28 21 53 74           if (!St
15210 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70  ring.IsNullOrEmp
15220 74 79 28 65 66 36 46 69 6c 65 4e 61 6d 65 29 29  ty(ef6FileName))
15230 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
15240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15250 20 20 65 66 36 46 69 6c 65 4e 61 6d 65 20 3d 20    ef6FileName = 
15260 50 61 74 68 2e 47 65 74 46 69 6c 65 4e 61 6d 65  Path.GetFileName
15270 28 65 66 36 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a  (ef6FileName);..
15280 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
15290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
152a0 20 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f   (String.IsNullO
152b0 72 45 6d 70 74 79 28 65 66 36 46 69 6c 65 4e 61  rEmpty(ef6FileNa
152c0 6d 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  me))..          
152d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
152e0 20 20 20 20 20 20 65 66 36 46 69 6c 65 4e 61 6d        ef6FileNam
152f0 65 20 3d 20 49 6e 73 74 61 6c 6c 65 72 2e 45 66  e = Installer.Ef
15300 36 46 69 6c 65 4e 61 6d 65 3b 0d 0a 0d 0a 20 20  6FileName;....  
15310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15320 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
15330 75 72 61 74 69 6f 6e 2e 65 66 36 46 69 6c 65 4e  uration.ef6FileN
15340 61 6d 65 20 3d 20 50 61 74 68 2e 43 6f 6d 62 69  ame = Path.Combi
15350 6e 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ne(..           
15360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15370 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
15380 6f 6e 2e 64 69 72 65 63 74 6f 72 79 2c 20 65 66  on.directory, ef
15390 36 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20  6FileName);.... 
153a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
153b0 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
153c0 67 20 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61  g designerFileNa
153d0 6d 65 20 3d 20 63 6f 6e 66 69 67 75 72 61 74 69  me = configurati
153e0 6f 6e 2e 64 65 73 69 67 6e 65 72 46 69 6c 65 4e  on.designerFileN
153f0 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ame;....        
15400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15410 20 20 20 20 69 66 20 28 21 53 74 72 69 6e 67 2e      if (!String.
15420 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 64 65  IsNullOrEmpty(de
15430 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 29 29  signerFileName))
15440 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
15450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15460 20 20 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61    designerFileNa
15470 6d 65 20 3d 20 50 61 74 68 2e 47 65 74 46 69 6c  me = Path.GetFil
15480 65 4e 61 6d 65 28 64 65 73 69 67 6e 65 72 46 69  eName(designerFi
15490 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20  leName);....    
154a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
154b0 20 20 20 20 20 20 20 20 69 66 20 28 53 74 72 69          if (Stri
154c0 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79  ng.IsNullOrEmpty
154d0 28 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d  (designerFileNam
154e0 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
154f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15500 20 20 20 20 20 64 65 73 69 67 6e 65 72 46 69 6c       designerFil
15510 65 4e 61 6d 65 20 3d 20 49 6e 73 74 61 6c 6c 65  eName = Installe
15520 72 2e 44 65 73 69 67 6e 65 72 46 69 6c 65 4e 61  r.DesignerFileNa
15530 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  me;....         
15540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15550 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
15560 2e 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d  .designerFileNam
15570 65 20 3d 20 50 61 74 68 2e 43 6f 6d 62 69 6e 65  e = Path.Combine
15580 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
15590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
155a0 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
155b0 2e 64 69 72 65 63 74 6f 72 79 2c 20 64 65 73 69  .directory, desi
155c0 67 6e 65 72 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a  gnerFileName);..
155d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
155e0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
155f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15600 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63     else if (Matc
15610 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20  hOption(newArg, 
15620 22 65 66 36 46 69 6c 65 4e 61 6d 65 22 29 29 0d  "ef6FileName")).
15630 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15640 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
15650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15660 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
15670 61 74 69 6f 6e 2e 65 66 36 46 69 6c 65 4e 61 6d  ation.ef6FileNam
15680 65 20 3d 20 74 65 78 74 3b 0d 0a 20 20 20 20 20  e = text;..     
15690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
156a0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
156b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
156c0 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69  se if (MatchOpti
156d0 6f 6e 28 6e 65 77 41 72 67 2c 20 22 69 6e 73 74  on(newArg, "inst
156e0 61 6c 6c 22 29 29 0d 0a 20 20 20 20 20 20 20 20  all"))..        
156f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15700 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
15710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
15720 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72  ool? value = Par
15730 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b  seBoolean(text);
15740 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
15750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15760 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c  if (value == nul
15770 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
15780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15790 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
157a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
157b0 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65     error = Trace
157c0 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
157d0 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
157e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
157f0 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69          TracePri
15800 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65  ority.Lowest, de
15810 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20  bugCallback,..  
15820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15840 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c    traceCallback,
15850 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
15860 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15880 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30       "Invalid {0
15890 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a  } boolean value:
158a0 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20   {1}",..        
158b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
158c0 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44              ForD
158d0 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72  isplay(arg), For
158e0 44 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d  Display(text)),.
158f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15910 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
15920 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
15930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15940 20 20 20 20 20 20 20 20 69 66 20 28 73 74 72 69          if (stri
15950 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ct)..           
15960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15970 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
15980 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  false;....      
15990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
159a0 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e            contin
159b0 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
159c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
159d0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
159e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
159f0 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e    configuration.
15a00 69 6e 73 74 61 6c 6c 20 3d 20 28 62 6f 6f 6c 29  install = (bool)
15a10 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  value;..        
15a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15a30 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
15a40 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20             else 
15a50 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28  if (MatchOption(
15a60 6e 65 77 41 72 67 2c 20 22 69 6e 73 74 61 6c 6c  newArg, "install
15a70 46 6c 61 67 73 22 29 29 0d 0a 20 20 20 20 20 20  Flags"))..      
15a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15a90 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
15aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15ab0 20 6f 62 6a 65 63 74 20 76 61 6c 75 65 20 3d 20   object value = 
15ac0 50 61 72 73 65 45 6e 75 6d 28 0d 0a 20 20 20 20  ParseEnum(..    
15ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15ae0 20 20 20 20 20 20 20 20 20 20 20 20 74 79 70 65              type
15af0 6f 66 28 49 6e 73 74 61 6c 6c 46 6c 61 67 73 29  of(InstallFlags)
15b00 2c 20 74 65 78 74 2c 20 74 72 75 65 29 3b 0d 0a  , text, true);..
15b10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
15b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
15b30 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29   (value == null)
15b40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
15b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
15b60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15b80 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70   error = TraceOp
15b90 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
15ba0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
15bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15bc0 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72        TracePrior
15bd0 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75  ity.Lowest, debu
15be0 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20  gCallback,..    
15bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15c10 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
15c20 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
15c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15c50 20 20 20 22 49 6e 76 61 6c 69 64 20 69 6e 73 74     "Invalid inst
15c60 61 6c 6c 20 66 6c 61 67 73 20 76 61 6c 75 65 3a  all flags value:
15c70 20 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20   {0}",..        
15c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15c90 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44              ForD
15ca0 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c 20 74  isplay(text)), t
15cb0 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
15cc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
15cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15ce0 20 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20    if (strict).. 
15cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15d10 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
15d20 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
15d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15d40 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20      continue;.. 
15d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15d60 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
15d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15d80 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
15d90 69 67 75 72 61 74 69 6f 6e 2e 69 6e 73 74 61 6c  iguration.instal
15da0 6c 46 6c 61 67 73 20 3d 20 28 49 6e 73 74 61 6c  lFlags = (Instal
15db0 6c 46 6c 61 67 73 29 76 61 6c 75 65 3b 0d 0a 20  lFlags)value;.. 
15dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15dd0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
15de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15df0 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68    else if (Match
15e00 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22  Option(newArg, "
15e10 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 22 29 29 0d  linqFileName")).
15e20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15e30 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
15e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15e50 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
15e60 61 74 69 6f 6e 2e 6c 69 6e 71 46 69 6c 65 4e 61  ation.linqFileNa
15e70 6d 65 20 3d 20 74 65 78 74 3b 0d 0a 20 20 20 20  me = text;..    
15e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15e90 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
15ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
15eb0 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74  lse if (MatchOpt
15ec0 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6c 6f 67  ion(newArg, "log
15ed0 46 69 6c 65 4e 61 6d 65 22 29 29 0d 0a 20 20 20  FileName"))..   
15ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15ef0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
15f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15f10 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
15f20 6e 2e 6c 6f 67 46 69 6c 65 4e 61 6d 65 20 3d 20  n.logFileName = 
15f30 74 65 78 74 3b 0d 0a 20 20 20 20 20 20 20 20 20  text;..         
15f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
15f50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
15f60 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69            else i
15f70 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e  f (MatchOption(n
15f80 65 77 41 72 67 2c 20 22 6e 6f 43 6f 6d 70 61 63  ewArg, "noCompac
15f90 74 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  t"))..          
15fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
15fb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
15fd0 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65  l? value = Parse
15fe0 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a  Boolean(text);..
15ff0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
16010 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29   (value == null)
16020 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
16040 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16060 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70   error = TraceOp
16070 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
16080 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
160a0 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72        TracePrior
160b0 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75  ity.Lowest, debu
160c0 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20  gCallback,..    
160d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
160e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
160f0 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
16100 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
16110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16130 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20     "Invalid {0} 
16140 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b  boolean value: {
16150 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  1}",..          
16160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16170 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
16180 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69  play(arg), ForDi
16190 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20  splay(text)),.. 
161a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
161b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
161c0 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
161d0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
161e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
161f0 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74        if (strict
16200 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
16210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16220 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
16230 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lse;....        
16240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16250 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65          continue
16260 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
16270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
16280 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
16290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
162a0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f  configuration.no
162b0 43 6f 6d 70 61 63 74 20 3d 20 28 62 6f 6f 6c 29  Compact = (bool)
162c0 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  value;..        
162d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
162e0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
162f0 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20             else 
16300 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28  if (MatchOption(
16310 6e 65 77 41 72 67 2c 20 22 6e 6f 43 6f 6e 73 6f  newArg, "noConso
16320 6c 65 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20  le"))..         
16330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
16340 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
16360 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73  ol? value = Pars
16370 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d  eBoolean(text);.
16380 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
16390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
163a0 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c  f (value == null
163b0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
163c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
163d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
163e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
163f0 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f    error = TraceO
16400 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
16410 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
16420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16430 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f         TracePrio
16440 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62  rity.Lowest, deb
16450 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20  ugCallback,..   
16460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16480 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
16490 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
164a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
164b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
164c0 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d      "Invalid {0}
164d0 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20   boolean value: 
164e0 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  {1}",..         
164f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16500 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69             ForDi
16510 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44  splay(arg), ForD
16520 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a  isplay(text)),..
16530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16550 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
16560 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
16570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16580 20 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63         if (stric
16590 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t)..            
165a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
165b0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
165c0 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  alse;....       
165d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
165e0 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75           continu
165f0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
16600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16610 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
16620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16630 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e   configuration.n
16640 6f 43 6f 6e 73 6f 6c 65 20 3d 20 28 62 6f 6f 6c  oConsole = (bool
16650 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20  )value;..       
16660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16670 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
16680 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
16690 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e   if (MatchOption
166a0 28 6e 65 77 41 72 67 2c 20 22 6e 6f 44 65 73 6b  (newArg, "noDesk
166b0 74 6f 70 22 29 29 0d 0a 20 20 20 20 20 20 20 20  top"))..        
166c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
166d0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
166e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
166f0 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72  ool? value = Par
16700 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b  seBoolean(text);
16710 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
16720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16730 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c  if (value == nul
16740 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
16750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16760 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
16770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16780 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65     error = Trace
16790 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
167a0 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
167b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
167c0 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69          TracePri
167d0 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65  ority.Lowest, de
167e0 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20  bugCallback,..  
167f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16810 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c    traceCallback,
16820 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
16830 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16850 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30       "Invalid {0
16860 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a  } boolean value:
16870 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20   {1}",..        
16880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16890 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44              ForD
168a0 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72  isplay(arg), For
168b0 44 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d  Display(text)),.
168c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
168d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
168e0 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
168f0 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
16900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16910 20 20 20 20 20 20 20 20 69 66 20 28 73 74 72 69          if (stri
16920 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ct)..           
16930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16940 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
16950 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  false;....      
16960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16970 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e            contin
16980 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
16990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
169a0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
169b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
169c0 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e    configuration.
169d0 6e 6f 44 65 73 6b 74 6f 70 20 3d 20 28 62 6f 6f  noDesktop = (boo
169e0 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20  l)value;..      
169f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16a00 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
16a10 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73               els
16a20 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f  e if (MatchOptio
16a30 6e 28 6e 65 77 41 72 67 2c 20 22 6e 6f 4c 6f 67  n(newArg, "noLog
16a40 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  "))..           
16a50 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
16a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16a70 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
16a80 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42  ? value = ParseB
16a90 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d  oolean(text);...
16aa0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
16ac0 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d  (value == null).
16ad0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
16af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16b10 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73  error = TraceOps
16b20 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d  .DebugAndTrace(.
16b30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16b50 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69       TracePriori
16b60 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67  ty.Lowest, debug
16b70 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20  Callback,..     
16b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
16ba0 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
16bb0 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
16bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16be0 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62    "Invalid {0} b
16bf0 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31  oolean value: {1
16c00 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }",..           
16c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16c20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
16c30 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73  lay(arg), ForDis
16c40 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20  play(text)),..  
16c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16c70 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
16c80 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
16c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16ca0 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29       if (strict)
16cb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16cd0 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
16ce0 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  se;....         
16cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16d00 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b         continue;
16d10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
16d30 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
16d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
16d50 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 4c  onfiguration.noL
16d60 6f 67 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65  og = (bool)value
16d70 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
16d80 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
16d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16da0 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d        else if (M
16db0 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72  atchOption(newAr
16dc0 67 2c 20 22 6e 6f 4e 65 74 46 78 32 30 22 29 29  g, "noNetFx20"))
16dd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16de0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
16df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16e00 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76           bool? v
16e10 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c  alue = ParseBool
16e20 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20  ean(text);....  
16e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16e40 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61            if (va
16e50 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  lue == null)..  
16e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16e70 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
16e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16e90 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
16ea0 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65  or = TraceOps.De
16eb0 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20  bugAndTrace(..  
16ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16ee0 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e    TracePriority.
16ef0 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c  Lowest, debugCal
16f00 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20  lback,..        
16f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16f20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
16f30 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
16f40 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
16f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
16f70 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c  Invalid {0} bool
16f80 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c  ean value: {1}",
16f90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16fb0 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
16fc0 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61  (arg), ForDispla
16fd0 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20  y(text)),..     
16fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
17000 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
17010 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
17020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17030 20 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20    if (strict).. 
17040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17060 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
17070 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
17080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17090 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20      continue;.. 
170a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
170b0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
170c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
170d0 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
170e0 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 4e 65 74 46  iguration.noNetF
170f0 78 32 30 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75  x20 = (bool)valu
17100 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
17110 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
17120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17130 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28         else if (
17140 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41  MatchOption(newA
17150 72 67 2c 20 22 6e 6f 4e 65 74 46 78 33 35 22 29  rg, "noNetFx35")
17160 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
17170 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
17180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17190 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20            bool? 
171a0 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f  value = ParseBoo
171b0 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20  lean(text);.... 
171c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
171d0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76             if (v
171e0 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  alue == null).. 
171f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17200 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
17210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
17230 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44  ror = TraceOps.D
17240 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20  ebugAndTrace(.. 
17250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17270 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79     TracePriority
17280 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61  .Lowest, debugCa
17290 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20  llback,..       
172a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
172b0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
172c0 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69  ceCallback, Stri
172d0 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
172e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
172f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17300 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f  "Invalid {0} boo
17310 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22  lean value: {1}"
17320 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
17330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17340 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61         ForDispla
17350 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c  y(arg), ForDispl
17360 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20  ay(text)),..    
17370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17390 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
173a0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
173b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
173c0 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a     if (strict)..
173d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
173e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
173f0 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
17400 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
17410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17420 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a       continue;..
17430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17440 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
17450 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17460 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
17470 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 4e 65 74  figuration.noNet
17480 46 78 33 35 20 3d 20 28 62 6f 6f 6c 29 76 61 6c  Fx35 = (bool)val
17490 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
174a0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
174b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
174c0 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20          else if 
174d0 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77  (MatchOption(new
174e0 41 72 67 2c 20 22 6e 6f 4e 65 74 46 78 34 30 22  Arg, "noNetFx40"
174f0 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
17500 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
17510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17520 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f             bool?
17530 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f   value = ParseBo
17540 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a  olean(text);....
17550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17560 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
17570 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  value == null)..
17580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17590 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
175a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
175b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
175c0 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e  rror = TraceOps.
175d0 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a  DebugAndTrace(..
175e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
175f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17600 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74      TracePriorit
17610 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43  y.Lowest, debugC
17620 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20  allback,..      
17630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
17650 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
17660 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
17670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17690 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f   "Invalid {0} bo
176a0 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d  olean value: {1}
176b0 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
176c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
176d0 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
176e0 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70  ay(arg), ForDisp
176f0 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20  lay(text)),..   
17700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17720 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
17730 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
17740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17750 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d      if (strict).
17760 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17780 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
17790 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
177a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
177b0 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d        continue;.
177c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
177d0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
177e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
177f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
17800 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 4e 65  nfiguration.noNe
17810 74 46 78 34 30 20 3d 20 28 62 6f 6f 6c 29 76 61  tFx40 = (bool)va
17820 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lue;..          
17830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
17840 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17850 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66           else if
17860 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65   (MatchOption(ne
17870 77 41 72 67 2c 20 22 6e 6f 4e 65 74 46 78 34 35  wArg, "noNetFx45
17880 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  "))..           
17890 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
178a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
178b0 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
178c0 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42  ? value = ParseB
178d0 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d  oolean(text);...
178e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
178f0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
17900 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d  (value == null).
17910 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17920 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
17930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17950 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73  error = TraceOps
17960 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d  .DebugAndTrace(.
17970 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17990 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69       TracePriori
179a0 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67  ty.Lowest, debug
179b0 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20  Callback,..     
179c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
179d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
179e0 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
179f0 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
17a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17a20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62    "Invalid {0} b
17a30 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31  oolean value: {1
17a40 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }",..           
17a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17a60 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
17a70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73  lay(arg), ForDis
17a80 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20  play(text)),..  
17a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17ab0 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
17ac0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
17ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17ae0 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29       if (strict)
17af0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
17b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17b10 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
17b20 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  se;....         
17b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17b40 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b         continue;
17b50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
17b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
17b70 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
17b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
17b90 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 4e  onfiguration.noN
17ba0 65 74 46 78 34 35 20 3d 20 28 62 6f 6f 6c 29 76  etFx45 = (bool)v
17bb0 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alue;..         
17bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
17bd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
17be0 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69            else i
17bf0 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e  f (MatchOption(n
17c00 65 77 41 72 67 2c 20 22 6e 6f 4e 65 74 46 78 34  ewArg, "noNetFx4
17c10 35 31 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20  51"))..         
17c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
17c30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
17c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
17c50 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73  ol? value = Pars
17c60 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d  eBoolean(text);.
17c70 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
17c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
17c90 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c  f (value == null
17ca0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
17cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
17cc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
17cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17ce0 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f    error = TraceO
17cf0 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
17d00 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
17d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17d20 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f         TracePrio
17d30 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62  rity.Lowest, deb
17d40 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20  ugCallback,..   
17d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17d70 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
17d80 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
17d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17db0 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d      "Invalid {0}
17dc0 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20   boolean value: 
17dd0 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  {1}",..         
17de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17df0 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69             ForDi
17e00 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44  splay(arg), ForD
17e10 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a  isplay(text)),..
17e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17e40 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
17e50 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
17e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17e70 20 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63         if (stric
17e80 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t)..            
17e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17ea0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
17eb0 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  alse;....       
17ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17ed0 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75           continu
17ee0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
17ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17f00 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
17f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17f20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e   configuration.n
17f30 6f 4e 65 74 46 78 34 35 31 20 3d 20 28 62 6f 6f  oNetFx451 = (boo
17f40 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20  l)value;..      
17f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17f60 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
17f70 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73               els
17f80 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f  e if (MatchOptio
17f90 6e 28 6e 65 77 41 72 67 2c 20 22 6e 6f 52 75 6e  n(newArg, "noRun
17fa0 74 69 6d 65 56 65 72 73 69 6f 6e 22 29 29 0d 0a  timeVersion"))..
17fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17fc0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
17fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17fe0 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c         bool? val
17ff0 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61  ue = ParseBoolea
18000 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20  n(text);....    
18010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18020 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75          if (valu
18030 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
18040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18050 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
18060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18070 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
18080 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75   = TraceOps.Debu
18090 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20  gAndTrace(..    
180a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
180b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
180c0 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f  TracePriority.Lo
180d0 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62  west, debugCallb
180e0 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ack,..          
180f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18100 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
18110 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e  allback, String.
18120 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
18130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18140 20 20 20 20 20 20 20 20 20 20 20 20 20 22 49 6e               "In
18150 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61  valid {0} boolea
18160 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a  n value: {1}",..
18170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18190 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61      ForDisplay(a
181a0 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  rg), ForDisplay(
181b0 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20  text)),..       
181c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
181d0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
181e0 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
181f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18210 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20  if (strict)..   
18220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18240 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
18250 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18270 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20    continue;..   
18280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18290 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
182a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
182b0 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
182c0 75 72 61 74 69 6f 6e 2e 6e 6f 52 75 6e 74 69 6d  uration.noRuntim
182d0 65 56 65 72 73 69 6f 6e 20 3d 20 28 62 6f 6f 6c  eVersion = (bool
182e0 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20  )value;..       
182f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18300 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
18310 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
18320 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e   if (MatchOption
18330 28 6e 65 77 41 72 67 2c 20 22 6e 6f 54 72 61 63  (newArg, "noTrac
18340 65 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  e"))..          
18350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
18360 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18370 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
18380 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65  l? value = Parse
18390 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a  Boolean(text);..
183a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
183b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
183c0 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29   (value == null)
183d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
183e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
183f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18410 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70   error = TraceOp
18420 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
18430 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18450 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72        TracePrior
18460 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75  ity.Lowest, debu
18470 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20  gCallback,..    
18480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
184a0 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
184b0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
184c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
184d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
184e0 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20     "Invalid {0} 
184f0 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b  boolean value: {
18500 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  1}",..          
18510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18520 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
18530 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69  play(arg), ForDi
18540 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20  splay(text)),.. 
18550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18570 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
18580 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
18590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
185a0 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74        if (strict
185b0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
185c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
185d0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
185e0 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lse;....        
185f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18600 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65          continue
18610 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
18620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
18630 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
18640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18650 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f  configuration.no
18660 54 72 61 63 65 20 3d 20 28 62 6f 6f 6c 29 76 61  Trace = (bool)va
18670 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lue;..          
18680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
18690 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
186a0 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66           else if
186b0 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65   (MatchOption(ne
186c0 77 41 72 67 2c 20 22 6e 6f 56 73 32 30 30 35 22  wArg, "noVs2005"
186d0 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
186e0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
186f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18700 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f             bool?
18710 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f   value = ParseBo
18720 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a  olean(text);....
18730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18740 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
18750 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  value == null)..
18760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18770 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
18780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
187a0 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e  rror = TraceOps.
187b0 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a  DebugAndTrace(..
187c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
187d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
187e0 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74      TracePriorit
187f0 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43  y.Lowest, debugC
18800 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20  allback,..      
18810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
18830 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
18840 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
18850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18870 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f   "Invalid {0} bo
18880 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d  olean value: {1}
18890 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
188a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
188b0 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
188c0 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70  ay(arg), ForDisp
188d0 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20  lay(text)),..   
188e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
188f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18900 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
18910 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
18920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18930 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d      if (strict).
18940 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18960 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
18970 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
18980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18990 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d        continue;.
189a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
189b0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
189c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
189d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
189e0 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 56 73  nfiguration.noVs
189f0 32 30 30 35 20 3d 20 28 62 6f 6f 6c 29 76 61 6c  2005 = (bool)val
18a00 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
18a10 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
18a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18a30 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20          else if 
18a40 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77  (MatchOption(new
18a50 41 72 67 2c 20 22 6e 6f 56 73 32 30 30 38 22 29  Arg, "noVs2008")
18a60 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
18a70 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
18a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18a90 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20            bool? 
18aa0 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f  value = ParseBoo
18ab0 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20  lean(text);.... 
18ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18ad0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76             if (v
18ae0 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  alue == null).. 
18af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18b00 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
18b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
18b30 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44  ror = TraceOps.D
18b40 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20  ebugAndTrace(.. 
18b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18b70 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79     TracePriority
18b80 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61  .Lowest, debugCa
18b90 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20  llback,..       
18ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
18bc0 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69  ceCallback, Stri
18bd0 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
18be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18c00 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f  "Invalid {0} boo
18c10 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22  lean value: {1}"
18c20 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
18c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18c40 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61         ForDispla
18c50 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c  y(arg), ForDispl
18c60 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20  ay(text)),..    
18c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18c90 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
18ca0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
18cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18cc0 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a     if (strict)..
18cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18cf0 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
18d00 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
18d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18d20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a       continue;..
18d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18d40 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
18d50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18d60 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
18d70 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 56 73 32  figuration.noVs2
18d80 30 30 38 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75  008 = (bool)valu
18d90 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
18da0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
18db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18dc0 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28         else if (
18dd0 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41  MatchOption(newA
18de0 72 67 2c 20 22 6e 6f 56 73 32 30 31 30 22 29 29  rg, "noVs2010"))
18df0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18e00 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
18e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18e20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76           bool? v
18e30 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c  alue = ParseBool
18e40 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20  ean(text);....  
18e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18e60 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61            if (va
18e70 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  lue == null)..  
18e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18e90 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
18ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
18ec0 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65  or = TraceOps.De
18ed0 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20  bugAndTrace(..  
18ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18f00 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e    TracePriority.
18f10 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c  Lowest, debugCal
18f20 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20  lback,..        
18f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18f40 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
18f50 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
18f60 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
18f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
18f90 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c  Invalid {0} bool
18fa0 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c  ean value: {1}",
18fb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18fd0 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
18fe0 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61  (arg), ForDispla
18ff0 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20  y(text)),..     
19000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
19020 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
19030 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19050 20 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20    if (strict).. 
19060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19080 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
19090 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
190a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
190b0 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20      continue;.. 
190c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
190d0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
190e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
190f0 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
19100 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 56 73 32 30  iguration.noVs20
19110 31 30 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65  10 = (bool)value
19120 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
19130 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
19140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19150 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d        else if (M
19160 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72  atchOption(newAr
19170 67 2c 20 22 6e 6f 56 73 32 30 31 32 22 29 29 0d  g, "noVs2012")).
19180 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19190 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
191a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
191b0 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61          bool? va
191c0 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65  lue = ParseBoole
191d0 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20  an(text);....   
191e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
191f0 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c           if (val
19200 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ue == null)..   
19210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19220 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
19230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19240 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
19250 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62  r = TraceOps.Deb
19260 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20  ugAndTrace(..   
19270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19290 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c   TracePriority.L
192a0 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c  owest, debugCall
192b0 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20  back,..         
192c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
192d0 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
192e0 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67  Callback, String
192f0 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
19300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 49                "I
19320 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65  nvalid {0} boole
19330 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d  an value: {1}",.
19340 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19360 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28       ForDisplay(
19370 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79  arg), ForDisplay
19380 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20  (text)),..      
19390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
193a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
193b0 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
193c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
193d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
193e0 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20   if (strict)..  
193f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19410 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
19420 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
19430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19440 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20     continue;..  
19450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19460 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
19470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19480 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69             confi
19490 67 75 72 61 74 69 6f 6e 2e 6e 6f 56 73 32 30 31  guration.noVs201
194a0 32 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b  2 = (bool)value;
194b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
194c0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
194d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
194e0 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61       else if (Ma
194f0 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67  tchOption(newArg
19500 2c 20 22 6e 6f 56 73 32 30 31 33 22 29 29 0d 0a  , "noVs2013"))..
19510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19520 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
19530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19540 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c         bool? val
19550 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61  ue = ParseBoolea
19560 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20  n(text);....    
19570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19580 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75          if (valu
19590 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
195a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
195b0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
195c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
195d0 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
195e0 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75   = TraceOps.Debu
195f0 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20  gAndTrace(..    
19600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19620 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f  TracePriority.Lo
19630 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62  west, debugCallb
19640 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ack,..          
19650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19660 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
19670 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e  allback, String.
19680 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
19690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
196a0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 49 6e               "In
196b0 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61  valid {0} boolea
196c0 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a  n value: {1}",..
196d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
196e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
196f0 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61      ForDisplay(a
19700 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  rg), ForDisplay(
19710 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20  text)),..       
19720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19730 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
19740 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
19750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19770 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20  if (strict)..   
19780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
197a0 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
197b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
197c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
197d0 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20    continue;..   
197e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
197f0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
19800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19810 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
19820 75 72 61 74 69 6f 6e 2e 6e 6f 56 73 32 30 31 33  uration.noVs2013
19830 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d   = (bool)value;.
19840 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19850 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
19860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19870 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74      else if (Mat
19880 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c  chOption(newArg,
19890 20 22 70 65 72 55 73 65 72 22 29 29 0d 0a 20 20   "perUser"))..  
198a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
198b0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
198c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
198d0 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65       bool? value
198e0 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28   = ParseBoolean(
198f0 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  text);....      
19900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19910 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20        if (value 
19920 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
19930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19940 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
19950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19960 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
19970 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
19980 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20  ndTrace(..      
19990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
199a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
199b0 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65  acePriority.Lowe
199c0 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63  st, debugCallbac
199d0 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k,..            
199e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
199f0 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
19a00 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
19a10 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
19a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19a30 20 20 20 20 20 20 20 20 20 20 20 22 49 6e 76 61             "Inva
19a40 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20  lid {0} boolean 
19a50 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20  value: {1}",..  
19a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19a80 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67    ForDisplay(arg
19a90 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65  ), ForDisplay(te
19aa0 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  xt)),..         
19ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19ac0 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
19ad0 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
19ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
19b00 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20   (strict)..     
19b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
19b30 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a  eturn false;....
19b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19b60 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20  continue;..     
19b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19b80 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
19b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19ba0 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
19bb0 61 74 69 6f 6e 2e 70 65 72 55 73 65 72 20 3d 20  ation.perUser = 
19bc0 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20  (bool)value;..  
19bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19be0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
19bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19c00 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f   else if (MatchO
19c10 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 70  ption(newArg, "p
19c20 72 6f 76 69 64 65 72 46 6c 61 67 73 22 29 29 0d  roviderFlags")).
19c30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19c40 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
19c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19c60 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 76          object v
19c70 61 6c 75 65 20 3d 20 50 61 72 73 65 45 6e 75 6d  alue = ParseEnum
19c80 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
19c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19ca0 20 20 20 74 79 70 65 6f 66 28 50 72 6f 76 69 64     typeof(Provid
19cb0 65 72 46 6c 61 67 73 29 2c 20 74 65 78 74 2c 20  erFlags), text, 
19cc0 74 72 75 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  true);....      
19cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19ce0 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20        if (value 
19cf0 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
19d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19d10 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
19d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19d30 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
19d40 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
19d50 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20  ndTrace(..      
19d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
19d80 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65  acePriority.Lowe
19d90 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63  st, debugCallbac
19da0 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k,..            
19db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19dc0 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
19dd0 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
19de0 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
19df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19e00 20 20 20 20 20 20 20 20 20 20 20 22 49 6e 76 61             "Inva
19e10 6c 69 64 20 70 72 6f 76 69 64 65 72 20 66 6c 61  lid provider fla
19e20 67 73 20 76 61 6c 75 65 3a 20 7b 30 7d 22 2c 0d  gs value: {0}",.
19e30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19e50 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28       ForDisplay(
19e60 74 65 78 74 29 29 2c 20 74 72 61 63 65 43 61 74  text)), traceCat
19e70 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
19e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19e90 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73             if (s
19ea0 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20  trict)..        
19eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19ec0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
19ed0 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20  rn false;....   
19ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
19f00 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  tinue;..        
19f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19f20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
19f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19f40 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
19f50 6f 6e 2e 70 72 6f 76 69 64 65 72 46 6c 61 67 73  on.providerFlags
19f60 20 3d 20 28 50 72 6f 76 69 64 65 72 46 6c 61 67   = (ProviderFlag
19f70 73 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20  s)value;..      
19f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19f90 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
19fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73               els
19fb0 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f  e if (MatchOptio
19fc0 6e 28 6e 65 77 41 72 67 2c 20 22 72 65 67 69 73  n(newArg, "regis
19fd0 74 72 79 56 65 72 73 69 6f 6e 22 29 29 0d 0a 20  tryVersion")).. 
19fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19ff0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1a000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a010 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
1a020 69 6f 6e 2e 72 65 67 69 73 74 72 79 56 65 72 73  ion.registryVers
1a030 69 6f 6e 20 3d 20 74 65 78 74 3b 0d 0a 20 20 20  ion = text;..   
1a040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a050 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
1a060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a070 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70  else if (MatchOp
1a080 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 73 74  tion(newArg, "st
1a090 72 69 63 74 22 29 29 0d 0a 20 20 20 20 20 20 20  rict"))..       
1a0a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a0b0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1a0c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a0d0 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61  bool? value = Pa
1a0e0 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29  rseBoolean(text)
1a0f0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1a100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a110 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75   if (value == nu
1a120 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
1a130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a140 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1a150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a160 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63      error = Trac
1a170 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
1a180 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce(..           
1a190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a1a0 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72           TracePr
1a1b0 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64  iority.Lowest, d
1a1c0 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20  ebugCallback,.. 
1a1d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a1e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a1f0 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
1a200 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
1a210 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1a220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a230 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b        "Invalid {
1a240 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65  0} boolean value
1a250 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20  : {1}",..       
1a260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a270 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72               For
1a280 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f  Display(arg), Fo
1a290 72 44 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c  rDisplay(text)),
1a2a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1a2b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a2c0 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
1a2d0 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
1a2e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a2f0 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74 72           if (str
1a300 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ict)..          
1a310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a320 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
1a330 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20   false;....     
1a340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a350 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69             conti
1a360 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  nue;..          
1a370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a380 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
1a390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a3a0 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
1a3b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a3c0 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 41 6c 6c 6f     // NOTE: Allo
1a3d0 77 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 6c 69  w the command li
1a3e0 6e 65 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 0d  ne arguments to.
1a3f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1a400 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
1a410 20 20 20 20 20 20 6f 76 65 72 72 69 64 65 20 74        override t
1a420 68 65 20 22 73 74 72 69 63 74 6e 65 73 73 22 20  he "strictness" 
1a430 73 65 74 74 69 6e 67 0d 0a 20 20 20 20 20 20 20  setting..       
1a440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a450 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 70 72       //       pr
1a460 6f 76 69 64 65 64 20 62 79 20 6f 75 72 20 63 61  ovided by our ca
1a470 6c 6c 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 20  ller...         
1a480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a490 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
1a4a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a4b0 20 20 20 73 74 72 69 63 74 20 3d 20 28 62 6f 6f     strict = (boo
1a4c0 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20  l)value;..      
1a4d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a4e0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
1a4f0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73               els
1a500 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f  e if (MatchOptio
1a510 6e 28 6e 65 77 41 72 67 2c 20 22 74 68 72 6f 77  n(newArg, "throw
1a520 4f 6e 4d 69 73 73 69 6e 67 22 29 29 0d 0a 20 20  OnMissing"))..  
1a530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a540 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1a550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a560 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65       bool? value
1a570 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28   = ParseBoolean(
1a580 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  text);....      
1a590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a5a0 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20        if (value 
1a5b0 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
1a5c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a5d0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1a5e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a5f0 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
1a600 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
1a610 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20  ndTrace(..      
1a620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
1a640 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65  acePriority.Lowe
1a650 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63  st, debugCallbac
1a660 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k,..            
1a670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a680 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
1a690 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
1a6a0 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
1a6b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a6c0 20 20 20 20 20 20 20 20 20 20 20 22 49 6e 76 61             "Inva
1a6d0 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20  lid {0} boolean 
1a6e0 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20  value: {1}",..  
1a6f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a710 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67    ForDisplay(arg
1a720 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65  ), ForDisplay(te
1a730 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  xt)),..         
1a740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a750 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
1a760 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
1a770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
1a790 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20   (strict)..     
1a7a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a7b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
1a7c0 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a  eturn false;....
1a7d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a7e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a7f0 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20  continue;..     
1a800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a810 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
1a820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a830 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
1a840 61 74 69 6f 6e 2e 74 68 72 6f 77 4f 6e 4d 69 73  ation.throwOnMis
1a850 73 69 6e 67 20 3d 20 28 62 6f 6f 6c 29 76 61 6c  sing = (bool)val
1a860 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
1a870 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
1a880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a890 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20          else if 
1a8a0 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77  (MatchOption(new
1a8b0 41 72 67 2c 20 22 74 72 61 63 65 46 6f 72 6d 61  Arg, "traceForma
1a8c0 74 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  t"))..          
1a8d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
1a8e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1a8f0 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
1a900 66 69 67 75 72 61 74 69 6f 6e 2e 74 72 61 63 65  figuration.trace
1a910 46 6f 72 6d 61 74 20 3d 20 74 65 78 74 3b 0d 0a  Format = text;..
1a920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a930 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
1a940 65 4f 70 73 2e 54 72 61 63 65 46 6f 72 6d 61 74  eOps.TraceFormat
1a950 20 3d 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e   = configuration
1a960 2e 74 72 61 63 65 46 6f 72 6d 61 74 3b 0d 0a 20  .traceFormat;.. 
1a970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a980 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
1a990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a9a0 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68    else if (Match
1a9b0 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22  Option(newArg, "
1a9c0 74 72 61 63 65 50 72 69 6f 72 69 74 79 22 29 29  tracePriority"))
1a9d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1a9e0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1a9f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aa00 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20           object 
1aa10 76 61 6c 75 65 20 3d 20 50 61 72 73 65 45 6e 75  value = ParseEnu
1aa20 6d 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  m(..            
1aa30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aa40 20 20 20 20 74 79 70 65 6f 66 28 54 72 61 63 65      typeof(Trace
1aa50 50 72 69 6f 72 69 74 79 29 2c 20 74 65 78 74 2c  Priority), text,
1aa60 20 74 72 75 65 29 3b 0d 0a 0d 0a 20 20 20 20 20   true);....     
1aa70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aa80 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65         if (value
1aa90 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
1aaa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aab0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1aac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aad0 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
1aae0 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67  = TraceOps.Debug
1aaf0 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20  AndTrace(..     
1ab00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ab10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
1ab20 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77  racePriority.Low
1ab30 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61  est, debugCallba
1ab40 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ck,..           
1ab50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ab60 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
1ab70 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46  llback, String.F
1ab80 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
1ab90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aba0 20 20 20 20 20 20 20 20 20 20 20 20 22 49 6e 76              "Inv
1abb0 61 6c 69 64 20 7b 30 7d 20 76 61 6c 75 65 3a 20  alid {0} value: 
1abc0 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  {1}",..         
1abd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1abe0 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69             ForDi
1abf0 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44  splay(arg), ForD
1ac00 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a  isplay(text)),..
1ac10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ac20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ac30 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
1ac40 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
1ac50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ac60 20 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63         if (stric
1ac70 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t)..            
1ac80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ac90 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
1aca0 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  alse;....       
1acb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1acc0 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75           continu
1acd0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
1ace0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1acf0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
1ad00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ad10 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 74   configuration.t
1ad20 72 61 63 65 50 72 69 6f 72 69 74 79 20 3d 20 28  racePriority = (
1ad30 54 72 61 63 65 50 72 69 6f 72 69 74 79 29 76 61  TracePriority)va
1ad40 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lue;..          
1ad50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ad60 20 20 54 72 61 63 65 4f 70 73 2e 54 72 61 63 65    TraceOps.Trace
1ad70 50 72 69 6f 72 69 74 79 20 3d 20 63 6f 6e 66 69  Priority = confi
1ad80 67 75 72 61 74 69 6f 6e 2e 74 72 61 63 65 50 72  guration.tracePr
1ad90 69 6f 72 69 74 79 3b 0d 0a 20 20 20 20 20 20 20  iority;..       
1ada0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1adb0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
1adc0 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
1add0 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e   if (MatchOption
1ade0 28 6e 65 77 41 72 67 2c 20 22 76 65 72 62 6f 73  (newArg, "verbos
1adf0 65 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  e"))..          
1ae00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
1ae10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1ae20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
1ae30 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65  l? value = Parse
1ae40 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a  Boolean(text);..
1ae50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1ae60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
1ae70 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29   (value == null)
1ae80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1ae90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
1aea0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1aeb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aec0 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70   error = TraceOp
1aed0 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
1aee0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1aef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1af00 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72        TracePrior
1af10 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75  ity.Lowest, debu
1af20 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20  gCallback,..    
1af30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1af40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1af50 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
1af60 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
1af70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1af80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1af90 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20     "Invalid {0} 
1afa0 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b  boolean value: {
1afb0 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  1}",..          
1afc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1afd0 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
1afe0 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69  play(arg), ForDi
1aff0 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20  splay(text)),.. 
1b000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b020 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
1b030 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
1b040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b050 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74        if (strict
1b060 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
1b070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b080 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
1b090 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lse;....        
1b0a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b0b0 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65          continue
1b0c0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
1b0d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
1b0e0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1b0f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b100 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 76 65  configuration.ve
1b110 72 62 6f 73 65 20 3d 20 28 62 6f 6f 6c 29 76 61  rbose = (bool)va
1b120 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lue;..          
1b130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
1b140 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1b150 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66           else if
1b160 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65   (MatchOption(ne
1b170 77 41 72 67 2c 20 22 76 73 56 65 72 73 69 6f 6e  wArg, "vsVersion
1b180 53 75 66 66 69 78 22 29 29 0d 0a 20 20 20 20 20  Suffix"))..     
1b190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b1a0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1b1b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b1c0 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e    configuration.
1b1d0 76 73 56 65 72 73 69 6f 6e 53 75 66 66 69 78 20  vsVersionSuffix 
1b1e0 3d 20 74 65 78 74 3b 0d 0a 20 20 20 20 20 20 20  = text;..       
1b1f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b200 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
1b210 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
1b220 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e   if (MatchOption
1b230 28 6e 65 77 41 72 67 2c 20 22 77 68 61 74 49 66  (newArg, "whatIf
1b240 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  "))..           
1b250 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
1b260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b270 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
1b280 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42  ? value = ParseB
1b290 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d  oolean(text);...
1b2a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1b2b0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
1b2c0 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d  (value == null).
1b2d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1b2e0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
1b2f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b310 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73  error = TraceOps
1b320 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d  .DebugAndTrace(.
1b330 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1b340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b350 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69       TracePriori
1b360 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67  ty.Lowest, debug
1b370 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20  Callback,..     
1b380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1b3a0 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
1b3b0 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
1b3c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b3d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b3e0 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62    "Invalid {0} b
1b3f0 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31  oolean value: {1
1b400 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }",..           
1b410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b420 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
1b430 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73  lay(arg), ForDis
1b440 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20  play(text)),..  
1b450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b470 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
1b480 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1b490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b4a0 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29       if (strict)
1b4b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1b4c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b4d0 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
1b4e0 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  se;....         
1b4f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b500 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b         continue;
1b510 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1b520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
1b530 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1b540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
1b550 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 77 68 61  onfiguration.wha
1b560 74 49 66 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75  tIf = (bool)valu
1b570 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
1b580 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
1b590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b5a0 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28         else if (
1b5b0 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41  MatchOption(newA
1b5c0 72 67 2c 20 22 77 6f 77 36 34 22 29 29 0d 0a 20  rg, "wow64")).. 
1b5d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b5e0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1b5f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b600 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75        bool? valu
1b610 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e  e = ParseBoolean
1b620 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20  (text);....     
1b630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b640 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65         if (value
1b650 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
1b660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b670 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1b680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b690 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
1b6a0 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67  = TraceOps.Debug
1b6b0 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20  AndTrace(..     
1b6c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b6d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
1b6e0 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77  racePriority.Low
1b6f0 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61  est, debugCallba
1b700 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ck,..           
1b710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b720 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
1b730 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46  llback, String.F
1b740 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
1b750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b760 20 20 20 20 20 20 20 20 20 20 20 20 22 49 6e 76              "Inv
1b770 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e  alid {0} boolean
1b780 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20   value: {1}",.. 
1b790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b7a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b7b0 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72     ForDisplay(ar
1b7c0 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74  g), ForDisplay(t
1b7d0 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ext)),..        
1b7e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b7f0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
1b800 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
1b810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
1b830 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20  f (strict)..    
1b840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b860 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d  return false;...
1b870 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1b880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b890 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20   continue;..    
1b8a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b8b0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
1b8c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b8d0 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75           configu
1b8e0 72 61 74 69 6f 6e 2e 77 6f 77 36 34 20 3d 20 28  ration.wow64 = (
1b8f0 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20  bool)value;..   
1b900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b910 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
1b920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b930 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  else..          
1b940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
1b950 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1b960 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
1b970 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65  or = TraceOps.De
1b980 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20  bugAndTrace(..  
1b990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b9a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
1b9b0 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65  acePriority.Lowe
1b9c0 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63  st, debugCallbac
1b9d0 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k,..            
1b9e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b9f0 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
1ba00 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
1ba10 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
1ba20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ba30 20 20 20 22 55 6e 73 75 70 70 6f 72 74 65 64 20     "Unsupported 
1ba40 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20 6f 70 74  command line opt
1ba50 69 6f 6e 3a 20 7b 30 7d 22 2c 0d 0a 20 20 20 20  ion: {0}",..    
1ba60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ba70 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44              ForD
1ba80 69 73 70 6c 61 79 28 61 72 67 29 29 2c 20 74 72  isplay(arg)), tr
1ba90 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
1baa0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1bab0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
1bac0 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20  (strict)..      
1bad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bae0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
1baf0 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
1bb00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bb10 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
1bb20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
1bb30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bb40 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20   return true;.. 
1bb50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
1bb60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1bb70 20 20 63 61 74 63 68 20 28 45 78 63 65 70 74 69    catch (Excepti
1bb80 6f 6e 20 65 29 0d 0a 20 20 20 20 20 20 20 20 20  on e)..         
1bb90 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1bba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
1bbb0 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
1bbc0 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69  race(TracePriori
1bbd0 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20 20  ty.Highest,..   
1bbe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bbf0 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61       debugCallba
1bc00 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63  ck, traceCallbac
1bc10 6b 2c 20 65 2c 20 74 72 61 63 65 43 61 74 65 67  k, e, traceCateg
1bc20 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
1bc30 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
1bc40 6f 72 20 3d 20 22 46 61 69 6c 65 64 20 74 6f 20  or = "Failed to 
1bc50 6d 6f 64 69 66 79 20 63 6f 6e 66 69 67 75 72 61  modify configura
1bc60 74 69 6f 6e 2e 22 3b 0d 0a 20 20 20 20 20 20 20  tion.";..       
1bc70 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
1bc80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
1bc90 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
1bca0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
1bcb0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
1bcc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bcd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bce0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bcf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
1bd00 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 4d 65  .            [Me
1bd10 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49  thodImpl(MethodI
1bd20 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c  mplOptions.NoInl
1bd30 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20  ining)]..       
1bd40 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
1bd50 69 63 20 62 6f 6f 6c 20 50 72 6f 63 65 73 73 28  ic bool Process(
1bd60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1bd70 20 20 73 74 72 69 6e 67 5b 5d 20 61 72 67 73 2c    string[] args,
1bd80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1bd90 20 20 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20    Configuration 
1bda0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2c 0d 0a  configuration,..
1bdb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bdc0 62 6f 6f 6c 20 73 74 72 69 63 74 2c 0d 0a 20 20  bool strict,..  
1bdd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
1bde0 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a  f string error..
1bdf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1be00 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
1be10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1be20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20    try..         
1be30 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1be40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
1be50 20 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20   (configuration 
1be60 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
1be70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
1be80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1be90 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
1bea0 20 22 49 6e 76 61 6c 69 64 20 63 6f 6e 66 69 67   "Invalid config
1beb0 75 72 61 74 69 6f 6e 2e 22 3b 0d 0a 20 20 20 20  uration.";..    
1bec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bed0 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
1bee0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
1bef0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
1bf00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bf10 41 73 73 65 6d 62 6c 79 20 61 73 73 65 6d 62 6c  Assembly assembl
1bf20 79 20 3d 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  y = configuratio
1bf30 6e 2e 61 73 73 65 6d 62 6c 79 3b 0d 0a 0d 0a 20  n.assembly;.... 
1bf40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bf50 20 20 20 69 66 20 28 61 73 73 65 6d 62 6c 79 20     if (assembly 
1bf60 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
1bf70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
1bf80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1bf90 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
1bfa0 20 22 49 6e 76 61 6c 69 64 20 61 73 73 65 6d 62   "Invalid assemb
1bfb0 6c 79 2e 22 3b 0d 0a 20 20 20 20 20 20 20 20 20  ly.";..         
1bfc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
1bfd0 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
1bfe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bff0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
1c000 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
1c010 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f  configuration.no
1c020 54 72 61 63 65 29 0d 0a 20 20 20 20 20 20 20 20  Trace)..        
1c030 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1c040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c050 20 20 20 20 20 20 20 69 66 20 28 21 63 6f 6e 66         if (!conf
1c060 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 4c 6f 67 20  iguration.noLog 
1c070 26 26 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  &&..            
1c080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c090 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45  String.IsNullOrE
1c0a0 6d 70 74 79 28 63 6f 6e 66 69 67 75 72 61 74 69  mpty(configurati
1c0b0 6f 6e 2e 6c 6f 67 46 69 6c 65 4e 61 6d 65 29 29  on.logFileName))
1c0c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1c0d0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1c0e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c0f0 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
1c100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c110 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
1c120 3a 20 55 73 65 20 74 68 65 20 64 65 66 61 75 6c  : Use the defaul
1c130 74 20 6c 6f 67 20 66 69 6c 65 20 6e 61 6d 65 2e  t log file name.
1c140 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1c150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1c160 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1c170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
1c180 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6c 6f 67 46  nfiguration.logF
1c190 69 6c 65 4e 61 6d 65 20 3d 20 47 65 74 4c 6f 67  ileName = GetLog
1c1a0 46 69 6c 65 4e 61 6d 65 28 0d 0a 20 20 20 20 20  FileName(..     
1c1b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c1c0 20 20 20 20 20 20 20 20 20 20 20 22 74 72 61 63             "trac
1c1d0 65 22 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  e");..          
1c1e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
1c1f0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1c200 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
1c210 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c220 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c230 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c240 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
1c250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
1c260 20 28 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e   (!configuration
1c270 2e 6e 6f 43 6f 6e 73 6f 6c 65 29 0d 0a 20 20 20  .noConsole)..   
1c280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c290 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1c2a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c2b0 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
1c2c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c2d0 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 49 6e 20      // NOTE: In 
1c2e0 76 65 72 62 6f 73 65 20 6d 6f 64 65 2c 20 64 65  verbose mode, de
1c2f0 62 75 67 20 6f 75 74 70 75 74 20 28 74 68 61 74  bug output (that
1c300 20 6d 65 65 74 73 0d 0a 20 20 20 20 20 20 20 20   meets..        
1c310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c320 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74 68 65      //       the
1c330 20 63 6f 6e 66 69 67 75 72 65 64 20 70 72 69 6f   configured prio
1c340 72 69 74 79 20 63 72 69 74 65 72 69 61 29 20 77  rity criteria) w
1c350 69 6c 6c 20 62 65 0d 0a 20 20 20 20 20 20 20 20  ill be..        
1c360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c370 20 20 20 20 2f 2f 20 20 20 20 20 20 20 64 69 73      //       dis
1c380 70 6c 61 79 65 64 20 74 6f 20 74 68 65 20 63 6f  played to the co
1c390 6e 73 6f 6c 65 3b 20 6f 74 68 65 72 77 69 73 65  nsole; otherwise
1c3a0 2c 20 74 72 61 63 65 0d 0a 20 20 20 20 20 20 20  , trace..       
1c3b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c3c0 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6f 75       //       ou
1c3d0 74 70 75 74 20 28 74 68 61 74 20 6d 65 65 74 73  tput (that meets
1c3e0 20 74 68 65 20 63 6f 6e 66 69 67 75 72 65 64 20   the configured 
1c3f0 70 72 69 6f 72 69 74 79 0d 0a 20 20 20 20 20 20  priority..      
1c400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c410 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 63        //       c
1c420 72 69 74 65 72 69 61 29 20 77 69 6c 6c 20 62 65  riteria) will be
1c430 20 64 69 73 70 6c 61 79 65 64 20 74 6f 20 74 68   displayed to th
1c440 65 20 63 6f 6e 73 6f 6c 65 2e 0d 0a 20 20 20 20  e console...    
1c450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c460 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
1c470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c480 20 20 20 20 20 20 20 20 69 66 20 28 63 6f 6e 66          if (conf
1c490 69 67 75 72 61 74 69 6f 6e 2e 64 65 62 75 67 29  iguration.debug)
1c4a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1c4b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
1c4c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1c4d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c4e0 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
1c4f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c500 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 41 64       // NOTE: Ad
1c510 64 20 74 68 65 20 63 6f 6e 73 6f 6c 65 20 74 72  d the console tr
1c520 61 63 65 20 6c 69 73 74 65 6e 65 72 20 74 6f 20  ace listener to 
1c530 74 68 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  the..           
1c540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c550 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6c 69       //       li
1c560 73 74 20 6f 66 20 74 72 61 63 65 20 6c 69 73 74  st of trace list
1c570 65 6e 65 72 73 20 6d 61 69 6e 74 61 69 6e 65 64  eners maintained
1c580 20 62 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20   by..           
1c590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c5a0 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74 68       //       th
1c5b0 65 20 54 72 61 63 65 4f 70 73 20 63 6c 61 73 73  e TraceOps class
1c5c0 20 28 69 2e 65 2e 20 6f 6e 6c 79 20 6d 65 73 73   (i.e. only mess
1c5d0 61 67 65 73 0d 0a 20 20 20 20 20 20 20 20 20 20  ages..          
1c5e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c5f0 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74        //       t
1c600 68 61 74 20 6d 65 65 74 20 74 68 65 20 64 65 62  hat meet the deb
1c610 75 67 20 70 72 69 6f 72 69 74 79 20 77 69 6c 6c  ug priority will
1c620 20 62 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20   be..           
1c630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c640 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 73 65       //       se
1c650 65 6e 20 6f 6e 20 74 68 65 20 63 6f 6e 73 6f 6c  en on the consol
1c660 65 29 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e)...           
1c670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c680 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
1c690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c6a0 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70           TraceOp
1c6b0 73 2e 53 65 74 75 70 44 65 62 75 67 4c 69 73 74  s.SetupDebugList
1c6c0 65 6e 65 72 73 28 29 3b 0d 0a 20 20 20 20 20 20  eners();..      
1c6d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c6e0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
1c6f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c700 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20       else..     
1c710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c720 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1c730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c740 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
1c750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1c770 20 4e 4f 54 45 3a 20 41 64 64 20 74 68 65 20 63   NOTE: Add the c
1c780 6f 6e 73 6f 6c 65 20 74 72 61 63 65 20 6c 69 73  onsole trace lis
1c790 74 65 6e 65 72 20 74 6f 20 74 68 65 0d 0a 20 20  tener to the..  
1c7a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c7b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1c7c0 20 20 20 20 20 20 20 6c 69 73 74 20 6f 66 20 62         list of b
1c7d0 75 69 6c 74 2d 69 6e 20 74 72 61 63 65 20 6c 69  uilt-in trace li
1c7e0 73 74 65 6e 65 72 73 20 28 69 2e 65 2e 0d 0a 20  steners (i.e... 
1c7f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1c810 2f 20 20 20 20 20 20 20 6f 6e 6c 79 20 6d 65 73  /       only mes
1c820 73 61 67 65 73 20 74 68 61 74 20 6d 65 65 74 20  sages that meet 
1c830 74 68 65 20 74 72 61 63 65 0d 0a 20 20 20 20 20  the trace..     
1c840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c850 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
1c860 20 20 20 20 70 72 69 6f 72 69 74 79 20 77 69 6c      priority wil
1c870 6c 20 62 65 20 73 65 65 6e 20 6f 6e 20 74 68 65  l be seen on the
1c880 20 63 6f 6e 73 6f 6c 65 29 2e 0d 0a 20 20 20 20   console)...    
1c890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c8a0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
1c8b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c8c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c8d0 54 72 61 63 65 2e 4c 69 73 74 65 6e 65 72 73 2e  Trace.Listeners.
1c8e0 41 64 64 28 6e 65 77 20 43 6f 6e 73 6f 6c 65 54  Add(new ConsoleT
1c8f0 72 61 63 65 4c 69 73 74 65 6e 65 72 28 29 29 3b  raceListener());
1c900 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1c910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
1c920 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1c930 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
1c940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c950 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
1c960 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c970 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c980 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
1c990 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1c9a0 20 20 20 20 20 20 20 20 20 69 66 20 28 21 63 6f           if (!co
1c9b0 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 4c 6f  nfiguration.noLo
1c9c0 67 20 26 26 0d 0a 20 20 20 20 20 20 20 20 20 20  g &&..          
1c9d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c9e0 20 20 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c    !String.IsNull
1c9f0 4f 72 45 6d 70 74 79 28 63 6f 6e 66 69 67 75 72  OrEmpty(configur
1ca00 61 74 69 6f 6e 2e 6c 6f 67 46 69 6c 65 4e 61 6d  ation.logFileNam
1ca10 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
1ca20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
1ca30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ca40 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
1ca50 65 2e 4c 69 73 74 65 6e 65 72 73 2e 41 64 64 28  e.Listeners.Add(
1ca60 6e 65 77 20 54 65 78 74 57 72 69 74 65 72 54 72  new TextWriterTr
1ca70 61 63 65 4c 69 73 74 65 6e 65 72 28 0d 0a 20 20  aceListener(..  
1ca80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ca90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
1caa0 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6c 6f 67 46  nfiguration.logF
1cab0 69 6c 65 4e 61 6d 65 29 29 3b 0d 0a 0d 0a 20 20  ileName));....  
1cac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cad0 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
1cae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1caf0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
1cb00 45 3a 20 54 65 63 68 6e 69 63 61 6c 6c 79 2c 20  E: Technically, 
1cb10 77 65 20 63 72 65 61 74 65 64 20 74 68 65 20 6c  we created the l
1cb20 6f 67 20 66 69 6c 65 2e 0d 0a 20 20 20 20 20 20  og file...      
1cb30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cb40 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
1cb50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cb60 20 20 20 20 20 20 66 69 6c 65 73 43 72 65 61 74        filesCreat
1cb70 65 64 2b 2b 3b 0d 0a 20 20 20 20 20 20 20 20 20  ed++;..         
1cb80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
1cb90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1cba0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
1cbb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1cbc0 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
1cbd0 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
1cbe0 44 75 6d 70 20 74 68 65 20 63 6f 6e 66 69 67 75  Dump the configu
1cbf0 72 61 74 69 6f 6e 20 6e 6f 77 20 69 6e 20 63 61  ration now in ca
1cc00 73 65 20 77 65 20 6e 65 65 64 20 74 6f 0d 0a 20  se we need to.. 
1cc10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cc20 20 20 20 2f 2f 20 20 20 20 20 20 20 74 72 6f 75     //       trou
1cc30 62 6c 65 73 68 6f 6f 74 20 61 6e 79 20 69 73 73  bleshoot any iss
1cc40 75 65 73 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ues...          
1cc50 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
1cc60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cc70 20 20 69 66 20 28 63 6f 6e 66 69 67 75 72 61 74    if (configurat
1cc80 69 6f 6e 2e 64 65 62 75 67 50 72 69 6f 72 69 74  ion.debugPriorit
1cc90 79 20 3c 3d 20 54 72 61 63 65 50 72 69 6f 72 69  y <= TracePriori
1cca0 74 79 2e 4d 65 64 69 75 6d 29 0d 0a 20 20 20 20  ty.Medium)..    
1ccb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ccc0 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
1ccd0 6e 2e 44 75 6d 70 28 64 65 62 75 67 43 61 6c 6c  n.Dump(debugCall
1cce0 62 61 63 6b 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  back);....      
1ccf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
1cd00 20 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e   (configuration.
1cd10 74 72 61 63 65 50 72 69 6f 72 69 74 79 20 3c 3d  tracePriority <=
1cd20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4d   TracePriority.M
1cd30 65 64 69 75 6d 29 0d 0a 20 20 20 20 20 20 20 20  edium)..        
1cd40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cd50 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 44 75  configuration.Du
1cd60 6d 70 28 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  mp(traceCallback
1cd70 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
1cd80 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
1cd90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cda0 20 20 2f 2f 20 4e 4f 54 45 3a 20 53 68 6f 77 20    // NOTE: Show 
1cdb0 77 68 65 72 65 20 77 65 20 61 72 65 20 72 75 6e  where we are run
1cdc0 6e 69 6e 67 20 66 72 6f 6d 20 61 6e 64 20 68 6f  ning from and ho
1cdd0 77 20 77 65 20 77 65 72 65 0d 0a 20 20 20 20 20  w we were..     
1cde0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1cdf0 2f 20 20 20 20 20 20 20 69 6e 76 6f 6b 65 64 2e  /       invoked.
1ce00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1ce10 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
1ce20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
1ce30 72 69 6e 67 20 6c 6f 63 61 74 69 6f 6e 20 3d 20  ring location = 
1ce40 61 73 73 65 6d 62 6c 79 2e 4c 6f 63 61 74 69 6f  assembly.Locatio
1ce50 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  n;....          
1ce60 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
1ce70 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
1ce80 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4d  (TracePriority.M
1ce90 65 64 69 75 6d 4c 6f 77 2c 0d 0a 20 20 20 20 20  ediumLow,..     
1cea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ceb0 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b     debugCallback
1cec0 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c  , traceCallback,
1ced0 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
1cee0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1cef0 20 20 20 20 20 20 20 20 20 22 52 75 6e 6e 69 6e           "Runnin
1cf00 67 20 65 78 65 63 75 74 61 62 6c 65 20 69 73 3a  g executable is:
1cf10 20 7b 30 7d 22 2c 20 46 6f 72 44 69 73 70 6c 61   {0}", ForDispla
1cf20 79 28 6c 6f 63 61 74 69 6f 6e 29 29 2c 0d 0a 20  y(location)),.. 
1cf30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cf40 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
1cf50 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
1cf60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
1cf70 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
1cf80 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69  race(TracePriori
1cf90 74 79 2e 4d 65 64 69 75 6d 4c 6f 77 2c 0d 0a 20  ty.MediumLow,.. 
1cfa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cfb0 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c         debugCall
1cfc0 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62  back, traceCallb
1cfd0 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ack, String.Form
1cfe0 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
1cff0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 4f 72               "Or
1d000 69 67 69 6e 61 6c 20 63 6f 6d 6d 61 6e 64 20 6c  iginal command l
1d010 69 6e 65 20 69 73 3a 20 7b 30 7d 22 2c 0d 0a 20  ine is: {0}",.. 
1d020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d030 20 20 20 20 20 20 20 45 6e 76 69 72 6f 6e 6d 65         Environme
1d040 6e 74 2e 43 6f 6d 6d 61 6e 64 4c 69 6e 65 29 2c  nt.CommandLine),
1d050 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
1d060 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1d070 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
1d080 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54  .DebugAndTrace(T
1d090 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4d 65 64  racePriority.Med
1d0a0 69 75 6d 4c 6f 77 2c 0d 0a 20 20 20 20 20 20 20  iumLow,..       
1d0b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d0c0 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20   debugCallback, 
1d0d0 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
1d0e0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
1d0f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d100 20 20 20 20 20 20 20 22 52 75 6e 6e 69 6e 67 20         "Running 
1d110 70 72 6f 63 65 73 73 20 69 73 20 7b 30 7d 2e 22  process is {0}."
1d120 2c 20 49 73 36 34 42 69 74 50 72 6f 63 65 73 73  , Is64BitProcess
1d130 28 29 20 3f 0d 0a 20 20 20 20 20 20 20 20 20 20  () ?..          
1d140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d150 20 20 22 36 34 2d 62 69 74 22 20 3a 20 22 33 32    "64-bit" : "32
1d160 2d 62 69 74 22 29 2c 20 74 72 61 63 65 43 61 74  -bit"), traceCat
1d170 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
1d180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
1d190 66 20 28 21 63 6f 6e 66 69 67 75 72 61 74 69 6f  f (!configuratio
1d1a0 6e 2e 77 68 61 74 49 66 29 0d 0a 20 20 20 20 20  n.whatIf)..     
1d1b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
1d1c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1d1d0 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
1d1e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d1f0 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 49        // NOTE: I
1d200 66 20 74 68 65 20 64 65 62 75 67 67 65 72 20 69  f the debugger i
1d210 73 20 61 74 74 61 63 68 65 64 20 61 6e 64 20 22  s attached and "
1d220 77 68 61 74 2d 69 66 22 0d 0a 20 20 20 20 20 20  what-if"..      
1d230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d240 20 20 2f 2f 20 20 20 20 20 20 20 6d 6f 64 65 20    //       mode 
1d250 69 73 20 5b 6e 6f 77 5d 20 64 69 73 61 62 6c 65  is [now] disable
1d260 64 2c 20 69 73 73 75 65 20 61 20 77 61 72 6e 69  d, issue a warni
1d270 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ng...           
1d280 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
1d290 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d2a0 20 20 20 20 20 20 20 20 20 69 66 20 28 44 65 62           if (Deb
1d2b0 75 67 67 65 72 2e 49 73 41 74 74 61 63 68 65 64  ugger.IsAttached
1d2c0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
1d2d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
1d2e0 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
1d2f0 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72  Trace(TracePrior
1d300 69 74 79 2e 4d 65 64 69 75 6d 48 69 67 68 2c 0d  ity.MediumHigh,.
1d310 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d330 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20   debugCallback, 
1d340 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 0d 0a  traceCallback,..
1d350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d370 22 46 6f 72 63 65 64 20 74 6f 20 64 69 73 61 62  "Forced to disab
1d380 6c 65 20 5c 22 77 68 61 74 2d 69 66 5c 22 20 6d  le \"what-if\" m
1d390 6f 64 65 20 77 69 74 68 20 22 20 2b 0d 0a 20 20  ode with " +..  
1d3a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d3b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 64                "d
1d3c0 65 62 75 67 67 65 72 20 61 74 74 61 63 68 65 64  ebugger attached
1d3d0 2e 22 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72  .", traceCategor
1d3e0 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  y);..           
1d3f0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
1d400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d410 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  else..          
1d420 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1d430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d440 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65       TraceOps.De
1d450 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63  bugAndTrace(Trac
1d460 65 50 72 69 6f 72 69 74 79 2e 4d 65 64 69 75 6d  ePriority.Medium
1d470 48 69 67 68 2c 0d 0a 20 20 20 20 20 20 20 20 20  High,..         
1d480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d490 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b     debugCallback
1d4a0 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c  , traceCallback,
1d4b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1d4c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 4e                "N
1d4d0 6f 20 61 63 74 75 61 6c 20 63 68 61 6e 67 65 73  o actual changes
1d4e0 20 77 69 6c 6c 20 62 65 20 6d 61 64 65 20 74 6f   will be made to
1d4f0 20 74 68 69 73 20 22 20 2b 0d 0a 20 20 20 20 20   this " +..     
1d500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d510 20 20 20 20 20 20 20 22 73 79 73 74 65 6d 20 62         "system b
1d520 65 63 61 75 73 65 20 5c 22 77 68 61 74 2d 69 66  ecause \"what-if
1d530 5c 22 20 6d 6f 64 65 20 69 73 20 65 6e 61 62 6c  \" mode is enabl
1d540 65 64 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  ed.",..         
1d550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d560 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
1d570 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
1d580 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
1d590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d5a0 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
1d5b0 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
1d5c0 3a 20 49 66 20 74 68 65 20 63 6f 6d 6d 61 6e 64  : If the command
1d5d0 20 6c 69 6e 65 20 68 61 73 20 6e 6f 74 20 62 65   line has not be
1d5e0 65 6e 20 6d 61 6e 75 61 6c 6c 79 0d 0a 20 20 20  en manually..   
1d5f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d600 20 2f 2f 20 20 20 20 20 20 20 63 6f 6e 66 69 72   //       confir
1d610 6d 65 64 20 28 69 2e 65 2e 20 76 69 61 20 74 68  med (i.e. via th
1d620 65 20 65 78 70 6c 69 63 69 74 20 63 6f 6d 6d 61  e explicit comma
1d630 6e 64 20 6c 69 6e 65 0d 0a 20 20 20 20 20 20 20  nd line..       
1d640 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
1d650 20 20 20 20 20 20 6f 70 74 69 6f 6e 29 2c 20 74        option), t
1d660 68 65 6e 20 73 74 6f 70 20 70 72 6f 63 65 73 73  hen stop process
1d670 69 6e 67 20 6e 6f 77 2e 20 20 57 65 20 65 6e 66  ing now.  We enf
1d680 6f 72 63 65 0d 0a 20 20 20 20 20 20 20 20 20 20  orce..          
1d690 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
1d6a0 20 20 20 74 68 69 73 20 72 75 6c 65 20 73 6f 20     this rule so 
1d6b0 74 68 61 74 20 73 69 6d 70 6c 79 20 64 6f 75 62  that simply doub
1d6c0 6c 65 2d 63 6c 69 63 6b 69 6e 67 20 74 68 65 0d  le-clicking the.
1d6d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d6e0 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 65 78       //       ex
1d6f0 65 63 75 74 61 62 6c 65 20 77 69 6c 6c 20 6e 6f  ecutable will no
1d700 74 20 72 65 73 75 6c 74 20 69 6e 20 61 6e 79 20  t result in any 
1d710 63 68 61 6e 67 65 73 20 62 65 69 6e 67 0d 0a 20  changes being.. 
1d720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d730 20 20 20 2f 2f 20 20 20 20 20 20 20 6d 61 64 65     //       made
1d740 20 74 6f 20 74 68 65 20 73 79 73 74 65 6d 2e 0d   to the system..
1d750 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d760 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
1d770 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
1d780 28 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e  (!configuration.
1d790 63 6f 6e 66 69 72 6d 29 0d 0a 20 20 20 20 20 20  confirm)..      
1d7a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
1d7b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d7c0 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
1d7d0 20 22 43 61 6e 6e 6f 74 20 63 6f 6e 74 69 6e 75   "Cannot continu
1d7e0 65 2c 20 74 68 65 20 5c 22 63 6f 6e 66 69 72 6d  e, the \"confirm
1d7f0 5c 22 20 6f 70 74 69 6f 6e 20 69 73 20 22 20 2b  \" option is " +
1d800 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1d810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 6e                "n
1d820 6f 74 20 65 6e 61 62 6c 65 64 2e 22 3b 0d 0a 0d  ot enabled.";...
1d830 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d840 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
1d850 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
1d860 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
1d870 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d880 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65       return true
1d890 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
1d8a0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
1d8b0 20 20 20 20 20 20 63 61 74 63 68 20 28 45 78 63        catch (Exc
1d8c0 65 70 74 69 6f 6e 20 65 29 0d 0a 20 20 20 20 20  eption e)..     
1d8d0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1d8e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d8f0 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67    TraceOps.Debug
1d900 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72  AndTrace(TracePr
1d910 69 6f 72 69 74 79 2e 48 69 67 68 65 73 74 2c 0d  iority.Highest,.
1d920 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d930 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61           debugCa
1d940 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c  llback, traceCal
1d950 6c 62 61 63 6b 2c 20 65 2c 20 74 72 61 63 65 43  lback, e, traceC
1d960 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
1d970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d980 20 65 72 72 6f 72 20 3d 20 22 46 61 69 6c 65 64   error = "Failed
1d990 20 74 6f 20 70 72 6f 63 65 73 73 20 63 6f 6e 66   to process conf
1d9a0 69 67 75 72 61 74 69 6f 6e 2e 22 3b 0d 0a 20 20  iguration.";..  
1d9b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
1d9c0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1d9d0 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
1d9e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
1d9f0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
1da00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1da10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1da20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1da30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1da40 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
1da50 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65    [MethodImpl(Me
1da60 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e  thodImplOptions.
1da70 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20  NoInlining)]..  
1da80 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
1da90 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 43 68 65   static bool Che
1daa0 63 6b 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e  ckRuntimeVersion
1dab0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
1dac0 20 20 20 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e     Configuration
1dad0 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2c 0d   configuration,.
1dae0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1daf0 20 62 6f 6f 6c 20 73 74 72 69 63 74 2c 0d 0a 20   bool strict,.. 
1db00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
1db10 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d  ef string error.
1db20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1db30 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
1db40 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1db50 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20     try..        
1db60 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1db70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
1db80 66 20 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  f (configuration
1db90 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
1dba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
1dbb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1dbc0 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
1dbd0 3d 20 22 49 6e 76 61 6c 69 64 20 63 6f 6e 66 69  = "Invalid confi
1dbe0 67 75 72 61 74 69 6f 6e 2e 22 3b 0d 0a 20 20 20  guration.";..   
1dbf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dc00 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
1dc10 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
1dc20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
1dc30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dc40 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
1dc50 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
1dc60 3a 20 57 68 61 74 20 76 65 72 73 69 6f 6e 20 6f  : What version o
1dc70 66 20 74 68 65 20 72 75 6e 74 69 6d 65 20 77 61  f the runtime wa
1dc80 73 20 74 68 65 20 63 6f 72 65 20 28 70 72 69 6d  s the core (prim
1dc90 61 72 79 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ary)..          
1dca0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
1dcb0 20 20 20 61 73 73 65 6d 62 6c 79 20 63 6f 6d 70     assembly comp
1dcc0 69 6c 65 64 20 61 67 61 69 6e 73 74 20 28 65 2e  iled against (e.
1dcd0 67 2e 20 22 76 32 2e 30 2e 35 30 37 32 37 22 20  g. "v2.0.50727" 
1dce0 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  or..            
1dcf0 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
1dd00 20 22 76 34 2e 30 2e 33 30 33 31 39 22 29 2e 0d   "v4.0.30319")..
1dd10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1dd20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
1dd30 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
1dd40 69 6e 67 20 63 6f 72 65 49 6d 61 67 65 52 75 6e  ing coreImageRun
1dd50 74 69 6d 65 56 65 72 73 69 6f 6e 20 3d 20 47 65  timeVersion = Ge
1dd60 74 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72  tImageRuntimeVer
1dd70 73 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20  sion(..         
1dd80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
1dd90 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 63 6f 72  onfiguration.cor
1dda0 65 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20  eFileName);.... 
1ddb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ddc0 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
1ddd0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
1dde0 54 45 3a 20 57 65 20 61 6c 6c 6f 77 20 74 68 65  TE: We allow the
1ddf0 20 61 63 74 75 61 6c 20 69 6d 61 67 65 20 72 75   actual image ru
1de00 6e 74 69 6d 65 20 63 68 65 63 6b 69 6e 67 20 74  ntime checking t
1de10 6f 20 62 65 0d 0a 20 20 20 20 20 20 20 20 20 20  o be..          
1de20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
1de30 20 20 20 62 79 70 61 73 73 65 64 20 76 69 61 20     bypassed via 
1de40 74 68 65 20 22 2d 6e 6f 52 75 6e 74 69 6d 65 56  the "-noRuntimeV
1de50 65 72 73 69 6f 6e 22 20 63 6f 6d 6d 61 6e 64 20  ersion" command 
1de60 6c 69 6e 65 0d 0a 20 20 20 20 20 20 20 20 20 20  line..          
1de70 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
1de80 20 20 20 6f 70 74 69 6f 6e 2e 20 20 54 68 65 20     option.  The 
1de90 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20 6f 70 74  command line opt
1dea0 69 6f 6e 20 69 73 20 69 6e 74 65 6e 64 65 64 20  ion is intended 
1deb0 66 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20  for..           
1dec0 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
1ded0 20 20 65 78 70 65 72 74 20 75 73 65 20 6f 6e 6c    expert use onl
1dee0 79 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y...            
1def0 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
1df00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1df10 69 66 20 28 63 6f 6e 66 69 67 75 72 61 74 69 6f  if (configuratio
1df20 6e 2e 6e 6f 52 75 6e 74 69 6d 65 56 65 72 73 69  n.noRuntimeVersi
1df30 6f 6e 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on)..           
1df40 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1df50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1df60 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62      TraceOps.Deb
1df70 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65  ugAndTrace(Trace
1df80 50 72 69 6f 72 69 74 79 2e 4d 65 64 69 75 6d 2c  Priority.Medium,
1df90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1dfa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
1dfb0 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61  bugCallback, tra
1dfc0 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69  ceCallback, Stri
1dfd0 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
1dfe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dff0 20 20 20 20 20 20 20 20 22 41 73 73 65 6d 62 6c          "Assembl
1e000 79 20 69 73 20 63 6f 6d 70 69 6c 65 64 20 66 6f  y is compiled fo
1e010 72 20 74 68 65 20 2e 4e 45 54 20 46 72 61 6d 65  r the .NET Frame
1e020 77 6f 72 6b 20 7b 30 7d 3b 20 22 20 2b 0d 0a 20  work {0}; " +.. 
1e030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e040 20 20 20 20 20 20 20 20 20 20 20 22 68 6f 77 65             "howe
1e050 76 65 72 2c 20 69 6e 73 74 61 6c 6c 61 74 69 6f  ver, installatio
1e060 6e 20 72 65 73 74 72 69 63 74 69 6f 6e 73 20 62  n restrictions b
1e070 61 73 65 64 20 6f 6e 20 74 68 69 73 20 22 20 2b  ased on this " +
1e080 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1e090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 66                "f
1e0a0 61 63 74 20 68 61 76 65 20 62 65 65 6e 20 64 69  act have been di
1e0b0 73 61 62 6c 65 64 20 76 69 61 20 74 68 65 20 63  sabled via the c
1e0c0 6f 6d 6d 61 6e 64 20 6c 69 6e 65 2e 22 2c 0d 0a  ommand line.",..
1e0d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e0e0 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 72 65              core
1e0f0 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72 73  ImageRuntimeVers
1e100 69 6f 6e 29 2c 20 74 72 61 63 65 43 61 74 65 67  ion), traceCateg
1e110 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
1e120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e130 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20   return true;.. 
1e140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e150 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
1e160 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
1e170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e180 20 20 20 20 2f 2f 20 54 4f 44 4f 3a 20 52 65 73      // TODO: Res
1e190 74 72 69 63 74 20 74 68 65 20 63 6f 6e 66 69 67  trict the config
1e1a0 75 72 61 74 69 6f 6e 20 62 61 73 65 64 20 6f 6e  uration based on
1e1b0 20 77 68 69 63 68 20 69 6d 61 67 65 0d 0a 20 20   which image..  
1e1c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e1d0 20 20 2f 2f 20 20 20 20 20 20 20 72 75 6e 74 69    //       runti
1e1e0 6d 65 20 76 65 72 73 69 6f 6e 73 20 28 77 68 69  me versions (whi
1e1f0 63 68 20 6d 6f 72 65 2d 6f 72 2d 6c 65 73 73 20  ch more-or-less 
1e200 63 6f 72 72 65 73 70 6f 6e 64 0d 0a 20 20 20 20  correspond..    
1e210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e220 2f 2f 20 20 20 20 20 20 20 74 6f 20 2e 4e 45 54  //       to .NET
1e230 20 46 72 61 6d 65 77 6f 72 6b 20 76 65 72 73 69   Framework versi
1e240 6f 6e 73 29 20 61 72 65 20 73 75 70 70 6f 72 74  ons) are support
1e250 65 64 20 62 79 20 74 68 65 0d 0a 20 20 20 20 20  ed by the..     
1e260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1e270 2f 20 20 20 20 20 20 20 76 65 72 73 69 6f 6e 73  /       versions
1e280 20 6f 66 20 56 69 73 75 61 6c 20 53 74 75 64 69   of Visual Studi
1e290 6f 20 74 68 61 74 20 61 72 65 20 69 6e 73 74 61  o that are insta
1e2a0 6c 6c 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 20  lled...         
1e2b0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
1e2c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e2d0 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e 49 73     if (String.Is
1e2e0 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 63 6f 72 65  NullOrEmpty(core
1e2f0 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72 73  ImageRuntimeVers
1e300 69 6f 6e 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ion))..         
1e310 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1e320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e330 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69        error = "i
1e340 6e 76 61 6c 69 64 20 63 6f 72 65 20 66 69 6c 65  nvalid core file
1e350 20 69 6d 61 67 65 20 72 75 6e 74 69 6d 65 20 76   image runtime v
1e360 65 72 73 69 6f 6e 22 3b 0d 0a 20 20 20 20 20 20  ersion";..      
1e370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e380 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
1e390 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1e3a0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
1e3b0 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
1e3c0 20 69 66 20 28 53 74 72 69 6e 67 2e 45 71 75 61   if (String.Equa
1e3d0 6c 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ls(..           
1e3e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e3f0 20 63 6f 72 65 49 6d 61 67 65 52 75 6e 74 69 6d   coreImageRuntim
1e400 65 56 65 72 73 69 6f 6e 2c 20 43 4c 52 76 32 49  eVersion, CLRv2I
1e410 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69  mageRuntimeVersi
1e420 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on,..           
1e430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e440 20 53 74 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f   StringCompariso
1e450 6e 2e 4f 72 64 69 6e 61 6c 29 29 0d 0a 20 20 20  n.Ordinal))..   
1e460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e470 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1e480 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
1e490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e4a0 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
1e4b0 20 46 6f 72 20 74 68 65 20 43 4c 52 20 76 32 2e   For the CLR v2.
1e4c0 30 20 72 75 6e 74 69 6d 65 2c 20 6d 61 6b 65 20  0 runtime, make 
1e4d0 73 75 72 65 20 77 65 20 64 69 73 61 62 6c 65 0d  sure we disable.
1e4e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1e4f0 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
1e500 20 20 61 6e 79 20 61 74 74 65 6d 70 74 20 74 6f    any attempt to
1e510 20 75 73 65 20 69 74 20 66 6f 72 20 74 68 69 6e   use it for thin
1e520 67 73 20 74 68 61 74 20 72 65 71 75 69 72 65 0d  gs that require.
1e530 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1e540 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
1e550 20 20 61 6e 20 61 73 73 65 6d 62 6c 79 20 63 6f    an assembly co
1e560 6d 70 69 6c 65 64 20 66 6f 72 20 74 68 65 20 43  mpiled for the C
1e570 4c 52 20 76 34 2e 30 2e 20 20 49 74 20 69 73 0d  LR v4.0.  It is.
1e580 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1e590 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
1e5a0 20 20 75 6e 63 65 72 74 61 69 6e 20 69 66 20 74    uncertain if t
1e5b0 68 69 73 20 69 73 20 61 63 74 75 61 6c 6c 79 20  his is actually 
1e5c0 61 20 70 72 6f 62 6c 65 6d 20 69 6e 0d 0a 20 20  a problem in..  
1e5d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e5e0 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 70        //       p
1e5f0 72 61 63 74 69 63 65 20 61 73 20 74 68 65 20 43  ractice as the C
1e600 4c 52 20 76 34 2e 30 20 63 61 6e 20 6c 6f 61 64  LR v4.0 can load
1e610 20 61 6e 64 20 75 73 65 20 61 6e 0d 0a 20 20 20   and use an..   
1e620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e630 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 61 73       //       as
1e640 73 65 6d 62 6c 79 20 63 6f 6d 70 69 6c 65 64 20  sembly compiled 
1e650 77 69 74 68 20 74 68 65 20 43 4c 52 20 76 32 2e  with the CLR v2.
1e660 30 3b 20 68 6f 77 65 76 65 72 2c 0d 0a 20 20 20  0; however,..   
1e670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e680 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 73 69       //       si
1e690 6e 63 65 20 74 68 69 73 20 70 72 6f 6a 65 63 74  nce this project
1e6a0 20 6f 66 66 65 72 73 20 62 6f 74 68 20 63 6f 6e   offers both con
1e6b0 66 69 67 75 72 61 74 69 6f 6e 73 2c 0d 0a 20 20  figurations,..  
1e6c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e6d0 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 77        //       w
1e6e0 65 20 63 75 72 72 65 6e 74 6c 79 20 64 69 73 61  e currently disa
1e6f0 6c 6c 6f 77 20 74 68 69 73 20 6d 69 73 6d 61 74  llow this mismat
1e700 63 68 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ch...           
1e710 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
1e720 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1e730 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75           configu
1e740 72 61 74 69 6f 6e 2e 6e 6f 4e 65 74 46 78 34 30  ration.noNetFx40
1e750 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20   = true;..      
1e760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e770 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e    configuration.
1e780 6e 6f 4e 65 74 46 78 34 35 20 3d 20 74 72 75 65  noNetFx45 = true
1e790 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
1e7a0 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69             confi
1e7b0 67 75 72 61 74 69 6f 6e 2e 6e 6f 4e 65 74 46 78  guration.noNetFx
1e7c0 34 35 31 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20  451 = true;..   
1e7d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e7e0 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
1e7f0 6f 6e 2e 6e 6f 56 73 32 30 31 30 20 3d 20 74 72  on.noVs2010 = tr
1e800 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
1e810 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
1e820 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 56 73 32  figuration.noVs2
1e830 30 31 32 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20  012 = true;..   
1e840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e850 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
1e860 6f 6e 2e 6e 6f 56 73 32 30 31 33 20 3d 20 74 72  on.noVs2013 = tr
1e870 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ue;....         
1e880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
1e890 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
1e8a0 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72  Trace(TracePrior
1e8b0 69 74 79 2e 4d 65 64 69 75 6d 2c 0d 0a 20 20 20  ity.Medium,..   
1e8c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e8d0 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61           debugCa
1e8e0 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c  llback, traceCal
1e8f0 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
1e900 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
1e910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e920 20 20 20 22 41 73 73 65 6d 62 6c 79 20 69 73 20     "Assembly is 
1e930 63 6f 6d 70 69 6c 65 64 20 66 6f 72 20 74 68 65  compiled for the
1e940 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 20   .NET Framework 
1e950 7b 30 7d 2c 20 22 20 2b 0d 0a 20 20 20 20 20 20  {0}, " +..      
1e960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e970 20 20 20 20 20 20 22 73 75 70 70 6f 72 74 20 66        "support f
1e980 6f 72 20 74 68 65 20 2e 4e 45 54 20 46 72 61 6d  or the .NET Fram
1e990 65 77 6f 72 6b 20 7b 31 7d 20 69 73 20 6e 6f 77  ework {1} is now
1e9a0 20 64 69 73 61 62 6c 65 64 2e 22 2c 0d 0a 20 20   disabled.",..  
1e9b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e9c0 20 20 20 20 20 20 20 20 20 20 43 4c 52 76 32 49            CLRv2I
1e9d0 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69  mageRuntimeVersi
1e9e0 6f 6e 2c 20 43 4c 52 76 34 49 6d 61 67 65 52 75  on, CLRv4ImageRu
1e9f0 6e 74 69 6d 65 56 65 72 73 69 6f 6e 29 2c 0d 0a  ntimeVersion),..
1ea00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ea10 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
1ea20 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20  eCategory);..   
1ea30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ea40 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
1ea50 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20          else if 
1ea60 28 53 74 72 69 6e 67 2e 45 71 75 61 6c 73 28 0d  (String.Equals(.
1ea70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1ea80 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 72               cor
1ea90 65 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72  eImageRuntimeVer
1eaa0 73 69 6f 6e 2c 20 43 4c 52 76 34 49 6d 61 67 65  sion, CLRv4Image
1eab0 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 2c 0d  RuntimeVersion,.
1eac0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1ead0 20 20 20 20 20 20 20 20 20 20 20 20 20 53 74 72               Str
1eae0 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72  ingComparison.Or
1eaf0 64 69 6e 61 6c 29 29 0d 0a 20 20 20 20 20 20 20  dinal))..       
1eb00 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
1eb10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eb20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
1eb30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eb40 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 46 6f 72      // NOTE: For
1eb50 20 74 68 65 20 43 4c 52 20 76 34 2e 30 20 72 75   the CLR v4.0 ru
1eb60 6e 74 69 6d 65 2c 20 6d 61 6b 65 20 73 75 72 65  ntime, make sure
1eb70 20 77 65 20 64 69 73 61 62 6c 65 0d 0a 20 20 20   we disable..   
1eb80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eb90 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 61 6e       //       an
1eba0 79 20 61 74 74 65 6d 70 74 20 74 6f 20 75 73 65  y attempt to use
1ebb0 20 69 74 20 66 6f 72 20 74 68 69 6e 67 73 20 74   it for things t
1ebc0 68 61 74 20 72 65 71 75 69 72 65 0d 0a 20 20 20  hat require..   
1ebd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ebe0 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 61 6e       //       an
1ebf0 20 61 73 73 65 6d 62 6c 79 20 63 6f 6d 70 69 6c   assembly compil
1ec00 65 64 20 66 6f 72 20 74 68 65 20 43 4c 52 20 76  ed for the CLR v
1ec10 32 2e 30 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  2.0...          
1ec20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1ec30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1ec40 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
1ec50 75 72 61 74 69 6f 6e 2e 6e 6f 4e 65 74 46 78 32  uration.noNetFx2
1ec60 30 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  0 = true;..     
1ec70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ec80 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
1ec90 2e 6e 6f 4e 65 74 46 78 33 35 20 3d 20 74 72 75  .noNetFx35 = tru
1eca0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
1ecb0 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
1ecc0 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 56 73 32 30  iguration.noVs20
1ecd0 30 35 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20  05 = true;..    
1ece0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ecf0 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
1ed00 6e 2e 6e 6f 56 73 32 30 30 38 20 3d 20 74 72 75  n.noVs2008 = tru
1ed10 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
1ed20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
1ed30 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
1ed40 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69  race(TracePriori
1ed50 74 79 2e 4d 65 64 69 75 6d 2c 0d 0a 20 20 20 20  ty.Medium,..    
1ed60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ed70 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c          debugCal
1ed80 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c  lback, traceCall
1ed90 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
1eda0 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
1edb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1edc0 20 20 22 41 73 73 65 6d 62 6c 79 20 69 73 20 63    "Assembly is c
1edd0 6f 6d 70 69 6c 65 64 20 66 6f 72 20 74 68 65 20  ompiled for the 
1ede0 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 7b  .NET Framework {
1edf0 30 7d 2c 20 22 20 2b 0d 0a 20 20 20 20 20 20 20  0}, " +..       
1ee00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ee10 20 20 20 20 20 22 73 75 70 70 6f 72 74 20 66 6f       "support fo
1ee20 72 20 74 68 65 20 2e 4e 45 54 20 46 72 61 6d 65  r the .NET Frame
1ee30 77 6f 72 6b 20 7b 31 7d 20 69 73 20 6e 6f 77 20  work {1} is now 
1ee40 64 69 73 61 62 6c 65 64 2e 22 2c 0d 0a 20 20 20  disabled.",..   
1ee50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ee60 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
1ee70 6c 61 79 28 43 4c 52 76 34 49 6d 61 67 65 52 75  lay(CLRv4ImageRu
1ee80 6e 74 69 6d 65 56 65 72 73 69 6f 6e 29 2c 0d 0a  ntimeVersion),..
1ee90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eea0 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44              ForD
1eeb0 69 73 70 6c 61 79 28 43 4c 52 76 32 49 6d 61 67  isplay(CLRv2Imag
1eec0 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 29  eRuntimeVersion)
1eed0 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
1eee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eef0 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
1ef00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1ef10 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
1ef20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
1ef30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1ef40 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1ef50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ef60 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e   error = String.
1ef70 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
1ef80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ef90 20 20 20 20 20 22 75 6e 73 75 70 70 6f 72 74 65       "unsupporte
1efa0 64 20 63 6f 72 65 20 66 69 6c 65 20 69 6d 61 67  d core file imag
1efb0 65 20 72 75 6e 74 69 6d 65 20 76 65 72 73 69 6f  e runtime versio
1efc0 6e 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20  n " +..         
1efd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1efe0 20 20 20 22 7b 30 7d 2c 20 6d 75 73 74 20 62 65     "{0}, must be
1eff0 20 7b 31 7d 20 6f 72 20 7b 32 7d 22 2c 0d 0a 20   {1} or {2}",.. 
1f000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f010 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69             ForDi
1f020 73 70 6c 61 79 28 63 6f 72 65 49 6d 61 67 65 52  splay(coreImageR
1f030 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 29 2c 0d  untimeVersion),.
1f040 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1f050 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72               For
1f060 44 69 73 70 6c 61 79 28 43 4c 52 76 32 49 6d 61  Display(CLRv2Ima
1f070 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e  geRuntimeVersion
1f080 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
1f090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f0a0 46 6f 72 44 69 73 70 6c 61 79 28 43 4c 52 76 34  ForDisplay(CLRv4
1f0b0 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72 73  ImageRuntimeVers
1f0c0 69 6f 6e 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ion));....      
1f0d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f0e0 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
1f0f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1f100 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
1f110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
1f120 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20  turn true;..    
1f130 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
1f140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
1f150 61 74 63 68 20 28 45 78 63 65 70 74 69 6f 6e 20  atch (Exception 
1f160 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e)..            
1f170 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1f180 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
1f190 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
1f1a0 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e  e(TracePriority.
1f1b0 48 69 67 68 65 73 74 2c 0d 0a 20 20 20 20 20 20  Highest,..      
1f1c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f1d0 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c    debugCallback,
1f1e0 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
1f1f0 65 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79  e, traceCategory
1f200 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
1f210 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
1f220 3d 20 22 46 61 69 6c 65 64 20 74 6f 20 63 68 65  = "Failed to che
1f230 63 6b 20 69 6d 61 67 65 20 72 75 6e 74 69 6d 65  ck image runtime
1f240 20 76 65 72 73 69 6f 6e 2e 22 3b 0d 0a 20 20 20   version.";..   
1f250 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
1f260 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1f270 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
1f280 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
1f290 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64              #end
1f2a0 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
1f2b0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
1f2c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f2d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f2e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f2f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
1f300 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e           #region
1f310 20 50 72 69 76 61 74 65 20 4d 65 74 68 6f 64 73   Private Methods
1f320 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
1f330 69 76 61 74 65 20 73 74 72 69 6e 67 20 47 65 74  ivate string Get
1f340 49 6e 76 61 72 69 61 6e 74 4e 61 6d 65 28 29 0d  InvariantName().
1f350 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
1f360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f370 72 65 74 75 72 6e 20 49 73 45 66 36 53 75 70 70  return IsEf6Supp
1f380 6f 72 74 65 64 28 29 20 3f 20 45 66 36 49 6e 76  orted() ? Ef6Inv
1f390 61 72 69 61 6e 74 4e 61 6d 65 20 3a 20 49 6e 76  ariantName : Inv
1f3a0 61 72 69 61 6e 74 4e 61 6d 65 3b 0d 0a 20 20 20  ariantName;..   
1f3b0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
1f3c0 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
1f3d0 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  on....          
1f3e0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
1f3f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f400 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f410 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f420 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
1f430 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62       #region Pub
1f440 6c 69 63 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20  lic Methods..   
1f450 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
1f460 62 6f 6f 6c 20 48 61 73 46 6c 61 67 73 28 0d 0a  bool HasFlags(..
1f470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f480 49 6e 73 74 61 6c 6c 46 6c 61 67 73 20 68 61 73  InstallFlags has
1f490 46 6c 61 67 73 2c 0d 0a 20 20 20 20 20 20 20 20  Flags,..        
1f4a0 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 61 6c 6c          bool all
1f4b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1f4c0 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20    )..           
1f4d0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1f4e0 20 20 20 20 69 66 20 28 61 6c 6c 29 0d 0a 20 20      if (all)..  
1f4f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f500 20 20 72 65 74 75 72 6e 20 28 28 69 6e 73 74 61    return ((insta
1f510 6c 6c 46 6c 61 67 73 20 26 20 68 61 73 46 6c 61  llFlags & hasFla
1f520 67 73 29 20 3d 3d 20 68 61 73 46 6c 61 67 73 29  gs) == hasFlags)
1f530 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
1f540 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20     else..       
1f550 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
1f560 75 72 6e 20 28 28 69 6e 73 74 61 6c 6c 46 6c 61  urn ((installFla
1f570 67 73 20 26 20 68 61 73 46 6c 61 67 73 29 20 21  gs & hasFlags) !
1f580 3d 20 49 6e 73 74 61 6c 6c 46 6c 61 67 73 2e 4e  = InstallFlags.N
1f590 6f 6e 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  one);..         
1f5a0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
1f5b0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
1f5c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f5d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f5e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f5f0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
1f600 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f         public bo
1f610 6f 6c 20 48 61 73 46 6c 61 67 73 28 0d 0a 20 20  ol HasFlags(..  
1f620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 50 72                Pr
1f630 6f 76 69 64 65 72 46 6c 61 67 73 20 68 61 73 46  oviderFlags hasF
1f640 6c 61 67 73 2c 0d 0a 20 20 20 20 20 20 20 20 20  lags,..         
1f650 20 20 20 20 20 20 20 62 6f 6f 6c 20 61 6c 6c 0d         bool all.
1f660 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1f670 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
1f680 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1f690 20 20 20 69 66 20 28 61 6c 6c 29 0d 0a 20 20 20     if (all)..   
1f6a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f6b0 20 72 65 74 75 72 6e 20 28 28 70 72 6f 76 69 64   return ((provid
1f6c0 65 72 46 6c 61 67 73 20 26 20 68 61 73 46 6c 61  erFlags & hasFla
1f6d0 67 73 29 20 3d 3d 20 68 61 73 46 6c 61 67 73 29  gs) == hasFlags)
1f6e0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
1f6f0 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20     else..       
1f700 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
1f710 75 72 6e 20 28 28 70 72 6f 76 69 64 65 72 46 6c  urn ((providerFl
1f720 61 67 73 20 26 20 68 61 73 46 6c 61 67 73 29 20  ags & hasFlags) 
1f730 21 3d 20 50 72 6f 76 69 64 65 72 46 6c 61 67 73  != ProviderFlags
1f740 2e 4e 6f 6e 65 29 3b 0d 0a 20 20 20 20 20 20 20  .None);..       
1f750 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
1f760 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
1f770 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f780 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f790 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f7a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
1f7b0 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
1f7c0 62 6f 6f 6c 20 49 73 4c 69 6e 71 53 75 70 70 6f  bool IsLinqSuppo
1f7d0 72 74 65 64 28 29 0d 0a 20 20 20 20 20 20 20 20  rted()..        
1f7e0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1f7f0 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
1f800 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
1f810 54 45 3a 20 43 68 65 63 6b 20 74 6f 20 73 65 65  TE: Check to see
1f820 20 69 66 20 74 68 65 20 63 61 6c 6c 65 72 20 68   if the caller h
1f830 61 73 20 66 6f 72 63 65 64 20 4c 49 4e 51 20 73  as forced LINQ s
1f840 75 70 70 6f 72 74 20 74 6f 0d 0a 20 20 20 20 20  upport to..     
1f850 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
1f860 20 20 20 20 62 65 20 65 6e 61 62 6c 65 64 20 2d      be enabled -
1f870 4f 52 2d 20 64 69 73 61 62 6c 65 64 2c 20 74 68  OR- disabled, th
1f880 65 72 65 62 79 20 62 79 70 61 73 73 69 6e 67 20  ereby bypassing 
1f890 74 68 65 20 6e 65 65 64 0d 0a 20 20 20 20 20 20  the need..      
1f8a0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
1f8b0 20 20 20 66 6f 72 20 22 61 75 74 6f 6d 61 74 69     for "automati
1f8c0 63 20 64 65 74 65 63 74 69 6f 6e 22 20 62 79 20  c detection" by 
1f8d0 74 68 69 73 20 6d 65 74 68 6f 64 2e 0d 0a 20 20  this method...  
1f8e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1f8f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1f900 20 20 69 66 20 28 48 61 73 46 6c 61 67 73 28 50    if (HasFlags(P
1f910 72 6f 76 69 64 65 72 46 6c 61 67 73 2e 46 6f 72  roviderFlags.For
1f920 63 65 4c 69 6e 71 45 6e 61 62 6c 65 64 2c 20 74  ceLinqEnabled, t
1f930 72 75 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  rue))..         
1f940 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1f950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
1f960 20 28 21 48 61 73 46 6c 61 67 73 28 50 72 6f 76   (!HasFlags(Prov
1f970 69 64 65 72 46 6c 61 67 73 2e 44 69 64 4c 69 6e  iderFlags.DidLin
1f980 71 57 61 72 6e 69 6e 67 2c 20 74 72 75 65 29 29  qWarning, true))
1f990 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1f9a0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1f9b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f9c0 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
1f9d0 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69  ndTrace(TracePri
1f9e0 6f 72 69 74 79 2e 4d 65 64 69 75 6d 48 69 67 68  ority.MediumHigh
1f9f0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1fa00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
1fa10 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72  ebugCallback, tr
1fa20 61 63 65 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20  aceCallback,..  
1fa30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fa40 20 20 20 20 20 20 20 20 20 20 22 46 6f 72 63 65            "Force
1fa50 64 20 74 6f 20 65 6e 61 62 6c 65 20 73 75 70 70  d to enable supp
1fa60 6f 72 74 20 66 6f 72 20 5c 22 4c 69 6e 71 5c 22  ort for \"Linq\"
1fa70 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  .",..           
1fa80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fa90 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
1faa0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1fab0 20 20 20 20 20 20 20 20 20 20 20 20 70 72 6f 76              prov
1fac0 69 64 65 72 46 6c 61 67 73 20 7c 3d 20 50 72 6f  iderFlags |= Pro
1fad0 76 69 64 65 72 46 6c 61 67 73 2e 44 69 64 4c 69  viderFlags.DidLi
1fae0 6e 71 57 61 72 6e 69 6e 67 3b 0d 0a 20 20 20 20  nqWarning;..    
1faf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fb00 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
1fb10 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
1fb20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  true;..         
1fb30 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
1fb40 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69            else i
1fb50 66 20 28 48 61 73 46 6c 61 67 73 28 50 72 6f 76  f (HasFlags(Prov
1fb60 69 64 65 72 46 6c 61 67 73 2e 46 6f 72 63 65 4c  iderFlags.ForceL
1fb70 69 6e 71 44 69 73 61 62 6c 65 64 2c 20 74 72 75  inqDisabled, tru
1fb80 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
1fb90 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1fba0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
1fbb0 21 48 61 73 46 6c 61 67 73 28 50 72 6f 76 69 64  !HasFlags(Provid
1fbc0 65 72 46 6c 61 67 73 2e 44 69 64 4c 69 6e 71 57  erFlags.DidLinqW
1fbd0 61 72 6e 69 6e 67 2c 20 74 72 75 65 29 29 0d 0a  arning, true))..
1fbe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fbf0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1fc00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
1fc10 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
1fc20 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72  Trace(TracePrior
1fc30 69 74 79 2e 4d 65 64 69 75 6d 48 69 67 68 2c 0d  ity.MediumHigh,.
1fc40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1fc50 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62               deb
1fc60 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63  ugCallback, trac
1fc70 65 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20  eCallback,..    
1fc80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fc90 20 20 20 20 20 20 20 20 22 46 6f 72 63 65 64 20          "Forced 
1fca0 74 6f 20 64 69 73 61 62 6c 65 20 73 75 70 70 6f  to disable suppo
1fcb0 72 74 20 66 6f 72 20 5c 22 4c 69 6e 71 5c 22 2e  rt for \"Linq\".
1fcc0 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
1fcd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fce0 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
1fcf0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1fd00 20 20 20 20 20 20 20 20 20 20 20 70 72 6f 76 69             provi
1fd10 64 65 72 46 6c 61 67 73 20 7c 3d 20 50 72 6f 76  derFlags |= Prov
1fd20 69 64 65 72 46 6c 61 67 73 2e 44 69 64 4c 69 6e  iderFlags.DidLin
1fd30 71 57 61 72 6e 69 6e 67 3b 0d 0a 20 20 20 20 20  qWarning;..     
1fd40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
1fd50 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1fd60 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
1fd70 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
1fd80 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
1fd90 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
1fda0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fdb0 2f 2f 20 4e 4f 54 45 3a 20 52 65 74 75 72 6e 20  // NOTE: Return 
1fdc0 6e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74 68 65 20  non-zero if the 
1fdd0 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
1fde0 74 65 2e 4c 69 6e 71 0d 0a 20 20 20 20 20 20 20  te.Linq..       
1fdf0 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
1fe00 20 20 61 73 73 65 6d 62 6c 79 20 73 68 6f 75 6c    assembly shoul
1fe10 64 20 62 65 20 70 72 6f 63 65 73 73 65 64 20 64  d be processed d
1fe20 75 72 69 6e 67 20 74 68 65 20 69 6e 73 74 61 6c  uring the instal
1fe30 6c 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l...            
1fe40 20 20 20 20 2f 2f 20 20 20 20 20 20 20 49 66 20      //       If 
1fe50 74 68 65 20 74 61 72 67 65 74 20 69 73 20 56 69  the target is Vi
1fe60 73 75 61 6c 20 53 74 75 64 69 6f 20 32 30 30 35  sual Studio 2005
1fe70 2c 20 74 68 69 73 20 6d 75 73 74 0d 0a 20 20 20  , this must..   
1fe80 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
1fe90 20 20 20 20 20 20 72 65 74 75 72 6e 20 7a 65 72        return zer
1fea0 6f 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  o...            
1feb0 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
1fec0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 21          return !
1fed0 6e 6f 4e 65 74 46 78 33 35 20 7c 7c 20 21 6e 6f  noNetFx35 || !no
1fee0 4e 65 74 46 78 34 30 20 7c 7c 20 21 6e 6f 4e 65  NetFx40 || !noNe
1fef0 74 46 78 34 35 20 7c 7c 20 21 6e 6f 4e 65 74 46  tFx45 || !noNetF
1ff00 78 34 35 31 3b 0d 0a 20 20 20 20 20 20 20 20 20  x451;..         
1ff10 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
1ff20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
1ff30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ff40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ff50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ff60 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
1ff70 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f         public bo
1ff80 6f 6c 20 49 73 45 66 36 53 75 70 70 6f 72 74 65  ol IsEf6Supporte
1ff90 64 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  d()..           
1ffa0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1ffb0 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
1ffc0 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
1ffd0 20 43 68 65 63 6b 20 74 6f 20 73 65 65 20 69 66   Check to see if
1ffe0 20 74 68 65 20 63 61 6c 6c 65 72 20 68 61 73 20   the caller has 
1fff0 66 6f 72 63 65 64 20 45 46 36 20 73 75 70 70 6f  forced EF6 suppo
20000 72 74 20 74 6f 0d 0a 20 20 20 20 20 20 20 20 20  rt to..         
20010 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
20020 62 65 20 65 6e 61 62 6c 65 64 20 2d 4f 52 2d 20  be enabled -OR- 
20030 64 69 73 61 62 6c 65 64 2c 20 74 68 65 72 65 62  disabled, thereb
20040 79 20 62 79 70 61 73 73 69 6e 67 20 74 68 65 20  y bypassing the 
20050 6e 65 65 64 0d 0a 20 20 20 20 20 20 20 20 20 20  need..          
20060 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 66        //       f
20070 6f 72 20 22 61 75 74 6f 6d 61 74 69 63 20 64 65  or "automatic de
20080 74 65 63 74 69 6f 6e 22 20 62 79 20 74 68 69 73  tection" by this
20090 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20   method...      
200a0 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
200b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
200c0 20 28 48 61 73 46 6c 61 67 73 28 50 72 6f 76 69   (HasFlags(Provi
200d0 64 65 72 46 6c 61 67 73 2e 46 6f 72 63 65 45 66  derFlags.ForceEf
200e0 36 45 6e 61 62 6c 65 64 2c 20 74 72 75 65 29 29  6Enabled, true))
200f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
20100 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
20110 20 20 20 20 20 20 20 20 20 69 66 20 28 21 48 61           if (!Ha
20120 73 46 6c 61 67 73 28 50 72 6f 76 69 64 65 72 46  sFlags(ProviderF
20130 6c 61 67 73 2e 44 69 64 45 66 36 57 61 72 6e 69  lags.DidEf6Warni
20140 6e 67 2c 20 74 72 75 65 29 29 0d 0a 20 20 20 20  ng, true))..    
20150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20160 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
20170 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
20180 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
20190 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e  e(TracePriority.
201a0 4d 65 64 69 75 6d 48 69 67 68 2c 0d 0a 20 20 20  MediumHigh,..   
201b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
201c0 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61           debugCa
201d0 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c  llback, traceCal
201e0 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20  lback,..        
201f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20200 20 20 20 20 22 46 6f 72 63 65 64 20 74 6f 20 65      "Forced to e
20210 6e 61 62 6c 65 20 73 75 70 70 6f 72 74 20 66 6f  nable support fo
20220 72 20 5c 22 45 66 36 5c 22 2e 22 2c 0d 0a 20 20  r \"Ef6\".",..  
20230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20240 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
20250 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
20260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20270 20 20 20 20 20 70 72 6f 76 69 64 65 72 46 6c 61       providerFla
20280 67 73 20 7c 3d 20 50 72 6f 76 69 64 65 72 46 6c  gs |= ProviderFl
20290 61 67 73 2e 44 69 64 45 66 36 57 61 72 6e 69 6e  ags.DidEf6Warnin
202a0 67 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g;..            
202b0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
202c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
202d0 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20   return true;.. 
202e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
202f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
20300 20 20 65 6c 73 65 20 69 66 20 28 48 61 73 46 6c    else if (HasFl
20310 61 67 73 28 50 72 6f 76 69 64 65 72 46 6c 61 67  ags(ProviderFlag
20320 73 2e 46 6f 72 63 65 45 66 36 44 69 73 61 62 6c  s.ForceEf6Disabl
20330 65 64 2c 20 74 72 75 65 29 29 0d 0a 20 20 20 20  ed, true))..    
20340 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
20350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20360 20 20 20 69 66 20 28 21 48 61 73 46 6c 61 67 73     if (!HasFlags
20370 28 50 72 6f 76 69 64 65 72 46 6c 61 67 73 2e 44  (ProviderFlags.D
20380 69 64 45 66 36 57 61 72 6e 69 6e 67 2c 20 74 72  idEf6Warning, tr
20390 75 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ue))..          
203a0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
203b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
203c0 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65       TraceOps.De
203d0 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63  bugAndTrace(Trac
203e0 65 50 72 69 6f 72 69 74 79 2e 4d 65 64 69 75 6d  ePriority.Medium
203f0 48 69 67 68 2c 0d 0a 20 20 20 20 20 20 20 20 20  High,..         
20400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20410 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b     debugCallback
20420 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c  , traceCallback,
20430 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
20440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 46                "F
20450 6f 72 63 65 64 20 74 6f 20 64 69 73 61 62 6c 65  orced to disable
20460 20 73 75 70 70 6f 72 74 20 66 6f 72 20 5c 22 45   support for \"E
20470 66 36 5c 22 2e 22 2c 0d 0a 20 20 20 20 20 20 20  f6\".",..       
20480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20490 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
204a0 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
204b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
204c0 70 72 6f 76 69 64 65 72 46 6c 61 67 73 20 7c 3d  providerFlags |=
204d0 20 50 72 6f 76 69 64 65 72 46 6c 61 67 73 2e 44   ProviderFlags.D
204e0 69 64 45 66 36 57 61 72 6e 69 6e 67 3b 0d 0a 20  idEf6Warning;.. 
204f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20500 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
20510 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
20520 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
20530 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
20540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20550 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
20560 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 52 65 74      // NOTE: Ret
20570 75 72 6e 20 6e 6f 6e 2d 7a 65 72 6f 20 69 66 20  urn non-zero if 
20580 74 68 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  the System.Data.
20590 53 51 4c 69 74 65 2e 45 46 36 0d 0a 20 20 20 20  SQLite.EF6..    
205a0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
205b0 20 20 20 20 20 61 73 73 65 6d 62 6c 79 20 73 68       assembly sh
205c0 6f 75 6c 64 20 62 65 20 70 72 6f 63 65 73 73 65  ould be processe
205d0 64 20 64 75 72 69 6e 67 20 74 68 65 20 69 6e 73  d during the ins
205e0 74 61 6c 6c 2e 0d 0a 20 20 20 20 20 20 20 20 20  tall...         
205f0 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
20600 49 66 20 74 68 65 20 74 61 72 67 65 74 20 69 73  If the target is
20610 20 56 69 73 75 61 6c 20 53 74 75 64 69 6f 20 32   Visual Studio 2
20620 30 30 35 20 6f 72 20 56 69 73 75 61 6c 20 53 74  005 or Visual St
20630 75 64 69 6f 0d 0a 20 20 20 20 20 20 20 20 20 20  udio..          
20640 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 32        //       2
20650 30 30 38 2c 20 74 68 69 73 20 6d 75 73 74 20 72  008, this must r
20660 65 74 75 72 6e 20 7a 65 72 6f 2e 0d 0a 20 20 20  eturn zero...   
20670 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
20680 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
20690 20 69 66 20 28 6e 6f 4e 65 74 46 78 34 30 20 26   if (noNetFx40 &
206a0 26 20 6e 6f 4e 65 74 46 78 34 35 20 26 26 20 6e  & noNetFx45 && n
206b0 6f 4e 65 74 46 78 34 35 31 29 0d 0a 20 20 20 20  oNetFx451)..    
206c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
206d0 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d  return false;...
206e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
206f0 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
20700 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 41 6c       // NOTE: Al
20710 73 6f 2c 20 69 66 20 74 68 65 20 45 46 36 20 63  so, if the EF6 c
20720 6f 72 65 20 61 73 73 65 6d 62 6c 79 20 69 73 20  ore assembly is 
20730 75 6e 61 76 61 69 6c 61 62 6c 65 2c 20 74 68 69  unavailable, thi
20740 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  s..             
20750 20 20 20 2f 2f 20 20 20 20 20 20 20 6d 75 73 74     //       must
20760 20 72 65 74 75 72 6e 20 7a 65 72 6f 2e 0d 0a 20   return zero... 
20770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
20780 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
20790 20 20 20 69 66 20 28 21 49 73 53 79 73 74 65 6d     if (!IsSystem
207a0 45 66 36 41 73 73 65 6d 62 6c 79 41 76 61 69 6c  Ef6AssemblyAvail
207b0 61 62 6c 65 28 29 29 0d 0a 20 20 20 20 20 20 20  able())..       
207c0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
207d0 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20  urn false;....  
207e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
207f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
20800 20 20 2f 2f 20 4e 4f 54 45 3a 20 46 69 6e 61 6c    // NOTE: Final
20810 6c 79 2c 20 69 66 20 74 68 65 20 45 46 36 20 63  ly, if the EF6 c
20820 6f 72 65 20 61 73 73 65 6d 62 6c 79 20 69 73 20  ore assembly is 
20830 6e 6f 74 20 61 76 61 69 6c 61 62 6c 65 0d 0a 20  not available.. 
20840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
20850 2f 20 20 20 20 20 20 20 67 6c 6f 62 61 6c 6c 79  /       globally
20860 20 5b 61 6e 64 20 74 68 69 73 20 69 73 20 61 20   [and this is a 
20870 72 65 71 75 69 72 65 6d 65 6e 74 20 66 6f 72 20  requirement for 
20880 74 68 65 20 63 75 72 72 65 6e 74 0d 0a 20 20 20  the current..   
20890 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
208a0 20 20 20 20 20 20 69 6e 73 74 61 6c 6c 5d 2c 20        install], 
208b0 72 65 74 75 72 6e 20 7a 65 72 6f 2e 0d 0a 20 20  return zero...  
208c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
208d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
208e0 20 20 72 65 74 75 72 6e 20 48 61 73 46 6c 61 67    return HasFlag
208f0 73 28 50 72 6f 76 69 64 65 72 46 6c 61 67 73 2e  s(ProviderFlags.
20900 53 79 73 74 65 6d 45 66 36 4d 75 73 74 42 65 47  SystemEf6MustBeG
20910 6c 6f 62 61 6c 2c 20 74 72 75 65 29 20 3f 0d 0a  lobal, true) ?..
20920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20930 20 20 20 20 49 73 53 79 73 74 65 6d 45 66 36 41      IsSystemEf6A
20940 73 73 65 6d 62 6c 79 47 6c 6f 62 61 6c 28 29 20  ssemblyGlobal() 
20950 3a 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  : true;..       
20960 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
20970 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
20980 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20990 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
209a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
209b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
209c0 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
209d0 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20 47 65 74  AssemblyName Get
209e0 43 6f 72 65 41 73 73 65 6d 62 6c 79 4e 61 6d 65  CoreAssemblyName
209f0 28 29 20 2f 2a 20 52 45 51 55 49 52 45 44 20 2a  () /* REQUIRED *
20a00 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  /..            {
20a10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
20a20 20 20 69 66 20 28 63 6f 72 65 41 73 73 65 6d 62    if (coreAssemb
20a30 6c 79 4e 61 6d 65 20 3d 3d 20 6e 75 6c 6c 29 0d  lyName == null).
20a40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
20a50 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
20a60 20 20 20 20 20 20 20 20 63 6f 72 65 41 73 73 65          coreAsse
20a70 6d 62 6c 79 4e 61 6d 65 20 3d 20 41 73 73 65 6d  mblyName = Assem
20a80 62 6c 79 4e 61 6d 65 2e 47 65 74 41 73 73 65 6d  blyName.GetAssem
20a90 62 6c 79 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20  blyName(..      
20aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20ab0 20 20 43 6f 72 65 46 69 6c 65 4e 61 6d 65 29 3b    CoreFileName);
20ac0 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20   /* throw */..  
20ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
20ae0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
20af0 20 20 20 72 65 74 75 72 6e 20 63 6f 72 65 41 73     return coreAs
20b00 73 65 6d 62 6c 79 4e 61 6d 65 3b 0d 0a 20 20 20  semblyName;..   
20b10 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
20b20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
20b30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20b40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20b50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20b60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
20b70 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
20b80 6c 69 63 20 41 73 73 65 6d 62 6c 79 4e 61 6d 65  lic AssemblyName
20b90 20 47 65 74 4c 69 6e 71 41 73 73 65 6d 62 6c 79   GetLinqAssembly
20ba0 4e 61 6d 65 28 29 20 2f 2a 20 4f 50 54 49 4f 4e  Name() /* OPTION
20bb0 41 4c 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20  AL */..         
20bc0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
20bd0 20 20 20 20 20 20 69 66 20 28 49 73 4c 69 6e 71        if (IsLinq
20be0 53 75 70 70 6f 72 74 65 64 28 29 20 26 26 20 28  Supported() && (
20bf0 6c 69 6e 71 41 73 73 65 6d 62 6c 79 4e 61 6d 65  linqAssemblyName
20c00 20 3d 3d 20 6e 75 6c 6c 29 29 0d 0a 20 20 20 20   == null))..    
20c10 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
20c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20c30 20 20 20 6c 69 6e 71 41 73 73 65 6d 62 6c 79 4e     linqAssemblyN
20c40 61 6d 65 20 3d 20 41 73 73 65 6d 62 6c 79 4e 61  ame = AssemblyNa
20c50 6d 65 2e 47 65 74 41 73 73 65 6d 62 6c 79 4e 61  me.GetAssemblyNa
20c60 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me(..           
20c70 20 20 20 20 20 20 20 20 20 20 20 20 20 4c 69 6e               Lin
20c80 71 46 69 6c 65 4e 61 6d 65 29 3b 20 2f 2a 20 74  qFileName); /* t
20c90 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20  hrow */..       
20ca0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
20cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
20cc0 74 75 72 6e 20 6c 69 6e 71 41 73 73 65 6d 62 6c  turn linqAssembl
20cd0 79 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20  yName;..        
20ce0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
20cf0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
20d00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20d10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20d20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20d30 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
20d40 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 41          public A
20d50 73 73 65 6d 62 6c 79 4e 61 6d 65 20 47 65 74 45  ssemblyName GetE
20d60 66 36 41 73 73 65 6d 62 6c 79 4e 61 6d 65 28 29  f6AssemblyName()
20d70 20 2f 2a 20 4f 50 54 49 4f 4e 41 4c 20 2a 2f 0d   /* OPTIONAL */.
20d80 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
20d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20da0 69 66 20 28 49 73 45 66 36 53 75 70 70 6f 72 74  if (IsEf6Support
20db0 65 64 28 29 20 26 26 20 28 65 66 36 41 73 73 65  ed() && (ef6Asse
20dc0 6d 62 6c 79 4e 61 6d 65 20 3d 3d 20 6e 75 6c 6c  mblyName == null
20dd0 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
20de0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
20df0 20 20 20 20 20 20 20 20 20 20 20 65 66 36 41 73             ef6As
20e00 73 65 6d 62 6c 79 4e 61 6d 65 20 3d 20 41 73 73  semblyName = Ass
20e10 65 6d 62 6c 79 4e 61 6d 65 2e 47 65 74 41 73 73  emblyName.GetAss
20e20 65 6d 62 6c 79 4e 61 6d 65 28 0d 0a 20 20 20 20  emblyName(..    
20e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20e40 20 20 20 20 45 66 36 46 69 6c 65 4e 61 6d 65 29      Ef6FileName)
20e50 3b 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20  ; /* throw */.. 
20e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
20e70 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
20e80 20 20 20 20 72 65 74 75 72 6e 20 65 66 36 41 73      return ef6As
20e90 73 65 6d 62 6c 79 4e 61 6d 65 3b 0d 0a 20 20 20  semblyName;..   
20ea0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
20eb0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
20ec0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20ed0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20ee0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20ef0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
20f00 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
20f10 6c 69 63 20 41 73 73 65 6d 62 6c 79 4e 61 6d 65  lic AssemblyName
20f20 20 47 65 74 44 65 73 69 67 6e 65 72 41 73 73 65   GetDesignerAsse
20f30 6d 62 6c 79 4e 61 6d 65 28 29 20 2f 2a 20 52 45  mblyName() /* RE
20f40 51 55 49 52 45 44 20 2a 2f 0d 0a 20 20 20 20 20  QUIRED */..     
20f50 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
20f60 20 20 20 20 20 20 20 20 20 20 69 66 20 28 64 65            if (de
20f70 73 69 67 6e 65 72 41 73 73 65 6d 62 6c 79 4e 61  signerAssemblyNa
20f80 6d 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  me == null)..   
20f90 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
20fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20fb0 20 20 20 20 64 65 73 69 67 6e 65 72 41 73 73 65      designerAsse
20fc0 6d 62 6c 79 4e 61 6d 65 20 3d 20 41 73 73 65 6d  mblyName = Assem
20fd0 62 6c 79 4e 61 6d 65 2e 47 65 74 41 73 73 65 6d  blyName.GetAssem
20fe0 62 6c 79 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20  blyName(..      
20ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21000 20 20 44 65 73 69 67 6e 65 72 46 69 6c 65 4e 61    DesignerFileNa
21010 6d 65 29 3b 20 2f 2a 20 74 68 72 6f 77 20 2a 2f  me); /* throw */
21020 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
21030 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
21040 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 64 65         return de
21050 73 69 67 6e 65 72 41 73 73 65 6d 62 6c 79 4e 61  signerAssemblyNa
21060 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me;..           
21070 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
21080 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
21090 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
210a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
210b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
210c0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
210d0 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 72 69       public stri
210e0 6e 67 20 47 65 74 43 6f 6e 66 69 67 49 6e 76 61  ng GetConfigInva
210f0 72 69 61 6e 74 4e 61 6d 65 28 29 0d 0a 20 20 20  riantName()..   
21100 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
21110 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
21120 72 6e 20 47 65 74 49 6e 76 61 72 69 61 6e 74 4e  rn GetInvariantN
21130 61 6d 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  ame();..        
21140 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
21150 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
21160 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21170 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21180 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21190 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
211a0 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73          public s
211b0 74 72 69 6e 67 20 47 65 74 50 72 6f 76 69 64 65  tring GetProvide
211c0 72 49 6e 76 61 72 69 61 6e 74 4e 61 6d 65 28 29  rInvariantName()
211d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
211e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
211f0 20 72 65 74 75 72 6e 20 47 65 74 49 6e 76 61 72   return GetInvar
21200 69 61 6e 74 4e 61 6d 65 28 29 3b 0d 0a 20 20 20  iantName();..   
21210 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
21220 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
21230 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21240 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21250 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21260 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
21270 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
21280 6c 69 63 20 73 74 72 69 6e 67 20 47 65 74 46 61  lic string GetFa
21290 63 74 6f 72 79 54 79 70 65 4e 61 6d 65 28 29 0d  ctoryTypeName().
212a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
212b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
212c0 72 65 74 75 72 6e 20 49 73 45 66 36 53 75 70 70  return IsEf6Supp
212d0 6f 72 74 65 64 28 29 20 3f 20 45 66 36 46 61 63  orted() ? Ef6Fac
212e0 74 6f 72 79 54 79 70 65 4e 61 6d 65 20 3a 20 46  toryTypeName : F
212f0 61 63 74 6f 72 79 54 79 70 65 4e 61 6d 65 3b 0d  actoryTypeName;.
21300 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
21310 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
21320 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21330 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21340 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21350 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21360 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
21370 20 70 75 62 6c 69 63 20 41 73 73 65 6d 62 6c 79   public Assembly
21380 4e 61 6d 65 20 47 65 74 50 72 6f 76 69 64 65 72  Name GetProvider
21390 41 73 73 65 6d 62 6c 79 4e 61 6d 65 28 29 0d 0a  AssemblyName()..
213a0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
213b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
213c0 65 74 75 72 6e 20 49 73 45 66 36 53 75 70 70 6f  eturn IsEf6Suppo
213d0 72 74 65 64 28 29 20 3f 0d 0a 20 20 20 20 20 20  rted() ?..      
213e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 47 65                Ge
213f0 74 45 66 36 41 73 73 65 6d 62 6c 79 4e 61 6d 65  tEf6AssemblyName
21400 28 29 20 3a 20 47 65 74 43 6f 72 65 41 73 73 65  () : GetCoreAsse
21410 6d 62 6c 79 4e 61 6d 65 28 29 3b 20 2f 2a 20 74  mblyName(); /* t
21420 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20  hrow */..       
21430 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
21440 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
21450 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21460 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21470 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21480 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
21490 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
214a0 76 6f 69 64 20 44 75 6d 70 28 0d 0a 20 20 20 20  void Dump(..    
214b0 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
214c0 65 43 61 6c 6c 62 61 63 6b 20 74 72 61 63 65 43  eCallback traceC
214d0 61 6c 6c 62 61 63 6b 0d 0a 20 20 20 20 20 20 20  allback..       
214e0 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
214f0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
21500 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74             if (t
21510 72 61 63 65 43 61 6c 6c 62 61 63 6b 20 21 3d 20  raceCallback != 
21520 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
21530 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
21540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
21550 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69  aceCallback(Stri
21560 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e  ng.Format(NameAn
21570 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20  dValueFormat,.. 
21580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21590 20 20 20 20 20 20 20 22 41 73 73 65 6d 62 6c 79         "Assembly
215a0 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 61 73  ", ForDisplay(as
215b0 73 65 6d 62 6c 79 29 29 2c 0d 0a 20 20 20 20 20  sembly)),..     
215c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
215d0 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
215e0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
215f0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
21600 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46  allback(String.F
21610 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c  ormat(NameAndVal
21620 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20  ueFormat,..     
21630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21640 20 20 20 22 4c 6f 67 46 69 6c 65 4e 61 6d 65 22     "LogFileName"
21650 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6c 6f 67  , ForDisplay(log
21660 46 69 6c 65 4e 61 6d 65 29 29 2c 0d 0a 20 20 20  FileName)),..   
21670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21680 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
21690 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
216a0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
216b0 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67  eCallback(String
216c0 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56  .Format(NameAndV
216d0 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20  alueFormat,..   
216e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
216f0 20 20 20 20 20 22 44 69 72 65 63 74 6f 72 79 22       "Directory"
21700 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 64 69 72  , ForDisplay(dir
21710 65 63 74 6f 72 79 29 29 2c 0d 0a 20 20 20 20 20  ectory)),..     
21720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21730 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
21740 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
21750 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
21760 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46  allback(String.F
21770 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c  ormat(NameAndVal
21780 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20  ueFormat,..     
21790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
217a0 20 20 20 22 43 6f 72 65 46 69 6c 65 4e 61 6d 65     "CoreFileName
217b0 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 63 6f  ", ForDisplay(co
217c0 72 65 46 69 6c 65 4e 61 6d 65 29 29 2c 0d 0a 20  reFileName)),.. 
217d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
217e0 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
217f0 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
21800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
21810 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69  aceCallback(Stri
21820 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e  ng.Format(NameAn
21830 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20  dValueFormat,.. 
21840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21850 20 20 20 20 20 20 20 22 4c 69 6e 71 46 69 6c 65         "LinqFile
21860 4e 61 6d 65 22 2c 20 46 6f 72 44 69 73 70 6c 61  Name", ForDispla
21870 79 28 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 29 29  y(linqFileName))
21880 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
21890 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
218a0 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
218b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
218c0 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28    traceCallback(
218d0 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61  String.Format(Na
218e0 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74  meAndValueFormat
218f0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
21900 20 20 20 20 20 20 20 20 20 20 20 22 45 66 36 46             "Ef6F
21910 69 6c 65 4e 61 6d 65 22 2c 20 46 6f 72 44 69 73  ileName", ForDis
21920 70 6c 61 79 28 65 66 36 46 69 6c 65 4e 61 6d 65  play(ef6FileName
21930 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
21940 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
21950 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
21960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21970 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
21980 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  k(String.Format(
21990 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d  NameAndValueForm
219a0 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at,..           
219b0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 44 65               "De
219c0 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 22 2c  signerFileName",
219d0 20 46 6f 72 44 69 73 70 6c 61 79 28 64 65 73 69   ForDisplay(desi
219e0 67 6e 65 72 46 69 6c 65 4e 61 6d 65 29 29 2c 0d  gnerFileName)),.
219f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
21a00 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
21a10 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
21a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21a30 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74  traceCallback(St
21a40 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65  ring.Format(Name
21a50 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d  AndValueFormat,.
21a60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
21a70 20 20 20 20 20 20 20 20 20 22 52 65 67 69 73 74           "Regist
21a80 72 79 56 65 72 73 69 6f 6e 22 2c 20 46 6f 72 44  ryVersion", ForD
21a90 69 73 70 6c 61 79 28 72 65 67 69 73 74 72 79 56  isplay(registryV
21aa0 65 72 73 69 6f 6e 29 29 2c 0d 0a 20 20 20 20 20  ersion)),..     
21ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21ac0 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
21ad0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
21ae0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
21af0 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46  allback(String.F
21b00 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c  ormat(NameAndVal
21b10 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20  ueFormat,..     
21b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21b30 20 20 20 22 43 6f 6e 66 69 67 56 65 72 73 69 6f     "ConfigVersio
21b40 6e 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 63  n", ForDisplay(c
21b50 6f 6e 66 69 67 56 65 72 73 69 6f 6e 29 29 2c 0d  onfigVersion)),.
21b60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
21b70 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
21b80 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
21b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21ba0 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74  traceCallback(St
21bb0 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65  ring.Format(Name
21bc0 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d  AndValueFormat,.
21bd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
21be0 20 20 20 20 20 20 20 20 20 22 56 73 56 65 72 73           "VsVers
21bf0 69 6f 6e 53 75 66 66 69 78 22 2c 20 46 6f 72 44  ionSuffix", ForD
21c00 69 73 70 6c 61 79 28 76 73 56 65 72 73 69 6f 6e  isplay(vsVersion
21c10 53 75 66 66 69 78 29 29 2c 0d 0a 20 20 20 20 20  Suffix)),..     
21c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21c30 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
21c40 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
21c50 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
21c60 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46  allback(String.F
21c70 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c  ormat(NameAndVal
21c80 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20  ueFormat,..     
21c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21ca0 20 20 20 22 44 65 62 75 67 46 6f 72 6d 61 74 22     "DebugFormat"
21cb0 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 64 65 62  , ForDisplay(deb
21cc0 75 67 46 6f 72 6d 61 74 29 29 2c 0d 0a 20 20 20  ugFormat)),..   
21cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21ce0 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
21cf0 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
21d00 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
21d10 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67  eCallback(String
21d20 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56  .Format(NameAndV
21d30 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20  alueFormat,..   
21d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21d50 20 20 20 20 20 22 54 72 61 63 65 46 6f 72 6d 61       "TraceForma
21d60 74 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74  t", ForDisplay(t
21d70 72 61 63 65 46 6f 72 6d 61 74 29 29 2c 0d 0a 20  raceFormat)),.. 
21d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21d90 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
21da0 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
21db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
21dc0 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69  aceCallback(Stri
21dd0 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e  ng.Format(NameAn
21de0 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20  dValueFormat,.. 
21df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21e00 20 20 20 20 20 20 20 22 49 6e 73 74 61 6c 6c 46         "InstallF
21e10 6c 61 67 73 22 2c 20 46 6f 72 44 69 73 70 6c 61  lags", ForDispla
21e20 79 28 69 6e 73 74 61 6c 6c 46 6c 61 67 73 29 29  y(installFlags))
21e30 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
21e40 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
21e50 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
21e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21e70 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28    traceCallback(
21e80 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61  String.Format(Na
21e90 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74  meAndValueFormat
21ea0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
21eb0 20 20 20 20 20 20 20 20 20 20 20 22 50 72 6f 76             "Prov
21ec0 69 64 65 72 46 6c 61 67 73 22 2c 20 46 6f 72 44  iderFlags", ForD
21ed0 69 73 70 6c 61 79 28 70 72 6f 76 69 64 65 72 46  isplay(providerF
21ee0 6c 61 67 73 29 29 2c 0d 0a 20 20 20 20 20 20 20  lags)),..       
21ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21f00 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
21f10 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
21f20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
21f30 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72  lback(String.For
21f40 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65  mat(NameAndValue
21f50 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20  Format,..       
21f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21f70 20 22 44 65 62 75 67 50 72 69 6f 72 69 74 79 22   "DebugPriority"
21f80 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 64 65 62  , ForDisplay(deb
21f90 75 67 50 72 69 6f 72 69 74 79 29 29 2c 0d 0a 20  ugPriority)),.. 
21fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21fb0 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
21fc0 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
21fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
21fe0 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69  aceCallback(Stri
21ff0 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e  ng.Format(NameAn
22000 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20  dValueFormat,.. 
22010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22020 20 20 20 20 20 20 20 22 54 72 61 63 65 50 72 69         "TracePri
22030 6f 72 69 74 79 22 2c 20 46 6f 72 44 69 73 70 6c  ority", ForDispl
22040 61 79 28 74 72 61 63 65 50 72 69 6f 72 69 74 79  ay(tracePriority
22050 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
22060 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
22070 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
22080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22090 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
220a0 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  k(String.Format(
220b0 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d  NameAndValueForm
220c0 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at,..           
220d0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 50 65               "Pe
220e0 72 55 73 65 72 22 2c 20 46 6f 72 44 69 73 70 6c  rUser", ForDispl
220f0 61 79 28 70 65 72 55 73 65 72 29 29 2c 0d 0a 20  ay(perUser)),.. 
22100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22110 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
22120 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
22130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
22140 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69  aceCallback(Stri
22150 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e  ng.Format(NameAn
22160 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20  dValueFormat,.. 
22170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22180 20 20 20 20 20 20 20 22 49 6e 73 74 61 6c 6c 22         "Install"
22190 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 69 6e 73  , ForDisplay(ins
221a0 74 61 6c 6c 29 29 2c 0d 0a 20 20 20 20 20 20 20  tall)),..       
221b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
221c0 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
221d0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
221e0 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
221f0 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72  lback(String.For
22200 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65  mat(NameAndValue
22210 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20  Format,..       
22220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22230 20 22 57 6f 77 36 34 22 2c 20 46 6f 72 44 69 73   "Wow64", ForDis
22240 70 6c 61 79 28 77 6f 77 36 34 29 29 2c 0d 0a 20  play(wow64)),.. 
22250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22260 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
22270 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
22280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
22290 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69  aceCallback(Stri
222a0 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e  ng.Format(NameAn
222b0 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20  dValueFormat,.. 
222c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
222d0 20 20 20 20 20 20 20 22 4e 6f 52 75 6e 74 69 6d         "NoRuntim
222e0 65 56 65 72 73 69 6f 6e 22 2c 20 46 6f 72 44 69  eVersion", ForDi
222f0 73 70 6c 61 79 28 6e 6f 52 75 6e 74 69 6d 65 56  splay(noRuntimeV
22300 65 72 73 69 6f 6e 29 29 2c 0d 0a 20 20 20 20 20  ersion)),..     
22310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22320 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
22330 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
22340 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
22350 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46  allback(String.F
22360 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c  ormat(NameAndVal
22370 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20  ueFormat,..     
22380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22390 20 20 20 22 4e 6f 44 65 73 6b 74 6f 70 22 2c 20     "NoDesktop", 
223a0 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f 44 65 73  ForDisplay(noDes
223b0 6b 74 6f 70 29 29 2c 0d 0a 20 20 20 20 20 20 20  ktop)),..       
223c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
223d0 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
223e0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
223f0 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
22400 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72  lback(String.For
22410 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65  mat(NameAndValue
22420 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20  Format,..       
22430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22440 20 22 4e 6f 43 6f 6d 70 61 63 74 22 2c 20 46 6f   "NoCompact", Fo
22450 72 44 69 73 70 6c 61 79 28 6e 6f 43 6f 6d 70 61  rDisplay(noCompa
22460 63 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  ct)),..         
22470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
22480 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
22490 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
224a0 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
224b0 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ack(String.Forma
224c0 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f  t(NameAndValueFo
224d0 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  rmat,..         
224e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
224f0 4e 6f 4e 65 74 46 78 32 30 22 2c 20 46 6f 72 44  NoNetFx20", ForD
22500 69 73 70 6c 61 79 28 6e 6f 4e 65 74 46 78 32 30  isplay(noNetFx20
22510 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
22520 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
22530 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
22540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22550 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
22560 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  k(String.Format(
22570 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d  NameAndValueForm
22580 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at,..           
22590 20 20 20 20 20 20 20 20 20 20 20 20 20 22 4e 6f               "No
225a0 4e 65 74 46 78 33 35 22 2c 20 46 6f 72 44 69 73  NetFx35", ForDis
225b0 70 6c 61 79 28 6e 6f 4e 65 74 46 78 33 35 29 29  play(noNetFx35))
225c0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
225d0 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
225e0 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
225f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22600 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28    traceCallback(
22610 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61  String.Format(Na
22620 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74  meAndValueFormat
22630 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
22640 20 20 20 20 20 20 20 20 20 20 20 22 4e 6f 4e 65             "NoNe
22650 74 46 78 34 30 22 2c 20 46 6f 72 44 69 73 70 6c  tFx40", ForDispl
22660 61 79 28 6e 6f 4e 65 74 46 78 34 30 29 29 2c 0d  ay(noNetFx40)),.
22670 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
22680 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
22690 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
226a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
226b0 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74  traceCallback(St
226c0 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65  ring.Format(Name
226d0 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d  AndValueFormat,.
226e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
226f0 20 20 20 20 20 20 20 20 20 22 4e 6f 4e 65 74 46           "NoNetF
22700 78 34 35 22 2c 20 46 6f 72 44 69 73 70 6c 61 79  x45", ForDisplay
22710 28 6e 6f 4e 65 74 46 78 34 35 29 29 2c 0d 0a 20  (noNetFx45)),.. 
22720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22730 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
22740 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
22750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
22760 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69  aceCallback(Stri
22770 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e  ng.Format(NameAn
22780 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20  dValueFormat,.. 
22790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
227a0 20 20 20 20 20 20 20 22 4e 6f 4e 65 74 46 78 34         "NoNetFx4
227b0 35 31 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  51", ForDisplay(
227c0 6e 6f 4e 65 74 46 78 34 35 31 29 29 2c 0d 0a 20  noNetFx451)),.. 
227d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
227e0 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
227f0 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
22800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
22810 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69  aceCallback(Stri
22820 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e  ng.Format(NameAn
22830 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20  dValueFormat,.. 
22840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22850 20 20 20 20 20 20 20 22 4e 6f 56 73 32 30 30 35         "NoVs2005
22860 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f  ", ForDisplay(no
22870 56 73 32 30 30 35 29 29 2c 0d 0a 20 20 20 20 20  Vs2005)),..     
22880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22890 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
228a0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
228b0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
228c0 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46  allback(String.F
228d0 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c  ormat(NameAndVal
228e0 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20  ueFormat,..     
228f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22900 20 20 20 22 4e 6f 56 73 32 30 30 38 22 2c 20 46     "NoVs2008", F
22910 6f 72 44 69 73 70 6c 61 79 28 6e 6f 56 73 32 30  orDisplay(noVs20
22920 30 38 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  08)),..         
22930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
22940 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
22950 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
22960 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
22970 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ack(String.Forma
22980 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f  t(NameAndValueFo
22990 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  rmat,..         
229a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
229b0 4e 6f 56 73 32 30 31 30 22 2c 20 46 6f 72 44 69  NoVs2010", ForDi
229c0 73 70 6c 61 79 28 6e 6f 56 73 32 30 31 30 29 29  splay(noVs2010))
229d0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
229e0 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
229f0 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
22a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22a10 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28    traceCallback(
22a20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61  String.Format(Na
22a30 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74  meAndValueFormat
22a40 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
22a50 20 20 20 20 20 20 20 20 20 20 20 22 4e 6f 56 73             "NoVs
22a60 32 30 31 32 22 2c 20 46 6f 72 44 69 73 70 6c 61  2012", ForDispla
22a70 79 28 6e 6f 56 73 32 30 31 32 29 29 2c 0d 0a 20  y(noVs2012)),.. 
22a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22a90 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
22aa0 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
22ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
22ac0 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69  aceCallback(Stri
22ad0 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e  ng.Format(NameAn
22ae0 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20  dValueFormat,.. 
22af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22b00 20 20 20 20 20 20 20 22 4e 6f 56 73 32 30 31 33         "NoVs2013
22b10 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f  ", ForDisplay(no
22b20 56 73 32 30 31 33 29 29 2c 0d 0a 20 20 20 20 20  Vs2013)),..     
22b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22b40 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
22b50 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
22b60 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
22b70 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46  allback(String.F
22b80 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c  ormat(NameAndVal
22b90 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20  ueFormat,..     
22ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22bb0 20 20 20 22 4e 6f 54 72 61 63 65 22 2c 20 46 6f     "NoTrace", Fo
22bc0 72 44 69 73 70 6c 61 79 28 6e 6f 54 72 61 63 65  rDisplay(noTrace
22bd0 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
22be0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
22bf0 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
22c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22c10 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
22c20 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  k(String.Format(
22c30 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d  NameAndValueForm
22c40 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at,..           
22c50 20 20 20 20 20 20 20 20 20 20 20 20 20 22 4e 6f               "No
22c60 43 6f 6e 73 6f 6c 65 22 2c 20 46 6f 72 44 69 73  Console", ForDis
22c70 70 6c 61 79 28 6e 6f 43 6f 6e 73 6f 6c 65 29 29  play(noConsole))
22c80 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
22c90 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
22ca0 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
22cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22cc0 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28    traceCallback(
22cd0 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61  String.Format(Na
22ce0 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74  meAndValueFormat
22cf0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
22d00 20 20 20 20 20 20 20 20 20 20 20 22 4e 6f 4c 6f             "NoLo
22d10 67 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e  g", ForDisplay(n
22d20 6f 4c 6f 67 29 29 2c 0d 0a 20 20 20 20 20 20 20  oLog)),..       
22d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22d40 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
22d50 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
22d60 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
22d70 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72  lback(String.For
22d80 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65  mat(NameAndValue
22d90 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20  Format,..       
22da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22db0 20 22 54 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67   "ThrowOnMissing
22dc0 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 68  ", ForDisplay(th
22dd0 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 29 29 2c 0d  rowOnMissing)),.
22de0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
22df0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
22e00 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
22e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22e20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74  traceCallback(St
22e30 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65  ring.Format(Name
22e40 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d  AndValueFormat,.
22e50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
22e60 20 20 20 20 20 20 20 20 20 22 57 68 61 74 49 66           "WhatIf
22e70 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 77 68  ", ForDisplay(wh
22e80 61 74 49 66 29 29 2c 0d 0a 20 20 20 20 20 20 20  atIf)),..       
22e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22ea0 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
22eb0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
22ec0 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
22ed0 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72  lback(String.For
22ee0 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65  mat(NameAndValue
22ef0 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20  Format,..       
22f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22f10 20 22 44 65 62 75 67 22 2c 20 46 6f 72 44 69 73   "Debug", ForDis
22f20 70 6c 61 79 28 64 65 62 75 67 29 29 2c 0d 0a 20  play(debug)),.. 
22f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22f40 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
22f50 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
22f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
22f70 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69  aceCallback(Stri
22f80 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e  ng.Format(NameAn
22f90 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20  dValueFormat,.. 
22fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22fb0 20 20 20 20 20 20 20 22 56 65 72 62 6f 73 65 22         "Verbose"
22fc0 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 76 65 72  , ForDisplay(ver
22fd0 62 6f 73 65 29 29 2c 0d 0a 20 20 20 20 20 20 20  bose)),..       
22fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22ff0 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
23000 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
23010 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
23020 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72  lback(String.For
23030 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65  mat(NameAndValue
23040 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20  Format,..       
23050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23060 20 22 43 6f 6e 66 69 72 6d 22 2c 20 46 6f 72 44   "Confirm", ForD
23070 69 73 70 6c 61 79 28 63 6f 6e 66 69 72 6d 29 29  isplay(confirm))
23080 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
23090 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
230a0 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
230b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
230c0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
230d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
230e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
230f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
23100 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23110 20 20 20 20 20 69 66 20 28 61 73 73 65 6d 62 6c       if (assembl
23120 79 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y != null)..    
23130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23140 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
23150 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
23160 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e  Callback(String.
23170 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61  Format(NameAndVa
23180 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20  lueFormat,..    
23190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
231a0 20 20 20 20 20 20 20 20 22 41 73 73 65 6d 62 6c          "Assembl
231b0 79 54 69 74 6c 65 22 2c 0d 0a 20 20 20 20 20 20  yTitle",..      
231c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
231d0 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
231e0 28 47 65 74 41 73 73 65 6d 62 6c 79 54 69 74 6c  (GetAssemblyTitl
231f0 65 28 61 73 73 65 6d 62 6c 79 29 29 29 2c 0d 0a  e(assembly))),..
23200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23210 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
23220 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
23230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23240 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
23250 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d  back(String.Form
23260 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46  at(NameAndValueF
23270 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20  ormat,..        
23280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23290 20 20 20 20 22 41 73 73 65 6d 62 6c 79 43 6f 6e      "AssemblyCon
232a0 66 69 67 75 72 61 74 69 6f 6e 22 2c 0d 0a 20 20  figuration",..  
232b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
232c0 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
232d0 70 6c 61 79 28 47 65 74 41 73 73 65 6d 62 6c 79  play(GetAssembly
232e0 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 28 61 73  Configuration(as
232f0 73 65 6d 62 6c 79 29 29 29 2c 0d 0a 20 20 20 20  sembly))),..    
23300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23310 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
23320 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20 20  egory);..       
23330 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
23340 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
23350 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
23360 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23370 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23380 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23390 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
233a0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
233b0 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f  llback(String.Fo
233c0 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75  rmat(NameAndValu
233d0 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20  eFormat,..      
233e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
233f0 20 20 22 49 73 53 79 73 74 65 6d 45 66 36 41 73    "IsSystemEf6As
23400 73 65 6d 62 6c 79 41 76 61 69 6c 61 62 6c 65 22  semblyAvailable"
23410 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 0d 0a 20  , ForDisplay(.. 
23420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23430 20 20 20 20 20 20 20 49 73 53 79 73 74 65 6d 45         IsSystemE
23440 66 36 41 73 73 65 6d 62 6c 79 41 76 61 69 6c 61  f6AssemblyAvaila
23450 62 6c 65 28 29 29 29 2c 0d 0a 20 20 20 20 20 20  ble())),..      
23460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23470 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
23480 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
23490 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
234a0 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f  llback(String.Fo
234b0 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75  rmat(NameAndValu
234c0 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20  eFormat,..      
234d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
234e0 20 20 22 49 73 53 79 73 74 65 6d 45 66 36 41 73    "IsSystemEf6As
234f0 73 65 6d 62 6c 79 47 6c 6f 62 61 6c 22 2c 20 46  semblyGlobal", F
23500 6f 72 44 69 73 70 6c 61 79 28 0d 0a 20 20 20 20  orDisplay(..    
23510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23520 20 20 20 20 49 73 53 79 73 74 65 6d 45 66 36 41      IsSystemEf6A
23530 73 73 65 6d 62 6c 79 47 6c 6f 62 61 6c 28 29 29  ssemblyGlobal())
23540 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
23550 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
23560 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
23570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23580 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
23590 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
235a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
235b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
235c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
235d0 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
235e0 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ack(String.Forma
235f0 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f  t(NameAndValueFo
23600 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  rmat,..         
23610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
23620 49 73 4c 69 6e 71 53 75 70 70 6f 72 74 65 64 22  IsLinqSupported"
23630 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 49 73 4c  , ForDisplay(IsL
23640 69 6e 71 53 75 70 70 6f 72 74 65 64 28 29 29 29  inqSupported()))
23650 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
23660 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
23670 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
23680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23690 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28    traceCallback(
236a0 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61  String.Format(Na
236b0 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74  meAndValueFormat
236c0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
236d0 20 20 20 20 20 20 20 20 20 20 20 22 49 73 45 66             "IsEf
236e0 36 53 75 70 70 6f 72 74 65 64 22 2c 20 46 6f 72  6Supported", For
236f0 44 69 73 70 6c 61 79 28 49 73 45 66 36 53 75 70  Display(IsEf6Sup
23700 70 6f 72 74 65 64 28 29 29 29 2c 0d 0a 20 20 20  ported())),..   
23710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23720 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
23730 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
23740 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
23750 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23760 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23770 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23780 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
23790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
237a0 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72  raceCallback(Str
237b0 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41  ing.Format(NameA
237c0 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a  ndValueFormat,..
237d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
237e0 20 20 20 20 20 20 20 20 22 47 65 74 43 6f 72 65          "GetCore
237f0 41 73 73 65 6d 62 6c 79 4e 61 6d 65 22 2c 20 46  AssemblyName", F
23800 6f 72 44 69 73 70 6c 61 79 28 0d 0a 20 20 20 20  orDisplay(..    
23810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23820 20 20 20 20 47 65 74 43 6f 72 65 41 73 73 65 6d      GetCoreAssem
23830 62 6c 79 4e 61 6d 65 28 29 29 29 2c 20 74 72 61  blyName())), tra
23840 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
23850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23860 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
23870 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  k(String.Format(
23880 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d  NameAndValueForm
23890 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at,..           
238a0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 47 65               "Ge
238b0 74 4c 69 6e 71 41 73 73 65 6d 62 6c 79 4e 61 6d  tLinqAssemblyNam
238c0 65 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 0d  e", ForDisplay(.
238d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
238e0 20 20 20 20 20 20 20 20 20 47 65 74 4c 69 6e 71           GetLinq
238f0 41 73 73 65 6d 62 6c 79 4e 61 6d 65 28 29 29 29  AssemblyName()))
23900 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29  , traceCategory)
23910 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
23920 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
23930 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f  llback(String.Fo
23940 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75  rmat(NameAndValu
23950 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20  eFormat,..      
23960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23970 20 20 22 47 65 74 45 66 36 41 73 73 65 6d 62 6c    "GetEf6Assembl
23980 79 4e 61 6d 65 22 2c 20 46 6f 72 44 69 73 70 6c  yName", ForDispl
23990 61 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ay(..           
239a0 20 20 20 20 20 20 20 20 20 20 20 20 20 47 65 74               Get
239b0 45 66 36 41 73 73 65 6d 62 6c 79 4e 61 6d 65 28  Ef6AssemblyName(
239c0 29 29 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f  ))), traceCatego
239d0 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
239e0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
239f0 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67  eCallback(String
23a00 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56  .Format(NameAndV
23a10 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20  alueFormat,..   
23a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23a30 20 20 20 20 20 22 47 65 74 44 65 73 69 67 6e 65       "GetDesigne
23a40 72 41 73 73 65 6d 62 6c 79 4e 61 6d 65 22 2c 20  rAssemblyName", 
23a50 46 6f 72 44 69 73 70 6c 61 79 28 0d 0a 20 20 20  ForDisplay(..   
23a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23a70 20 20 20 20 20 47 65 74 44 65 73 69 67 6e 65 72       GetDesigner
23a80 41 73 73 65 6d 62 6c 79 4e 61 6d 65 28 29 29 29  AssemblyName()))
23a90 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29  , traceCategory)
23aa0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
23ab0 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
23ac0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23ad0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23ae0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23af0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
23b00 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
23b10 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67  eCallback(String
23b20 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56  .Format(NameAndV
23b30 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20  alueFormat,..   
23b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23b50 20 20 20 20 20 22 47 65 74 49 6e 76 61 72 69 61       "GetInvaria
23b60 6e 74 4e 61 6d 65 22 2c 20 46 6f 72 44 69 73 70  ntName", ForDisp
23b70 6c 61 79 28 47 65 74 49 6e 76 61 72 69 61 6e 74  lay(GetInvariant
23b80 4e 61 6d 65 28 29 29 29 2c 0d 0a 20 20 20 20 20  Name())),..     
23b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23ba0 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
23bb0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
23bc0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
23bd0 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46  allback(String.F
23be0 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c  ormat(NameAndVal
23bf0 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20  ueFormat,..     
23c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23c10 20 20 20 22 47 65 74 43 6f 6e 66 69 67 49 6e 76     "GetConfigInv
23c20 61 72 69 61 6e 74 4e 61 6d 65 22 2c 20 46 6f 72  ariantName", For
23c30 44 69 73 70 6c 61 79 28 0d 0a 20 20 20 20 20 20  Display(..      
23c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23c50 20 20 47 65 74 43 6f 6e 66 69 67 49 6e 76 61 72    GetConfigInvar
23c60 69 61 6e 74 4e 61 6d 65 28 29 29 29 2c 20 74 72  iantName())), tr
23c70 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
23c80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23c90 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
23ca0 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  ck(String.Format
23cb0 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72  (NameAndValueFor
23cc0 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  mat,..          
23cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 47                "G
23ce0 65 74 50 72 6f 76 69 64 65 72 49 6e 76 61 72 69  etProviderInvari
23cf0 61 6e 74 4e 61 6d 65 22 2c 20 46 6f 72 44 69 73  antName", ForDis
23d00 70 6c 61 79 28 0d 0a 20 20 20 20 20 20 20 20 20  play(..         
23d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 47                 G
23d20 65 74 50 72 6f 76 69 64 65 72 49 6e 76 61 72 69  etProviderInvari
23d30 61 6e 74 4e 61 6d 65 28 29 29 29 2c 20 74 72 61  antName())), tra
23d40 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
23d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23d60 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
23d70 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  k(String.Format(
23d80 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d  NameAndValueForm
23d90 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at,..           
23da0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 47 65               "Ge
23db0 74 46 61 63 74 6f 72 79 54 79 70 65 4e 61 6d 65  tFactoryTypeName
23dc0 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 0d 0a  ", ForDisplay(..
23dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23de0 20 20 20 20 20 20 20 20 47 65 74 46 61 63 74 6f          GetFacto
23df0 72 79 54 79 70 65 4e 61 6d 65 28 29 29 29 2c 20  ryTypeName())), 
23e00 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
23e10 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
23e20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
23e30 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d  back(String.Form
23e40 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46  at(NameAndValueF
23e50 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20  ormat,..        
23e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23e70 22 47 65 74 50 72 6f 76 69 64 65 72 41 73 73 65  "GetProviderAsse
23e80 6d 62 6c 79 4e 61 6d 65 22 2c 20 46 6f 72 44 69  mblyName", ForDi
23e90 73 70 6c 61 79 28 0d 0a 20 20 20 20 20 20 20 20  splay(..        
23ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23eb0 47 65 74 50 72 6f 76 69 64 65 72 41 73 73 65 6d  GetProviderAssem
23ec0 62 6c 79 4e 61 6d 65 28 29 29 29 2c 20 74 72 61  blyName())), tra
23ed0 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20  ceCategory);..  
23ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
23ef0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
23f00 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64              #end
23f10 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
23f20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
23f30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23f40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23f50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23f60 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
23f70 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e           #region
23f80 20 50 75 62 6c 69 63 20 50 72 6f 70 65 72 74 69   Public Properti
23f90 65 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  es..            
23fa0 70 72 69 76 61 74 65 20 41 73 73 65 6d 62 6c 79  private Assembly
23fb0 20 61 73 73 65 6d 62 6c 79 3b 0d 0a 20 20 20 20   assembly;..    
23fc0 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 41          public A
23fd0 73 73 65 6d 62 6c 79 20 41 73 73 65 6d 62 6c 79  ssembly Assembly
23fe0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
23ff0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
24000 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 61 73   get { return as
24010 73 65 6d 62 6c 79 3b 20 7d 0d 0a 20 20 20 20 20  sembly; }..     
24020 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
24030 20 61 73 73 65 6d 62 6c 79 20 3d 20 76 61 6c 75   assembly = valu
24040 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
24050 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
24060 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
24070 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24080 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24090 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
240a0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
240b0 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
240c0 72 69 6e 67 20 6c 6f 67 46 69 6c 65 4e 61 6d 65  ring logFileName
240d0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
240e0 75 62 6c 69 63 20 73 74 72 69 6e 67 20 4c 6f 67  ublic string Log
240f0 46 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20  FileName..      
24100 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
24110 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
24120 65 74 75 72 6e 20 6c 6f 67 46 69 6c 65 4e 61 6d  eturn logFileNam
24130 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
24140 20 20 20 20 20 20 73 65 74 20 7b 20 6c 6f 67 46        set { logF
24150 69 6c 65 4e 61 6d 65 20 3d 20 76 61 6c 75 65 3b  ileName = value;
24160 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
24170 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
24180 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
24190 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
241a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
241b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
241c0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
241d0 20 20 20 20 70 72 69 76 61 74 65 20 73 74 72 69      private stri
241e0 6e 67 20 64 69 72 65 63 74 6f 72 79 3b 0d 0a 20  ng directory;.. 
241f0 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
24200 63 20 73 74 72 69 6e 67 20 44 69 72 65 63 74 6f  c string Directo
24210 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ry..            
24220 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
24230 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
24240 64 69 72 65 63 74 6f 72 79 3b 20 7d 0d 0a 20 20  directory; }..  
24250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
24260 74 20 7b 20 64 69 72 65 63 74 6f 72 79 20 3d 20  t { directory = 
24270 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
24280 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
24290 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
242a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
242b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
242c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
242d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
242e0 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
242f0 65 20 73 74 72 69 6e 67 20 63 6f 72 65 46 69 6c  e string coreFil
24300 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20  eName;..        
24310 20 20 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e      public strin
24320 67 20 43 6f 72 65 46 69 6c 65 4e 61 6d 65 0d 0a  g CoreFileName..
24330 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
24340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
24350 65 74 20 7b 20 72 65 74 75 72 6e 20 63 6f 72 65  et { return core
24360 46 69 6c 65 4e 61 6d 65 3b 20 7d 0d 0a 20 20 20  FileName; }..   
24370 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
24380 20 7b 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65 20   { coreFileName 
24390 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
243a0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
243b0 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
243c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
243d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
243e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
243f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
24400 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
24410 61 74 65 20 73 74 72 69 6e 67 20 6c 69 6e 71 46  ate string linqF
24420 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20  ileName;..      
24430 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 72        public str
24440 69 6e 67 20 4c 69 6e 71 46 69 6c 65 4e 61 6d 65  ing LinqFileName
24450 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
24460 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
24470 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6c 69   get { return li
24480 6e 71 46 69 6c 65 4e 61 6d 65 3b 20 7d 0d 0a 20  nqFileName; }.. 
24490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
244a0 65 74 20 7b 20 6c 69 6e 71 46 69 6c 65 4e 61 6d  et { linqFileNam
244b0 65 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20  e = value; }..  
244c0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
244d0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
244e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
244f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24500 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24510 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
24520 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
24530 69 76 61 74 65 20 73 74 72 69 6e 67 20 65 66 36  ivate string ef6
24540 46 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20  FileName;..     
24550 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74         public st
24560 72 69 6e 67 20 45 66 36 46 69 6c 65 4e 61 6d 65  ring Ef6FileName
24570 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
24580 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
24590 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 65 66   get { return ef
245a0 36 46 69 6c 65 4e 61 6d 65 3b 20 7d 0d 0a 20 20  6FileName; }..  
245b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
245c0 74 20 7b 20 65 66 36 46 69 6c 65 4e 61 6d 65 20  t { ef6FileName 
245d0 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
245e0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
245f0 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
24600 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24610 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24620 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24630 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
24640 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
24650 61 74 65 20 73 74 72 69 6e 67 20 64 65 73 69 67  ate string desig
24660 6e 65 72 46 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20  nerFileName;..  
24670 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
24680 20 73 74 72 69 6e 67 20 44 65 73 69 67 6e 65 72   string Designer
24690 46 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20  FileName..      
246a0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
246b0 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
246c0 65 74 75 72 6e 20 64 65 73 69 67 6e 65 72 46 69  eturn designerFi
246d0 6c 65 4e 61 6d 65 3b 20 7d 0d 0a 20 20 20 20 20  leName; }..     
246e0 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
246f0 20 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d   designerFileNam
24700 65 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20  e = value; }..  
24710 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
24720 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
24730 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24740 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24750 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24760 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
24770 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
24780 69 76 61 74 65 20 73 74 72 69 6e 67 20 72 65 67  ivate string reg
24790 69 73 74 72 79 56 65 72 73 69 6f 6e 3b 0d 0a 20  istryVersion;.. 
247a0 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
247b0 63 20 73 74 72 69 6e 67 20 52 65 67 69 73 74 72  c string Registr
247c0 79 56 65 72 73 69 6f 6e 0d 0a 20 20 20 20 20 20  yVersion..      
247d0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
247e0 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
247f0 65 74 75 72 6e 20 72 65 67 69 73 74 72 79 56 65  eturn registryVe
24800 72 73 69 6f 6e 3b 20 7d 0d 0a 20 20 20 20 20 20  rsion; }..      
24810 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20            set { 
24820 72 65 67 69 73 74 72 79 56 65 72 73 69 6f 6e 20  registryVersion 
24830 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
24840 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
24850 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
24860 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24870 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24880 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24890 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
248a0 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
248b0 61 74 65 20 73 74 72 69 6e 67 20 63 6f 6e 66 69  ate string confi
248c0 67 56 65 72 73 69 6f 6e 3b 0d 0a 20 20 20 20 20  gVersion;..     
248d0 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74         public st
248e0 72 69 6e 67 20 43 6f 6e 66 69 67 56 65 72 73 69  ring ConfigVersi
248f0 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  on..            
24900 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
24910 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
24920 63 6f 6e 66 69 67 56 65 72 73 69 6f 6e 3b 20 7d  configVersion; }
24930 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
24940 20 20 73 65 74 20 7b 20 63 6f 6e 66 69 67 56 65    set { configVe
24950 72 73 69 6f 6e 20 3d 20 76 61 6c 75 65 3b 20 7d  rsion = value; }
24960 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
24970 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
24980 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24990 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
249a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
249b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
249c0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
249d0 20 20 70 72 69 76 61 74 65 20 73 74 72 69 6e 67    private string
249e0 20 76 73 56 65 72 73 69 6f 6e 53 75 66 66 69 78   vsVersionSuffix
249f0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
24a00 75 62 6c 69 63 20 73 74 72 69 6e 67 20 56 73 56  ublic string VsV
24a10 65 72 73 69 6f 6e 53 75 66 66 69 78 0d 0a 20 20  ersionSuffix..  
24a20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
24a30 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
24a40 20 7b 20 72 65 74 75 72 6e 20 76 73 56 65 72 73   { return vsVers
24a50 69 6f 6e 53 75 66 66 69 78 3b 20 7d 0d 0a 20 20  ionSuffix; }..  
24a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
24a70 74 20 7b 20 76 73 56 65 72 73 69 6f 6e 53 75 66  t { vsVersionSuf
24a80 66 69 78 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  fix = value; }..
24a90 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
24aa0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
24ab0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24ac0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24ad0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24ae0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24af0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
24b00 70 72 69 76 61 74 65 20 73 74 72 69 6e 67 20 64  private string d
24b10 65 62 75 67 46 6f 72 6d 61 74 3b 0d 0a 20 20 20  ebugFormat;..   
24b20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
24b30 73 74 72 69 6e 67 20 44 65 62 75 67 46 6f 72 6d  string DebugForm
24b40 61 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  at..            
24b50 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
24b60 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
24b70 64 65 62 75 67 46 6f 72 6d 61 74 3b 20 7d 0d 0a  debugFormat; }..
24b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24b90 73 65 74 20 7b 20 64 65 62 75 67 46 6f 72 6d 61  set { debugForma
24ba0 74 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20  t = value; }..  
24bb0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
24bc0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
24bd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24be0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24bf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24c00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
24c10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
24c20 69 76 61 74 65 20 73 74 72 69 6e 67 20 74 72 61  ivate string tra
24c30 63 65 46 6f 72 6d 61 74 3b 0d 0a 20 20 20 20 20  ceFormat;..     
24c40 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74         public st
24c50 72 69 6e 67 20 54 72 61 63 65 46 6f 72 6d 61 74  ring TraceFormat
24c60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
24c70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
24c80 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 74 72   get { return tr
24c90 61 63 65 46 6f 72 6d 61 74 3b 20 7d 0d 0a 20 20  aceFormat; }..  
24ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
24cb0 74 20 7b 20 74 72 61 63 65 46 6f 72 6d 61 74 20  t { traceFormat 
24cc0 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
24cd0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
24ce0 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
24cf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24d00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24d10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24d20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
24d30 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
24d40 61 74 65 20 49 6e 73 74 61 6c 6c 46 6c 61 67 73  ate InstallFlags
24d50 20 69 6e 73 74 61 6c 6c 46 6c 61 67 73 3b 0d 0a   installFlags;..
24d60 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
24d70 69 63 20 49 6e 73 74 61 6c 6c 46 6c 61 67 73 20  ic InstallFlags 
24d80 49 6e 73 74 61 6c 6c 46 6c 61 67 73 0d 0a 20 20  InstallFlags..  
24d90 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
24da0 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
24db0 20 7b 20 72 65 74 75 72 6e 20 69 6e 73 74 61 6c   { return instal
24dc0 6c 46 6c 61 67 73 3b 20 7d 0d 0a 20 20 20 20 20  lFlags; }..     
24dd0 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
24de0 20 69 6e 73 74 61 6c 6c 46 6c 61 67 73 20 3d 20   installFlags = 
24df0 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
24e00 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
24e10 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
24e20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24e30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24e40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24e50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
24e60 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
24e70 65 20 50 72 6f 76 69 64 65 72 46 6c 61 67 73 20  e ProviderFlags 
24e80 70 72 6f 76 69 64 65 72 46 6c 61 67 73 3b 0d 0a  providerFlags;..
24e90 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
24ea0 69 63 20 50 72 6f 76 69 64 65 72 46 6c 61 67 73  ic ProviderFlags
24eb0 20 50 72 6f 76 69 64 65 72 46 6c 61 67 73 0d 0a   ProviderFlags..
24ec0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
24ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
24ee0 65 74 20 7b 20 72 65 74 75 72 6e 20 70 72 6f 76  et { return prov
24ef0 69 64 65 72 46 6c 61 67 73 3b 20 7d 0d 0a 20 20  iderFlags; }..  
24f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
24f10 74 20 7b 20 70 72 6f 76 69 64 65 72 46 6c 61 67  t { providerFlag
24f20 73 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20  s = value; }..  
24f30 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
24f40 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
24f50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24f60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24f70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24f80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
24f90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
24fa0 69 76 61 74 65 20 54 72 61 63 65 50 72 69 6f 72  ivate TracePrior
24fb0 69 74 79 20 64 65 62 75 67 50 72 69 6f 72 69 74  ity debugPriorit
24fc0 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y;..            
24fd0 70 75 62 6c 69 63 20 54 72 61 63 65 50 72 69 6f  public TracePrio
24fe0 72 69 74 79 20 44 65 62 75 67 50 72 69 6f 72 69  rity DebugPriori
24ff0 74 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ty..            
25000 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
25010 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
25020 64 65 62 75 67 50 72 69 6f 72 69 74 79 3b 20 7d  debugPriority; }
25030 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
25040 20 20 73 65 74 20 7b 20 64 65 62 75 67 50 72 69    set { debugPri
25050 6f 72 69 74 79 20 3d 20 76 61 6c 75 65 3b 20 7d  ority = value; }
25060 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
25070 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
25080 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25090 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
250a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
250b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
250c0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
250d0 20 20 70 72 69 76 61 74 65 20 54 72 61 63 65 50    private TraceP
250e0 72 69 6f 72 69 74 79 20 74 72 61 63 65 50 72 69  riority tracePri
250f0 6f 72 69 74 79 3b 0d 0a 20 20 20 20 20 20 20 20  ority;..        
25100 20 20 20 20 70 75 62 6c 69 63 20 54 72 61 63 65      public Trace
25110 50 72 69 6f 72 69 74 79 20 54 72 61 63 65 50 72  Priority TracePr
25120 69 6f 72 69 74 79 0d 0a 20 20 20 20 20 20 20 20  iority..        
25130 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
25140 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
25150 75 72 6e 20 74 72 61 63 65 50 72 69 6f 72 69 74  urn tracePriorit
25160 79 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  y; }..          
25170 20 20 20 20 20 20 73 65 74 20 7b 20 74 72 61 63        set { trac
25180 65 50 72 69 6f 72 69 74 79 20 3d 20 76 61 6c 75  ePriority = valu
25190 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
251a0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
251b0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
251c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
251d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
251e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
251f0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
25200 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f        private bo
25210 6f 6c 20 70 65 72 55 73 65 72 3b 0d 0a 20 20 20  ol perUser;..   
25220 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
25230 62 6f 6f 6c 20 50 65 72 55 73 65 72 0d 0a 20 20  bool PerUser..  
25240 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
25250 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
25260 20 7b 20 72 65 74 75 72 6e 20 70 65 72 55 73 65   { return perUse
25270 72 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  r; }..          
25280 20 20 20 20 20 20 73 65 74 20 7b 20 70 65 72 55        set { perU
25290 73 65 72 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  ser = value; }..
252a0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
252b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
252c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
252d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
252e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
252f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25300 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
25310 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 69 6e 73  private bool ins
25320 74 61 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20  tall;..         
25330 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 49     public bool I
25340 6e 73 74 61 6c 6c 0d 0a 20 20 20 20 20 20 20 20  nstall..        
25350 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
25360 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
25370 75 72 6e 20 69 6e 73 74 61 6c 6c 3b 20 7d 0d 0a  urn install; }..
25380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25390 73 65 74 20 7b 20 69 6e 73 74 61 6c 6c 20 3d 20  set { install = 
253a0 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
253b0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
253c0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
253d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
253e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
253f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25400 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
25410 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
25420 65 20 62 6f 6f 6c 20 77 6f 77 36 34 3b 0d 0a 20  e bool wow64;.. 
25430 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
25440 63 20 62 6f 6f 6c 20 57 6f 77 36 34 0d 0a 20 20  c bool Wow64..  
25450 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
25460 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
25470 20 7b 20 72 65 74 75 72 6e 20 77 6f 77 36 34 3b   { return wow64;
25480 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
25490 20 20 20 20 73 65 74 20 7b 20 77 6f 77 36 34 20      set { wow64 
254a0 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
254b0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
254c0 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
254d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
254e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
254f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25500 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
25510 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
25520 61 74 65 20 62 6f 6f 6c 20 6e 6f 52 75 6e 74 69  ate bool noRunti
25530 6d 65 56 65 72 73 69 6f 6e 3b 0d 0a 20 20 20 20  meVersion;..    
25540 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62          public b
25550 6f 6f 6c 20 4e 6f 52 75 6e 74 69 6d 65 56 65 72  ool NoRuntimeVer
25560 73 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20 20  sion..          
25570 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
25580 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
25590 6e 20 6e 6f 52 75 6e 74 69 6d 65 56 65 72 73 69  n noRuntimeVersi
255a0 6f 6e 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  on; }..         
255b0 20 20 20 20 20 20 20 73 65 74 20 7b 20 6e 6f 52         set { noR
255c0 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 20 3d 20  untimeVersion = 
255d0 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
255e0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
255f0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
25600 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25610 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25620 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25630 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
25640 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
25650 65 20 62 6f 6f 6c 20 6e 6f 44 65 73 6b 74 6f 70  e bool noDesktop
25660 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
25670 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 44 65 73  ublic bool NoDes
25680 6b 74 6f 70 0d 0a 20 20 20 20 20 20 20 20 20 20  ktop..          
25690 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
256a0 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
256b0 6e 20 6e 6f 44 65 73 6b 74 6f 70 3b 20 7d 0d 0a  n noDesktop; }..
256c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
256d0 73 65 74 20 7b 20 6e 6f 44 65 73 6b 74 6f 70 20  set { noDesktop 
256e0 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
256f0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
25700 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
25710 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25720 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25730 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25740 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
25750 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
25760 61 74 65 20 62 6f 6f 6c 20 6e 6f 43 6f 6d 70 61  ate bool noCompa
25770 63 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ct;..           
25780 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 43   public bool NoC
25790 6f 6d 70 61 63 74 0d 0a 20 20 20 20 20 20 20 20  ompact..        
257a0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
257b0 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
257c0 75 72 6e 20 6e 6f 43 6f 6d 70 61 63 74 3b 20 7d  urn noCompact; }
257d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
257e0 20 20 73 65 74 20 7b 20 6e 6f 43 6f 6d 70 61 63    set { noCompac
257f0 74 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20  t = value; }..  
25800 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
25810 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
25820 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25830 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25840 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25850 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
25860 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
25870 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 4e 65 74  ivate bool noNet
25880 46 78 32 30 3b 0d 0a 20 20 20 20 20 20 20 20 20  Fx20;..         
25890 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e     public bool N
258a0 6f 4e 65 74 46 78 32 30 0d 0a 20 20 20 20 20 20  oNetFx20..      
258b0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
258c0 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
258d0 65 74 75 72 6e 20 6e 6f 4e 65 74 46 78 32 30 3b  eturn noNetFx20;
258e0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
258f0 20 20 20 20 73 65 74 20 7b 20 6e 6f 4e 65 74 46      set { noNetF
25900 78 32 30 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  x20 = value; }..
25910 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
25920 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
25930 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25940 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25950 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25960 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25970 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
25980 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 4e  private bool noN
25990 65 74 46 78 33 35 3b 0d 0a 20 20 20 20 20 20 20  etFx35;..       
259a0 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c       public bool
259b0 20 4e 6f 4e 65 74 46 78 33 35 0d 0a 20 20 20 20   NoNetFx35..    
259c0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
259d0 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
259e0 20 72 65 74 75 72 6e 20 6e 6f 4e 65 74 46 78 33   return noNetFx3
259f0 35 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  5; }..          
25a00 20 20 20 20 20 20 73 65 74 20 7b 20 6e 6f 4e 65        set { noNe
25a10 74 46 78 33 35 20 3d 20 76 61 6c 75 65 3b 20 7d  tFx35 = value; }
25a20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
25a30 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
25a40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25a50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25a60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25a70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25a80 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
25a90 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e    private bool n
25aa0 6f 4e 65 74 46 78 34 30 3b 0d 0a 20 20 20 20 20  oNetFx40;..     
25ab0 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f         public bo
25ac0 6f 6c 20 4e 6f 4e 65 74 46 78 34 30 0d 0a 20 20  ol NoNetFx40..  
25ad0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
25ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
25af0 20 7b 20 72 65 74 75 72 6e 20 6e 6f 4e 65 74 46   { return noNetF
25b00 78 34 30 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  x40; }..        
25b10 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 6e 6f          set { no
25b20 4e 65 74 46 78 34 30 20 3d 20 76 61 6c 75 65 3b  NetFx40 = value;
25b30 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
25b40 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
25b50 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
25b60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25b70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25b80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25b90 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
25ba0 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c      private bool
25bb0 20 6e 6f 4e 65 74 46 78 34 35 3b 0d 0a 20 20 20   noNetFx45;..   
25bc0 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
25bd0 62 6f 6f 6c 20 4e 6f 4e 65 74 46 78 34 35 0d 0a  bool NoNetFx45..
25be0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
25bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
25c00 65 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f 4e 65  et { return noNe
25c10 74 46 78 34 35 3b 20 7d 0d 0a 20 20 20 20 20 20  tFx45; }..      
25c20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20            set { 
25c30 6e 6f 4e 65 74 46 78 34 35 20 3d 20 76 61 6c 75  noNetFx45 = valu
25c40 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
25c50 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
25c60 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
25c70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25c80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25c90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25ca0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
25cb0 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f        private bo
25cc0 6f 6c 20 6e 6f 4e 65 74 46 78 34 35 31 3b 0d 0a  ol noNetFx451;..
25cd0 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
25ce0 69 63 20 62 6f 6f 6c 20 4e 6f 4e 65 74 46 78 34  ic bool NoNetFx4
25cf0 35 31 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  51..            
25d00 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
25d10 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
25d20 6e 6f 4e 65 74 46 78 34 35 31 3b 20 7d 0d 0a 20  noNetFx451; }.. 
25d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
25d40 65 74 20 7b 20 6e 6f 4e 65 74 46 78 34 35 31 20  et { noNetFx451 
25d50 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
25d60 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
25d70 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
25d80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25d90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25da0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25db0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
25dc0 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
25dd0 61 74 65 20 62 6f 6f 6c 20 6e 6f 56 73 32 30 30  ate bool noVs200
25de0 35 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  5;..            
25df0 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 56 73  public bool NoVs
25e00 32 30 30 35 0d 0a 20 20 20 20 20 20 20 20 20 20  2005..          
25e10 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
25e20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
25e30 6e 20 6e 6f 56 73 32 30 30 35 3b 20 7d 0d 0a 20  n noVs2005; }.. 
25e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
25e50 65 74 20 7b 20 6e 6f 56 73 32 30 30 35 20 3d 20  et { noVs2005 = 
25e60 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
25e70 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
25e80 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
25e90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25ea0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25eb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25ec0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
25ed0 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
25ee0 65 20 62 6f 6f 6c 20 6e 6f 56 73 32 30 30 38 3b  e bool noVs2008;
25ef0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
25f00 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 56 73 32 30  blic bool NoVs20
25f10 30 38 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  08..            
25f20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
25f30 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
25f40 6e 6f 56 73 32 30 30 38 3b 20 7d 0d 0a 20 20 20  noVs2008; }..   
25f50 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
25f60 20 7b 20 6e 6f 56 73 32 30 30 38 20 3d 20 76 61   { noVs2008 = va
25f70 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  lue; }..        
25f80 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
25f90 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
25fa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25fb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25fc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25fd0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
25fe0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
25ff0 62 6f 6f 6c 20 6e 6f 56 73 32 30 31 30 3b 0d 0a  bool noVs2010;..
26000 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
26010 69 63 20 62 6f 6f 6c 20 4e 6f 56 73 32 30 31 30  ic bool NoVs2010
26020 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
26030 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26040 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f   get { return no
26050 56 73 32 30 31 30 3b 20 7d 0d 0a 20 20 20 20 20  Vs2010; }..     
26060 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
26070 20 6e 6f 56 73 32 30 31 30 20 3d 20 76 61 6c 75   noVs2010 = valu
26080 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
26090 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
260a0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
260b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
260c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
260d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
260e0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
260f0 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f        private bo
26100 6f 6c 20 6e 6f 56 73 32 30 31 32 3b 0d 0a 20 20  ol noVs2012;..  
26110 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
26120 20 62 6f 6f 6c 20 4e 6f 56 73 32 30 31 32 0d 0a   bool NoVs2012..
26130 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
26140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
26150 65 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f 56 73  et { return noVs
26160 32 30 31 32 3b 20 7d 0d 0a 20 20 20 20 20 20 20  2012; }..       
26170 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 6e           set { n
26180 6f 56 73 32 30 31 32 20 3d 20 76 61 6c 75 65 3b  oVs2012 = value;
26190 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
261a0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
261b0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
261c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
261d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
261e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
261f0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
26200 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c      private bool
26210 20 6e 6f 56 73 32 30 31 33 3b 0d 0a 20 20 20 20   noVs2013;..    
26220 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62          public b
26230 6f 6f 6c 20 4e 6f 56 73 32 30 31 33 0d 0a 20 20  ool NoVs2013..  
26240 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
26250 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
26260 20 7b 20 72 65 74 75 72 6e 20 6e 6f 56 73 32 30   { return noVs20
26270 31 33 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  13; }..         
26280 20 20 20 20 20 20 20 73 65 74 20 7b 20 6e 6f 56         set { noV
26290 73 32 30 31 33 20 3d 20 76 61 6c 75 65 3b 20 7d  s2013 = value; }
262a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
262b0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
262c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
262d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
262e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
262f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26300 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
26310 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e    private bool n
26320 6f 54 72 61 63 65 3b 0d 0a 20 20 20 20 20 20 20  oTrace;..       
26330 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c       public bool
26340 20 4e 6f 54 72 61 63 65 0d 0a 20 20 20 20 20 20   NoTrace..      
26350 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
26360 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
26370 65 74 75 72 6e 20 6e 6f 54 72 61 63 65 3b 20 7d  eturn noTrace; }
26380 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
26390 20 20 73 65 74 20 7b 20 6e 6f 54 72 61 63 65 20    set { noTrace 
263a0 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
263b0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
263c0 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
263d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
263e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
263f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26400 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
26410 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
26420 61 74 65 20 62 6f 6f 6c 20 6e 6f 43 6f 6e 73 6f  ate bool noConso
26430 6c 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  le;..           
26440 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 43   public bool NoC
26450 6f 6e 73 6f 6c 65 0d 0a 20 20 20 20 20 20 20 20  onsole..        
26460 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
26470 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
26480 75 72 6e 20 6e 6f 43 6f 6e 73 6f 6c 65 3b 20 7d  urn noConsole; }
26490 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
264a0 20 20 73 65 74 20 7b 20 6e 6f 43 6f 6e 73 6f 6c    set { noConsol
264b0 65 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20  e = value; }..  
264c0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
264d0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
264e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
264f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26500 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26510 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
26520 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
26530 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 4c 6f 67  ivate bool noLog
26540 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
26550 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 4c 6f 67  ublic bool NoLog
26560 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
26570 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26580 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f   get { return no
26590 4c 6f 67 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  Log; }..        
265a0 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 6e 6f          set { no
265b0 4c 6f 67 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  Log = value; }..
265c0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
265d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
265e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
265f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26600 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26610 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26620 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
26630 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 74 68 72  private bool thr
26640 6f 77 4f 6e 4d 69 73 73 69 6e 67 3b 0d 0a 20 20  owOnMissing;..  
26650 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
26660 20 62 6f 6f 6c 20 54 68 72 6f 77 4f 6e 4d 69 73   bool ThrowOnMis
26670 73 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 20 20  sing..          
26680 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
26690 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
266a0 6e 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67  n throwOnMissing
266b0 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
266c0 20 20 20 20 20 73 65 74 20 7b 20 74 68 72 6f 77       set { throw
266d0 4f 6e 4d 69 73 73 69 6e 67 20 3d 20 76 61 6c 75  OnMissing = valu
266e0 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
266f0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
26700 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
26710 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26720 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26730 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26740 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
26750 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f        private bo
26760 6f 6c 20 77 68 61 74 49 66 3b 0d 0a 20 20 20 20  ol whatIf;..    
26770 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62          public b
26780 6f 6f 6c 20 57 68 61 74 49 66 0d 0a 20 20 20 20  ool WhatIf..    
26790 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
267a0 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
267b0 20 72 65 74 75 72 6e 20 77 68 61 74 49 66 3b 20   return whatIf; 
267c0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
267d0 20 20 20 73 65 74 20 7b 20 77 68 61 74 49 66 20     set { whatIf 
267e0 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
267f0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
26800 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
26810 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26820 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26830 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26840 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
26850 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
26860 61 74 65 20 62 6f 6f 6c 20 64 65 62 75 67 3b 0d  ate bool debug;.
26870 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
26880 6c 69 63 20 62 6f 6f 6c 20 44 65 62 75 67 0d 0a  lic bool Debug..
26890 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
268a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
268b0 65 74 20 7b 20 72 65 74 75 72 6e 20 64 65 62 75  et { return debu
268c0 67 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  g; }..          
268d0 20 20 20 20 20 20 73 65 74 20 7b 20 64 65 62 75        set { debu
268e0 67 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20  g = value; }..  
268f0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
26900 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
26910 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26920 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26930 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26940 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
26950 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
26960 69 76 61 74 65 20 62 6f 6f 6c 20 76 65 72 62 6f  ivate bool verbo
26970 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
26980 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 56 65 72   public bool Ver
26990 62 6f 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  bose..          
269a0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
269b0 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
269c0 6e 20 76 65 72 62 6f 73 65 3b 20 7d 0d 0a 20 20  n verbose; }..  
269d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
269e0 74 20 7b 20 76 65 72 62 6f 73 65 20 3d 20 76 61  t { verbose = va
269f0 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  lue; }..        
26a00 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
26a10 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
26a20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26a30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26a40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26a50 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
26a60 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
26a70 62 6f 6f 6c 20 63 6f 6e 66 69 72 6d 3b 0d 0a 20  bool confirm;.. 
26a80 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
26a90 63 20 62 6f 6f 6c 20 43 6f 6e 66 69 72 6d 0d 0a  c bool Confirm..
26aa0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
26ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
26ac0 65 74 20 7b 20 72 65 74 75 72 6e 20 63 6f 6e 66  et { return conf
26ad0 69 72 6d 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  irm; }..        
26ae0 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 63 6f          set { co
26af0 6e 66 69 72 6d 20 3d 20 76 61 6c 75 65 3b 20 7d  nfirm = value; }
26b00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
26b10 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e  .            #en
26b20 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20 20 20 20  dregion..       
26b30 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64   }..        #end
26b40 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
26b50 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
26b60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26b70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26b80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26b90 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
26ba0 20 20 20 20 20 23 72 65 67 69 6f 6e 20 46 72 61       #region Fra
26bb0 6d 65 77 6f 72 6b 4c 69 73 74 20 43 6c 61 73 73  meworkList Class
26bc0 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
26bd0 65 20 73 65 61 6c 65 64 20 63 6c 61 73 73 20 46  e sealed class F
26be0 72 61 6d 65 77 6f 72 6b 4c 69 73 74 0d 0a 20 20  rameworkList..  
26bf0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
26c00 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62       #region Pub
26c10 6c 69 63 20 43 6f 6e 73 74 72 75 63 74 6f 72 73  lic Constructors
26c20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
26c30 62 6c 69 63 20 46 72 61 6d 65 77 6f 72 6b 4c 69  blic FrameworkLi
26c40 73 74 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20  st()..          
26c50 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
26c60 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69       // do nothi
26c70 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ng...           
26c80 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
26c90 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
26ca0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
26cb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26cc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26cd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26ce0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
26cf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65  .            #re
26d00 67 69 6f 6e 20 50 75 62 6c 69 63 20 4d 65 74 68  gion Public Meth
26d10 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ods..           
26d20 20 70 72 69 76 61 74 65 20 4d 6f 63 6b 52 65 67   private MockReg
26d30 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79  istryKey rootKey
26d40 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
26d50 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73 74  ublic MockRegist
26d60 72 79 4b 65 79 20 52 6f 6f 74 4b 65 79 0d 0a 20  ryKey RootKey.. 
26d70 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
26d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
26d90 74 20 7b 20 72 65 74 75 72 6e 20 72 6f 6f 74 4b  t { return rootK
26da0 65 79 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ey; }..         
26db0 20 20 20 20 20 20 20 73 65 74 20 7b 20 72 6f 6f         set { roo
26dc0 74 4b 65 79 20 3d 20 76 61 6c 75 65 3b 20 7d 0d  tKey = value; }.
26dd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
26de0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
26df0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26e00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26e10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26e20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26e30 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
26e40 20 70 72 69 76 61 74 65 20 53 74 72 69 6e 67 4c   private StringL
26e50 69 73 74 20 6e 61 6d 65 73 3b 0d 0a 20 20 20 20  ist names;..    
26e60 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 53          public S
26e70 74 72 69 6e 67 4c 69 73 74 20 4e 61 6d 65 73 0d  tringList Names.
26e80 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
26e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26ea0 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6e 61 6d  get { return nam
26eb0 65 73 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  es; }..         
26ec0 20 20 20 20 20 20 20 73 65 74 20 7b 20 6e 61 6d         set { nam
26ed0 65 73 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20  es = value; }.. 
26ee0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
26ef0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
26f00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26f10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26f20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26f30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
26f40 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
26f50 72 69 76 61 74 65 20 56 65 72 73 69 6f 6e 4d 61  rivate VersionMa
26f60 70 20 76 65 72 73 69 6f 6e 73 3b 0d 0a 20 20 20  p versions;..   
26f70 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
26f80 56 65 72 73 69 6f 6e 4d 61 70 20 56 65 72 73 69  VersionMap Versi
26f90 6f 6e 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ons..           
26fa0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
26fb0 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
26fc0 20 76 65 72 73 69 6f 6e 73 3b 20 7d 0d 0a 20 20   versions; }..  
26fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
26fe0 74 20 7b 20 76 65 72 73 69 6f 6e 73 20 3d 20 76  t { versions = v
26ff0 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  alue; }..       
27000 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
27010 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
27020 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27030 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27040 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27050 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
27060 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
27070 20 53 74 72 69 6e 67 4c 69 73 74 20 70 6c 61 74   StringList plat
27080 66 6f 72 6d 4e 61 6d 65 73 3b 0d 0a 20 20 20 20  formNames;..    
27090 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 53          public S
270a0 74 72 69 6e 67 4c 69 73 74 20 50 6c 61 74 66 6f  tringList Platfo
270b0 72 6d 4e 61 6d 65 73 0d 0a 20 20 20 20 20 20 20  rmNames..       
270c0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
270d0 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65          get { re
270e0 74 75 72 6e 20 70 6c 61 74 66 6f 72 6d 4e 61 6d  turn platformNam
270f0 65 73 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  es; }..         
27100 20 20 20 20 20 20 20 73 65 74 20 7b 20 70 6c 61         set { pla
27110 74 66 6f 72 6d 4e 61 6d 65 73 20 3d 20 76 61 6c  tformNames = val
27120 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ue; }..         
27130 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
27140 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20    #endregion..  
27150 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
27160 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
27170 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
27180 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27190 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
271a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
271b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
271c0 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
271d0 6e 20 56 73 4c 69 73 74 20 43 6c 61 73 73 0d 0a  n VsList Class..
271e0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
271f0 73 65 61 6c 65 64 20 63 6c 61 73 73 20 56 73 4c  sealed class VsL
27200 69 73 74 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  ist..        {..
27210 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67              #reg
27220 69 6f 6e 20 50 75 62 6c 69 63 20 43 6f 6e 73 74  ion Public Const
27230 72 75 63 74 6f 72 73 0d 0a 20 20 20 20 20 20 20  ructors..       
27240 20 20 20 20 20 70 75 62 6c 69 63 20 56 73 4c 69       public VsLi
27250 73 74 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20  st()..          
27260 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
27270 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69       // do nothi
27280 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ng...           
27290 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
272a0 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
272b0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
272c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
272d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
272e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
272f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
27300 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65  .            #re
27310 67 69 6f 6e 20 50 75 62 6c 69 63 20 50 72 6f 70  gion Public Prop
27320 65 72 74 69 65 73 0d 0a 20 20 20 20 20 20 20 20  erties..        
27330 20 20 20 20 70 72 69 76 61 74 65 20 4d 6f 63 6b      private Mock
27340 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74  RegistryKey root
27350 4b 65 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  Key;..          
27360 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67    public MockReg
27370 69 73 74 72 79 4b 65 79 20 52 6f 6f 74 4b 65 79  istryKey RootKey
27380 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
27390 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
273a0 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 72 6f   get { return ro
273b0 6f 74 4b 65 79 3b 20 7d 0d 0a 20 20 20 20 20 20  otKey; }..      
273c0 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20            set { 
273d0 72 6f 6f 74 4b 65 79 20 3d 20 76 61 6c 75 65 3b  rootKey = value;
273e0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
273f0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
27400 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
27410 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27420 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27430 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27440 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
27450 20 20 20 20 70 72 69 76 61 74 65 20 56 65 72 73      private Vers
27460 69 6f 6e 4c 69 73 74 20 76 65 72 73 69 6f 6e 73  ionList versions
27470 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
27480 75 62 6c 69 63 20 56 65 72 73 69 6f 6e 4c 69 73  ublic VersionLis
27490 74 20 56 65 72 73 69 6f 6e 73 0d 0a 20 20 20 20  t Versions..    
274a0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
274b0 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
274c0 20 72 65 74 75 72 6e 20 76 65 72 73 69 6f 6e 73   return versions
274d0 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
274e0 20 20 20 20 20 73 65 74 20 7b 20 76 65 72 73 69       set { versi
274f0 6f 6e 73 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  ons = value; }..
27500 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
27510 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72             #endr
27520 65 67 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 7d  egion..        }
27530 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
27540 67 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 23 65  gion..        #e
27550 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
27560 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
27570 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27580 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27590 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
275a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
275b0 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50         #region P
275c0 72 69 76 61 74 65 20 43 6f 6e 73 74 61 6e 74 20  rivate Constant 
275d0 44 61 74 61 0d 0a 20 20 20 20 20 20 20 20 23 72  Data..        #r
275e0 65 67 69 6f 6e 20 50 61 63 6b 61 67 65 20 26 20  egion Package & 
275f0 50 72 6f 76 69 64 65 72 20 4e 61 6d 65 73 0d 0a  Provider Names..
27600 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
27610 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 43 6f 72  const string Cor
27620 65 46 69 6c 65 4e 61 6d 65 20 3d 20 22 53 79 73  eFileName = "Sys
27630 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e  tem.Data.SQLite.
27640 64 6c 6c 22 3b 0d 0a 20 20 20 20 20 20 20 20 70  dll";..        p
27650 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72  rivate const str
27660 69 6e 67 20 4c 69 6e 71 46 69 6c 65 4e 61 6d 65  ing LinqFileName
27670 20 3d 20 22 53 79 73 74 65 6d 2e 44 61 74 61 2e   = "System.Data.
27680 53 51 4c 69 74 65 2e 4c 69 6e 71 2e 64 6c 6c 22  SQLite.Linq.dll"
27690 3b 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  ;..        priva
276a0 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20  te const string 
276b0 45 66 36 46 69 6c 65 4e 61 6d 65 20 3d 20 22 53  Ef6FileName = "S
276c0 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
276d0 65 2e 45 46 36 2e 64 6c 6c 22 3b 0d 0a 20 20 20  e.EF6.dll";..   
276e0 20 20 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e       private con
276f0 73 74 20 73 74 72 69 6e 67 20 44 65 73 69 67 6e  st string Design
27700 65 72 46 69 6c 65 4e 61 6d 65 20 3d 20 22 53 51  erFileName = "SQ
27710 4c 69 74 65 2e 44 65 73 69 67 6e 65 72 2e 64 6c  Lite.Designer.dl
27720 6c 22 3b 0d 0a 20 20 20 20 20 20 20 20 70 72 69  l";..        pri
27730 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e  vate const strin
27740 67 20 50 72 6f 76 69 64 65 72 4e 61 6d 65 20 3d  g ProviderName =
27750 20 22 53 51 4c 69 74 65 20 44 61 74 61 20 50 72   "SQLite Data Pr
27760 6f 76 69 64 65 72 22 3b 0d 0a 20 20 20 20 20 20  ovider";..      
27770 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20    private const 
27780 73 74 72 69 6e 67 20 50 72 6f 6a 65 63 74 4e 61  string ProjectNa
27790 6d 65 20 3d 20 22 53 79 73 74 65 6d 2e 44 61 74  me = "System.Dat
277a0 61 2e 53 51 4c 69 74 65 22 3b 0d 0a 20 20 20 20  a.SQLite";..    
277b0 20 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73      private cons
277c0 74 20 73 74 72 69 6e 67 20 4c 65 67 61 63 79 50  t string LegacyP
277d0 72 6f 6a 65 63 74 4e 61 6d 65 20 3d 20 22 53 51  rojectName = "SQ
277e0 4c 69 74 65 22 3b 0d 0a 0d 0a 20 20 20 20 20 20  Lite";....      
277f0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
27800 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27810 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27820 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27830 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
27840 20 20 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e       private con
27850 73 74 20 73 74 72 69 6e 67 20 44 65 73 63 72 69  st string Descri
27860 70 74 69 6f 6e 20 3d 0d 0a 20 20 20 20 20 20 20  ption =..       
27870 20 20 20 20 20 22 2e 4e 45 54 20 46 72 61 6d 65       ".NET Frame
27880 77 6f 72 6b 20 44 61 74 61 20 50 72 6f 76 69 64  work Data Provid
27890 65 72 20 66 6f 72 20 53 51 4c 69 74 65 22 3b 0d  er for SQLite";.
278a0 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67  .        #endreg
278b0 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ion....        /
278c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
278d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
278e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
278f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27900 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
27910 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20    private const 
27920 73 74 72 69 6e 67 20 43 4c 52 76 32 49 6d 61 67  string CLRv2Imag
27930 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 20  eRuntimeVersion 
27940 3d 20 22 76 32 2e 30 2e 35 30 37 32 37 22 3b 0d  = "v2.0.50727";.
27950 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
27960 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 43 4c   const string CL
27970 52 76 34 49 6d 61 67 65 52 75 6e 74 69 6d 65 56  Rv4ImageRuntimeV
27980 65 72 73 69 6f 6e 20 3d 20 22 76 34 2e 30 2e 33  ersion = "v4.0.3
27990 30 33 31 39 22 3b 0d 0a 0d 0a 20 20 20 20 20 20  0319";....      
279a0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
279b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
279c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
279d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
279e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
279f0 20 20 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e       private con
27a00 73 74 20 73 74 72 69 6e 67 20 53 79 73 74 65 6d  st string System
27a10 45 66 36 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20  Ef6AssemblyName 
27a20 3d 20 22 45 6e 74 69 74 79 46 72 61 6d 65 77 6f  = "EntityFramewo
27a30 72 6b 2c 20 22 20 2b 0d 0a 20 20 20 20 20 20 20  rk, " +..       
27a40 20 20 20 20 20 22 56 65 72 73 69 6f 6e 3d 36 2e       "Version=6.
27a50 30 2e 30 2e 30 2c 20 43 75 6c 74 75 72 65 3d 6e  0.0.0, Culture=n
27a60 65 75 74 72 61 6c 2c 20 50 75 62 6c 69 63 4b 65  eutral, PublicKe
27a70 79 54 6f 6b 65 6e 3d 62 37 37 61 35 63 35 36 31  yToken=b77a5c561
27a80 39 33 34 65 30 38 39 22 3b 0d 0a 0d 0a 20 20 20  934e089";....   
27a90 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
27aa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27ab0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27ac0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27ad0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
27ae0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
27af0 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 4e 61 6d  const string Nam
27b00 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 20  eAndValueFormat 
27b10 3d 20 22 7b 30 7d 3a 20 7b 31 7d 22 3b 0d 0a 20  = "{0}: {1}";.. 
27b20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 63         private c
27b30 6f 6e 73 74 20 73 74 72 69 6e 67 20 4c 6f 67 46  onst string LogF
27b40 69 6c 65 53 75 66 66 69 78 20 3d 20 22 2e 6c 6f  ileSuffix = ".lo
27b50 67 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  g";....        /
27b60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27b70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27b80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27b90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27ba0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
27bb0 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20    private const 
27bc0 73 74 72 69 6e 67 20 56 73 44 65 76 45 6e 76 53  string VsDevEnvS
27bd0 65 74 75 70 46 6f 72 6d 61 74 20 3d 20 22 7b 30  etupFormat = "{0
27be0 7d 3a 20 7b 31 7d 22 3b 0d 0a 0d 0a 20 20 20 20  }: {1}";....    
27bf0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
27c00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27c10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27c20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27c30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
27c40 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 63         private c
27c50 6f 6e 73 74 20 73 74 72 69 6e 67 20 52 6f 6f 74  onst string Root
27c60 4b 65 79 4e 61 6d 65 20 3d 20 22 53 6f 66 74 77  KeyName = "Softw
27c70 61 72 65 22 3b 0d 0a 20 20 20 20 20 20 20 20 70  are";..        p
27c80 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72  rivate const str
27c90 69 6e 67 20 57 6f 77 36 34 53 75 62 4b 65 79 4e  ing Wow64SubKeyN
27ca0 61 6d 65 20 3d 20 22 57 6f 77 36 34 33 32 4e 6f  ame = "Wow6432No
27cb0 64 65 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  de";....        
27cc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27cd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27ce0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27cf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27d00 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
27d10 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 2f     //..        /
27d20 2f 20 4e 4f 54 45 3a 20 54 68 65 20 2e 4e 45 54  / NOTE: The .NET
27d30 20 46 72 61 6d 65 77 6f 72 6b 20 68 61 73 20 62   Framework has b
27d40 6f 74 68 20 33 32 2d 62 69 74 20 61 6e 64 20 36  oth 32-bit and 6
27d50 34 2d 62 69 74 20 65 64 69 74 69 6f 6e 73 2e 0d  4-bit editions..
27d60 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20  .        //..   
27d70 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
27d80 74 69 63 20 72 65 61 64 6f 6e 6c 79 20 62 6f 6f  tic readonly boo
27d90 6c 20 4e 65 74 46 78 49 73 33 32 42 69 74 4f 6e  l NetFxIs32BitOn
27da0 6c 79 20 3d 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20  ly = false;.... 
27db0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
27dc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27dd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27de0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27df0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
27e00 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20  ..        //..  
27e10 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 46        // NOTE: F
27e20 6f 72 20 6e 6f 77 2c 20 56 69 73 75 61 6c 20 53  or now, Visual S
27e30 74 75 64 69 6f 20 69 73 20 61 6c 77 61 79 73 20  tudio is always 
27e40 61 20 33 32 2d 62 69 74 20 61 70 70 6c 69 63 61  a 32-bit applica
27e50 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f  tion...        /
27e60 2f 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  /..        priva
27e70 74 65 20 73 74 61 74 69 63 20 72 65 61 64 6f 6e  te static readon
27e80 6c 79 20 62 6f 6f 6c 20 56 73 49 73 33 32 42 69  ly bool VsIs32Bi
27e90 74 4f 6e 6c 79 20 3d 20 74 72 75 65 3b 0d 0a 0d  tOnly = true;...
27ea0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
27eb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27ec0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27ed0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27ee0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27ef0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ....        priv
27f00 61 74 65 20 73 74 61 74 69 63 20 72 65 61 64 6f  ate static reado
27f10 6e 6c 79 20 73 74 72 69 6e 67 20 56 73 49 64 46  nly string VsIdF
27f20 6f 72 6d 61 74 20 3d 20 22 42 22 3b 0d 0a 0d 0a  ormat = "B";....
27f30 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
27f40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27f50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27f60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27f70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
27f80 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  ...        priva
27f90 74 65 20 73 74 61 74 69 63 20 72 65 61 64 6f 6e  te static readon
27fa0 6c 79 20 73 74 72 69 6e 67 20 58 50 61 74 68 46  ly string XPathF
27fb0 6f 72 41 64 64 45 6c 65 6d 65 6e 74 20 3d 0d 0a  orAddElement =..
27fc0 20 20 20 20 20 20 20 20 20 20 20 20 22 63 6f 6e              "con
27fd0 66 69 67 75 72 61 74 69 6f 6e 2f 73 79 73 74 65  figuration/syste
27fe0 6d 2e 64 61 74 61 2f 44 62 50 72 6f 76 69 64 65  m.data/DbProvide
27ff0 72 46 61 63 74 6f 72 69 65 73 2f 61 64 64 5b 40  rFactories/add[@
28000 69 6e 76 61 72 69 61 6e 74 3d 5c 22 7b 30 7d 5c  invariant=\"{0}\
28010 22 5d 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  "]";....        
28020 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 72  private static r
28030 65 61 64 6f 6e 6c 79 20 73 74 72 69 6e 67 20 58  eadonly string X
28040 50 61 74 68 46 6f 72 52 65 6d 6f 76 65 45 6c 65  PathForRemoveEle
28050 6d 65 6e 74 20 3d 0d 0a 20 20 20 20 20 20 20 20  ment =..        
28060 20 20 20 20 22 63 6f 6e 66 69 67 75 72 61 74 69      "configurati
28070 6f 6e 2f 73 79 73 74 65 6d 2e 64 61 74 61 2f 44  on/system.data/D
28080 62 50 72 6f 76 69 64 65 72 46 61 63 74 6f 72 69  bProviderFactori
28090 65 73 2f 72 65 6d 6f 76 65 5b 40 69 6e 76 61 72  es/remove[@invar
280a0 69 61 6e 74 3d 5c 22 7b 30 7d 5c 22 5d 22 3b 0d  iant=\"{0}\"]";.
280b0 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67  .        #endreg
280c0 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ion....        /
280d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
280e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
280f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28100 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28110 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
28120 20 20 23 72 65 67 69 6f 6e 20 50 72 69 76 61 74    #region Privat
28130 65 20 53 74 61 74 69 63 20 44 61 74 61 0d 0a 20  e Static Data.. 
28140 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 44         #region D
28150 69 61 67 6e 6f 73 74 69 63 73 20 26 20 4c 6f 67  iagnostics & Log
28160 67 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ging..        //
28170 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54  ..        // NOT
28180 45 3a 20 43 61 63 68 65 20 74 68 65 20 63 75 72  E: Cache the cur
28190 72 65 6e 74 20 70 72 6f 63 65 73 73 20 61 6e 64  rent process and
281a0 20 61 73 73 65 6d 62 6c 79 20 61 73 20 74 68 65   assembly as the
281b0 79 20 64 6f 20 6e 6f 74 20 63 68 61 6e 67 65 0d  y do not change.
281c0 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20  .        //     
281d0 20 20 61 6e 64 20 6d 61 79 20 62 65 20 6e 65 65    and may be nee
281e0 64 65 64 20 69 6e 20 71 75 69 74 65 20 61 20 66  ded in quite a f
281f0 65 77 20 64 69 66 66 65 72 65 6e 74 20 70 6c 61  ew different pla
28200 63 65 73 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ces...        //
28210 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
28220 65 20 73 74 61 74 69 63 20 50 72 6f 63 65 73 73  e static Process
28230 20 74 68 69 73 50 72 6f 63 65 73 73 20 3d 20 50   thisProcess = P
28240 72 6f 63 65 73 73 2e 47 65 74 43 75 72 72 65 6e  rocess.GetCurren
28250 74 50 72 6f 63 65 73 73 28 29 3b 0d 0a 20 20 20  tProcess();..   
28260 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
28270 74 69 63 20 41 73 73 65 6d 62 6c 79 20 74 68 69  tic Assembly thi
28280 73 41 73 73 65 6d 62 6c 79 20 3d 20 41 73 73 65  sAssembly = Asse
28290 6d 62 6c 79 2e 47 65 74 45 78 65 63 75 74 69 6e  mbly.GetExecutin
282a0 67 41 73 73 65 6d 62 6c 79 28 29 3b 0d 0a 0d 0a  gAssembly();....
282b0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
282c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
282d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
282e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
282f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
28300 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20  ...        //.. 
28310 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
28320 54 68 65 20 74 72 61 63 65 20 63 61 74 65 67 6f  The trace catego
28330 72 79 20 69 73 20 74 68 65 20 73 61 6d 65 20 66  ry is the same f
28340 6f 72 20 62 6f 74 68 20 74 68 65 20 64 65 62 75  or both the debu
28350 67 20 61 6e 64 20 74 72 61 63 65 0d 0a 20 20 20  g and trace..   
28360 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 63 61       //       ca
28370 6c 6c 62 61 63 6b 73 2e 0d 0a 20 20 20 20 20 20  llbacks...      
28380 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 70 72    //..        pr
28390 69 76 61 74 65 20 73 74 61 74 69 63 20 73 74 72  ivate static str
283a0 69 6e 67 20 74 72 61 63 65 43 61 74 65 67 6f 72  ing traceCategor
283b0 79 20 3d 20 50 61 74 68 2e 47 65 74 46 69 6c 65  y = Path.GetFile
283c0 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 20  Name(..         
283d0 20 20 20 28 74 68 69 73 41 73 73 65 6d 62 6c 79     (thisAssembly
283e0 20 21 3d 20 6e 75 6c 6c 29 20 3f 20 74 68 69 73   != null) ? this
283f0 41 73 73 65 6d 62 6c 79 2e 4c 6f 63 61 74 69 6f  Assembly.Locatio
28400 6e 20 3a 20 6e 75 6c 6c 29 3b 0d 0a 0d 0a 20 20  n : null);....  
28410 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
28420 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28430 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28440 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28450 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
28460 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20  .        //..   
28470 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 53 65       // NOTE: Se
28480 74 20 74 68 65 20 64 65 62 75 67 20 61 6e 64 20  t the debug and 
28490 74 72 61 63 65 20 6c 6f 67 67 69 6e 67 20 63 61  trace logging ca
284a0 6c 6c 62 61 63 6b 73 20 75 73 65 64 20 62 79 20  llbacks used by 
284b0 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20  the..        // 
284c0 20 20 20 20 20 20 61 70 70 6c 69 63 61 74 69 6f        applicatio
284d0 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a  n...        //..
284e0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
284f0 73 74 61 74 69 63 20 54 72 61 63 65 43 61 6c 6c  static TraceCall
28500 62 61 63 6b 20 64 65 62 75 67 43 61 6c 6c 62 61  back debugCallba
28510 63 6b 20 3d 20 41 70 70 44 65 62 75 67 3b 0d 0a  ck = AppDebug;..
28520 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
28530 73 74 61 74 69 63 20 54 72 61 63 65 43 61 6c 6c  static TraceCall
28540 62 61 63 6b 20 74 72 61 63 65 43 61 6c 6c 62 61  back traceCallba
28550 63 6b 20 3d 20 41 70 70 54 72 61 63 65 3b 0d 0a  ck = AppTrace;..
28560 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
28570 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  on....        //
28580 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28590 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
285a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
285b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
285c0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
285d0 20 23 72 65 67 69 6f 6e 20 53 79 73 74 65 6d 20   #region System 
285e0 44 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 20  Directory..     
285f0 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
28600 63 20 73 74 72 69 6e 67 20 73 79 73 74 65 6d 44  c string systemD
28610 69 72 65 63 74 6f 72 79 20 3d 20 6e 75 6c 6c 3b  irectory = null;
28620 0d 0a 0d 0a 23 69 66 20 57 49 4e 44 4f 57 53 0d  ....#if WINDOWS.
28630 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
28640 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 73   static string s
28650 79 73 74 65 6d 44 69 72 65 63 74 6f 72 79 57 6f  ystemDirectoryWo
28660 77 36 34 20 3d 20 6e 75 6c 6c 3b 0d 0a 23 65 6e  w64 = null;..#en
28670 64 69 66 0d 0a 20 20 20 20 20 20 20 20 23 65 6e  dif..        #en
28680 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
28690 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
286a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
286b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
286c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
286d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
286e0 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 52 65        #region Re
286f0 67 69 73 74 72 79 20 53 74 61 74 69 73 74 69 63  gistry Statistic
28700 73 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  s..        priva
28710 74 65 20 73 74 61 74 69 63 20 69 6e 74 20 66 69  te static int fi
28720 6c 65 73 43 72 65 61 74 65 64 20 3d 20 30 3b 0d  lesCreated = 0;.
28730 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
28740 20 73 74 61 74 69 63 20 69 6e 74 20 66 69 6c 65   static int file
28750 73 4d 6f 64 69 66 69 65 64 20 3d 20 30 3b 0d 0a  sModified = 0;..
28760 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
28770 73 74 61 74 69 63 20 69 6e 74 20 66 69 6c 65 73  static int files
28780 44 65 6c 65 74 65 64 20 3d 20 30 3b 0d 0a 20 20  Deleted = 0;..  
28790 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
287a0 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
287b0 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
287c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
287d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
287e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
287f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28800 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
28810 20 20 20 23 72 65 67 69 6f 6e 20 54 72 61 63 65     #region Trace
28820 20 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20   Handling..     
28830 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
28840 63 20 73 74 72 69 6e 67 20 47 65 74 4c 6f 67 46  c string GetLogF
28850 69 6c 65 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20  ileName(..      
28860 20 20 20 20 20 20 73 74 72 69 6e 67 20 74 79 70        string typ
28870 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20  eName..         
28880 20 20 20 29 20 2f 2a 20 74 68 72 6f 77 20 2a 2f     ) /* throw */
28890 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
288a0 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
288b0 66 69 6c 65 4e 61 6d 65 20 3d 20 50 61 74 68 2e  fileName = Path.
288c0 47 65 74 54 65 6d 70 46 69 6c 65 4e 61 6d 65 28  GetTempFileName(
288d0 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
288e0 73 74 72 69 6e 67 20 64 69 72 65 63 74 6f 72 79  string directory
288f0 20 3d 20 50 61 74 68 2e 47 65 74 44 69 72 65 63   = Path.GetDirec
28900 74 6f 72 79 4e 61 6d 65 28 66 69 6c 65 4e 61 6d  toryName(fileNam
28910 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e);..           
28920 20 73 74 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65   string fileName
28930 4f 6e 6c 79 20 3d 20 50 61 74 68 2e 47 65 74 46  Only = Path.GetF
28940 69 6c 65 4e 61 6d 65 57 69 74 68 6f 75 74 45 78  ileNameWithoutEx
28950 74 65 6e 73 69 6f 6e 28 66 69 6c 65 4e 61 6d 65  tension(fileName
28960 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
28970 20 20 73 74 72 69 6e 67 20 6e 65 77 46 69 6c 65    string newFile
28980 4e 61 6d 65 20 3d 20 50 61 74 68 2e 43 6f 6d 62  Name = Path.Comb
28990 69 6e 65 28 64 69 72 65 63 74 6f 72 79 2c 20 53  ine(directory, S
289a0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
289b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
289c0 7b 30 7d 7b 31 7d 7b 32 7d 22 2c 20 74 72 61 63  {0}{1}{2}", trac
289d0 65 43 61 74 65 67 6f 72 79 2c 20 21 53 74 72 69  eCategory, !Stri
289e0 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79  ng.IsNullOrEmpty
289f0 28 74 79 70 65 4e 61 6d 65 29 20 3f 0d 0a 20 20  (typeName) ?..  
28a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28a10 20 20 22 2e 22 20 2b 20 74 79 70 65 4e 61 6d 65    "." + typeName
28a20 20 3a 20 53 74 72 69 6e 67 2e 45 6d 70 74 79 2c   : String.Empty,
28a30 20 22 2e 22 20 2b 20 66 69 6c 65 4e 61 6d 65 4f   "." + fileNameO
28a40 6e 6c 79 20 2b 0d 0a 20 20 20 20 20 20 20 20 20  nly +..         
28a50 20 20 20 20 20 20 20 20 20 20 20 4c 6f 67 46 69             LogFi
28a60 6c 65 53 75 66 66 69 78 29 29 3b 0d 0a 0d 0a 20  leSuffix));.... 
28a70 20 20 20 20 20 20 20 20 20 20 20 46 69 6c 65 2e             File.
28a80 4d 6f 76 65 28 66 69 6c 65 4e 61 6d 65 2c 20 6e  Move(fileName, n
28a90 65 77 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a  ewFileName);....
28aa0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
28ab0 72 6e 20 6e 65 77 46 69 6c 65 4e 61 6d 65 3b 0d  rn newFileName;.
28ac0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
28ad0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
28ae0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28af0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28b00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28b10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
28b20 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
28b30 20 73 74 61 74 69 63 20 76 6f 69 64 20 41 70 70   static void App
28b40 44 65 62 75 67 28 0d 0a 20 20 20 20 20 20 20 20  Debug(..        
28b50 20 20 20 20 73 74 72 69 6e 67 20 6d 65 73 73 61      string messa
28b60 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ge,..           
28b70 20 73 74 72 69 6e 67 20 63 61 74 65 67 6f 72 79   string category
28b80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
28b90 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
28ba0 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
28bb0 2e 44 65 62 75 67 43 6f 72 65 28 53 74 72 69 6e  .DebugCore(Strin
28bc0 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
28bd0 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
28be0 4f 70 73 2e 44 65 62 75 67 46 6f 72 6d 61 74 2c  Ops.DebugFormat,
28bf0 20 54 72 61 63 65 4f 70 73 2e 4e 65 78 74 44 65   TraceOps.NextDe
28c00 62 75 67 49 64 28 29 2c 0d 0a 20 20 20 20 20 20  bugId(),..      
28c10 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
28c20 70 73 2e 54 69 6d 65 53 74 61 6d 70 28 44 61 74  ps.TimeStamp(Dat
28c30 65 54 69 6d 65 2e 55 74 63 4e 6f 77 29 2c 20 6d  eTime.UtcNow), m
28c40 65 73 73 61 67 65 29 2c 20 63 61 74 65 67 6f 72  essage), categor
28c50 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  y);..        }..
28c60 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
28c70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28c80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28c90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28ca0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28cb0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69  /....        pri
28cc0 76 61 74 65 20 73 74 61 74 69 63 20 76 6f 69 64  vate static void
28cd0 20 41 70 70 54 72 61 63 65 28 0d 0a 20 20 20 20   AppTrace(..    
28ce0 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6d          string m
28cf0 65 73 73 61 67 65 2c 0d 0a 20 20 20 20 20 20 20  essage,..       
28d00 20 20 20 20 20 73 74 72 69 6e 67 20 63 61 74 65       string cate
28d10 67 6f 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20  gory..          
28d20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
28d30 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
28d40 65 4f 70 73 2e 54 72 61 63 65 43 6f 72 65 28 53  eOps.TraceCore(S
28d50 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
28d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
28d70 72 61 63 65 4f 70 73 2e 54 72 61 63 65 46 6f 72  raceOps.TraceFor
28d80 6d 61 74 2c 20 54 72 61 63 65 4f 70 73 2e 4e 65  mat, TraceOps.Ne
28d90 78 74 54 72 61 63 65 49 64 28 29 2c 0d 0a 20 20  xtTraceId(),..  
28da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
28db0 61 63 65 4f 70 73 2e 54 69 6d 65 53 74 61 6d 70  aceOps.TimeStamp
28dc0 28 44 61 74 65 54 69 6d 65 2e 55 74 63 4e 6f 77  (DateTime.UtcNow
28dd0 29 2c 20 6d 65 73 73 61 67 65 29 2c 20 63 61 74  ), message), cat
28de0 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20 20  egory);..       
28df0 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64   }..        #end
28e00 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
28e10 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
28e20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28e30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28e40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28e50 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
28e60 20 20 20 20 20 23 72 65 67 69 6f 6e 20 47 65 6e       #region Gen
28e70 65 72 69 63 20 50 6c 61 74 66 6f 72 6d 20 48 61  eric Platform Ha
28e80 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20 20 20 20  ndling..        
28e90 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62  private static b
28ea0 6f 6f 6c 20 49 73 36 34 42 69 74 50 72 6f 63 65  ool Is64BitProce
28eb0 73 73 28 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  ss()..        {.
28ec0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d  .            //.
28ed0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20  .            // 
28ee0 4e 4f 54 45 3a 20 52 65 74 75 72 6e 73 20 74 72  NOTE: Returns tr
28ef0 75 65 20 69 66 20 74 68 65 20 63 75 72 72 65 6e  ue if the curren
28f00 74 20 70 72 6f 63 65 73 73 20 69 73 20 36 34 2d  t process is 64-
28f10 62 69 74 2e 20 20 49 66 20 74 68 69 73 0d 0a 20  bit.  If this.. 
28f20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
28f30 20 20 20 20 69 73 20 74 72 75 65 2c 20 77 65 20      is true, we 
28f40 2a 6b 6e 6f 77 2a 20 74 68 61 74 20 77 65 20 6d  *know* that we m
28f50 75 73 74 20 62 65 20 72 75 6e 6e 69 6e 67 20 6f  ust be running o
28f60 6e 20 61 20 36 34 2d 62 69 74 0d 0a 20 20 20 20  n a 64-bit..    
28f70 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
28f80 20 6f 70 65 72 61 74 69 6e 67 20 73 79 73 74 65   operating syste
28f90 6d 20 61 73 20 77 65 6c 6c 2e 20 20 48 6f 77 65  m as well.  Howe
28fa0 76 65 72 2c 20 69 66 20 74 68 69 73 20 69 73 20  ver, if this is 
28fb0 66 61 6c 73 65 2c 20 77 65 0d 0a 20 20 20 20 20  false, we..     
28fc0 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
28fd0 64 6f 20 6e 6f 74 20 6e 65 63 65 73 73 61 72 69  do not necessari
28fe0 6c 79 20 6b 6e 6f 77 20 74 68 61 74 20 77 65 20  ly know that we 
28ff0 61 72 65 20 72 75 6e 6e 69 6e 67 20 6f 6e 20 61  are running on a
29000 20 33 32 2d 62 69 74 0d 0a 20 20 20 20 20 20 20   32-bit..       
29010 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6f 70       //       op
29020 65 72 61 74 69 6e 67 20 73 79 73 74 65 6d 2c 20  erating system, 
29030 64 75 65 20 74 6f 20 57 6f 57 36 34 20 28 57 69  due to WoW64 (Wi
29040 6e 33 32 2d 6f 6e 2d 57 69 6e 36 34 29 2c 20 65  n32-on-Win64), e
29050 74 63 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  tc...           
29060 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
29070 20 72 65 74 75 72 6e 20 28 49 6e 74 50 74 72 2e   return (IntPtr.
29080 53 69 7a 65 20 3d 3d 20 73 69 7a 65 6f 66 28 6c  Size == sizeof(l
29090 6f 6e 67 29 29 3b 20 2f 2f 20 4e 4f 54 45 3a 20  ong)); // NOTE: 
290a0 50 6f 69 6e 74 65 72 20 69 73 20 36 34 2d 62 69  Pointer is 64-bi
290b0 74 73 3f 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ts?..        }..
290c0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
290d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
290e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
290f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29100 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29110 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69  /....        pri
29120 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c  vate static bool
29130 20 49 73 53 75 70 70 6f 72 74 65 64 52 6f 6f 74   IsSupportedRoot
29140 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Key(..          
29150 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 20 72    MockRegistry r
29160 65 67 69 73 74 72 79 2c 0d 0a 20 20 20 20 20 20  egistry,..      
29170 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74        MockRegist
29180 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 0d 0a 20  ryKey rootKey.. 
29190 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
291a0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
291b0 20 20 20 20 20 72 65 74 75 72 6e 20 4f 62 6a 65       return Obje
291c0 63 74 2e 52 65 66 65 72 65 6e 63 65 45 71 75 61  ct.ReferenceEqua
291d0 6c 73 28 72 6f 6f 74 4b 65 79 2c 20 72 65 67 69  ls(rootKey, regi
291e0 73 74 72 79 2e 43 75 72 72 65 6e 74 55 73 65 72  stry.CurrentUser
291f0 29 20 7c 7c 0d 0a 20 20 20 20 20 20 20 20 20 20  ) ||..          
29200 20 20 20 20 20 20 4f 62 6a 65 63 74 2e 52 65 66        Object.Ref
29210 65 72 65 6e 63 65 45 71 75 61 6c 73 28 72 6f 6f  erenceEquals(roo
29220 74 4b 65 79 2c 20 72 65 67 69 73 74 72 79 2e 4c  tKey, registry.L
29230 6f 63 61 6c 4d 61 63 68 69 6e 65 29 3b 0d 0a 20  ocalMachine);.. 
29240 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
29250 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
29260 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29270 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29280 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29290 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
292a0 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
292b0 74 61 74 69 63 20 73 74 72 69 6e 67 20 47 65 74  tatic string Get
292c0 52 6f 6f 74 4b 65 79 4e 61 6d 65 28 0d 0a 20 20  RootKeyName(..  
292d0 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 70            bool p
292e0 65 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 20  erUser,..       
292f0 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 0d       bool wow64.
29300 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a  .            )..
29310 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
29320 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
29330 20 20 20 20 20 20 20 2f 2f 20 42 55 47 46 49 58         // BUGFIX
29340 3a 20 41 70 70 61 72 65 6e 74 6c 79 2c 20 74 68  : Apparently, th
29350 65 20 70 65 72 2d 75 73 65 72 20 72 65 67 69 73  e per-user regis
29360 74 72 79 20 68 69 76 65 20 64 6f 65 73 20 6e 6f  try hive does no
29370 74 20 75 73 65 0d 0a 20 20 20 20 20 20 20 20 20  t use..         
29380 20 20 20 2f 2f 20 20 20 20 20 20 20 20 20 74 68     //         th
29390 65 20 22 57 6f 77 36 34 33 32 4e 6f 64 65 22 20  e "Wow6432Node" 
293a0 6e 6f 64 65 20 74 6f 20 73 74 6f 72 65 20 73 65  node to store se
293b0 74 74 69 6e 67 73 20 66 6f 72 20 33 32 2d 62 69  ttings for 32-bi
293c0 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  t..            /
293d0 2f 20 20 20 20 20 20 20 20 20 61 70 70 6c 69 63  /         applic
293e0 61 74 69 6f 6e 73 20 72 75 6e 6e 69 6e 67 20 6f  ations running o
293f0 6e 20 61 20 36 34 2d 62 69 74 20 6f 70 65 72 61  n a 64-bit opera
29400 74 69 6e 67 20 73 79 73 74 65 6d 2e 0d 0a 20 20  ting system...  
29410 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
29420 20 20 20 20 20 54 69 63 6b 65 74 20 5b 61 30 36       Ticket [a06
29430 37 37 33 30 39 66 30 5d 20 68 61 73 20 66 75 72  77309f0] has fur
29440 74 68 65 72 20 64 65 74 61 69 6c 73 2e 0d 0a 20  ther details... 
29450 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
29460 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
29470 6e 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  n String.Format(
29480 22 7b 30 7d 7b 31 7d 22 2c 20 52 6f 6f 74 4b 65  "{0}{1}", RootKe
29490 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  yName,..        
294a0 20 20 20 20 20 20 20 20 21 70 65 72 55 73 65 72          !perUser
294b0 20 26 26 20 77 6f 77 36 34 20 26 26 20 49 73 36   && wow64 && Is6
294c0 34 42 69 74 50 72 6f 63 65 73 73 28 29 20 3f 0d  4BitProcess() ?.
294d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
294e0 20 20 20 20 20 22 5c 5c 22 20 2b 20 57 6f 77 36       "\\" + Wow6
294f0 34 53 75 62 4b 65 79 4e 61 6d 65 20 3a 20 53 74  4SubKeyName : St
29500 72 69 6e 67 2e 45 6d 70 74 79 29 3b 0d 0a 20 20  ring.Empty);..  
29510 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
29520 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
29530 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29540 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29550 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29560 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
29570 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
29580 61 74 69 63 20 73 74 72 69 6e 67 20 47 65 74 53  atic string GetS
29590 79 73 74 65 6d 44 69 72 65 63 74 6f 72 79 28 0d  ystemDirectory(.
295a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
295b0 6c 20 77 6f 77 36 34 0d 0a 20 20 20 20 20 20 20  l wow64..       
295c0 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
295d0 7b 0d 0a 23 69 66 20 57 49 4e 44 4f 57 53 0d 0a  {..#if WINDOWS..
295e0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
295f0 77 6f 77 36 34 29 0d 0a 20 20 20 20 20 20 20 20  wow64)..        
29600 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
29610 20 20 20 20 20 20 20 69 66 20 28 73 79 73 74 65         if (syste
29620 6d 44 69 72 65 63 74 6f 72 79 57 6f 77 36 34 20  mDirectoryWow64 
29630 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
29640 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
29650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29660 20 73 79 73 74 65 6d 44 69 72 65 63 74 6f 72 79   systemDirectory
29670 57 6f 77 36 34 20 3d 0d 0a 20 20 20 20 20 20 20  Wow64 =..       
29680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29690 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
296a0 68 6f 64 73 2e 47 65 74 53 79 73 74 65 6d 44 69  hods.GetSystemDi
296b0 72 65 63 74 6f 72 79 28 29 3b 0d 0a 20 20 20 20  rectory();..    
296c0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
296d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
296e0 20 72 65 74 75 72 6e 20 73 79 73 74 65 6d 44 69   return systemDi
296f0 72 65 63 74 6f 72 79 57 6f 77 36 34 3b 0d 0a 20  rectoryWow64;.. 
29700 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
29710 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a            else..
29720 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20  #endif..        
29730 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
29740 20 20 20 20 20 20 20 69 66 20 28 73 79 73 74 65         if (syste
29750 6d 44 69 72 65 63 74 6f 72 79 20 3d 3d 20 6e 75  mDirectory == nu
29760 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
29770 20 20 20 20 20 20 20 20 20 73 79 73 74 65 6d 44           systemD
29780 69 72 65 63 74 6f 72 79 20 3d 20 45 6e 76 69 72  irectory = Envir
29790 6f 6e 6d 65 6e 74 2e 53 79 73 74 65 6d 44 69 72  onment.SystemDir
297a0 65 63 74 6f 72 79 3b 0d 0a 0d 0a 20 20 20 20 20  ectory;....     
297b0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
297c0 6e 20 73 79 73 74 65 6d 44 69 72 65 63 74 6f 72  n systemDirector
297d0 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y;..            
297e0 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  }..        }..  
297f0 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
29800 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
29810 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29820 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29830 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29840 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29850 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ///....        #
29860 72 65 67 69 6f 6e 20 47 65 6e 65 72 69 63 20 53  region Generic S
29870 74 72 69 6e 67 20 48 61 6e 64 6c 69 6e 67 0d 0a  tring Handling..
29880 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
29890 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 46 6f  static string Fo
298a0 72 44 69 73 70 6c 61 79 28 0d 0a 20 20 20 20 20  rDisplay(..     
298b0 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 76 61         object va
298c0 6c 75 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lue..           
298d0 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20   )..        {.. 
298e0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76             if (v
298f0 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  alue == null).. 
29900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
29910 65 74 75 72 6e 20 22 3c 6e 75 6c 6c 3e 22 3b 0d  eturn "<null>";.
29920 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ...            s
29930 74 72 69 6e 67 20 72 65 73 75 6c 74 3b 0d 0a 20  tring result;.. 
29940 20 20 20 20 20 20 20 20 20 20 20 54 79 70 65 20             Type 
29950 74 79 70 65 20 3d 20 76 61 6c 75 65 2e 47 65 74  type = value.Get
29960 54 79 70 65 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  Type();....     
29970 20 20 20 20 20 20 20 69 66 20 28 74 79 70 65 20         if (type 
29980 3d 3d 20 74 79 70 65 6f 66 28 58 6d 6c 45 6c 65  == typeof(XmlEle
29990 6d 65 6e 74 29 29 0d 0a 20 20 20 20 20 20 20 20  ment))..        
299a0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
299b0 20 20 20 20 20 20 20 58 6d 6c 45 6c 65 6d 65 6e         XmlElemen
299c0 74 20 65 6c 65 6d 65 6e 74 20 3d 20 28 58 6d 6c  t element = (Xml
299d0 45 6c 65 6d 65 6e 74 29 76 61 6c 75 65 3b 0d 0a  Element)value;..
299e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
299f0 20 20 72 65 73 75 6c 74 20 3d 20 65 6c 65 6d 65    result = eleme
29a00 6e 74 2e 4f 75 74 65 72 58 6d 6c 3b 0d 0a 20 20  nt.OuterXml;..  
29a10 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
29a20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66           else if
29a30 20 28 74 79 70 65 20 3d 3d 20 74 79 70 65 6f 66   (type == typeof
29a40 28 56 65 72 73 69 6f 6e 29 29 0d 0a 20 20 20 20  (Version))..    
29a50 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
29a60 20 20 20 20 20 20 20 20 20 20 20 56 65 72 73 69             Versi
29a70 6f 6e 20 76 65 72 73 69 6f 6e 20 3d 20 28 56 65  on version = (Ve
29a80 72 73 69 6f 6e 29 76 61 6c 75 65 3b 0d 0a 0d 0a  rsion)value;....
29a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29aa0 72 65 73 75 6c 74 20 3d 20 53 74 72 69 6e 67 2e  result = String.
29ab0 46 6f 72 6d 61 74 28 22 76 7b 30 7d 22 2c 20 76  Format("v{0}", v
29ac0 65 72 73 69 6f 6e 29 3b 0d 0a 20 20 20 20 20 20  ersion);..      
29ad0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
29ae0 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 74 79       else if (ty
29af0 70 65 20 3d 3d 20 74 79 70 65 6f 66 28 50 72 6f  pe == typeof(Pro
29b00 63 65 73 73 53 74 61 72 74 49 6e 66 6f 29 29 0d  cessStartInfo)).
29b10 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
29b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29b30 50 72 6f 63 65 73 73 53 74 61 72 74 49 6e 66 6f  ProcessStartInfo
29b40 20 73 74 61 72 74 49 6e 66 6f 20 3d 20 28 50 72   startInfo = (Pr
29b50 6f 63 65 73 73 53 74 61 72 74 49 6e 66 6f 29 76  ocessStartInfo)v
29b60 61 6c 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  alue;....       
29b70 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 20           result 
29b80 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  = String.Format(
29b90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
29ba0 20 20 20 20 20 20 22 66 69 6c 65 4e 61 6d 65 20        "fileName 
29bb0 3d 20 7b 30 7d 2c 20 61 72 67 75 6d 65 6e 74 73  = {0}, arguments
29bc0 20 3d 20 7b 31 7d 2c 20 77 6f 72 6b 69 6e 67 44   = {1}, workingD
29bd0 69 72 65 63 74 6f 72 79 20 3d 20 7b 32 7d 2c 20  irectory = {2}, 
29be0 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  " +..           
29bf0 20 20 20 20 20 20 20 20 20 22 75 73 65 53 68 65           "useShe
29c00 6c 6c 45 78 65 63 75 74 65 20 3d 20 7b 33 7d 2c  llExecute = {3},
29c10 20 72 65 64 69 72 65 63 74 53 74 61 6e 64 61 72   redirectStandar
29c20 64 4f 75 74 70 75 74 20 3d 20 7b 34 7d 2c 20 22  dOutput = {4}, "
29c30 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   +..            
29c40 20 20 20 20 20 20 20 20 22 72 65 64 69 72 65 63          "redirec
29c50 74 53 74 61 6e 64 61 72 64 45 72 72 6f 72 20 3d  tStandardError =
29c60 20 7b 35 7d 22 2c 20 46 6f 72 44 69 73 70 6c 61   {5}", ForDispla
29c70 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
29c80 20 20 20 20 20 20 20 20 73 74 61 72 74 49 6e 66          startInf
29c90 6f 2e 46 69 6c 65 4e 61 6d 65 29 2c 20 46 6f 72  o.FileName), For
29ca0 44 69 73 70 6c 61 79 28 73 74 61 72 74 49 6e 66  Display(startInf
29cb0 6f 2e 41 72 67 75 6d 65 6e 74 73 29 2c 0d 0a 20  o.Arguments),.. 
29cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29cd0 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 73 74     ForDisplay(st
29ce0 61 72 74 49 6e 66 6f 2e 57 6f 72 6b 69 6e 67 44  artInfo.WorkingD
29cf0 69 72 65 63 74 6f 72 79 29 2c 20 46 6f 72 44 69  irectory), ForDi
29d00 73 70 6c 61 79 28 0d 0a 20 20 20 20 20 20 20 20  splay(..        
29d10 20 20 20 20 20 20 20 20 20 20 20 20 73 74 61 72              star
29d20 74 49 6e 66 6f 2e 55 73 65 53 68 65 6c 6c 45 78  tInfo.UseShellEx
29d30 65 63 75 74 65 29 2c 20 46 6f 72 44 69 73 70 6c  ecute), ForDispl
29d40 61 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ay(..           
29d50 20 20 20 20 20 20 20 20 20 73 74 61 72 74 49 6e           startIn
29d60 66 6f 2e 52 65 64 69 72 65 63 74 53 74 61 6e 64  fo.RedirectStand
29d70 61 72 64 4f 75 74 70 75 74 29 2c 20 46 6f 72 44  ardOutput), ForD
29d80 69 73 70 6c 61 79 28 0d 0a 20 20 20 20 20 20 20  isplay(..       
29d90 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 61               sta
29da0 72 74 49 6e 66 6f 2e 52 65 64 69 72 65 63 74 53  rtInfo.RedirectS
29db0 74 61 6e 64 61 72 64 45 72 72 6f 72 29 29 3b 20  tandardError)); 
29dc0 2f 2a 20 52 45 43 55 52 53 49 56 45 20 2a 2f 0d  /* RECURSIVE */.
29dd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
29de0 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
29df0 20 69 66 20 28 74 79 70 65 20 3d 3d 20 74 79 70   if (type == typ
29e00 65 6f 66 28 50 72 6f 63 65 73 73 29 29 0d 0a 20  eof(Process)).. 
29e10 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
29e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 50 72                Pr
29e30 6f 63 65 73 73 20 70 72 6f 63 65 73 73 20 3d 20  ocess process = 
29e40 28 50 72 6f 63 65 73 73 29 76 61 6c 75 65 3b 0d  (Process)value;.
29e50 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
29e60 20 20 20 72 65 73 75 6c 74 20 3d 20 70 72 6f 63     result = proc
29e70 65 73 73 2e 49 64 2e 54 6f 53 74 72 69 6e 67 28  ess.Id.ToString(
29e80 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
29e90 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 65  }..            e
29ea0 6c 73 65 20 69 66 20 28 74 79 70 65 20 3d 3d 20  lse if (type == 
29eb0 74 79 70 65 6f 66 28 44 61 74 61 52 65 63 65 69  typeof(DataRecei
29ec0 76 65 64 45 76 65 6e 74 41 72 67 73 29 29 0d 0a  vedEventArgs))..
29ed0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
29ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 44                 D
29ef0 61 74 61 52 65 63 65 69 76 65 64 45 76 65 6e 74  ataReceivedEvent
29f00 41 72 67 73 20 65 76 65 6e 74 41 72 67 73 20 3d  Args eventArgs =
29f10 20 28 44 61 74 61 52 65 63 65 69 76 65 64 45 76   (DataReceivedEv
29f20 65 6e 74 41 72 67 73 29 76 61 6c 75 65 3b 0d 0a  entArgs)value;..
29f30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
29f40 20 20 72 65 73 75 6c 74 20 3d 20 46 6f 72 44 69    result = ForDi
29f50 73 70 6c 61 79 28 65 76 65 6e 74 41 72 67 73 2e  splay(eventArgs.
29f60 44 61 74 61 29 3b 20 2f 2a 20 52 45 43 55 52 53  Data); /* RECURS
29f70 49 56 45 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20  IVE */..        
29f80 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
29f90 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20     else..       
29fa0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
29fb0 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 20 3d          result =
29fc0 20 76 61 6c 75 65 2e 54 6f 53 74 72 69 6e 67 28   value.ToString(
29fd0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
29fe0 20 20 20 20 20 20 69 66 20 28 72 65 73 75 6c 74        if (result
29ff0 2e 4c 65 6e 67 74 68 20 3d 3d 20 30 29 0d 0a 20  .Length == 0).. 
2a000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a010 20 20 20 72 65 74 75 72 6e 20 22 3c 65 6d 70 74     return "<empt
2a020 79 3e 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  y>";....        
2a030 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 20 3d          result =
2a040 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
2a050 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2a060 20 20 20 20 20 74 79 70 65 2e 49 73 53 75 62 63       type.IsSubc
2a070 6c 61 73 73 4f 66 28 74 79 70 65 6f 66 28 56 61  lassOf(typeof(Va
2a080 6c 75 65 54 79 70 65 29 29 20 3f 20 22 7b 30 7d  lueType)) ? "{0}
2a090 22 20 3a 20 22 5c 22 7b 30 7d 5c 22 22 2c 0d 0a  " : "\"{0}\"",..
2a0a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a0b0 20 20 20 20 72 65 73 75 6c 74 29 3b 0d 0a 20 20      result);..  
2a0c0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
2a0d0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
2a0e0 6e 20 72 65 73 75 6c 74 3b 0d 0a 20 20 20 20 20  n result;..     
2a0f0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65     }..        #e
2a100 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
2a110 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
2a120 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a130 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a140 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a150 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
2a160 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 41         #region A
2a170 73 73 65 6d 62 6c 79 20 41 74 74 72 69 62 75 74  ssembly Attribut
2a180 65 20 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20  e Handling..    
2a190 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
2a1a0 63 20 73 74 72 69 6e 67 20 47 65 74 41 73 73 65  c string GetAsse
2a1b0 6d 62 6c 79 43 6f 6e 66 69 67 75 72 61 74 69 6f  mblyConfiguratio
2a1c0 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n(..            
2a1d0 41 73 73 65 6d 62 6c 79 20 61 73 73 65 6d 62 6c  Assembly assembl
2a1e0 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  y..            )
2a1f0 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
2a200 20 20 20 20 20 20 20 20 20 69 66 20 28 61 73 73           if (ass
2a210 65 6d 62 6c 79 20 21 3d 20 6e 75 6c 6c 29 0d 0a  embly != null)..
2a220 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2a230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
2a240 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ry..            
2a250 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2a260 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 61             if (a
2a270 73 73 65 6d 62 6c 79 2e 49 73 44 65 66 69 6e 65  ssembly.IsDefine
2a280 64 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d(..            
2a290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a2a0 74 79 70 65 6f 66 28 41 73 73 65 6d 62 6c 79 43  typeof(AssemblyC
2a2b0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 41 74 74 72  onfigurationAttr
2a2c0 69 62 75 74 65 29 2c 20 66 61 6c 73 65 29 29 0d  ibute), false)).
2a2d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2a2e0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2a2f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a300 41 73 73 65 6d 62 6c 79 43 6f 6e 66 69 67 75 72  AssemblyConfigur
2a310 61 74 69 6f 6e 41 74 74 72 69 62 75 74 65 20 63  ationAttribute c
2a320 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 0d 0a  onfiguration =..
2a330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a340 20 20 20 20 20 20 20 20 20 20 20 20 28 41 73 73              (Ass
2a350 65 6d 62 6c 79 43 6f 6e 66 69 67 75 72 61 74 69  emblyConfigurati
2a360 6f 6e 41 74 74 72 69 62 75 74 65 29 0d 0a 20 20  onAttribute)..  
2a370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a380 20 20 20 20 20 20 20 20 20 20 61 73 73 65 6d 62            assemb
2a390 6c 79 2e 47 65 74 43 75 73 74 6f 6d 41 74 74 72  ly.GetCustomAttr
2a3a0 69 62 75 74 65 73 28 0d 0a 20 20 20 20 20 20 20  ibutes(..       
2a3b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a3c0 20 20 20 20 20 20 20 20 20 74 79 70 65 6f 66 28           typeof(
2a3d0 41 73 73 65 6d 62 6c 79 43 6f 6e 66 69 67 75 72  AssemblyConfigur
2a3e0 61 74 69 6f 6e 41 74 74 72 69 62 75 74 65 29 2c  ationAttribute),
2a3f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2a400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a410 20 20 66 61 6c 73 65 29 5b 30 5d 3b 0d 0a 0d 0a    false)[0];....
2a420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a430 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 63          return c
2a440 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 43 6f 6e  onfiguration.Con
2a450 66 69 67 75 72 61 74 69 6f 6e 3b 0d 0a 20 20 20  figuration;..   
2a460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a470 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
2a480 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
2a490 20 20 20 20 20 20 20 63 61 74 63 68 0d 0a 20 20         catch..  
2a4a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
2a4b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2a4c0 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69       // do nothi
2a4d0 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ng...           
2a4e0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
2a4f0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
2a500 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c       return null
2a510 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
2a520 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
2a530 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a540 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a550 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a560 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
2a570 0a 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69  ...        publi
2a580 63 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20  c static string 
2a590 47 65 74 41 73 73 65 6d 62 6c 79 54 69 74 6c 65  GetAssemblyTitle
2a5a0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 41  (..            A
2a5b0 73 73 65 6d 62 6c 79 20 61 73 73 65 6d 62 6c 79  ssembly assembly
2a5c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
2a5d0 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
2a5e0 20 20 20 20 20 20 20 20 69 66 20 28 61 73 73 65          if (asse
2a5f0 6d 62 6c 79 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20  mbly != null).. 
2a600 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2a610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
2a620 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  y..             
2a630 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2a640 20 20 20 20 20 20 20 20 20 20 69 66 20 28 61 73            if (as
2a650 73 65 6d 62 6c 79 2e 49 73 44 65 66 69 6e 65 64  sembly.IsDefined
2a660 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
2a670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
2a680 79 70 65 6f 66 28 41 73 73 65 6d 62 6c 79 54 69  ypeof(AssemblyTi
2a690 74 6c 65 41 74 74 72 69 62 75 74 65 29 2c 20 66  tleAttribute), f
2a6a0 61 6c 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20  alse))..        
2a6b0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2a6c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a6d0 20 20 20 20 20 20 20 41 73 73 65 6d 62 6c 79 54         AssemblyT
2a6e0 69 74 6c 65 41 74 74 72 69 62 75 74 65 20 74 69  itleAttribute ti
2a6f0 74 6c 65 20 3d 0d 0a 20 20 20 20 20 20 20 20 20  tle =..         
2a700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a710 20 20 20 28 41 73 73 65 6d 62 6c 79 54 69 74 6c     (AssemblyTitl
2a720 65 41 74 74 72 69 62 75 74 65 29 0d 0a 20 20 20  eAttribute)..   
2a730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a740 20 20 20 20 20 20 20 20 20 61 73 73 65 6d 62 6c           assembl
2a750 79 2e 47 65 74 43 75 73 74 6f 6d 41 74 74 72 69  y.GetCustomAttri
2a760 62 75 74 65 73 28 0d 0a 20 20 20 20 20 20 20 20  butes(..        
2a770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a780 20 20 20 20 20 20 20 20 74 79 70 65 6f 66 28 41          typeof(A
2a790 73 73 65 6d 62 6c 79 54 69 74 6c 65 41 74 74 72  ssemblyTitleAttr
2a7a0 69 62 75 74 65 29 2c 20 66 61 6c 73 65 29 5b 30  ibute), false)[0
2a7b0 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  ];....          
2a7c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
2a7d0 74 75 72 6e 20 74 69 74 6c 65 2e 54 69 74 6c 65  turn title.Title
2a7e0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
2a7f0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
2a800 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
2a810 20 20 20 20 20 20 20 20 20 20 20 20 20 63 61 74               cat
2a820 63 68 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ch..            
2a830 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2a840 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f             // do
2a850 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20   nothing...     
2a860 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
2a870 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
2a880 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
2a890 6e 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20  n null;..       
2a8a0 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64   }..        #end
2a8b0 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
2a8c0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
2a8d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a8e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a8f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a900 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
2a910 20 20 20 20 20 23 72 65 67 69 6f 6e 20 2e 4e 45       #region .NE
2a920 54 20 46 72 61 6d 65 77 6f 72 6b 20 48 61 6e 64  T Framework Hand
2a930 6c 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 70 72  ling..        pr
2a940 69 76 61 74 65 20 73 74 61 74 69 63 20 73 74 72  ivate static str
2a950 69 6e 67 20 47 65 74 46 72 61 6d 65 77 6f 72 6b  ing GetFramework
2a960 52 6f 6f 74 4b 65 79 4e 61 6d 65 28 0d 0a 20 20  RootKeyName(..  
2a970 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 70            bool p
2a980 65 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 20  erUser,..       
2a990 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 0d       bool wow64.
2a9a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a  .            )..
2a9b0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2a9c0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 74         return St
2a9d0 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 7b 30 7d  ring.Format("{0}
2a9e0 5c 5c 4d 69 63 72 6f 73 6f 66 74 5c 5c 2e 4e 45  \\Microsoft\\.NE
2a9f0 54 46 72 61 6d 65 77 6f 72 6b 22 2c 0d 0a 20 20  TFramework",..  
2aa00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 47 65                Ge
2aa10 74 52 6f 6f 74 4b 65 79 4e 61 6d 65 28 70 65 72  tRootKeyName(per
2aa20 55 73 65 72 2c 20 77 6f 77 36 34 29 29 3b 0d 0a  User, wow64));..
2aa30 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
2aa40 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
2aa50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2aa60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2aa70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2aa80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
2aa90 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
2aaa0 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 47 65  static string Ge
2aab0 74 46 72 61 6d 65 77 6f 72 6b 4b 65 79 4e 61 6d  tFrameworkKeyNam
2aac0 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
2aad0 73 74 72 69 6e 67 20 66 72 61 6d 65 77 6f 72 6b  string framework
2aae0 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
2aaf0 20 20 20 56 65 72 73 69 6f 6e 20 66 72 61 6d 65     Version frame
2ab00 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20 20  workVersion,..  
2ab10 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
2ab20 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 0d 0a   platformName,..
2ab30 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
2ab40 20 70 65 72 55 73 65 72 2c 0d 0a 20 20 20 20 20   perUser,..     
2ab50 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36         bool wow6
2ab60 34 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  4..            )
2ab70 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
2ab80 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
2ab90 66 6f 72 6d 61 74 20 3d 20 21 53 74 72 69 6e 67  format = !String
2aba0 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 70  .IsNullOrEmpty(p
2abb0 6c 61 74 66 6f 72 6d 4e 61 6d 65 29 20 3f 0d 0a  latformName) ?..
2abc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2abd0 22 7b 30 7d 5c 5c 4d 69 63 72 6f 73 6f 66 74 5c  "{0}\\Microsoft\
2abe0 5c 7b 31 7d 5c 5c 76 7b 32 7d 5c 5c 7b 33 7d 22  \{1}\\v{2}\\{3}"
2abf0 20 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   :..            
2ac00 20 20 20 20 22 7b 30 7d 5c 5c 4d 69 63 72 6f 73      "{0}\\Micros
2ac10 6f 66 74 5c 5c 7b 31 7d 5c 5c 76 7b 32 7d 22 3b  oft\\{1}\\v{2}";
2ac20 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2ac30 72 65 74 75 72 6e 20 53 74 72 69 6e 67 2e 46 6f  return String.Fo
2ac40 72 6d 61 74 28 66 6f 72 6d 61 74 2c 20 47 65 74  rmat(format, Get
2ac50 52 6f 6f 74 4b 65 79 4e 61 6d 65 28 70 65 72 55  RootKeyName(perU
2ac60 73 65 72 2c 20 77 6f 77 36 34 29 2c 0d 0a 20 20  ser, wow64),..  
2ac70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72                fr
2ac80 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20 66 72 61  ameworkName, fra
2ac90 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 20 70  meworkVersion, p
2aca0 6c 61 74 66 6f 72 6d 4e 61 6d 65 29 3b 0d 0a 20  latformName);.. 
2acb0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
2acc0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
2acd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ace0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2acf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ad00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
2ad10 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
2ad20 74 61 74 69 63 20 73 74 72 69 6e 67 20 47 65 74  tatic string Get
2ad30 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72 73  ImageRuntimeVers
2ad40 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ion(..          
2ad50 20 20 73 74 72 69 6e 67 20 66 69 6c 65 4e 61 6d    string fileNam
2ad60 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  e..            )
2ad70 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
2ad80 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20           try..  
2ad90 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2ada0 20 20 20 20 20 20 20 20 20 20 20 20 20 41 73 73               Ass
2adb0 65 6d 62 6c 79 20 61 73 73 65 6d 62 6c 79 20 3d  embly assembly =
2adc0 20 41 73 73 65 6d 62 6c 79 2e 52 65 66 6c 65 63   Assembly.Reflec
2add0 74 69 6f 6e 4f 6e 6c 79 4c 6f 61 64 46 72 6f 6d  tionOnlyLoadFrom
2ade0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
2adf0 20 20 20 20 20 20 20 66 69 6c 65 4e 61 6d 65 29         fileName)
2ae00 3b 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 0d  ; /* throw */...
2ae10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2ae20 20 69 66 20 28 61 73 73 65 6d 62 6c 79 20 21 3d   if (assembly !=
2ae30 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
2ae40 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2ae50 72 6e 20 61 73 73 65 6d 62 6c 79 2e 49 6d 61 67  rn assembly.Imag
2ae60 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 3b  eRuntimeVersion;
2ae70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
2ae80 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 61 74  .            cat
2ae90 63 68 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ch..            
2aea0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2aeb0 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67     // do nothing
2aec0 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ...            }
2aed0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2aee0 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 20 20  return null;..  
2aef0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
2af00 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
2af10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2af20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2af30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2af40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
2af50 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
2af60 61 74 69 63 20 73 74 72 69 6e 67 20 47 65 74 46  atic string GetF
2af70 72 61 6d 65 77 6f 72 6b 44 69 72 65 63 74 6f 72  rameworkDirector
2af80 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
2af90 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
2afa0 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20  rootKey,..      
2afb0 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20 66 72        Version fr
2afc0 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d  ameworkVersion,.
2afd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
2afe0 6c 20 70 65 72 55 73 65 72 2c 0d 0a 20 20 20 20  l perUser,..    
2aff0 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77          bool wow
2b000 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  64,..           
2b010 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20   bool whatIf,.. 
2b020 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
2b030 76 65 72 62 6f 73 65 0d 0a 20 20 20 20 20 20 20  verbose..       
2b040 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
2b050 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 75  {..            u
2b060 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74  sing (MockRegist
2b070 72 79 4b 65 79 20 6b 65 79 20 3d 20 52 65 67 69  ryKey key = Regi
2b080 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53  stryHelper.OpenS
2b090 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20  ubKey(..        
2b0a0 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74              root
2b0b0 4b 65 79 2c 20 47 65 74 46 72 61 6d 65 77 6f 72  Key, GetFramewor
2b0c0 6b 52 6f 6f 74 4b 65 79 4e 61 6d 65 28 70 65 72  kRootKeyName(per
2b0d0 55 73 65 72 2c 20 77 6f 77 36 34 29 2c 0d 0a 20  User, wow64),.. 
2b0e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b0f0 20 20 20 66 61 6c 73 65 2c 20 77 68 61 74 49 66     false, whatIf
2b100 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20  , verbose))..   
2b110 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2b120 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2b130 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  key == null)..  
2b140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b150 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a    return null;..
2b160 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2b170 20 20 6f 62 6a 65 63 74 20 76 61 6c 75 65 20 3d    object value =
2b180 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
2b190 47 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20  GetValue(..     
2b1a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b                 k
2b1b0 65 79 2c 20 22 49 6e 73 74 61 6c 6c 52 6f 6f 74  ey, "InstallRoot
2b1c0 22 2c 20 6e 75 6c 6c 2c 20 77 68 61 74 49 66 2c  ", null, whatIf,
2b1d0 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20   verbose);....  
2b1e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
2b1f0 20 28 21 28 76 61 6c 75 65 20 69 73 20 73 74 72   (!(value is str
2b200 69 6e 67 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ing))..         
2b210 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
2b220 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20  n null;....     
2b230 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
2b240 6e 20 50 61 74 68 2e 43 6f 6d 62 69 6e 65 28 0d  n Path.Combine(.
2b250 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2b260 20 20 20 20 20 28 73 74 72 69 6e 67 29 76 61 6c       (string)val
2b270 75 65 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ue, String.Forma
2b280 74 28 22 76 7b 30 7d 22 2c 20 66 72 61 6d 65 77  t("v{0}", framew
2b290 6f 72 6b 56 65 72 73 69 6f 6e 29 29 3b 0d 0a 20  orkVersion));.. 
2b2a0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
2b2b0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
2b2c0 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
2b2d0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
2b2e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b2f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b300 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b310 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
2b320 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
2b330 6e 20 50 65 72 2d 46 72 61 6d 65 77 6f 72 6b 2f  n Per-Framework/
2b340 50 6c 61 74 66 6f 72 6d 20 48 61 6e 64 6c 69 6e  Platform Handlin
2b350 67 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  g..        priva
2b360 74 65 20 73 74 61 74 69 63 20 76 6f 69 64 20 49  te static void I
2b370 6e 69 74 69 61 6c 69 7a 65 46 72 61 6d 65 77 6f  nitializeFramewo
2b380 72 6b 4c 69 73 74 28 0d 0a 20 20 20 20 20 20 20  rkList(..       
2b390 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72       MockRegistr
2b3a0 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20  yKey rootKey,.. 
2b3b0 20 20 20 20 20 20 20 20 20 20 20 43 6f 6e 66 69             Confi
2b3c0 67 75 72 61 74 69 6f 6e 20 63 6f 6e 66 69 67 75  guration configu
2b3d0 72 61 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20  ration,..       
2b3e0 20 20 20 20 20 72 65 66 20 46 72 61 6d 65 77 6f       ref Framewo
2b3f0 72 6b 4c 69 73 74 20 66 72 61 6d 65 77 6f 72 6b  rkList framework
2b400 4c 69 73 74 0d 0a 20 20 20 20 20 20 20 20 20 20  List..          
2b410 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
2b420 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2b430 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 20 3d 3d  frameworkList ==
2b440 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
2b450 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72          framewor
2b460 6b 4c 69 73 74 20 3d 20 6e 65 77 20 46 72 61 6d  kList = new Fram
2b470 65 77 6f 72 6b 4c 69 73 74 28 29 3b 0d 0a 0d 0a  eworkList();....
2b480 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2b490 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 52 6f  frameworkList.Ro
2b4a0 6f 74 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  otKey == null)..
2b4b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b4c0 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 52 6f  frameworkList.Ro
2b4d0 6f 74 4b 65 79 20 3d 20 72 6f 6f 74 4b 65 79 3b  otKey = rootKey;
2b4e0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2b4f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b500 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b510 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b520 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b530 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
2b540 20 20 20 69 66 20 28 66 72 61 6d 65 77 6f 72 6b     if (framework
2b550 4c 69 73 74 2e 4e 61 6d 65 73 20 3d 3d 20 6e 75  List.Names == nu
2b560 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
2b570 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2b580 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73      frameworkLis
2b590 74 2e 4e 61 6d 65 73 20 3d 20 6e 65 77 20 53 74  t.Names = new St
2b5a0 72 69 6e 67 4c 69 73 74 28 29 3b 0d 0a 0d 0a 20  ringList();.... 
2b5b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
2b5c0 66 20 28 28 63 6f 6e 66 69 67 75 72 61 74 69 6f  f ((configuratio
2b5d0 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 63  n == null) || !c
2b5e0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e 6f 44  onfiguration.NoD
2b5f0 65 73 6b 74 6f 70 29 0d 0a 20 20 20 20 20 20 20  esktop)..       
2b600 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72 61               fra
2b610 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73  meworkList.Names
2b620 2e 41 64 64 28 22 2e 4e 45 54 46 72 61 6d 65 77  .Add(".NETFramew
2b630 6f 72 6b 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ork");....      
2b640 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28 63            if ((c
2b650 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20  onfiguration == 
2b660 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67  null) || !config
2b670 75 72 61 74 69 6f 6e 2e 4e 6f 43 6f 6d 70 61 63  uration.NoCompac
2b680 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t)..            
2b690 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2b6a0 20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65             frame
2b6b0 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 2e 41  workList.Names.A
2b6c0 64 64 28 22 2e 4e 45 54 43 6f 6d 70 61 63 74 46  dd(".NETCompactF
2b6d0 72 61 6d 65 77 6f 72 6b 22 29 3b 0d 0a 20 20 20  ramework");..   
2b6e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b6f0 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e   frameworkList.N
2b700 61 6d 65 73 2e 41 64 64 28 22 2e 4e 45 54 43 6f  ames.Add(".NETCo
2b710 6d 70 61 63 74 46 72 61 6d 65 77 6f 72 6b 22 29  mpactFramework")
2b720 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
2b730 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b         framework
2b740 4c 69 73 74 2e 4e 61 6d 65 73 2e 41 64 64 28 22  List.Names.Add("
2b750 2e 4e 45 54 43 6f 6d 70 61 63 74 46 72 61 6d 65  .NETCompactFrame
2b760 77 6f 72 6b 22 29 3b 0d 0a 20 20 20 20 20 20 20  work");..       
2b770 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
2b780 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
2b790 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
2b7a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b7b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b7c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b7d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
2b7e0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2b7f0 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 56 65  frameworkList.Ve
2b800 72 73 69 6f 6e 73 20 3d 3d 20 6e 75 6c 6c 29 0d  rsions == null).
2b810 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
2b820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b830 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 56 65  frameworkList.Ve
2b840 72 73 69 6f 6e 73 20 3d 20 6e 65 77 20 56 65 72  rsions = new Ver
2b850 73 69 6f 6e 4d 61 70 28 29 3b 0d 0a 0d 0a 20 20  sionMap();....  
2b860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
2b870 20 28 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e   ((configuration
2b880 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f   == null) || !co
2b890 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e 6f 44 65  nfiguration.NoDe
2b8a0 73 6b 74 6f 70 29 0d 0a 20 20 20 20 20 20 20 20  sktop)..        
2b8b0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2b8c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 56                 V
2b8d0 65 72 73 69 6f 6e 4c 69 73 74 20 64 65 73 6b 74  ersionList deskt
2b8e0 6f 70 56 65 72 73 69 6f 6e 4c 69 73 74 20 3d 20  opVersionList = 
2b8f0 6e 65 77 20 56 65 72 73 69 6f 6e 4c 69 73 74 28  new VersionList(
2b900 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
2b910 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28 63            if ((c
2b920 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20  onfiguration == 
2b930 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67  null) || !config
2b940 75 72 61 74 69 6f 6e 2e 4e 6f 4e 65 74 46 78 32  uration.NoNetFx2
2b950 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  0)..            
2b960 20 20 20 20 20 20 20 20 20 20 20 20 64 65 73 6b              desk
2b970 74 6f 70 56 65 72 73 69 6f 6e 4c 69 73 74 2e 41  topVersionList.A
2b980 64 64 28 6e 65 77 20 56 65 72 73 69 6f 6e 28 32  dd(new Version(2
2b990 2c 20 30 2c 20 35 30 37 32 37 29 29 3b 0d 0a 0d  , 0, 50727));...
2b9a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2b9b0 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
2b9c0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
2b9d0 4e 4f 54 45 3a 20 54 68 65 20 2e 4e 45 54 20 46  NOTE: The .NET F
2b9e0 72 61 6d 65 77 6f 72 6b 20 33 2e 35 20 64 6f 65  ramework 3.5 doe
2b9f0 73 20 6e 6f 74 20 68 61 76 65 20 69 74 73 20 6f  s not have its o
2ba00 77 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  wn..            
2ba10 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
2ba20 20 64 69 72 65 63 74 6f 72 79 3b 20 68 6f 77 65   directory; howe
2ba30 76 65 72 2c 20 69 74 20 73 74 69 6c 6c 20 6d 61  ver, it still ma
2ba40 79 20 68 61 76 65 20 61 73 73 65 6d 62 6c 79 0d  y have assembly.
2ba50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2ba60 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 66 6f       //       fo
2ba70 6c 64 65 72 73 20 66 6f 72 20 75 73 65 20 69 6e  lders for use in
2ba80 20 56 69 73 75 61 6c 20 53 74 75 64 69 6f 2c 20   Visual Studio, 
2ba90 65 74 63 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  etc...          
2baa0 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
2bab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bac0 20 20 69 66 20 28 28 63 6f 6e 66 69 67 75 72 61    if ((configura
2bad0 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c  tion == null) ||
2bae0 20 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e   !configuration.
2baf0 4e 6f 4e 65 74 46 78 33 35 29 0d 0a 20 20 20 20  NoNetFx35)..    
2bb00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bb10 20 20 20 20 64 65 73 6b 74 6f 70 56 65 72 73 69      desktopVersi
2bb20 6f 6e 4c 69 73 74 2e 41 64 64 28 6e 65 77 20 56  onList.Add(new V
2bb30 65 72 73 69 6f 6e 28 33 2c 20 35 29 29 3b 0d 0a  ersion(3, 5));..
2bb40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2bb50 20 20 20 20 20 20 69 66 20 28 28 63 6f 6e 66 69        if ((confi
2bb60 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c  guration == null
2bb70 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61 74  ) || !configurat
2bb80 69 6f 6e 2e 4e 6f 4e 65 74 46 78 34 30 29 0d 0a  ion.NoNetFx40)..
2bb90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bba0 20 20 20 20 20 20 20 20 64 65 73 6b 74 6f 70 56          desktopV
2bbb0 65 72 73 69 6f 6e 4c 69 73 74 2e 41 64 64 28 6e  ersionList.Add(n
2bbc0 65 77 20 56 65 72 73 69 6f 6e 28 34 2c 20 30 2c  ew Version(4, 0,
2bbd0 20 33 30 33 31 39 29 29 3b 0d 0a 0d 0a 20 20 20   30319));....   
2bbe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bbf0 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
2bc00 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
2bc10 3a 20 54 68 65 20 2e 4e 45 54 20 46 72 61 6d 65  : The .NET Frame
2bc20 77 6f 72 6b 20 34 2e 35 20 64 6f 65 73 20 6e 6f  work 4.5 does no
2bc30 74 20 68 61 76 65 20 69 74 73 20 6f 77 6e 0d 0a  t have its own..
2bc40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bc50 20 20 20 20 2f 2f 20 20 20 20 20 20 20 64 69 72      //       dir
2bc60 65 63 74 6f 72 79 3b 20 68 6f 77 65 76 65 72 2c  ectory; however,
2bc70 20 69 74 20 73 74 69 6c 6c 20 6d 61 79 20 68 61   it still may ha
2bc80 76 65 20 61 73 73 65 6d 62 6c 79 0d 0a 20 20 20  ve assembly..   
2bc90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bca0 20 2f 2f 20 20 20 20 20 20 20 66 6f 6c 64 65 72   //       folder
2bcb0 73 20 66 6f 72 20 75 73 65 20 69 6e 20 56 69 73  s for use in Vis
2bcc0 75 61 6c 20 53 74 75 64 69 6f 2c 20 65 74 63 2e  ual Studio, etc.
2bcd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2bce0 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
2bcf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
2bd00 20 28 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e   ((configuration
2bd10 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f   == null) || !co
2bd20 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e 6f 4e 65  nfiguration.NoNe
2bd30 74 46 78 34 35 29 0d 0a 20 20 20 20 20 20 20 20  tFx45)..        
2bd40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bd50 64 65 73 6b 74 6f 70 56 65 72 73 69 6f 6e 4c 69  desktopVersionLi
2bd60 73 74 2e 41 64 64 28 6e 65 77 20 56 65 72 73 69  st.Add(new Versi
2bd70 6f 6e 28 34 2c 20 35 2c 20 35 30 37 30 39 29 29  on(4, 5, 50709))
2bd80 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2bd90 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
2bda0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bdb0 20 2f 2f 20 4e 4f 54 45 3a 20 54 68 65 20 2e 4e   // NOTE: The .N
2bdc0 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 34 2e 35  ET Framework 4.5
2bdd0 2e 31 20 64 6f 65 73 20 6e 6f 74 20 68 61 76 65  .1 does not have
2bde0 20 69 74 73 20 6f 77 6e 0d 0a 20 20 20 20 20 20   its own..      
2bdf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
2be00 20 20 20 20 20 20 20 64 69 72 65 63 74 6f 72 79         directory
2be10 3b 20 68 6f 77 65 76 65 72 2c 20 69 74 20 73 74  ; however, it st
2be20 69 6c 6c 20 6d 61 79 20 68 61 76 65 20 61 73 73  ill may have ass
2be30 65 6d 62 6c 79 0d 0a 20 20 20 20 20 20 20 20 20  embly..         
2be40 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
2be50 20 20 20 20 66 6f 6c 64 65 72 73 20 66 6f 72 20      folders for 
2be60 75 73 65 20 69 6e 20 56 69 73 75 61 6c 20 53 74  use in Visual St
2be70 75 64 69 6f 2c 20 65 74 63 2e 0d 0a 20 20 20 20  udio, etc...    
2be80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2be90 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
2bea0 20 20 20 20 20 20 20 20 69 66 20 28 28 63 6f 6e          if ((con
2beb0 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75  figuration == nu
2bec0 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72  ll) || !configur
2bed0 61 74 69 6f 6e 2e 4e 6f 4e 65 74 46 78 34 35 31  ation.NoNetFx451
2bee0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
2bef0 20 20 20 20 20 20 20 20 20 20 20 64 65 73 6b 74             deskt
2bf00 6f 70 56 65 72 73 69 6f 6e 4c 69 73 74 2e 41 64  opVersionList.Ad
2bf10 64 28 6e 65 77 20 56 65 72 73 69 6f 6e 28 34 2c  d(new Version(4,
2bf20 20 35 2c 20 31 29 29 3b 0d 0a 0d 0a 20 20 20 20   5, 1));....    
2bf30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bf40 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 56 65  frameworkList.Ve
2bf50 72 73 69 6f 6e 73 2e 41 64 64 28 22 2e 4e 45 54  rsions.Add(".NET
2bf60 46 72 61 6d 65 77 6f 72 6b 22 2c 0d 0a 20 20 20  Framework",..   
2bf70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bf80 20 20 20 20 20 64 65 73 6b 74 6f 70 56 65 72 73       desktopVers
2bf90 69 6f 6e 4c 69 73 74 29 3b 0d 0a 20 20 20 20 20  ionList);..     
2bfa0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
2bfb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bfc0 69 66 20 28 28 63 6f 6e 66 69 67 75 72 61 74 69  if ((configurati
2bfd0 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21  on == null) || !
2bfe0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e 6f  configuration.No
2bff0 43 6f 6d 70 61 63 74 29 0d 0a 20 20 20 20 20 20  Compact)..      
2c000 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2c010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c020 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 56   frameworkList.V
2c030 65 72 73 69 6f 6e 73 2e 41 64 64 28 22 2e 4e 45  ersions.Add(".NE
2c040 54 43 6f 6d 70 61 63 74 46 72 61 6d 65 77 6f 72  TCompactFramewor
2c050 6b 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  k",..           
2c060 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77               new
2c070 20 56 65 72 73 69 6f 6e 4c 69 73 74 28 6e 65 77   VersionList(new
2c080 20 56 65 72 73 69 6f 6e 5b 5d 20 7b 0d 0a 20 20   Version[] {..  
2c090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c0a0 20 20 20 20 20 20 6e 65 77 20 56 65 72 73 69 6f        new Versio
2c0b0 6e 28 32 2c 20 30 2c 20 30 2c 20 30 29 2c 20 6e  n(2, 0, 0, 0), n
2c0c0 65 77 20 56 65 72 73 69 6f 6e 28 33 2c 20 35 2c  ew Version(3, 5,
2c0d0 20 30 2c 20 30 29 0d 0a 20 20 20 20 20 20 20 20   0, 0)..        
2c0e0 20 20 20 20 20 20 20 20 20 20 20 20 7d 29 29 3b              }));
2c0f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2c100 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
2c110 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
2c120 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
2c130 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c140 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c150 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c160 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
2c170 20 20 20 20 20 69 66 20 28 66 72 61 6d 65 77 6f       if (framewo
2c180 72 6b 4c 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e  rkList.PlatformN
2c190 61 6d 65 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  ames == null).. 
2c1a0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2c1b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72                fr
2c1c0 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61 74  ameworkList.Plat
2c1d0 66 6f 72 6d 4e 61 6d 65 73 20 3d 20 6e 65 77 20  formNames = new 
2c1e0 53 74 72 69 6e 67 4c 69 73 74 28 29 3b 0d 0a 0d  StringList();...
2c1f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2c200 20 69 66 20 28 28 63 6f 6e 66 69 67 75 72 61 74   if ((configurat
2c210 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20  ion == null) || 
2c220 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e  !configuration.N
2c230 6f 44 65 73 6b 74 6f 70 29 0d 0a 20 20 20 20 20  oDesktop)..     
2c240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
2c250 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61  rameworkList.Pla
2c260 74 66 6f 72 6d 4e 61 6d 65 73 2e 41 64 64 28 6e  tformNames.Add(n
2c270 75 6c 6c 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ull);....       
2c280 20 20 20 20 20 20 20 20 20 69 66 20 28 28 63 6f           if ((co
2c290 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e  nfiguration == n
2c2a0 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75  ull) || !configu
2c2b0 72 61 74 69 6f 6e 2e 4e 6f 43 6f 6d 70 61 63 74  ration.NoCompact
2c2c0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
2c2d0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2c2e0 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 77            framew
2c2f0 6f 72 6b 4c 69 73 74 2e 50 6c 61 74 66 6f 72 6d  orkList.Platform
2c300 4e 61 6d 65 73 2e 41 64 64 28 22 50 6f 63 6b 65  Names.Add("Pocke
2c310 74 50 43 22 29 3b 0d 0a 20 20 20 20 20 20 20 20  tPC");..        
2c320 20 20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d              fram
2c330 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61 74 66 6f  eworkList.Platfo
2c340 72 6d 4e 61 6d 65 73 2e 41 64 64 28 22 53 6d 61  rmNames.Add("Sma
2c350 72 74 70 68 6f 6e 65 22 29 3b 0d 0a 20 20 20 20  rtphone");..    
2c360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c370 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c  frameworkList.Pl
2c380 61 74 66 6f 72 6d 4e 61 6d 65 73 2e 41 64 64 28  atformNames.Add(
2c390 22 57 69 6e 64 6f 77 73 43 45 22 29 3b 0d 0a 20  "WindowsCE");.. 
2c3a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
2c3b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
2c3c0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
2c3d0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
2c3e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c3f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c400 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c410 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
2c420 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
2c430 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 48 61 76   static bool Hav
2c440 65 46 72 61 6d 65 77 6f 72 6b 44 69 72 65 63 74  eFrameworkDirect
2c450 6f 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ory(..          
2c460 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65    MockRegistryKe
2c470 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20  y rootKey,..    
2c480 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 66          string f
2c490 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 0d 0a 20  rameworkName,.. 
2c4a0 20 20 20 20 20 20 20 20 20 20 20 56 65 72 73 69             Versi
2c4b0 6f 6e 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73  on frameworkVers
2c4c0 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ion,..          
2c4d0 20 20 73 74 72 69 6e 67 20 70 6c 61 74 66 6f 72    string platfor
2c4e0 6d 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  mName,..        
2c4f0 20 20 20 20 62 6f 6f 6c 20 70 65 72 55 73 65 72      bool perUser
2c500 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
2c510 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20  ool wow64,..    
2c520 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61          bool wha
2c530 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf,..          
2c540 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d    bool verbose,.
2c550 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66  .            ref
2c560 20 73 74 72 69 6e 67 20 69 6e 73 74 61 6c 6c 44   string installD
2c570 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 20  irectory..      
2c580 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
2c590 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2c5a0 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d 65 20 3d  string keyName =
2c5b0 20 47 65 74 46 72 61 6d 65 77 6f 72 6b 4b 65 79   GetFrameworkKey
2c5c0 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 20  Name(..         
2c5d0 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b         framework
2c5e0 4e 61 6d 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56  Name, frameworkV
2c5f0 65 72 73 69 6f 6e 2c 20 70 6c 61 74 66 6f 72 6d  ersion, platform
2c600 4e 61 6d 65 2c 20 70 65 72 55 73 65 72 2c 0d 0a  Name, perUser,..
2c610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c620 77 6f 77 36 34 29 3b 0d 0a 0d 0a 20 20 20 20 20  wow64);....     
2c630 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f         using (Mo
2c640 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65  ckRegistryKey ke
2c650 79 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70  y = RegistryHelp
2c660 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a  er.OpenSubKey(..
2c670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c680 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79      rootKey, key
2c690 4e 61 6d 65 2c 20 66 61 6c 73 65 2c 20 77 68 61  Name, false, wha
2c6a0 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a  tIf, verbose))..
2c6b0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2c6c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
2c6d0 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d  f (key == null).
2c6e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2c6f0 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
2c700 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
2c710 20 20 20 20 20 20 69 66 20 28 70 6c 61 74 66 6f        if (platfo
2c720 72 6d 4e 61 6d 65 20 21 3d 20 6e 75 6c 6c 29 20  rmName != null) 
2c730 2f 2f 20 4e 4f 54 45 3a 20 53 6b 69 70 20 6e 6f  // NOTE: Skip no
2c740 6e 2d 64 65 73 6b 74 6f 70 2e 0d 0a 20 20 20 20  n-desktop...    
2c750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c760 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 0d 0a  return true;....
2c770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c780 73 74 72 69 6e 67 20 64 69 72 65 63 74 6f 72 79  string directory
2c790 20 3d 20 47 65 74 46 72 61 6d 65 77 6f 72 6b 44   = GetFrameworkD
2c7a0 69 72 65 63 74 6f 72 79 28 0d 0a 20 20 20 20 20  irectory(..     
2c7b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
2c7c0 6f 6f 74 4b 65 79 2c 20 66 72 61 6d 65 77 6f 72  ootKey, framewor
2c7d0 6b 56 65 72 73 69 6f 6e 2c 20 70 65 72 55 73 65  kVersion, perUse
2c7e0 72 2c 20 77 6f 77 36 34 2c 20 77 68 61 74 49 66  r, wow64, whatIf
2c7f0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2c800 20 20 20 20 20 20 20 76 65 72 62 6f 73 65 29 3b         verbose);
2c810 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2c820 20 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e 49      if (String.I
2c830 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 64 69 72  sNullOrEmpty(dir
2c840 65 63 74 6f 72 79 29 29 0d 0a 20 20 20 20 20 20  ectory))..      
2c850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
2c860 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20  turn false;.... 
2c870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
2c880 66 20 28 21 44 69 72 65 63 74 6f 72 79 2e 45 78  f (!Directory.Ex
2c890 69 73 74 73 28 64 69 72 65 63 74 6f 72 79 29 29  ists(directory))
2c8a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2c8b0 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
2c8c0 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  se;....         
2c8d0 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e         TraceOps.
2c8e0 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72  DebugAndTrace(Tr
2c8f0 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65  acePriority.Lowe
2c900 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r,..            
2c910 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c          debugCal
2c920 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c  lback, traceCall
2c930 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
2c940 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
2c950 20 20 20 20 20 20 20 20 20 20 22 2e 4e 45 54 20            ".NET 
2c960 46 72 61 6d 65 77 6f 72 6b 20 7b 30 7d 20 66 6f  Framework {0} fo
2c970 75 6e 64 20 76 69 61 20 64 69 72 65 63 74 6f 72  und via director
2c980 79 20 7b 31 7d 2e 22 2c 0d 0a 20 20 20 20 20 20  y {1}.",..      
2c990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f                Fo
2c9a0 72 44 69 73 70 6c 61 79 28 66 72 61 6d 65 77 6f  rDisplay(framewo
2c9b0 72 6b 56 65 72 73 69 6f 6e 29 2c 20 46 6f 72 44  rkVersion), ForD
2c9c0 69 73 70 6c 61 79 28 64 69 72 65 63 74 6f 72 79  isplay(directory
2c9d0 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
2c9e0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
2c9f0 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
2ca00 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 73 74              inst
2ca10 61 6c 6c 44 69 72 65 63 74 6f 72 79 20 3d 20 64  allDirectory = d
2ca20 69 72 65 63 74 6f 72 79 3b 0d 0a 20 20 20 20 20  irectory;..     
2ca30 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
2ca40 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  n true;..       
2ca50 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
2ca60 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  }....        ///
2ca70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ca80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ca90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2caa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cab0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
2cac0 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62  private static b
2cad0 6f 6f 6c 20 48 61 76 65 46 72 61 6d 65 77 6f 72  ool HaveFramewor
2cae0 6b 52 65 67 69 73 74 72 79 28 0d 0a 20 20 20 20  kRegistry(..    
2caf0 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69          MockRegi
2cb00 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c  stryKey rootKey,
2cb10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
2cb20 72 69 6e 67 20 66 72 61 6d 65 77 6f 72 6b 4e 61  ring frameworkNa
2cb30 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
2cb40 20 56 65 72 73 69 6f 6e 20 66 72 61 6d 65 77 6f   Version framewo
2cb50 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20  rkVersion,..    
2cb60 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 70          string p
2cb70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 0d 0a 20 20  latformName,..  
2cb80 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 70            bool p
2cb90 65 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 20  erUser,..       
2cba0 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c       bool wow64,
2cbb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
2cbc0 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20  ol whatIf,..    
2cbd0 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72          bool ver
2cbe0 62 6f 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  bose..          
2cbf0 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
2cc00 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
2cc10 6e 67 20 6b 65 79 4e 61 6d 65 20 3d 20 47 65 74  ng keyName = Get
2cc20 46 72 61 6d 65 77 6f 72 6b 4b 65 79 4e 61 6d 65  FrameworkKeyName
2cc30 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
2cc40 20 20 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65     frameworkName
2cc50 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69  , frameworkVersi
2cc60 6f 6e 2c 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65  on, platformName
2cc70 2c 20 70 65 72 55 73 65 72 2c 0d 0a 20 20 20 20  , perUser,..    
2cc80 20 20 20 20 20 20 20 20 20 20 20 20 77 6f 77 36              wow6
2cc90 34 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  4);....         
2cca0 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65     using (MockRe
2ccb0 67 69 73 74 72 79 4b 65 79 20 6b 65 79 20 3d 20  gistryKey key = 
2ccc0 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f  RegistryHelper.O
2ccd0 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20  penSubKey(..    
2cce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ccf0 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65  rootKey, keyName
2cd00 2c 20 66 61 6c 73 65 2c 20 77 68 61 74 49 66 2c  , false, whatIf,
2cd10 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20   verbose))..    
2cd20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2cd30 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6b             if (k
2cd40 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ey == null)..   
2cd50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cd60 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
2cd70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2cd80 20 20 69 66 20 28 70 6c 61 74 66 6f 72 6d 4e 61    if (platformNa
2cd90 6d 65 20 21 3d 20 6e 75 6c 6c 29 20 2f 2f 20 4e  me != null) // N
2cda0 4f 54 45 3a 20 53 6b 69 70 20 6e 6f 6e 2d 64 65  OTE: Skip non-de
2cdb0 73 6b 74 6f 70 2e 0d 0a 20 20 20 20 20 20 20 20  sktop...        
2cdc0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2cdd0 72 6e 20 74 72 75 65 3b 0d 0a 0d 0a 20 20 20 20  rn true;....    
2cde0 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
2cdf0 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
2ce00 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79  ce(TracePriority
2ce10 2e 4c 6f 77 65 72 2c 0d 0a 20 20 20 20 20 20 20  .Lower,..       
2ce20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62               deb
2ce30 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63  ugCallback, trac
2ce40 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
2ce50 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
2ce60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
2ce70 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 7b  .NET Framework {
2ce80 30 7d 20 66 6f 75 6e 64 20 76 69 61 20 72 65 67  0} found via reg
2ce90 69 73 74 72 79 20 7b 31 7d 2e 22 2c 0d 0a 20 20  istry {1}.",..  
2cea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ceb0 20 20 46 6f 72 44 69 73 70 6c 61 79 28 66 72 61    ForDisplay(fra
2cec0 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 29 2c 20  meworkVersion), 
2ced0 46 6f 72 44 69 73 70 6c 61 79 28 6b 65 79 4e 61  ForDisplay(keyNa
2cee0 6d 65 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  me)),..         
2cef0 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
2cf00 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
2cf10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
2cf20 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20  turn true;..    
2cf30 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
2cf40 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
2cf50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cf60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cf70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cf80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cf90 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
2cfa0 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d     [MethodImpl(M
2cfb0 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73  ethodImplOptions
2cfc0 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20  .NoInlining)].. 
2cfd0 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
2cfe0 74 61 74 69 63 20 62 6f 6f 6c 20 46 6f 72 45 61  tatic bool ForEa
2cff0 63 68 46 72 61 6d 65 77 6f 72 6b 43 6f 6e 66 69  chFrameworkConfi
2d000 67 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g(..            
2d010 4d 6f 63 6b 52 65 67 69 73 74 72 79 20 72 65 67  MockRegistry reg
2d020 69 73 74 72 79 2c 0d 0a 20 20 20 20 20 20 20 20  istry,..        
2d030 20 20 20 20 46 72 61 6d 65 77 6f 72 6b 4c 69 73      FrameworkLis
2d040 74 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2c  t frameworkList,
2d050 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 46 72  ..            Fr
2d060 61 6d 65 77 6f 72 6b 43 6f 6e 66 69 67 43 61 6c  ameworkConfigCal
2d070 6c 62 61 63 6b 20 63 61 6c 6c 62 61 63 6b 2c 0d  lback callback,.
2d080 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
2d090 69 6e 67 20 76 65 72 73 69 6f 6e 2c 20 2f 2a 20  ing version, /* 
2d0a0 4e 4f 54 45 3a 20 4f 70 74 69 6f 6e 61 6c 2e 20  NOTE: Optional. 
2d0b0 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  */..            
2d0c0 73 74 72 69 6e 67 20 69 6e 76 61 72 69 61 6e 74  string invariant
2d0d0 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
2d0e0 20 20 20 73 74 72 69 6e 67 20 6e 61 6d 65 2c 0d     string name,.
2d0f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
2d100 69 6e 67 20 64 65 73 63 72 69 70 74 69 6f 6e 2c  ing description,
2d110 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
2d120 72 69 6e 67 20 74 79 70 65 4e 61 6d 65 2c 0d 0a  ring typeName,..
2d130 20 20 20 20 20 20 20 20 20 20 20 20 41 73 73 65              Asse
2d140 6d 62 6c 79 4e 61 6d 65 20 61 73 73 65 6d 62 6c  mblyName assembl
2d150 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  yName,..        
2d160 20 20 20 20 6f 62 6a 65 63 74 20 63 6c 69 65 6e      object clien
2d170 74 44 61 74 61 2c 0d 0a 20 20 20 20 20 20 20 20  tData,..        
2d180 20 20 20 20 62 6f 6f 6c 20 70 65 72 55 73 65 72      bool perUser
2d190 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
2d1a0 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20  ool wow64,..    
2d1b0 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 74 68 72          bool thr
2d1c0 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20  owOnMissing,..  
2d1d0 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77            bool w
2d1e0 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20  hatIf,..        
2d1f0 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65      bool verbose
2d200 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ,..            r
2d210 65 66 20 62 6f 6f 6c 20 73 61 76 65 64 2c 0d 0a  ef bool saved,..
2d220 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
2d230 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20  string error..  
2d240 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
2d250 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2d260 20 20 20 20 69 66 20 28 72 65 67 69 73 74 72 79      if (registry
2d270 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
2d280 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2d290 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
2d2a0 3d 20 22 69 6e 76 61 6c 69 64 20 72 65 67 69 73  = "invalid regis
2d2b0 74 72 79 22 3b 0d 0a 20 20 20 20 20 20 20 20 20  try";..         
2d2c0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
2d2d0 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
2d2e0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
2d2f0 20 20 20 69 66 20 28 66 72 61 6d 65 77 6f 72 6b     if (framework
2d300 4c 69 73 74 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  List == null).. 
2d310 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2d320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
2d330 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 66  ror = "invalid f
2d340 72 61 6d 65 77 6f 72 6b 20 6c 69 73 74 22 3b 0d  ramework list";.
2d350 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2d360 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
2d370 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
2d380 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63  .            Moc
2d390 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f  kRegistryKey roo
2d3a0 74 4b 65 79 20 3d 20 66 72 61 6d 65 77 6f 72 6b  tKey = framework
2d3b0 4c 69 73 74 2e 52 6f 6f 74 4b 65 79 3b 0d 0a 0d  List.RootKey;...
2d3c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
2d3d0 28 72 6f 6f 74 4b 65 79 20 3d 3d 20 6e 75 6c 6c  (rootKey == null
2d3e0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
2d3f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2d400 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c    error = "inval
2d410 69 64 20 72 6f 6f 74 20 6b 65 79 22 3b 0d 0a 20  id root key";.. 
2d420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
2d430 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
2d440 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
2d450 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
2d460 49 73 53 75 70 70 6f 72 74 65 64 52 6f 6f 74 4b  IsSupportedRootK
2d470 65 79 28 72 65 67 69 73 74 72 79 2c 20 72 6f 6f  ey(registry, roo
2d480 74 4b 65 79 29 29 0d 0a 20 20 20 20 20 20 20 20  tKey))..        
2d490 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2d4a0 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22         error = "
2d4b0 72 6f 6f 74 20 6b 65 79 20 6d 75 73 74 20 62 65  root key must be
2d4c0 20 70 65 72 2d 75 73 65 72 20 6f 72 20 70 65 72   per-user or per
2d4d0 2d 6d 61 63 68 69 6e 65 22 3b 0d 0a 20 20 20 20  -machine";..    
2d4e0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2d4f0 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
2d500 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
2d510 20 20 20 20 20 20 20 20 69 66 20 28 66 72 61 6d          if (fram
2d520 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 20  eworkList.Names 
2d530 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
2d540 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2d550 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
2d560 20 22 6e 6f 20 66 72 61 6d 65 77 6f 72 6b 20 6e   "no framework n
2d570 61 6d 65 73 20 66 6f 75 6e 64 22 3b 0d 0a 20 20  ames found";..  
2d580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
2d590 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
2d5a0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
2d5b0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 66 72            if (fr
2d5c0 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 56 65 72 73  ameworkList.Vers
2d5d0 69 6f 6e 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  ions == null).. 
2d5e0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2d5f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
2d600 72 6f 72 20 3d 20 22 6e 6f 20 66 72 61 6d 65 77  ror = "no framew
2d610 6f 72 6b 20 76 65 72 73 69 6f 6e 73 20 66 6f 75  ork versions fou
2d620 6e 64 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  nd";..          
2d630 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
2d640 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
2d650 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
2d660 20 20 69 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c    if (frameworkL
2d670 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65  ist.PlatformName
2d680 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  s == null)..    
2d690 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2d6a0 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
2d6b0 20 3d 20 22 6e 6f 20 70 6c 61 74 66 6f 72 6d 20   = "no platform 
2d6c0 6e 61 6d 65 73 20 66 6f 75 6e 64 22 3b 0d 0a 20  names found";.. 
2d6d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
2d6e0 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
2d6f0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
2d700 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 66             if (f
2d710 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d  rameworkList.Nam
2d720 65 73 2e 43 6f 75 6e 74 20 21 3d 20 66 72 61 6d  es.Count != fram
2d730 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61 74 66 6f  eworkList.Platfo
2d740 72 6d 4e 61 6d 65 73 2e 43 6f 75 6e 74 29 0d 0a  rmNames.Count)..
2d750 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2d760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
2d770 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f  rror = String.Fo
2d780 72 6d 61 74 28 22 66 72 61 6d 65 77 6f 72 6b 20  rmat("framework 
2d790 6e 61 6d 65 20 63 6f 75 6e 74 20 7b 30 7d 20 64  name count {0} d
2d7a0 6f 65 73 20 6e 6f 74 20 22 20 2b 0d 0a 20 20 20  oes not " +..   
2d7b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d7c0 20 22 6d 61 74 63 68 20 70 6c 61 74 66 6f 72 6d   "match platform
2d7d0 20 6e 61 6d 65 20 63 6f 75 6e 74 20 7b 31 7d 22   name count {1}"
2d7e0 2c 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e  , frameworkList.
2d7f0 4e 61 6d 65 73 2e 43 6f 75 6e 74 2c 0d 0a 20 20  Names.Count,..  
2d800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d810 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e    frameworkList.
2d820 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 2e 43 6f  PlatformNames.Co
2d830 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  unt);....       
2d840 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
2d850 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
2d860 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
2d870 20 20 20 20 20 66 6f 72 20 28 69 6e 74 20 69 6e       for (int in
2d880 64 65 78 20 3d 20 30 3b 20 69 6e 64 65 78 20 3c  dex = 0; index <
2d890 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e   frameworkList.N
2d8a0 61 6d 65 73 2e 43 6f 75 6e 74 3b 20 69 6e 64 65  ames.Count; inde
2d8b0 78 2b 2b 29 0d 0a 20 20 20 20 20 20 20 20 20 20  x++)..          
2d8c0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2d8d0 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
2d8e0 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
2d8f0 3a 20 47 72 61 62 20 74 68 65 20 6e 61 6d 65 20  : Grab the name 
2d900 6f 66 20 74 68 65 20 66 72 61 6d 65 77 6f 72 6b  of the framework
2d910 20 28 65 2e 67 2e 20 22 2e 4e 45 54 46 72 61 6d   (e.g. ".NETFram
2d920 65 77 6f 72 6b 22 29 0d 0a 20 20 20 20 20 20 20  ework")..       
2d930 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
2d940 20 20 61 6e 64 20 74 68 65 20 6e 61 6d 65 20 6f    and the name o
2d950 66 20 74 68 65 20 70 6c 61 74 66 6f 72 6d 20 28  f the platform (
2d960 65 2e 67 2e 20 22 57 69 6e 64 6f 77 73 43 45 22  e.g. "WindowsCE"
2d970 29 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  )...            
2d980 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
2d990 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 66          string f
2d9a0 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 20 3d 20 66  rameworkName = f
2d9b0 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d  rameworkList.Nam
2d9c0 65 73 5b 69 6e 64 65 78 5d 3b 0d 0a 20 20 20 20  es[index];..    
2d9d0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
2d9e0 6e 67 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 20  ng platformName 
2d9f0 3d 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e  = frameworkList.
2da00 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 5b 69 6e  PlatformNames[in
2da10 64 65 78 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  dex];....       
2da20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
2da30 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
2da40 4e 4f 54 45 3a 20 53 6b 69 70 20 61 6c 6c 20 6e  NOTE: Skip all n
2da50 6f 6e 2d 64 65 73 6b 74 6f 70 20 66 72 61 6d 65  on-desktop frame
2da60 77 6f 72 6b 73 20 28 69 2e 65 2e 20 69 66 20 74  works (i.e. if t
2da70 68 65 20 70 6c 61 74 66 6f 72 6d 0d 0a 20 20 20  he platform..   
2da80 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
2da90 20 20 20 20 20 20 6e 61 6d 65 20 69 73 20 6e 6f        name is no
2daa0 74 20 6e 75 6c 6c 29 2e 0d 0a 20 20 20 20 20 20  t null)...      
2dab0 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
2dac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
2dad0 20 28 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 20 21   (platformName !
2dae0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
2daf0 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
2db00 74 69 6e 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  tinue;....      
2db10 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
2db20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
2db30 20 4e 4f 54 45 3a 20 47 72 61 62 20 74 68 65 20   NOTE: Grab the 
2db40 73 75 70 70 6f 72 74 65 64 20 76 65 72 73 69 6f  supported versio
2db50 6e 73 20 6f 66 20 74 68 69 73 20 70 61 72 74 69  ns of this parti
2db60 63 75 6c 61 72 0d 0a 20 20 20 20 20 20 20 20 20  cular..         
2db70 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
2db80 66 72 61 6d 65 77 6f 72 6b 2e 0d 0a 20 20 20 20  framework...    
2db90 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
2dba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dbb0 56 65 72 73 69 6f 6e 4c 69 73 74 20 66 72 61 6d  VersionList fram
2dbc0 65 77 6f 72 6b 56 65 72 73 69 6f 6e 4c 69 73 74  eworkVersionList
2dbd0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2dbe0 20 20 20 20 20 69 66 20 28 76 65 72 73 69 6f 6e       if (version
2dbf0 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   != null)..     
2dc00 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2dc10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dc20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
2dc30 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
2dc40 45 3a 20 4d 61 6e 75 61 6c 20 6f 76 65 72 72 69  E: Manual overri
2dc50 64 65 20 6f 66 20 74 68 65 20 2a 4f 4e 45 2a 20  de of the *ONE* 
2dc60 66 72 61 6d 65 77 6f 72 6b 20 76 65 72 73 69 6f  framework versio
2dc70 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  n..             
2dc80 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
2dc90 74 6f 20 70 72 6f 63 65 73 73 2e 0d 0a 20 20 20  to process...   
2dca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dcb0 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
2dcc0 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f           framewo
2dcd0 72 6b 56 65 72 73 69 6f 6e 4c 69 73 74 20 3d 20  rkVersionList = 
2dce0 6e 65 77 20 56 65 72 73 69 6f 6e 4c 69 73 74 28  new VersionList(
2dcf0 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
2dd00 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72          framewor
2dd10 6b 56 65 72 73 69 6f 6e 4c 69 73 74 2e 41 64 64  kVersionList.Add
2dd20 28 6e 65 77 20 56 65 72 73 69 6f 6e 28 76 65 72  (new Version(ver
2dd30 73 69 6f 6e 29 29 3b 0d 0a 20 20 20 20 20 20 20  sion));..       
2dd40 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
2dd50 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
2dd60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2dd70 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2dd80 20 20 20 20 20 20 20 20 20 69 66 20 28 21 66 72           if (!fr
2dd90 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 56 65 72 73  ameworkList.Vers
2dda0 69 6f 6e 73 2e 54 72 79 47 65 74 56 61 6c 75 65  ions.TryGetValue
2ddb0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
2ddc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
2ddd0 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20 6f 75  rameworkName, ou
2dde0 74 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69  t frameworkVersi
2ddf0 6f 6e 4c 69 73 74 29 20 7c 7c 0d 0a 20 20 20 20  onList) ||..    
2de00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2de10 20 20 20 20 28 66 72 61 6d 65 77 6f 72 6b 56 65      (frameworkVe
2de20 72 73 69 6f 6e 4c 69 73 74 20 3d 3d 20 6e 75 6c  rsionList == nul
2de30 6c 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  l))..           
2de40 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2de50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2de60 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20      continue;.. 
2de70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2de80 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
2de90 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
2dea0 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61             forea
2deb0 63 68 20 28 56 65 72 73 69 6f 6e 20 66 72 61 6d  ch (Version fram
2dec0 65 77 6f 72 6b 56 65 72 73 69 6f 6e 20 69 6e 20  eworkVersion in 
2ded0 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e  frameworkVersion
2dee0 4c 69 73 74 29 0d 0a 20 20 20 20 20 20 20 20 20  List)..         
2def0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2df00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
2df10 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
2df20 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69  race(TracePriori
2df30 74 79 2e 4c 6f 77 65 72 2c 0d 0a 20 20 20 20 20  ty.Lower,..     
2df40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2df50 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b     debugCallback
2df60 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c  , traceCallback,
2df70 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
2df80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2df90 20 20 20 20 20 20 20 20 20 22 66 72 61 6d 65 77           "framew
2dfa0 6f 72 6b 4e 61 6d 65 20 3d 20 7b 30 7d 2c 20 66  orkName = {0}, f
2dfb0 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 20  rameworkVersion 
2dfc0 3d 20 7b 31 7d 2c 20 22 20 2b 0d 0a 20 20 20 20  = {1}, " +..    
2dfd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dfe0 20 20 20 20 22 70 6c 61 74 66 6f 72 6d 4e 61 6d      "platformNam
2dff0 65 20 3d 20 7b 32 7d 22 2c 20 46 6f 72 44 69 73  e = {2}", ForDis
2e000 70 6c 61 79 28 66 72 61 6d 65 77 6f 72 6b 4e 61  play(frameworkNa
2e010 6d 65 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  me),..          
2e020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f                Fo
2e030 72 44 69 73 70 6c 61 79 28 66 72 61 6d 65 77 6f  rDisplay(framewo
2e040 72 6b 56 65 72 73 69 6f 6e 29 2c 0d 0a 20 20 20  rkVersion),..   
2e050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e060 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28       ForDisplay(
2e070 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 29 29 2c 20  platformName)), 
2e080 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
2e090 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2e0a0 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 69 6e         string in
2e0b0 73 74 61 6c 6c 44 69 72 65 63 74 6f 72 79 20 3d  stallDirectory =
2e0c0 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20   null;....      
2e0d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
2e0e0 20 28 21 48 61 76 65 46 72 61 6d 65 77 6f 72 6b   (!HaveFramework
2e0f0 44 69 72 65 63 74 6f 72 79 28 0d 0a 20 20 20 20  Directory(..    
2e100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e110 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c          rootKey,
2e120 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20   frameworkName, 
2e130 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e  frameworkVersion
2e140 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2e150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
2e160 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 20 70 65 72  latformName, per
2e170 55 73 65 72 2c 20 77 6f 77 36 34 2c 20 77 68 61  User, wow64, wha
2e180 74 49 66 2c 20 76 65 72 62 6f 73 65 2c 0d 0a 20  tIf, verbose,.. 
2e190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e1a0 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 69             ref i
2e1b0 6e 73 74 61 6c 6c 44 69 72 65 63 74 6f 72 79 29  nstallDirectory)
2e1c0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
2e1d0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2e1e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e1f0 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67    TraceOps.Debug
2e200 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72  AndTrace(TracePr
2e210 69 6f 72 69 74 79 2e 4c 6f 77 2c 0d 0a 20 20 20  iority.Low,..   
2e220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e230 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61           debugCa
2e240 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c  llback, traceCal
2e250 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
2e260 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
2e270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e280 20 20 20 22 2e 4e 45 54 20 46 72 61 6d 65 77 6f     ".NET Framewo
2e290 72 6b 20 7b 30 7d 20 64 69 72 65 63 74 6f 72 79  rk {0} directory
2e2a0 20 6e 6f 74 20 66 6f 75 6e 64 2c 20 22 20 2b 0d   not found, " +.
2e2b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2e2c0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 73 6b               "sk
2e2d0 69 70 70 69 6e 67 2e 2e 2e 22 2c 20 46 6f 72 44  ipping...", ForD
2e2e0 69 73 70 6c 61 79 28 66 72 61 6d 65 77 6f 72 6b  isplay(framework
2e2f0 56 65 72 73 69 6f 6e 29 29 2c 0d 0a 20 20 20 20  Version)),..    
2e300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e310 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
2e320 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
2e330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e340 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20     continue;..  
2e350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e360 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
2e370 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63             if (c
2e380 61 6c 6c 62 61 63 6b 20 3d 3d 20 6e 75 6c 6c 29  allback == null)
2e390 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2e3a0 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e            contin
2e3b0 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ue;....         
2e3c0 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
2e3d0 67 20 64 69 72 65 63 74 6f 72 79 20 3d 20 69 6e  g directory = in
2e3e0 73 74 61 6c 6c 44 69 72 65 63 74 6f 72 79 3b 0d  stallDirectory;.
2e3f0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2e400 20 20 20 20 20 20 20 69 66 20 28 53 74 72 69 6e         if (Strin
2e410 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28  g.IsNullOrEmpty(
2e420 64 69 72 65 63 74 6f 72 79 29 29 0d 0a 20 20 20  directory))..   
2e430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e440 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2e450 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
2e460 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
2e470 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79  ce(TracePriority
2e480 2e 4c 6f 77 2c 0d 0a 20 20 20 20 20 20 20 20 20  .Low,..         
2e490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e4a0 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b     debugCallback
2e4b0 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c  , traceCallback,
2e4c0 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
2e4d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2e4e0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2e 4e               ".N
2e4f0 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 7b 30 7d  ET Framework {0}
2e500 20 64 69 72 65 63 74 6f 72 79 20 69 73 20 69 6e   directory is in
2e510 76 61 6c 69 64 2c 20 22 20 2b 0d 0a 20 20 20 20  valid, " +..    
2e520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e530 20 20 20 20 20 20 20 20 22 73 6b 69 70 70 69 6e          "skippin
2e540 67 2e 2e 2e 22 2c 20 46 6f 72 44 69 73 70 6c 61  g...", ForDispla
2e550 79 28 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69  y(frameworkVersi
2e560 6f 6e 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  on)),..         
2e570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e580 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
2e590 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
2e5a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
2e5b0 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20  ntinue;..       
2e5c0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
2e5d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2e5e0 20 20 20 20 20 20 64 69 72 65 63 74 6f 72 79 20        directory 
2e5f0 3d 20 50 61 74 68 2e 43 6f 6d 62 69 6e 65 28 64  = Path.Combine(d
2e600 69 72 65 63 74 6f 72 79 2c 20 22 43 6f 6e 66 69  irectory, "Confi
2e610 67 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  g");....        
2e620 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2e630 21 44 69 72 65 63 74 6f 72 79 2e 45 78 69 73 74  !Directory.Exist
2e640 73 28 64 69 72 65 63 74 6f 72 79 29 29 0d 0a 20  s(directory)).. 
2e650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e660 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2e670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
2e680 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
2e690 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69  race(TracePriori
2e6a0 74 79 2e 4c 6f 77 2c 0d 0a 20 20 20 20 20 20 20  ty.Low,..       
2e6b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e6c0 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61       debugCallba
2e6d0 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63  ck, traceCallbac
2e6e0 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
2e6f0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
2e700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
2e710 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 7b  .NET Framework {
2e720 30 7d 20 64 69 72 65 63 74 6f 72 79 20 7b 31 7d  0} directory {1}
2e730 20 64 6f 65 73 20 6e 6f 74 20 22 20 2b 0d 0a 20   does not " +.. 
2e740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e750 20 20 20 20 20 20 20 20 20 20 20 22 65 78 69 73             "exis
2e760 74 2c 20 73 6b 69 70 70 69 6e 67 2e 2e 2e 22 2c  t, skipping...",
2e770 20 46 6f 72 44 69 73 70 6c 61 79 28 66 72 61 6d   ForDisplay(fram
2e780 65 77 6f 72 6b 56 65 72 73 69 6f 6e 29 2c 0d 0a  eworkVersion),..
2e790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e7a0 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44              ForD
2e7b0 69 73 70 6c 61 79 28 64 69 72 65 63 74 6f 72 79  isplay(directory
2e7c0 29 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72  )), traceCategor
2e7d0 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
2e7e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
2e7f0 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20  ontinue;..      
2e800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
2e810 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2e820 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 66 69         string fi
2e830 6c 65 4e 61 6d 65 20 3d 20 50 61 74 68 2e 43 6f  leName = Path.Co
2e840 6d 62 69 6e 65 28 64 69 72 65 63 74 6f 72 79 2c  mbine(directory,
2e850 20 22 6d 61 63 68 69 6e 65 2e 63 6f 6e 66 69 67   "machine.config
2e860 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ");....         
2e870 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
2e880 46 69 6c 65 2e 45 78 69 73 74 73 28 66 69 6c 65  File.Exists(file
2e890 4e 61 6d 65 29 29 0d 0a 20 20 20 20 20 20 20 20  Name))..        
2e8a0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2e8b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e8c0 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e         TraceOps.
2e8d0 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72  DebugAndTrace(Tr
2e8e0 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 2c  acePriority.Low,
2e8f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2e900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
2e910 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61  bugCallback, tra
2e920 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69  ceCallback, Stri
2e930 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
2e940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e950 20 20 20 20 20 20 20 20 22 2e 4e 45 54 20 46 72          ".NET Fr
2e960 61 6d 65 77 6f 72 6b 20 7b 30 7d 20 66 69 6c 65  amework {0} file
2e970 20 7b 31 7d 20 64 6f 65 73 20 6e 6f 74 20 65 78   {1} does not ex
2e980 69 73 74 2c 20 22 20 2b 0d 0a 20 20 20 20 20 20  ist, " +..      
2e990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e9a0 20 20 20 20 20 20 22 73 6b 69 70 70 69 6e 67 2e        "skipping.
2e9b0 2e 2e 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  ..", ForDisplay(
2e9c0 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e  frameworkVersion
2e9d0 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
2e9e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e9f0 46 6f 72 44 69 73 70 6c 61 79 28 66 69 6c 65 4e  ForDisplay(fileN
2ea00 61 6d 65 29 29 2c 20 74 72 61 63 65 43 61 74 65  ame)), traceCate
2ea10 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
2ea20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ea30 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20    continue;..   
2ea40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ea50 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
2ea60 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 6c            bool l
2ea70 6f 63 61 6c 53 61 76 65 64 20 3d 20 66 61 6c 73  ocalSaved = fals
2ea80 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
2ea90 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 63            if (!c
2eaa0 61 6c 6c 62 61 63 6b 28 0d 0a 20 20 20 20 20 20  allback(..      
2eab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2eac0 20 20 20 20 20 20 66 69 6c 65 4e 61 6d 65 2c 20        fileName, 
2ead0 69 6e 76 61 72 69 61 6e 74 4e 61 6d 65 2c 20 6e  invariantName, n
2eae0 61 6d 65 2c 20 64 65 73 63 72 69 70 74 69 6f 6e  ame, description
2eaf0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2eb00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
2eb10 79 70 65 4e 61 6d 65 2c 20 61 73 73 65 6d 62 6c  ypeName, assembl
2eb20 79 4e 61 6d 65 2c 20 69 6e 73 74 61 6c 6c 44 69  yName, installDi
2eb30 72 65 63 74 6f 72 79 2c 0d 0a 20 20 20 20 20 20  rectory,..      
2eb40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2eb50 20 20 20 20 20 20 63 6c 69 65 6e 74 44 61 74 61        clientData
2eb60 2c 20 70 65 72 55 73 65 72 2c 20 77 6f 77 36 34  , perUser, wow64
2eb70 2c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67  , throwOnMissing
2eb80 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2eb90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77                 w
2eba0 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 2c 20  hatIf, verbose, 
2ebb0 72 65 66 20 6c 6f 63 61 6c 53 61 76 65 64 2c 20  ref localSaved, 
2ebc0 72 65 66 20 65 72 72 6f 72 29 29 0d 0a 20 20 20  ref error))..   
2ebd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ebe0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2ebf0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2ec00 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
2ec10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
2ec20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2ec30 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20        else..    
2ec40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ec50 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2ec60 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6c             if (l
2ec70 6f 63 61 6c 53 61 76 65 64 20 26 26 20 21 73 61  ocalSaved && !sa
2ec80 76 65 64 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ved)..          
2ec90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2eca0 20 20 73 61 76 65 64 20 3d 20 74 72 75 65 3b 0d    saved = true;.
2ecb0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2ecc0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76             if (v
2ecd0 65 72 62 6f 73 65 29 0d 0a 20 20 20 20 20 20 20  erbose)..       
2ece0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ecf0 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65       TraceOps.De
2ed00 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63  bugAndTrace(Trac
2ed10 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74  ePriority.Lowest
2ed20 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2ed30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ed40 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b     debugCallback
2ed50 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c  , traceCallback,
2ed60 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
2ed70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2ed80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ed90 20 22 6c 6f 63 61 6c 53 61 76 65 64 20 3d 20 7b   "localSaved = {
2eda0 30 7d 2c 20 73 61 76 65 64 20 3d 20 7b 31 7d 22  0}, saved = {1}"
2edb0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2edc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2edd0 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 6c 6f     ForDisplay(lo
2ede0 63 61 6c 53 61 76 65 64 29 2c 20 46 6f 72 44 69  calSaved), ForDi
2edf0 73 70 6c 61 79 28 73 61 76 65 64 29 29 2c 0d 0a  splay(saved)),..
2ee00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ee10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ee20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
2ee30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2ee40 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
2ee50 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
2ee60 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
2ee70 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74          return t
2ee80 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  rue;..        }.
2ee90 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
2eea0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2eeb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2eec0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2eed0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2eee0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 5b 4d  //....        [M
2eef0 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64  ethodImpl(Method
2ef00 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e  ImplOptions.NoIn
2ef10 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20  lining)]..      
2ef20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
2ef30 20 62 6f 6f 6c 20 46 6f 72 45 61 63 68 46 72 61   bool ForEachFra
2ef40 6d 65 77 6f 72 6b 52 65 67 69 73 74 72 79 28 0d  meworkRegistry(.
2ef50 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63  .            Moc
2ef60 6b 52 65 67 69 73 74 72 79 20 72 65 67 69 73 74  kRegistry regist
2ef70 72 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ry,..           
2ef80 20 46 72 61 6d 65 77 6f 72 6b 4c 69 73 74 20 66   FrameworkList f
2ef90 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2c 0d 0a 20  rameworkList,.. 
2efa0 20 20 20 20 20 20 20 20 20 20 20 46 72 61 6d 65             Frame
2efb0 77 6f 72 6b 52 65 67 69 73 74 72 79 43 61 6c 6c  workRegistryCall
2efc0 62 61 63 6b 20 63 61 6c 6c 62 61 63 6b 2c 0d 0a  back callback,..
2efd0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
2efe0 6e 67 20 76 65 72 73 69 6f 6e 2c 20 2f 2a 20 4e  ng version, /* N
2eff0 4f 54 45 3a 20 4f 70 74 69 6f 6e 61 6c 2e 20 2a  OTE: Optional. *
2f000 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f  /..            o
2f010 62 6a 65 63 74 20 63 6c 69 65 6e 74 44 61 74 61  bject clientData
2f020 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
2f030 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d 0a 20 20  ool perUser,..  
2f040 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77            bool w
2f050 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 20  ow64,..         
2f060 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d     bool throwOnM
2f070 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20  issing,..       
2f080 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66       bool whatIf
2f090 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
2f0a0 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20  ool verbose,..  
2f0b0 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74            ref st
2f0c0 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20  ring error..    
2f0d0 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
2f0e0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2f0f0 20 20 69 66 20 28 72 65 67 69 73 74 72 79 20 3d    if (registry =
2f100 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
2f110 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2f120 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
2f130 22 69 6e 76 61 6c 69 64 20 72 65 67 69 73 74 72  "invalid registr
2f140 79 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  y";..           
2f150 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
2f160 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
2f170 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
2f180 20 69 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69   if (frameworkLi
2f190 73 74 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  st == null)..   
2f1a0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2f1b0 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
2f1c0 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 66 72 61  r = "invalid fra
2f1d0 6d 65 77 6f 72 6b 20 6c 69 73 74 22 3b 0d 0a 20  mework list";.. 
2f1e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
2f1f0 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
2f200 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
2f210 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52             MockR
2f220 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b  egistryKey rootK
2f230 65 79 20 3d 20 66 72 61 6d 65 77 6f 72 6b 4c 69  ey = frameworkLi
2f240 73 74 2e 52 6f 6f 74 4b 65 79 3b 0d 0a 0d 0a 20  st.RootKey;.... 
2f250 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 72             if (r
2f260 6f 6f 74 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d  ootKey == null).
2f270 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
2f280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f290 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64  error = "invalid
2f2a0 20 72 6f 6f 74 20 6b 65 79 22 3b 0d 0a 20 20 20   root key";..   
2f2b0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
2f2c0 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
2f2d0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
2f2e0 20 20 20 20 20 20 20 20 20 69 66 20 28 21 49 73           if (!Is
2f2f0 53 75 70 70 6f 72 74 65 64 52 6f 6f 74 4b 65 79  SupportedRootKey
2f300 28 72 65 67 69 73 74 72 79 2c 20 72 6f 6f 74 4b  (registry, rootK
2f310 65 79 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ey))..          
2f320 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2f330 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 72 6f       error = "ro
2f340 6f 74 20 6b 65 79 20 6d 75 73 74 20 62 65 20 70  ot key must be p
2f350 65 72 2d 75 73 65 72 20 6f 72 20 70 65 72 2d 6d  er-user or per-m
2f360 61 63 68 69 6e 65 22 3b 0d 0a 20 20 20 20 20 20  achine";..      
2f370 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
2f380 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
2f390 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
2f3a0 20 20 20 20 20 20 69 66 20 28 66 72 61 6d 65 77        if (framew
2f3b0 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 20 3d 3d  orkList.Names ==
2f3c0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
2f3d0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2f3e0 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22         error = "
2f3f0 6e 6f 20 66 72 61 6d 65 77 6f 72 6b 20 6e 61 6d  no framework nam
2f400 65 73 20 66 6f 75 6e 64 22 3b 0d 0a 20 20 20 20  es found";..    
2f410 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2f420 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
2f430 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
2f440 20 20 20 20 20 20 20 20 69 66 20 28 66 72 61 6d          if (fram
2f450 65 77 6f 72 6b 4c 69 73 74 2e 56 65 72 73 69 6f  eworkList.Versio
2f460 6e 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ns == null)..   
2f470 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2f480 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
2f490 72 20 3d 20 22 6e 6f 20 66 72 61 6d 65 77 6f 72  r = "no framewor
2f4a0 6b 20 76 65 72 73 69 6f 6e 73 20 66 6f 75 6e 64  k versions found
2f4b0 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ";..            
2f4c0 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
2f4d0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
2f4e0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2f4f0 69 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73  if (frameworkLis
2f500 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 20  t.PlatformNames 
2f510 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
2f520 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2f530 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
2f540 20 22 6e 6f 20 70 6c 61 74 66 6f 72 6d 20 6e 61   "no platform na
2f550 6d 65 73 20 66 6f 75 6e 64 22 3b 0d 0a 20 20 20  mes found";..   
2f560 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
2f570 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
2f580 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
2f590 20 20 20 20 20 20 20 20 20 69 66 20 28 66 72 61           if (fra
2f5a0 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73  meworkList.Names
2f5b0 2e 43 6f 75 6e 74 20 21 3d 20 66 72 61 6d 65 77  .Count != framew
2f5c0 6f 72 6b 4c 69 73 74 2e 50 6c 61 74 66 6f 72 6d  orkList.Platform
2f5d0 4e 61 6d 65 73 2e 43 6f 75 6e 74 29 0d 0a 20 20  Names.Count)..  
2f5e0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2f5f0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
2f600 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d  or = String.Form
2f610 61 74 28 22 66 72 61 6d 65 77 6f 72 6b 20 6e 61  at("framework na
2f620 6d 65 20 63 6f 75 6e 74 20 7b 30 7d 20 64 6f 65  me count {0} doe
2f630 73 20 6e 6f 74 20 22 20 2b 0d 0a 20 20 20 20 20  s not " +..     
2f640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
2f650 6d 61 74 63 68 20 70 6c 61 74 66 6f 72 6d 20 6e  match platform n
2f660 61 6d 65 20 63 6f 75 6e 74 20 7b 31 7d 22 2c 20  ame count {1}", 
2f670 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61  frameworkList.Na
2f680 6d 65 73 2e 43 6f 75 6e 74 2c 0d 0a 20 20 20 20  mes.Count,..    
2f690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f6a0 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c  frameworkList.Pl
2f6b0 61 74 66 6f 72 6d 4e 61 6d 65 73 2e 43 6f 75 6e  atformNames.Coun
2f6c0 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  t);....         
2f6d0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
2f6e0 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
2f6f0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
2f700 20 20 20 66 6f 72 20 28 69 6e 74 20 69 6e 64 65     for (int inde
2f710 78 20 3d 20 30 3b 20 69 6e 64 65 78 20 3c 20 66  x = 0; index < f
2f720 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d  rameworkList.Nam
2f730 65 73 2e 43 6f 75 6e 74 3b 20 69 6e 64 65 78 2b  es.Count; index+
2f740 2b 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  +)..            
2f750 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2f760 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
2f770 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
2f780 47 72 61 62 20 74 68 65 20 6e 61 6d 65 20 6f 66  Grab the name of
2f790 20 74 68 65 20 66 72 61 6d 65 77 6f 72 6b 20 28   the framework (
2f7a0 65 2e 67 2e 20 22 2e 4e 45 54 46 72 61 6d 65 77  e.g. ".NETFramew
2f7b0 6f 72 6b 22 29 0d 0a 20 20 20 20 20 20 20 20 20  ork")..         
2f7c0 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
2f7d0 61 6e 64 20 74 68 65 20 6e 61 6d 65 20 6f 66 20  and the name of 
2f7e0 74 68 65 20 70 6c 61 74 66 6f 72 6d 20 28 65 2e  the platform (e.
2f7f0 67 2e 20 22 57 69 6e 64 6f 77 73 43 45 22 29 2e  g. "WindowsCE").
2f800 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2f810 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
2f820 20 20 20 20 20 20 73 74 72 69 6e 67 20 66 72 61        string fra
2f830 6d 65 77 6f 72 6b 4e 61 6d 65 20 3d 20 66 72 61  meworkName = fra
2f840 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73  meworkList.Names
2f850 5b 69 6e 64 65 78 5d 3b 0d 0a 20 20 20 20 20 20  [index];..      
2f860 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
2f870 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 20 3d 20   platformName = 
2f880 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c  frameworkList.Pl
2f890 61 74 66 6f 72 6d 4e 61 6d 65 73 5b 69 6e 64 65  atformNames[inde
2f8a0 78 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  x];....         
2f8b0 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
2f8c0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
2f8d0 54 45 3a 20 47 72 61 62 20 74 68 65 20 73 75 70  TE: Grab the sup
2f8e0 70 6f 72 74 65 64 20 76 65 72 73 69 6f 6e 73 20  ported versions 
2f8f0 6f 66 20 74 68 69 73 20 70 61 72 74 69 63 75 6c  of this particul
2f900 61 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ar..            
2f910 20 20 20 20 2f 2f 20 20 20 20 20 20 20 66 72 61      //       fra
2f920 6d 65 77 6f 72 6b 2e 0d 0a 20 20 20 20 20 20 20  mework...       
2f930 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
2f940 20 20 20 20 20 20 20 20 20 20 20 20 20 56 65 72               Ver
2f950 73 69 6f 6e 4c 69 73 74 20 66 72 61 6d 65 77 6f  sionList framewo
2f960 72 6b 56 65 72 73 69 6f 6e 4c 69 73 74 3b 0d 0a  rkVersionList;..
2f970 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2f980 20 20 69 66 20 28 76 65 72 73 69 6f 6e 20 21 3d    if (version !=
2f990 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
2f9a0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2f9b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
2f9c0 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
2f9d0 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
2f9e0 4d 61 6e 75 61 6c 20 6f 76 65 72 72 69 64 65 20  Manual override 
2f9f0 6f 66 20 74 68 65 20 2a 4f 4e 45 2a 20 66 72 61  of the *ONE* fra
2fa00 6d 65 77 6f 72 6b 20 76 65 72 73 69 6f 6e 0d 0a  mework version..
2fa10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fa20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74 6f 20      //       to 
2fa30 70 72 6f 63 65 73 73 2e 0d 0a 20 20 20 20 20 20  process...      
2fa40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
2fa50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2fa60 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 56        frameworkV
2fa70 65 72 73 69 6f 6e 4c 69 73 74 20 3d 20 6e 65 77  ersionList = new
2fa80 20 56 65 72 73 69 6f 6e 4c 69 73 74 28 29 3b 0d   VersionList();.
2fa90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2faa0 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 56 65       frameworkVe
2fab0 72 73 69 6f 6e 4c 69 73 74 2e 41 64 64 28 6e 65  rsionList.Add(ne
2fac0 77 20 56 65 72 73 69 6f 6e 28 76 65 72 73 69 6f  w Version(versio
2fad0 6e 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  n));..          
2fae0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
2faf0 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20           else.. 
2fb00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
2fb10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2fb20 20 20 20 20 20 20 69 66 20 28 21 66 72 61 6d 65        if (!frame
2fb30 77 6f 72 6b 4c 69 73 74 2e 56 65 72 73 69 6f 6e  workList.Version
2fb40 73 2e 54 72 79 47 65 74 56 61 6c 75 65 28 0d 0a  s.TryGetValue(..
2fb50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fb60 20 20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d              fram
2fb70 65 77 6f 72 6b 4e 61 6d 65 2c 20 6f 75 74 20 66  eworkName, out f
2fb80 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 4c  rameworkVersionL
2fb90 69 73 74 29 20 7c 7c 0d 0a 20 20 20 20 20 20 20  ist) ||..       
2fba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fbb0 20 28 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69   (frameworkVersi
2fbc0 6f 6e 4c 69 73 74 20 3d 3d 20 6e 75 6c 6c 29 29  onList == null))
2fbd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2fbe0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2fbf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fc00 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20   continue;..    
2fc10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fc20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
2fc30 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
2fc40 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20          foreach 
2fc50 28 56 65 72 73 69 6f 6e 20 66 72 61 6d 65 77 6f  (Version framewo
2fc60 72 6b 56 65 72 73 69 6f 6e 20 69 6e 20 66 72 61  rkVersion in fra
2fc70 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 4c 69 73  meworkVersionLis
2fc80 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t)..            
2fc90 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2fca0 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
2fcb0 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
2fcc0 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e  e(TracePriority.
2fcd0 4c 6f 77 65 72 2c 0d 0a 20 20 20 20 20 20 20 20  Lower,..        
2fce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fcf0 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74  debugCallback, t
2fd00 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
2fd10 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
2fd20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fd30 20 20 20 20 20 20 22 66 72 61 6d 65 77 6f 72 6b        "framework
2fd40 4e 61 6d 65 20 3d 20 7b 30 7d 2c 20 66 72 61 6d  Name = {0}, fram
2fd50 65 77 6f 72 6b 56 65 72 73 69 6f 6e 20 3d 20 7b  eworkVersion = {
2fd60 31 7d 2c 20 22 20 2b 0d 0a 20 20 20 20 20 20 20  1}, " +..       
2fd70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fd80 20 22 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 20 3d   "platformName =
2fd90 20 7b 32 7d 22 2c 20 46 6f 72 44 69 73 70 6c 61   {2}", ForDispla
2fda0 79 28 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 29  y(frameworkName)
2fdb0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2fdc0 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69             ForDi
2fdd0 73 70 6c 61 79 28 66 72 61 6d 65 77 6f 72 6b 56  splay(frameworkV
2fde0 65 72 73 69 6f 6e 29 2c 0d 0a 20 20 20 20 20 20  ersion),..      
2fdf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fe00 20 20 46 6f 72 44 69 73 70 6c 61 79 28 70 6c 61    ForDisplay(pla
2fe10 74 66 6f 72 6d 4e 61 6d 65 29 29 2c 20 74 72 61  tformName)), tra
2fe20 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
2fe30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fe40 20 20 20 20 69 66 20 28 21 48 61 76 65 46 72 61      if (!HaveFra
2fe50 6d 65 77 6f 72 6b 52 65 67 69 73 74 72 79 28 0d  meworkRegistry(.
2fe60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2fe70 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f               roo
2fe80 74 4b 65 79 2c 20 66 72 61 6d 65 77 6f 72 6b 4e  tKey, frameworkN
2fe90 61 6d 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65  ame, frameworkVe
2fea0 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20  rsion,..        
2feb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fec0 20 20 20 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65      platformName
2fed0 2c 20 70 65 72 55 73 65 72 2c 20 77 6f 77 36 34  , perUser, wow64
2fee0 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73  , whatIf, verbos
2fef0 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
2ff00 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2ff10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ff20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62      TraceOps.Deb
2ff30 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65  ugAndTrace(Trace
2ff40 50 72 69 6f 72 69 74 79 2e 4c 6f 77 2c 0d 0a 20  Priority.Low,.. 
2ff50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ff60 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67             debug
2ff70 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43  Callback, traceC
2ff80 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e  allback, String.
2ff90 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
2ffa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ffb0 20 20 20 20 20 22 2e 4e 45 54 20 46 72 61 6d 65       ".NET Frame
2ffc0 77 6f 72 6b 20 7b 30 7d 20 72 65 67 69 73 74 72  work {0} registr
2ffd0 79 20 6e 6f 74 20 66 6f 75 6e 64 2c 20 22 20 2b  y not found, " +
2ffe0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2fff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 73                "s
30000 6b 69 70 70 69 6e 67 2e 2e 2e 22 2c 20 46 6f 72  kipping...", For
30010 44 69 73 70 6c 61 79 28 66 72 61 6d 65 77 6f 72  Display(framewor
30020 6b 56 65 72 73 69 6f 6e 29 29 2c 0d 0a 20 20 20  kVersion)),..   
30030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30040 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
30050 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
30060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30070 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20      continue;.. 
30080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30090 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
300a0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
300b0 63 61 6c 6c 62 61 63 6b 20 3d 3d 20 6e 75 6c 6c  callback == null
300c0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
300d0 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69             conti
300e0 6e 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  nue;....        
300f0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
30100 21 63 61 6c 6c 62 61 63 6b 28 0d 0a 20 20 20 20  !callback(..    
30110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30120 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c          rootKey,
30130 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20   frameworkName, 
30140 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e  frameworkVersion
30150 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
30160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
30170 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 20 6e 75 6c  latformName, nul
30180 6c 2c 20 63 6c 69 65 6e 74 44 61 74 61 2c 20 70  l, clientData, p
30190 65 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 20  erUser,..       
301a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
301b0 20 20 20 20 20 77 6f 77 36 34 2c 20 74 68 72 6f       wow64, thro
301c0 77 4f 6e 4d 69 73 73 69 6e 67 2c 20 77 68 61 74  wOnMissing, what
301d0 49 66 2c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20  If, verbose,..  
301e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
301f0 20 20 20 20 20 20 20 20 20 20 72 65 66 20 65 72            ref er
30200 72 6f 72 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ror))..         
30210 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
30220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30230 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
30240 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
30250 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
30260 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
30270 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
30280 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
30290 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20  rn true;..      
302a0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e    }..        #en
302b0 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
302c0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
302d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
302e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
302f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30300 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
30310 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 65        #region Pe
30320 72 2d 56 69 73 75 61 6c 20 53 74 75 64 69 6f 20  r-Visual Studio 
30330 56 65 72 73 69 6f 6e 20 48 61 6e 64 6c 69 6e 67  Version Handling
30340 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
30350 65 20 73 74 61 74 69 63 20 76 6f 69 64 20 49 6e  e static void In
30360 69 74 69 61 6c 69 7a 65 56 73 4c 69 73 74 28 0d  itializeVsList(.
30370 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63  .            Moc
30380 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f  kRegistryKey roo
30390 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20  tKey,..         
303a0 20 20 20 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e     Configuration
303b0 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2c 0d   configuration,.
303c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66  .            ref
303d0 20 56 73 4c 69 73 74 20 76 73 4c 69 73 74 0d 0a   VsList vsList..
303e0 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
303f0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
30400 20 20 20 20 20 20 69 66 20 28 76 73 4c 69 73 74        if (vsList
30410 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
30420 20 20 20 20 20 20 20 20 20 20 20 76 73 4c 69 73             vsLis
30430 74 20 3d 20 6e 65 77 20 56 73 4c 69 73 74 28 29  t = new VsList()
30440 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
30450 20 69 66 20 28 76 73 4c 69 73 74 2e 52 6f 6f 74   if (vsList.Root
30460 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  Key == null)..  
30470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76 73                vs
30480 4c 69 73 74 2e 52 6f 6f 74 4b 65 79 20 3d 20 72  List.RootKey = r
30490 6f 6f 74 4b 65 79 3b 0d 0a 0d 0a 20 20 20 20 20  ootKey;....     
304a0 20 20 20 20 20 20 20 69 66 20 28 76 73 4c 69 73         if (vsLis
304b0 74 2e 56 65 72 73 69 6f 6e 73 20 3d 3d 20 6e 75  t.Versions == nu
304c0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
304d0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
304e0 20 20 20 20 76 73 4c 69 73 74 2e 56 65 72 73 69      vsList.Versi
304f0 6f 6e 73 20 3d 20 6e 65 77 20 56 65 72 73 69 6f  ons = new Versio
30500 6e 4c 69 73 74 28 29 3b 0d 0a 0d 0a 20 20 20 20  nList();....    
30510 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
30520 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d  (configuration =
30530 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66  = null) || !conf
30540 69 67 75 72 61 74 69 6f 6e 2e 4e 6f 56 73 32 30  iguration.NoVs20
30550 30 35 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  05)..           
30560 20 20 20 20 20 20 20 20 20 76 73 4c 69 73 74 2e           vsList.
30570 56 65 72 73 69 6f 6e 73 2e 41 64 64 28 6e 65 77  Versions.Add(new
30580 20 56 65 72 73 69 6f 6e 28 38 2c 20 30 29 29 3b   Version(8, 0));
30590 20 2f 2f 20 32 30 30 35 0d 0a 0d 0a 20 20 20 20   // 2005....    
305a0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
305b0 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d  (configuration =
305c0 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66  = null) || !conf
305d0 69 67 75 72 61 74 69 6f 6e 2e 4e 6f 56 73 32 30  iguration.NoVs20
305e0 30 38 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  08)..           
305f0 20 20 20 20 20 20 20 20 20 76 73 4c 69 73 74 2e           vsList.
30600 56 65 72 73 69 6f 6e 73 2e 41 64 64 28 6e 65 77  Versions.Add(new
30610 20 56 65 72 73 69 6f 6e 28 39 2c 20 30 29 29 3b   Version(9, 0));
30620 20 2f 2f 20 32 30 30 38 0d 0a 0d 0a 20 20 20 20   // 2008....    
30630 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
30640 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d  (configuration =
30650 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66  = null) || !conf
30660 69 67 75 72 61 74 69 6f 6e 2e 4e 6f 56 73 32 30  iguration.NoVs20
30670 31 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  10)..           
30680 20 20 20 20 20 20 20 20 20 76 73 4c 69 73 74 2e           vsList.
30690 56 65 72 73 69 6f 6e 73 2e 41 64 64 28 6e 65 77  Versions.Add(new
306a0 20 56 65 72 73 69 6f 6e 28 31 30 2c 20 30 29 29   Version(10, 0))
306b0 3b 2f 2f 20 32 30 31 30 0d 0a 0d 0a 20 20 20 20  ;// 2010....    
306c0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
306d0 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d  (configuration =
306e0 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66  = null) || !conf
306f0 69 67 75 72 61 74 69 6f 6e 2e 4e 6f 56 73 32 30  iguration.NoVs20
30700 31 32 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  12)..           
30710 20 20 20 20 20 20 20 20 20 76 73 4c 69 73 74 2e           vsList.
30720 56 65 72 73 69 6f 6e 73 2e 41 64 64 28 6e 65 77  Versions.Add(new
30730 20 56 65 72 73 69 6f 6e 28 31 31 2c 20 30 29 29   Version(11, 0))
30740 3b 2f 2f 20 32 30 31 32 0d 0a 0d 0a 20 20 20 20  ;// 2012....    
30750 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
30760 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d  (configuration =
30770 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66  = null) || !conf
30780 69 67 75 72 61 74 69 6f 6e 2e 4e 6f 56 73 32 30  iguration.NoVs20
30790 31 33 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  13)..           
307a0 20 20 20 20 20 20 20 20 20 76 73 4c 69 73 74 2e           vsList.
307b0 56 65 72 73 69 6f 6e 73 2e 41 64 64 28 6e 65 77  Versions.Add(new
307c0 20 56 65 72 73 69 6f 6e 28 31 32 2c 20 30 29 29   Version(12, 0))
307d0 3b 2f 2f 20 32 30 31 33 0d 0a 20 20 20 20 20 20  ;// 2013..      
307e0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
307f0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f   }....        //
30800 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30810 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30820 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30830 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30840 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
30850 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
30860 62 6f 6f 6c 20 48 61 76 65 56 73 56 65 72 73 69  bool HaveVsVersi
30870 6f 6e 44 69 72 65 63 74 6f 72 79 28 0d 0a 20 20  onDirectory(..  
30880 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65            MockRe
30890 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65  gistryKey rootKe
308a0 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
308b0 56 65 72 73 69 6f 6e 20 76 73 56 65 72 73 69 6f  Version vsVersio
308c0 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n,..            
308d0 73 74 72 69 6e 67 20 73 75 66 66 69 78 2c 0d 0a  string suffix,..
308e0 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
308f0 20 70 65 72 55 73 65 72 2c 0d 0a 20 20 20 20 20   perUser,..     
30900 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36         bool wow6
30910 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  4,..            
30920 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20  bool whatIf,..  
30930 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76            bool v
30940 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20  erbose,..       
30950 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20       ref string 
30960 69 6e 73 74 61 6c 6c 44 69 72 65 63 74 6f 72 79  installDirectory
30970 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
30980 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
30990 20 20 20 20 20 20 20 20 69 66 20 28 76 73 56 65          if (vsVe
309a0 72 73 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  rsion == null)..
309b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
309c0 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d  return false;...
309d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
309e0 69 6e 67 20 6b 65 79 4e 61 6d 65 20 3d 20 47 65  ing keyName = Ge
309f0 74 56 73 4b 65 79 4e 61 6d 65 28 76 73 56 65 72  tVsKeyName(vsVer
30a00 73 69 6f 6e 2c 20 73 75 66 66 69 78 2c 20 70 65  sion, suffix, pe
30a10 72 55 73 65 72 2c 20 77 6f 77 36 34 29 3b 0d 0a  rUser, wow64);..
30a20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 73  ..            us
30a30 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72  ing (MockRegistr
30a40 79 4b 65 79 20 6b 65 79 20 3d 20 52 65 67 69 73  yKey key = Regis
30a50 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75  tryHelper.OpenSu
30a60 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20  bKey(..         
30a70 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b             rootK
30a80 65 79 2c 20 6b 65 79 4e 61 6d 65 2c 20 66 61 6c  ey, keyName, fal
30a90 73 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62  se, whatIf, verb
30aa0 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ose))..         
30ab0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
30ac0 20 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d        if (key ==
30ad0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
30ae0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
30af0 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20  rn false;....   
30b00 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a               obj
30b10 65 63 74 20 76 61 6c 75 65 20 3d 20 52 65 67 69  ect value = Regi
30b20 73 74 72 79 48 65 6c 70 65 72 2e 47 65 74 56 61  stryHelper.GetVa
30b30 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  lue(..          
30b40 20 20 20 20 20 20 20 20 20 20 6b 65 79 2c 20 22            key, "
30b50 49 6e 73 74 61 6c 6c 44 69 72 22 2c 20 6e 75 6c  InstallDir", nul
30b60 6c 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f  l, whatIf, verbo
30b70 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  se);....        
30b80 20 20 20 20 20 20 20 20 69 66 20 28 21 28 76 61          if (!(va
30b90 6c 75 65 20 69 73 20 73 74 72 69 6e 67 29 29 0d  lue is string)).
30ba0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
30bb0 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
30bc0 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
30bd0 20 20 20 20 20 20 73 74 72 69 6e 67 20 64 69 72        string dir
30be0 65 63 74 6f 72 79 20 3d 20 28 73 74 72 69 6e 67  ectory = (string
30bf0 29 76 61 6c 75 65 3b 0d 0a 0d 0a 20 20 20 20 20  )value;....     
30c00 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 53             if (S
30c10 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d  tring.IsNullOrEm
30c20 70 74 79 28 64 69 72 65 63 74 6f 72 79 29 29 0d  pty(directory)).
30c30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
30c40 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
30c50 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
30c60 20 20 20 20 20 20 69 66 20 28 21 44 69 72 65 63        if (!Direc
30c70 74 6f 72 79 2e 45 78 69 73 74 73 28 64 69 72 65  tory.Exists(dire
30c80 63 74 6f 72 79 29 29 0d 0a 20 20 20 20 20 20 20  ctory))..       
30c90 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
30ca0 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20  urn false;....  
30cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
30cc0 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
30cd0 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69  race(TracePriori
30ce0 74 79 2e 4c 6f 77 65 72 2c 0d 0a 20 20 20 20 20  ty.Lower,..     
30cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
30d00 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72  ebugCallback, tr
30d10 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
30d20 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
30d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30d40 20 22 56 69 73 75 61 6c 20 53 74 75 64 69 6f 20   "Visual Studio 
30d50 7b 30 7d 20 66 6f 75 6e 64 20 69 6e 20 64 69 72  {0} found in dir
30d60 65 63 74 6f 72 79 20 7b 31 7d 2e 22 2c 0d 0a 20  ectory {1}.",.. 
30d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30d80 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 76 73     ForDisplay(vs
30d90 56 65 72 73 69 6f 6e 29 2c 20 46 6f 72 44 69 73  Version), ForDis
30da0 70 6c 61 79 28 64 69 72 65 63 74 6f 72 79 29 29  play(directory))
30db0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
30dc0 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
30dd0 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
30de0 20 20 20 20 20 20 20 20 20 20 69 6e 73 74 61 6c            instal
30df0 6c 44 69 72 65 63 74 6f 72 79 20 3d 20 64 69 72  lDirectory = dir
30e00 65 63 74 6f 72 79 3b 0d 0a 20 20 20 20 20 20 20  ectory;..       
30e10 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
30e20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  true;..         
30e30 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
30e40 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
30e50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30e60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30e70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30e80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30e90 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 5b 4d  //....        [M
30ea0 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64  ethodImpl(Method
30eb0 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e  ImplOptions.NoIn
30ec0 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20  lining)]..      
30ed0 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
30ee0 20 62 6f 6f 6c 20 46 6f 72 45 61 63 68 56 73 56   bool ForEachVsV
30ef0 65 72 73 69 6f 6e 52 65 67 69 73 74 72 79 28 0d  ersionRegistry(.
30f00 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63  .            Moc
30f10 6b 52 65 67 69 73 74 72 79 20 72 65 67 69 73 74  kRegistry regist
30f20 72 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ry,..           
30f30 20 56 73 4c 69 73 74 20 76 73 4c 69 73 74 2c 0d   VsList vsList,.
30f40 0a 20 20 20 20 20 20 20 20 20 20 20 20 56 69 73  .            Vis
30f50 75 61 6c 53 74 75 64 69 6f 52 65 67 69 73 74 72  ualStudioRegistr
30f60 79 43 61 6c 6c 62 61 63 6b 20 63 61 6c 6c 62 61  yCallback callba
30f70 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ck,..           
30f80 20 73 74 72 69 6e 67 20 73 75 66 66 69 78 2c 0d   string suffix,.
30f90 0a 20 20 20 20 20 20 20 20 20 20 20 20 50 61 63  .            Pac
30fa0 6b 61 67 65 20 70 61 63 6b 61 67 65 2c 0d 0a 20  kage package,.. 
30fb0 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63             objec
30fc0 74 20 63 6c 69 65 6e 74 44 61 74 61 2c 0d 0a 20  t clientData,.. 
30fd0 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
30fe0 70 65 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 20  perUser,..      
30ff0 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34        bool wow64
31000 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
31010 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69  ool throwOnMissi
31020 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ng,..           
31030 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20   bool whatIf,.. 
31040 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
31050 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20  verbose,..      
31060 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67        ref string
31070 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20   error..        
31080 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b      )..        {
31090 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
310a0 20 28 72 65 67 69 73 74 72 79 20 3d 3d 20 6e 75   (registry == nu
310b0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
310c0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
310d0 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76      error = "inv
310e0 61 6c 69 64 20 72 65 67 69 73 74 72 79 22 3b 0d  alid registry";.
310f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
31100 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
31110 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
31120 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
31130 28 76 73 4c 69 73 74 20 3d 3d 20 6e 75 6c 6c 29  (vsList == null)
31140 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
31150 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
31160 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69   error = "invali
31170 64 20 56 53 20 6c 69 73 74 22 3b 0d 0a 20 20 20  d VS list";..   
31180 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
31190 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
311a0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
311b0 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67           MockReg
311c0 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79  istryKey rootKey
311d0 20 3d 20 76 73 4c 69 73 74 2e 52 6f 6f 74 4b 65   = vsList.RootKe
311e0 79 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  y;....          
311f0 20 20 69 66 20 28 72 6f 6f 74 4b 65 79 20 3d 3d    if (rootKey ==
31200 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
31210 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
31220 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22         error = "
31230 69 6e 76 61 6c 69 64 20 72 6f 6f 74 20 6b 65 79  invalid root key
31240 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ";..            
31250 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
31260 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
31270 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
31280 69 66 20 28 21 49 73 53 75 70 70 6f 72 74 65 64  if (!IsSupported
31290 52 6f 6f 74 4b 65 79 28 72 65 67 69 73 74 72 79  RootKey(registry
312a0 2c 20 72 6f 6f 74 4b 65 79 29 29 0d 0a 20 20 20  , rootKey))..   
312b0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
312c0 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
312d0 72 20 3d 20 22 72 6f 6f 74 20 6b 65 79 20 6d 75  r = "root key mu
312e0 73 74 20 62 65 20 70 65 72 2d 75 73 65 72 20 6f  st be per-user o
312f0 72 20 70 65 72 2d 6d 61 63 68 69 6e 65 22 3b 0d  r per-machine";.
31300 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
31310 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
31320 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
31330 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
31340 28 76 73 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73  (vsList.Versions
31350 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
31360 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
31370 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
31380 3d 20 22 6e 6f 20 56 53 20 76 65 72 73 69 6f 6e  = "no VS version
31390 73 20 66 6f 75 6e 64 22 3b 0d 0a 20 20 20 20 20  s found";..     
313a0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
313b0 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
313c0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
313d0 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 28         foreach (
313e0 56 65 72 73 69 6f 6e 20 76 73 56 65 72 73 69 6f  Version vsVersio
313f0 6e 20 69 6e 20 76 73 4c 69 73 74 2e 56 65 72 73  n in vsList.Vers
31400 69 6f 6e 73 29 0d 0a 20 20 20 20 20 20 20 20 20  ions)..         
31410 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
31420 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44        TraceOps.D
31430 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61  ebugAndTrace(Tra
31440 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 72  cePriority.Lower
31450 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
31460 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c         debugCall
31470 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62  back, traceCallb
31480 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ack, String.Form
31490 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
314a0 20 20 20 20 20 20 20 20 20 22 76 73 56 65 72 73           "vsVers
314b0 69 6f 6e 20 3d 20 7b 30 7d 22 2c 20 46 6f 72 44  ion = {0}", ForD
314c0 69 73 70 6c 61 79 28 76 73 56 65 72 73 69 6f 6e  isplay(vsVersion
314d0 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
314e0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
314f0 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
31500 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
31510 6e 67 20 69 6e 73 74 61 6c 6c 44 69 72 65 63 74  ng installDirect
31520 6f 72 79 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20  ory = null;.... 
31530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
31540 66 20 28 21 48 61 76 65 56 73 56 65 72 73 69 6f  f (!HaveVsVersio
31550 6e 44 69 72 65 63 74 6f 72 79 28 0d 0a 20 20 20  nDirectory(..   
31560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31570 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 76 73       rootKey, vs
31580 56 65 72 73 69 6f 6e 2c 20 73 75 66 66 69 78 2c  Version, suffix,
31590 20 70 65 72 55 73 65 72 2c 20 77 6f 77 36 34 2c   perUser, wow64,
315a0 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20   whatIf,..      
315b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
315c0 20 20 76 65 72 62 6f 73 65 2c 20 72 65 66 20 69    verbose, ref i
315d0 6e 73 74 61 6c 6c 44 69 72 65 63 74 6f 72 79 29  nstallDirectory)
315e0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
315f0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
31600 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
31610 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
31620 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c  (TracePriority.L
31630 6f 77 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ow,..           
31640 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62               deb
31650 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63  ugCallback, trac
31660 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
31670 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
31680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31690 20 20 20 22 56 69 73 75 61 6c 20 53 74 75 64 69     "Visual Studi
316a0 6f 20 7b 30 7d 20 6e 6f 74 20 66 6f 75 6e 64 2c  o {0} not found,
316b0 20 73 6b 69 70 70 69 6e 67 2e 2e 2e 22 2c 0d 0a   skipping...",..
316c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
316d0 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
316e0 61 79 28 76 73 56 65 72 73 69 6f 6e 29 29 2c 20  ay(vsVersion)), 
316f0 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
31700 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
31710 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b         continue;
31720 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
31730 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
31740 20 20 20 20 20 20 20 69 66 20 28 63 61 6c 6c 62         if (callb
31750 61 63 6b 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ack == null)..  
31760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31770 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a 20    continue;.... 
31780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
31790 66 20 28 21 63 61 6c 6c 62 61 63 6b 28 0d 0a 20  f (!callback(.. 
317a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
317b0 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20         rootKey, 
317c0 76 73 56 65 72 73 69 6f 6e 2c 20 73 75 66 66 69  vsVersion, suffi
317d0 78 2c 20 70 61 63 6b 61 67 65 2c 20 69 6e 73 74  x, package, inst
317e0 61 6c 6c 44 69 72 65 63 74 6f 72 79 2c 0d 0a 20  allDirectory,.. 
317f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31800 20 20 20 20 20 20 20 63 6c 69 65 6e 74 44 61 74         clientDat
31810 61 2c 20 70 65 72 55 73 65 72 2c 20 77 6f 77 36  a, perUser, wow6
31820 34 2c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e  4, throwOnMissin
31830 67 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20  g, whatIf,..    
31840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31850 20 20 20 20 76 65 72 62 6f 73 65 2c 20 72 65 66      verbose, ref
31860 20 65 72 72 6f 72 29 29 0d 0a 20 20 20 20 20 20   error))..      
31870 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
31880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31890 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
318a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
318b0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
318c0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
318d0 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20  return true;..  
318e0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
318f0 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
31900 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
31910 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31920 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31930 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31940 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
31950 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
31960 6e 20 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20  n Configuration 
31970 46 69 6c 65 20 48 61 6e 64 6c 69 6e 67 0d 0a 20  File Handling.. 
31980 20 20 20 20 20 20 20 5b 4d 65 74 68 6f 64 49 6d         [MethodIm
31990 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 74  pl(MethodImplOpt
319a0 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29  ions.NoInlining)
319b0 5d 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  ]..        priva
319c0 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 41  te static bool A
319d0 64 64 44 62 50 72 6f 76 69 64 65 72 46 61 63 74  ddDbProviderFact
319e0 6f 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ory(..          
319f0 20 20 73 74 72 69 6e 67 20 66 69 6c 65 4e 61 6d    string fileNam
31a00 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
31a10 73 74 72 69 6e 67 20 69 6e 76 61 72 69 61 6e 74  string invariant
31a20 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
31a30 20 20 20 73 74 72 69 6e 67 20 6e 61 6d 65 2c 0d     string name,.
31a40 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
31a50 69 6e 67 20 64 65 73 63 72 69 70 74 69 6f 6e 2c  ing description,
31a60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
31a70 72 69 6e 67 20 74 79 70 65 4e 61 6d 65 2c 0d 0a  ring typeName,..
31a80 20 20 20 20 20 20 20 20 20 20 20 20 41 73 73 65              Asse
31a90 6d 62 6c 79 4e 61 6d 65 20 61 73 73 65 6d 62 6c  mblyName assembl
31aa0 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  yName,..        
31ab0 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c      bool whatIf,
31ac0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
31ad0 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20  ol verbose,..   
31ae0 20 20 20 20 20 20 20 20 20 72 65 66 20 62 6f 6f           ref boo
31af0 6c 20 73 61 76 65 64 2c 0d 0a 20 20 20 20 20 20  l saved,..      
31b00 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67        ref string
31b10 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20   error..        
31b20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b      )..        {
31b30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
31b40 6f 6c 20 64 69 72 74 79 20 3d 20 66 61 6c 73 65  ol dirty = false
31b50 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 58  ;..            X
31b60 6d 6c 44 6f 63 75 6d 65 6e 74 20 64 6f 63 75 6d  mlDocument docum
31b70 65 6e 74 20 3d 20 6e 65 77 20 58 6d 6c 44 6f 63  ent = new XmlDoc
31b80 75 6d 65 6e 74 28 29 3b 0d 0a 0d 0a 20 20 20 20  ument();....    
31b90 20 20 20 20 20 20 20 20 64 6f 63 75 6d 65 6e 74          document
31ba0 2e 50 72 65 73 65 72 76 65 57 68 69 74 65 73 70  .PreserveWhitesp
31bb0 61 63 65 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20  ace = true;..   
31bc0 20 20 20 20 20 20 20 20 20 64 6f 63 75 6d 65 6e           documen
31bd0 74 2e 4c 6f 61 64 28 66 69 6c 65 4e 61 6d 65 29  t.Load(fileName)
31be0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
31bf0 20 58 6d 6c 45 6c 65 6d 65 6e 74 20 61 64 64 45   XmlElement addE
31c00 6c 65 6d 65 6e 74 20 3d 20 64 6f 63 75 6d 65 6e  lement = documen
31c10 74 2e 53 65 6c 65 63 74 53 69 6e 67 6c 65 4e 6f  t.SelectSingleNo
31c20 64 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  de(..           
31c30 20 20 20 20 20 53 74 72 69 6e 67 2e 46 6f 72 6d       String.Form
31c40 61 74 28 58 50 61 74 68 46 6f 72 41 64 64 45 6c  at(XPathForAddEl
31c50 65 6d 65 6e 74 2c 20 69 6e 76 61 72 69 61 6e 74  ement, invariant
31c60 4e 61 6d 65 29 29 20 61 73 20 58 6d 6c 45 6c 65  Name)) as XmlEle
31c70 6d 65 6e 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ment;....       
31c80 20 20 20 20 20 69 66 20 28 61 64 64 45 6c 65 6d       if (addElem
31c90 65 6e 74 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ent == null)..  
31ca0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
31cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
31cc0 69 6e 67 5b 5d 20 65 6c 65 6d 65 6e 74 4e 61 6d  ing[] elementNam
31cd0 65 73 20 3d 20 7b 0d 0a 20 20 20 20 20 20 20 20  es = {..        
31ce0 20 20 20 20 20 20 20 20 20 20 20 20 22 73 79 73              "sys
31cf0 74 65 6d 2e 64 61 74 61 22 2c 20 22 44 62 50 72  tem.data", "DbPr
31d00 6f 76 69 64 65 72 46 61 63 74 6f 72 69 65 73 22  oviderFactories"
31d10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
31d20 20 20 7d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20    };....        
31d30 20 20 20 20 20 20 20 20 58 6d 6c 45 6c 65 6d 65          XmlEleme
31d40 6e 74 20 70 72 65 76 69 6f 75 73 45 6c 65 6d 65  nt previousEleme
31d50 6e 74 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20  nt =..          
31d60 20 20 20 20 20 20 20 20 20 20 64 6f 63 75 6d 65            docume
31d70 6e 74 2e 44 6f 63 75 6d 65 6e 74 45 6c 65 6d 65  nt.DocumentEleme
31d80 6e 74 3b 20 2f 2a 20 63 6f 6e 66 69 67 75 72 61  nt; /* configura
31d90 74 69 6f 6e 20 2a 2f 0d 0a 0d 0a 20 20 20 20 20  tion */....     
31da0 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61             forea
31db0 63 68 20 28 73 74 72 69 6e 67 20 65 6c 65 6d 65  ch (string eleme
31dc0 6e 74 4e 61 6d 65 20 69 6e 20 65 6c 65 6d 65 6e  ntName in elemen
31dd0 74 4e 61 6d 65 73 29 0d 0a 20 20 20 20 20 20 20  tNames)..       
31de0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
31df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31e00 61 64 64 45 6c 65 6d 65 6e 74 20 3d 20 70 72 65  addElement = pre
31e10 76 69 6f 75 73 45 6c 65 6d 65 6e 74 2e 53 65 6c  viousElement.Sel
31e20 65 63 74 53 69 6e 67 6c 65 4e 6f 64 65 28 0d 0a  ectSingleNode(..
31e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31e40 20 20 20 20 20 20 20 20 65 6c 65 6d 65 6e 74 4e          elementN
31e50 61 6d 65 29 20 61 73 20 58 6d 6c 45 6c 65 6d 65  ame) as XmlEleme
31e60 6e 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  nt;....         
31e70 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 61             if (a
31e80 64 64 45 6c 65 6d 65 6e 74 20 3d 3d 20 6e 75 6c  ddElement == nul
31e90 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
31ea0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
31eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31ec0 20 20 20 61 64 64 45 6c 65 6d 65 6e 74 20 3d 20     addElement = 
31ed0 64 6f 63 75 6d 65 6e 74 2e 43 72 65 61 74 65 45  document.CreateE
31ee0 6c 65 6d 65 6e 74 28 0d 0a 20 20 20 20 20 20 20  lement(..       
31ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31f00 20 20 20 20 20 65 6c 65 6d 65 6e 74 4e 61 6d 65       elementName
31f10 2c 20 53 74 72 69 6e 67 2e 45 6d 70 74 79 29 3b  , String.Empty);
31f20 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
31f30 20 20 20 20 20 20 20 20 20 20 20 20 70 72 65 76              prev
31f40 69 6f 75 73 45 6c 65 6d 65 6e 74 2e 41 70 70 65  iousElement.Appe
31f50 6e 64 43 68 69 6c 64 28 61 64 64 45 6c 65 6d 65  ndChild(addEleme
31f60 6e 74 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  nt);..          
31f70 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
31f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31f90 20 20 20 70 72 65 76 69 6f 75 73 45 6c 65 6d 65     previousEleme
31fa0 6e 74 20 3d 20 61 64 64 45 6c 65 6d 65 6e 74 3b  nt = addElement;
31fb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
31fc0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
31fd0 20 20 20 20 20 20 20 61 64 64 45 6c 65 6d 65 6e         addElemen
31fe0 74 20 3d 20 64 6f 63 75 6d 65 6e 74 2e 43 72 65  t = document.Cre
31ff0 61 74 65 45 6c 65 6d 65 6e 74 28 0d 0a 20 20 20  ateElement(..   
32000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32010 20 22 61 64 64 22 2c 20 53 74 72 69 6e 67 2e 45   "add", String.E
32020 6d 70 74 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  mpty);....      
32030 20 20 20 20 20 20 20 20 20 20 70 72 65 76 69 6f            previo
32040 75 73 45 6c 65 6d 65 6e 74 2e 41 70 70 65 6e 64  usElement.Append
32050 43 68 69 6c 64 28 61 64 64 45 6c 65 6d 65 6e 74  Child(addElement
32060 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
32070 20 20 20 20 20 20 64 69 72 74 79 20 3d 20 74 72        dirty = tr
32080 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
32090 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
320a0 20 20 69 66 20 28 21 53 74 72 69 6e 67 2e 45 71    if (!String.Eq
320b0 75 61 6c 73 28 61 64 64 45 6c 65 6d 65 6e 74 2e  uals(addElement.
320c0 47 65 74 41 74 74 72 69 62 75 74 65 28 22 6e 61  GetAttribute("na
320d0 6d 65 22 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  me"),..         
320e0 20 20 20 20 20 20 20 20 20 20 20 6e 61 6d 65 2c             name,
320f0 20 53 74 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f   StringCompariso
32100 6e 2e 4f 72 64 69 6e 61 6c 29 29 0d 0a 20 20 20  n.Ordinal))..   
32110 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
32120 20 20 20 20 20 20 20 20 20 20 20 20 61 64 64 45              addE
32130 6c 65 6d 65 6e 74 2e 53 65 74 41 74 74 72 69 62  lement.SetAttrib
32140 75 74 65 28 22 6e 61 6d 65 22 2c 20 6e 61 6d 65  ute("name", name
32150 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
32160 20 20 20 20 64 69 72 74 79 20 3d 20 74 72 75 65      dirty = true
32170 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
32180 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
32190 69 66 20 28 21 53 74 72 69 6e 67 2e 45 71 75 61  if (!String.Equa
321a0 6c 73 28 61 64 64 45 6c 65 6d 65 6e 74 2e 47 65  ls(addElement.Ge
321b0 74 41 74 74 72 69 62 75 74 65 28 22 69 6e 76 61  tAttribute("inva
321c0 72 69 61 6e 74 22 29 2c 0d 0a 20 20 20 20 20 20  riant"),..      
321d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e                in
321e0 76 61 72 69 61 6e 74 4e 61 6d 65 2c 20 53 74 72  variantName, Str
321f0 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72  ingComparison.Or
32200 64 69 6e 61 6c 29 29 0d 0a 20 20 20 20 20 20 20  dinal))..       
32210 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
32220 20 20 20 20 20 20 20 20 61 64 64 45 6c 65 6d 65          addEleme
32230 6e 74 2e 53 65 74 41 74 74 72 69 62 75 74 65 28  nt.SetAttribute(
32240 22 69 6e 76 61 72 69 61 6e 74 22 2c 20 69 6e 76  "invariant", inv
32250 61 72 69 61 6e 74 4e 61 6d 65 29 3b 0d 0a 20 20  ariantName);..  
32260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 69                di
32270 72 74 79 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20  rty = true;..   
32280 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
32290 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 53            if (!S
322a0 74 72 69 6e 67 2e 45 71 75 61 6c 73 28 61 64 64  tring.Equals(add
322b0 45 6c 65 6d 65 6e 74 2e 47 65 74 41 74 74 72 69  Element.GetAttri
322c0 62 75 74 65 28 22 64 65 73 63 72 69 70 74 69 6f  bute("descriptio
322d0 6e 22 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  n"),..          
322e0 20 20 20 20 20 20 20 20 20 20 64 65 73 63 72 69            descri
322f0 70 74 69 6f 6e 2c 20 53 74 72 69 6e 67 43 6f 6d  ption, StringCom
32300 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 29  parison.Ordinal)
32310 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
32320 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
32330 20 20 61 64 64 45 6c 65 6d 65 6e 74 2e 53 65 74    addElement.Set
32340 41 74 74 72 69 62 75 74 65 28 22 64 65 73 63 72  Attribute("descr
32350 69 70 74 69 6f 6e 22 2c 20 64 65 73 63 72 69 70  iption", descrip
32360 74 69 6f 6e 29 3b 0d 0a 20 20 20 20 20 20 20 20  tion);..        
32370 20 20 20 20 20 20 20 20 64 69 72 74 79 20 3d 20          dirty = 
32380 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  true;..         
32390 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
323a0 20 20 20 20 73 74 72 69 6e 67 20 66 75 6c 6c 54      string fullT
323b0 79 70 65 4e 61 6d 65 20 3d 20 53 74 72 69 6e 67  ypeName = String
323c0 2e 46 6f 72 6d 61 74 28 22 7b 30 7d 2c 20 7b 31  .Format("{0}, {1
323d0 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }",..           
323e0 20 20 20 20 20 74 79 70 65 4e 61 6d 65 2c 20 61       typeName, a
323f0 73 73 65 6d 62 6c 79 4e 61 6d 65 29 3b 0d 0a 0d  ssemblyName);...
32400 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
32410 28 21 53 74 72 69 6e 67 2e 45 71 75 61 6c 73 28  (!String.Equals(
32420 61 64 64 45 6c 65 6d 65 6e 74 2e 47 65 74 41 74  addElement.GetAt
32430 74 72 69 62 75 74 65 28 22 74 79 70 65 22 29 2c  tribute("type"),
32440 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
32450 20 20 20 20 20 20 66 75 6c 6c 54 79 70 65 4e 61        fullTypeNa
32460 6d 65 2c 20 53 74 72 69 6e 67 43 6f 6d 70 61 72  me, StringCompar
32470 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 29 29 0d 0a  ison.Ordinal))..
32480 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
32490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61                 a
324a0 64 64 45 6c 65 6d 65 6e 74 2e 53 65 74 41 74 74  ddElement.SetAtt
324b0 72 69 62 75 74 65 28 22 74 79 70 65 22 2c 20 66  ribute("type", f
324c0 75 6c 6c 54 79 70 65 4e 61 6d 65 29 3b 0d 0a 20  ullTypeName);.. 
324d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
324e0 69 72 74 79 20 3d 20 74 72 75 65 3b 0d 0a 20 20  irty = true;..  
324f0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
32500 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 64             if (d
32510 69 72 74 79 20 7c 7c 20 77 68 61 74 49 66 29 0d  irty || whatIf).
32520 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
32530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32540 69 66 20 28 76 65 72 62 6f 73 65 29 0d 0a 20 20  if (verbose)..  
32550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32560 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67    TraceOps.Debug
32570 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72  AndTrace(TracePr
32580 69 6f 72 69 74 79 2e 48 69 67 68 65 73 74 2c 0d  iority.Highest,.
32590 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
325a0 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61           debugCa
325b0 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c  llback, traceCal
325c0 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
325d0 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
325e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
325f0 61 64 64 45 6c 65 6d 65 6e 74 20 3d 20 7b 30 7d  addElement = {0}
32600 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 61 64  ", ForDisplay(ad
32610 64 45 6c 65 6d 65 6e 74 29 29 2c 0d 0a 20 20 20  dElement)),..   
32620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32630 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
32640 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
32650 20 20 20 20 20 20 20 20 69 66 20 28 21 77 68 61          if (!wha
32660 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf)..          
32670 20 20 20 20 20 20 20 20 20 20 64 6f 63 75 6d 65            docume
32680 6e 74 2e 53 61 76 65 28 66 69 6c 65 4e 61 6d 65  nt.Save(fileName
32690 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
326a0 20 20 20 20 20 20 66 69 6c 65 73 4d 6f 64 69 66        filesModif
326b0 69 65 64 2b 2b 3b 0d 0a 0d 0a 20 20 20 20 20 20  ied++;....      
326c0 20 20 20 20 20 20 20 20 20 20 73 61 76 65 64 20            saved 
326d0 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  = true;..       
326e0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
326f0 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75        return tru
32700 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  e;..        }...
32710 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
32720 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32730 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32740 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32750 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32760 0d 0a 0d 0a 20 20 20 20 20 20 20 20 5b 4d 65 74  ....        [Met
32770 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d  hodImpl(MethodIm
32780 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69  plOptions.NoInli
32790 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20  ning)]..        
327a0 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62  private static b
327b0 6f 6f 6c 20 52 65 6d 6f 76 65 44 62 50 72 6f 76  ool RemoveDbProv
327c0 69 64 65 72 46 61 63 74 6f 72 79 28 0d 0a 20 20  iderFactory(..  
327d0 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
327e0 20 66 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20   fileName,..    
327f0 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 69          string i
32800 6e 76 61 72 69 61 6e 74 4e 61 6d 65 2c 0d 0a 20  nvariantName,.. 
32810 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
32820 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20  whatIf,..       
32830 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73       bool verbos
32840 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
32850 72 65 66 20 62 6f 6f 6c 20 73 61 76 65 64 2c 0d  ref bool saved,.
32860 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66  .            ref
32870 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20   string error.. 
32880 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
32890 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
328a0 20 20 20 20 20 62 6f 6f 6c 20 64 69 72 74 79 20       bool dirty 
328b0 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  = false;..      
328c0 20 20 20 20 20 20 58 6d 6c 44 6f 63 75 6d 65 6e        XmlDocumen
328d0 74 20 64 6f 63 75 6d 65 6e 74 20 3d 20 6e 65 77  t document = new
328e0 20 58 6d 6c 44 6f 63 75 6d 65 6e 74 28 29 3b 0d   XmlDocument();.
328f0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 64  ...            d
32900 6f 63 75 6d 65 6e 74 2e 50 72 65 73 65 72 76 65  ocument.Preserve
32910 57 68 69 74 65 73 70 61 63 65 20 3d 20 74 72 75  Whitespace = tru
32920 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
32930 64 6f 63 75 6d 65 6e 74 2e 4c 6f 61 64 28 66 69  document.Load(fi
32940 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20  leName);....    
32950 20 20 20 20 20 20 20 20 58 6d 6c 45 6c 65 6d 65          XmlEleme
32960 6e 74 20 61 64 64 45 6c 65 6d 65 6e 74 20 3d 20  nt addElement = 
32970 64 6f 63 75 6d 65 6e 74 2e 53 65 6c 65 63 74 53  document.SelectS
32980 69 6e 67 6c 65 4e 6f 64 65 28 0d 0a 20 20 20 20  ingleNode(..    
32990 20 20 20 20 20 20 20 20 20 20 20 20 53 74 72 69              Stri
329a0 6e 67 2e 46 6f 72 6d 61 74 28 58 50 61 74 68 46  ng.Format(XPathF
329b0 6f 72 41 64 64 45 6c 65 6d 65 6e 74 2c 20 69 6e  orAddElement, in
329c0 76 61 72 69 61 6e 74 4e 61 6d 65 29 29 20 61 73  variantName)) as
329d0 20 58 6d 6c 45 6c 65 6d 65 6e 74 3b 0d 0a 0d 0a   XmlElement;....
329e0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
329f0 61 64 64 45 6c 65 6d 65 6e 74 20 21 3d 20 6e 75  addElement != nu
32a00 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
32a10 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
32a20 20 20 20 20 61 64 64 45 6c 65 6d 65 6e 74 2e 50      addElement.P
32a30 61 72 65 6e 74 4e 6f 64 65 2e 52 65 6d 6f 76 65  arentNode.Remove
32a40 43 68 69 6c 64 28 61 64 64 45 6c 65 6d 65 6e 74  Child(addElement
32a50 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
32a60 20 20 20 20 64 69 72 74 79 20 3d 20 74 72 75 65      dirty = true
32a70 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
32a80 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
32a90 58 6d 6c 45 6c 65 6d 65 6e 74 20 72 65 6d 6f 76  XmlElement remov
32aa0 65 45 6c 65 6d 65 6e 74 20 3d 20 64 6f 63 75 6d  eElement = docum
32ab0 65 6e 74 2e 53 65 6c 65 63 74 53 69 6e 67 6c 65  ent.SelectSingle
32ac0 4e 6f 64 65 28 0d 0a 20 20 20 20 20 20 20 20 20  Node(..         
32ad0 20 20 20 20 20 20 20 53 74 72 69 6e 67 2e 46 6f         String.Fo
32ae0 72 6d 61 74 28 58 50 61 74 68 46 6f 72 52 65 6d  rmat(XPathForRem
32af0 6f 76 65 45 6c 65 6d 65 6e 74 2c 20 69 6e 76 61  oveElement, inva
32b00 72 69 61 6e 74 4e 61 6d 65 29 29 20 61 73 20 58  riantName)) as X
32b10 6d 6c 45 6c 65 6d 65 6e 74 3b 0d 0a 0d 0a 20 20  mlElement;....  
32b20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 72 65            if (re
32b30 6d 6f 76 65 45 6c 65 6d 65 6e 74 20 21 3d 20 6e  moveElement != n
32b40 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
32b50 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
32b60 20 20 20 20 20 72 65 6d 6f 76 65 45 6c 65 6d 65       removeEleme
32b70 6e 74 2e 50 61 72 65 6e 74 4e 6f 64 65 2e 52 65  nt.ParentNode.Re
32b80 6d 6f 76 65 43 68 69 6c 64 28 72 65 6d 6f 76 65  moveChild(remove
32b90 45 6c 65 6d 65 6e 74 29 3b 0d 0a 20 20 20 20 20  Element);..     
32ba0 20 20 20 20 20 20 20 20 20 20 20 64 69 72 74 79             dirty
32bb0 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20   = true;..      
32bc0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
32bd0 20 20 20 20 20 20 20 69 66 20 28 64 69 72 74 79         if (dirty
32be0 20 7c 7c 20 77 68 61 74 49 66 29 0d 0a 20 20 20   || whatIf)..   
32bf0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
32c00 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
32c10 76 65 72 62 6f 73 65 29 0d 0a 20 20 20 20 20 20  verbose)..      
32c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
32c30 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
32c40 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69  race(TracePriori
32c50 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20 20  ty.Highest,..   
32c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32c70 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61       debugCallba
32c80 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63  ck, traceCallbac
32c90 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
32ca0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
32cb0 20 20 20 20 20 20 20 20 20 20 20 22 61 64 64 45             "addE
32cc0 6c 65 6d 65 6e 74 20 3d 20 7b 30 7d 2c 20 72 65  lement = {0}, re
32cd0 6d 6f 76 65 45 6c 65 6d 65 6e 74 20 3d 20 7b 31  moveElement = {1
32ce0 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }",..           
32cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72               For
32d00 44 69 73 70 6c 61 79 28 61 64 64 45 6c 65 6d 65  Display(addEleme
32d10 6e 74 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  nt), ForDisplay(
32d20 72 65 6d 6f 76 65 45 6c 65 6d 65 6e 74 29 29 2c  removeElement)),
32d30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
32d40 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
32d50 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
32d60 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
32d70 28 21 77 68 61 74 49 66 29 0d 0a 20 20 20 20 20  (!whatIf)..     
32d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
32d90 6f 63 75 6d 65 6e 74 2e 53 61 76 65 28 66 69 6c  ocument.Save(fil
32da0 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  eName);....     
32db0 20 20 20 20 20 20 20 20 20 20 20 66 69 6c 65 73             files
32dc0 4d 6f 64 69 66 69 65 64 2b 2b 3b 0d 0a 0d 0a 20  Modified++;.... 
32dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
32de0 61 76 65 64 20 3d 20 74 72 75 65 3b 0d 0a 20 20  aved = true;..  
32df0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
32e00 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
32e10 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  n true;..       
32e20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f   }....        //
32e30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32e40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32e50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32e60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32e70 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
32e80 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
32e90 62 6f 6f 6c 20 50 72 6f 63 65 73 73 44 62 50 72  bool ProcessDbPr
32ea0 6f 76 69 64 65 72 46 61 63 74 6f 72 79 28 0d 0a  oviderFactory(..
32eb0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
32ec0 6e 67 20 66 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20  ng fileName,..  
32ed0 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
32ee0 20 69 6e 76 61 72 69 61 6e 74 4e 61 6d 65 2c 0d   invariantName,.
32ef0 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
32f00 69 6e 67 20 6e 61 6d 65 2c 0d 0a 20 20 20 20 20  ing name,..     
32f10 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 64 65         string de
32f20 73 63 72 69 70 74 69 6f 6e 2c 0d 0a 20 20 20 20  scription,..    
32f30 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 74          string t
32f40 79 70 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  ypeName,..      
32f50 20 20 20 20 20 20 41 73 73 65 6d 62 6c 79 4e 61        AssemblyNa
32f60 6d 65 20 61 73 73 65 6d 62 6c 79 4e 61 6d 65 2c  me assemblyName,
32f70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
32f80 72 69 6e 67 20 64 69 72 65 63 74 6f 72 79 2c 0d  ring directory,.
32f90 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a  .            obj
32fa0 65 63 74 20 63 6c 69 65 6e 74 44 61 74 61 2c 0d  ect clientData,.
32fb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
32fc0 6c 20 70 65 72 55 73 65 72 2c 0d 0a 20 20 20 20  l perUser,..    
32fd0 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77          bool wow
32fe0 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  64,..           
32ff0 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73   bool throwOnMis
33000 73 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20 20  sing,..         
33010 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d     bool whatIf,.
33020 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
33030 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20  l verbose,..    
33040 20 20 20 20 20 20 20 20 72 65 66 20 62 6f 6f 6c          ref bool
33050 20 73 61 76 65 64 2c 0d 0a 20 20 20 20 20 20 20   saved,..       
33060 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20       ref string 
33070 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20  error..         
33080 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
33090 0a 20 20 20 20 20 20 20 20 20 20 20 20 41 6e 79  .            Any
330a0 50 61 69 72 3c 73 74 72 69 6e 67 2c 20 62 6f 6f  Pair<string, boo
330b0 6c 3e 20 70 61 69 72 20 3d 20 63 6c 69 65 6e 74  l> pair = client
330c0 44 61 74 61 20 61 73 20 41 6e 79 50 61 69 72 3c  Data as AnyPair<
330d0 73 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e 3b 0d 0a  string, bool>;..
330e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
330f0 20 28 70 61 69 72 20 3d 3d 20 6e 75 6c 6c 29 0d   (pair == null).
33100 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
33110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33120 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64  error = "invalid
33130 20 66 72 61 6d 65 77 6f 72 6b 20 63 6f 6e 66 69   framework confi
33140 67 20 63 61 6c 6c 62 61 63 6b 20 64 61 74 61 22  g callback data"
33150 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
33160 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
33170 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
33180 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
33190 66 20 28 70 61 69 72 2e 59 29 0d 0a 20 20 20 20  f (pair.Y)..    
331a0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
331b0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
331c0 6e 20 52 65 6d 6f 76 65 44 62 50 72 6f 76 69 64  n RemoveDbProvid
331d0 65 72 46 61 63 74 6f 72 79 28 0d 0a 20 20 20 20  erFactory(..    
331e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
331f0 66 69 6c 65 4e 61 6d 65 2c 20 69 6e 76 61 72 69  fileName, invari
33200 61 6e 74 4e 61 6d 65 2c 20 77 68 61 74 49 66 2c  antName, whatIf,
33210 20 76 65 72 62 6f 73 65 2c 20 72 65 66 20 73 61   verbose, ref sa
33220 76 65 64 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ved,..          
33230 20 20 20 20 20 20 20 20 20 20 72 65 66 20 65 72            ref er
33240 72 6f 72 29 20 26 26 0d 0a 20 20 20 20 20 20 20  ror) &&..       
33250 20 20 20 20 20 20 20 20 20 41 64 64 44 62 50 72           AddDbPr
33260 6f 76 69 64 65 72 46 61 63 74 6f 72 79 28 0d 0a  oviderFactory(..
33270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33280 20 20 20 20 66 69 6c 65 4e 61 6d 65 2c 20 69 6e      fileName, in
33290 76 61 72 69 61 6e 74 4e 61 6d 65 2c 20 6e 61 6d  variantName, nam
332a0 65 2c 20 64 65 73 63 72 69 70 74 69 6f 6e 2c 20  e, description, 
332b0 74 79 70 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  typeName,..     
332c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61                 a
332d0 73 73 65 6d 62 6c 79 4e 61 6d 65 2c 20 77 68 61  ssemblyName, wha
332e0 74 49 66 2c 20 76 65 72 62 6f 73 65 2c 20 72 65  tIf, verbose, re
332f0 66 20 73 61 76 65 64 2c 20 72 65 66 20 65 72 72  f saved, ref err
33300 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  or);..          
33310 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
33320 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20   else..         
33330 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
33340 20 20 20 20 20 20 72 65 74 75 72 6e 20 52 65 6d        return Rem
33350 6f 76 65 44 62 50 72 6f 76 69 64 65 72 46 61 63  oveDbProviderFac
33360 74 6f 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20  tory(..         
33370 20 20 20 20 20 20 20 20 20 20 20 66 69 6c 65 4e             fileN
33380 61 6d 65 2c 20 69 6e 76 61 72 69 61 6e 74 4e 61  ame, invariantNa
33390 6d 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62  me, whatIf, verb
333a0 6f 73 65 2c 20 72 65 66 20 73 61 76 65 64 2c 0d  ose, ref saved,.
333b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
333c0 20 20 20 20 20 72 65 66 20 65 72 72 6f 72 29 3b       ref error);
333d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
333e0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
333f0 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
33400 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
33410 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33420 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33430 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33440 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33450 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65  /....        #re
33460 67 69 6f 6e 20 41 73 73 65 6d 62 6c 79 20 46 6f  gion Assembly Fo
33470 6c 64 65 72 73 20 48 61 6e 64 6c 69 6e 67 0d 0a  lders Handling..
33480 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
33490 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 47 65  static string Ge
334a0 74 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73  tAssemblyFolders
334b0 4b 65 79 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20  KeyName(..      
334c0 20 20 20 20 20 20 73 74 72 69 6e 67 20 66 72 61        string fra
334d0 6d 65 77 6f 72 6b 4e 61 6d 65 2c 0d 0a 20 20 20  meworkName,..   
334e0 20 20 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e           Version
334f0 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f   frameworkVersio
33500 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n,..            
33510 73 74 72 69 6e 67 20 70 6c 61 74 66 6f 72 6d 4e  string platformN
33520 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
33530 20 20 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d    bool perUser,.
33540 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
33550 6c 20 77 6f 77 36 34 0d 0a 20 20 20 20 20 20 20  l wow64..       
33560 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
33570 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  {..            /
33580 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  /..            /
33590 2f 20 4e 4f 54 45 3a 20 54 68 69 73 20 72 65 67  / NOTE: This reg
335a0 69 73 74 72 79 20 6b 65 79 20 61 70 70 65 61 72  istry key appear
335b0 73 20 74 6f 20 61 6c 77 61 79 73 20 62 65 20 33  s to always be 3
335c0 32 2d 62 69 74 20 6f 6e 6c 79 0d 0a 20 20 20 20  2-bit only..    
335d0 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
335e0 20 28 69 2e 65 2e 20 70 72 6f 62 61 62 6c 79 20   (i.e. probably 
335f0 62 65 63 61 75 73 65 20 69 74 20 69 73 20 6f 6e  because it is on
33600 6c 79 20 75 73 65 64 20 62 79 20 56 69 73 75 61  ly used by Visua
33610 6c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  l..            /
33620 2f 20 20 20 20 20 20 20 53 74 75 64 69 6f 2c 20  /       Studio, 
33630 77 68 69 63 68 20 69 73 20 63 75 72 72 65 6e 74  which is current
33640 6c 79 20 61 6c 77 61 79 73 20 33 32 2d 62 69 74  ly always 32-bit
33650 20 6f 6e 6c 79 29 2e 0d 0a 20 20 20 20 20 20 20   only)...       
33660 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
33670 20 20 20 20 20 73 74 72 69 6e 67 20 66 6f 72 6d       string form
33680 61 74 20 3d 20 21 53 74 72 69 6e 67 2e 49 73 4e  at = !String.IsN
33690 75 6c 6c 4f 72 45 6d 70 74 79 28 70 6c 61 74 66  ullOrEmpty(platf
336a0 6f 72 6d 4e 61 6d 65 29 20 3f 0d 0a 20 20 20 20  ormName) ?..    
336b0 20 20 20 20 20 20 20 20 20 20 20 20 22 7b 30 7d              "{0}
336c0 5c 5c 4d 69 63 72 6f 73 6f 66 74 5c 5c 7b 31 7d  \\Microsoft\\{1}
336d0 5c 5c 76 7b 32 7d 5c 5c 7b 33 7d 5c 5c 41 73 73  \\v{2}\\{3}\\Ass
336e0 65 6d 62 6c 79 46 6f 6c 64 65 72 73 45 78 22 20  emblyFoldersEx" 
336f0 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  :..             
33700 20 20 20 22 7b 30 7d 5c 5c 4d 69 63 72 6f 73 6f     "{0}\\Microso
33710 66 74 5c 5c 7b 31 7d 5c 5c 76 7b 32 7d 5c 5c 41  ft\\{1}\\v{2}\\A
33720 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73 45 78  ssemblyFoldersEx
33730 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  ";....          
33740 20 20 72 65 74 75 72 6e 20 53 74 72 69 6e 67 2e    return String.
33750 46 6f 72 6d 61 74 28 66 6f 72 6d 61 74 2c 20 47  Format(format, G
33760 65 74 52 6f 6f 74 4b 65 79 4e 61 6d 65 28 70 65  etRootKeyName(pe
33770 72 55 73 65 72 2c 20 77 6f 77 36 34 29 2c 0d 0a  rUser, wow64),..
33780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33790 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20 66  frameworkName, f
337a0 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c  rameworkVersion,
337b0 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 29 3b 0d   platformName);.
337c0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
337d0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
337e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
337f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33800 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33810 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
33820 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
33830 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 41 64 64   static bool Add
33840 54 6f 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72  ToAssemblyFolder
33850 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s(..            
33860 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
33870 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20  rootKey,..      
33880 20 20 20 20 20 20 73 74 72 69 6e 67 20 66 72 61        string fra
33890 6d 65 77 6f 72 6b 4e 61 6d 65 2c 0d 0a 20 20 20  meworkName,..   
338a0 20 20 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e           Version
338b0 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f   frameworkVersio
338c0 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n,..            
338d0 73 74 72 69 6e 67 20 70 6c 61 74 66 6f 72 6d 4e  string platformN
338e0 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
338f0 20 20 73 74 72 69 6e 67 20 73 75 62 4b 65 79 4e    string subKeyN
33900 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
33910 20 20 73 74 72 69 6e 67 20 64 69 72 65 63 74 6f    string directo
33920 72 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ry,..           
33930 20 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d 0a   bool perUser,..
33940 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
33950 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20   wow64,..       
33960 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66       bool whatIf
33970 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
33980 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20  ool verbose,..  
33990 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74            ref st
339a0 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20  ring error..    
339b0 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
339c0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
339d0 20 20 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d 65    string keyName
339e0 20 3d 20 47 65 74 41 73 73 65 6d 62 6c 79 46 6f   = GetAssemblyFo
339f0 6c 64 65 72 73 4b 65 79 4e 61 6d 65 28 0d 0a 20  ldersKeyName(.. 
33a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
33a10 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20 66 72  rameworkName, fr
33a20 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 20  ameworkVersion, 
33a30 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 20 70 65  platformName, pe
33a40 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 20 20  rUser,..        
33a50 20 20 20 20 20 20 20 20 77 6f 77 36 34 29 3b 0d          wow64);.
33a60 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 75  ...            u
33a70 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74  sing (MockRegist
33a80 72 79 4b 65 79 20 6b 65 79 20 3d 20 52 65 67 69  ryKey key = Regi
33a90 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53  stryHelper.OpenS
33aa0 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20  ubKey(..        
33ab0 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74              root
33ac0 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 2c 20 74 72  Key, keyName, tr
33ad0 75 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62  ue, whatIf, verb
33ae0 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ose))..         
33af0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
33b00 20 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d        if (key ==
33b10 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
33b20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
33b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
33b40 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f  rror = String.Fo
33b50 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
33b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
33b70 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72  could not open r
33b80 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d  egistry key: {0}
33b90 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20  \\{1}",..       
33ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33bb0 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d   rootKey, keyNam
33bc0 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
33bd0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
33be0 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
33bf0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
33c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75                 u
33c10 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74  sing (MockRegist
33c20 72 79 4b 65 79 20 73 75 62 4b 65 79 20 3d 20 52  ryKey subKey = R
33c30 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 43 72  egistryHelper.Cr
33c40 65 61 74 65 53 75 62 4b 65 79 28 0d 0a 20 20 20  eateSubKey(..   
33c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33c60 20 20 20 20 20 6b 65 79 2c 20 73 75 62 4b 65 79       key, subKey
33c70 4e 61 6d 65 2c 20 77 68 61 74 49 66 2c 20 76 65  Name, whatIf, ve
33c80 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20  rbose))..       
33c90 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
33ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33cb0 69 66 20 28 73 75 62 4b 65 79 20 3d 3d 20 6e 75  if (subKey == nu
33cc0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
33cd0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
33ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33cf0 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69      error = Stri
33d00 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
33d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33d20 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e          "could n
33d30 6f 74 20 63 72 65 61 74 65 20 72 65 67 69 73 74  ot create regist
33d40 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d  ry key: {0}\\{1}
33d50 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
33d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33d70 6b 65 79 2c 20 73 75 62 4b 65 79 4e 61 6d 65 29  key, subKeyName)
33d80 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
33d90 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
33da0 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
33db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33dc0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
33dd0 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72           Registr
33de0 79 48 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65  yHelper.SetValue
33df0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
33e00 20 20 20 20 20 20 20 20 20 20 20 73 75 62 4b 65             subKe
33e10 79 2c 20 6e 75 6c 6c 2c 20 64 69 72 65 63 74 6f  y, null, directo
33e20 72 79 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62  ry, whatIf, verb
33e30 6f 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ose);..         
33e40 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
33e50 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
33e60 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72         return tr
33e70 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ue;..        }..
33e80 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
33e90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33ea0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33eb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33ec0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33ed0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69  /....        pri
33ee0 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c  vate static bool
33ef0 20 52 65 6d 6f 76 65 46 72 6f 6d 41 73 73 65 6d   RemoveFromAssem
33f00 62 6c 79 46 6f 6c 64 65 72 73 28 0d 0a 20 20 20  blyFolders(..   
33f10 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67           MockReg
33f20 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79  istryKey rootKey
33f30 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ,..            s
33f40 74 72 69 6e 67 20 66 72 61 6d 65 77 6f 72 6b 4e  tring frameworkN
33f50 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
33f60 20 20 56 65 72 73 69 6f 6e 20 66 72 61 6d 65 77    Version framew
33f70 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20  orkVersion,..   
33f80 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
33f90 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 0d 0a 20  platformName,.. 
33fa0 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
33fb0 67 20 73 75 62 4b 65 79 4e 61 6d 65 2c 0d 0a 20  g subKeyName,.. 
33fc0 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
33fd0 70 65 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 20  perUser,..      
33fe0 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34        bool wow64
33ff0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
34000 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69  ool throwOnMissi
34010 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ng,..           
34020 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20   bool whatIf,.. 
34030 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
34040 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20  verbose,..      
34050 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67        ref string
34060 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20   error..        
34070 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b      )..        {
34080 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
34090 72 69 6e 67 20 6b 65 79 4e 61 6d 65 20 3d 20 47  ring keyName = G
340a0 65 74 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72  etAssemblyFolder
340b0 73 4b 65 79 4e 61 6d 65 28 0d 0a 20 20 20 20 20  sKeyName(..     
340c0 20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65             frame
340d0 77 6f 72 6b 4e 61 6d 65 2c 20 66 72 61 6d 65 77  workName, framew
340e0 6f 72 6b 56 65 72 73 69 6f 6e 2c 20 70 6c 61 74  orkVersion, plat
340f0 66 6f 72 6d 4e 61 6d 65 2c 20 70 65 72 55 73 65  formName, perUse
34100 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r,..            
34110 20 20 20 20 77 6f 77 36 34 29 3b 0d 0a 0d 0a 20      wow64);.... 
34120 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67             using
34130 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65   (MockRegistryKe
34140 79 20 6b 65 79 20 3d 20 52 65 67 69 73 74 72 79  y key = Registry
34150 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65  Helper.OpenSubKe
34160 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
34170 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c          rootKey,
34180 20 6b 65 79 4e 61 6d 65 2c 20 74 72 75 65 2c 20   keyName, true, 
34190 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29  whatIf, verbose)
341a0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
341b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
341c0 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c    if (key == nul
341d0 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
341e0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
341f0 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
34200 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74   = String.Format
34210 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
34220 20 20 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c             "coul
34230 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69 73  d not open regis
34240 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31  try key: {0}\\{1
34250 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }",..           
34260 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f               roo
34270 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 29 3b 0d  tKey, keyName);.
34280 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
34290 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
342a0 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
342b0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
342c0 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73             Regis
342d0 74 72 79 48 65 6c 70 65 72 2e 44 65 6c 65 74 65  tryHelper.Delete
342e0 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20  SubKey(..       
342f0 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79               key
34300 2c 20 73 75 62 4b 65 79 4e 61 6d 65 2c 20 74 68  , subKeyName, th
34310 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c 20 77 68  rowOnMissing, wh
34320 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d  atIf, verbose);.
34330 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
34340 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
34350 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20  turn true;..    
34360 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
34370 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
34380 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34390 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
343a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
343b0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
343c0 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
343d0 69 63 20 62 6f 6f 6c 20 50 72 6f 63 65 73 73 41  ic bool ProcessA
343e0 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73 28 0d  ssemblyFolders(.
343f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63  .            Moc
34400 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f  kRegistryKey roo
34410 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20  tKey,..         
34420 20 20 20 73 74 72 69 6e 67 20 66 72 61 6d 65 77     string framew
34430 6f 72 6b 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  orkName,..      
34440 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20 66 72        Version fr
34450 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d  ameworkVersion,.
34460 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
34470 69 6e 67 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65  ing platformName
34480 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ,..            s
34490 74 72 69 6e 67 20 64 69 72 65 63 74 6f 72 79 2c  tring directory,
344a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f 62  ..            ob
344b0 6a 65 63 74 20 63 6c 69 65 6e 74 44 61 74 61 2c  ject clientData,
344c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
344d0 6f 6c 20 70 65 72 55 73 65 72 2c 0d 0a 20 20 20  ol perUser,..   
344e0 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f           bool wo
344f0 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  w64,..          
34500 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69    bool throwOnMi
34510 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20  ssing,..        
34520 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c      bool whatIf,
34530 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
34540 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20  ol verbose,..   
34550 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72           ref str
34560 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20  ing error..     
34570 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
34580 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
34590 20 41 6e 79 50 61 69 72 3c 73 74 72 69 6e 67 2c   AnyPair<string,
345a0 20 62 6f 6f 6c 3e 20 70 61 69 72 20 3d 20 63 6c   bool> pair = cl
345b0 69 65 6e 74 44 61 74 61 20 61 73 20 41 6e 79 50  ientData as AnyP
345c0 61 69 72 3c 73 74 72 69 6e 67 2c 20 62 6f 6f 6c  air<string, bool
345d0 3e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  >;....          
345e0 20 20 69 66 20 28 70 61 69 72 20 3d 3d 20 6e 75    if (pair == nu
345f0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
34600 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
34610 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76      error = "inv
34620 61 6c 69 64 20 66 72 61 6d 65 77 6f 72 6b 20 63  alid framework c
34630 61 6c 6c 62 61 63 6b 20 64 61 74 61 22 3b 0d 0a  allback data";..
34640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34650 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
34660 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
34670 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
34680 70 61 69 72 2e 59 29 0d 0a 20 20 20 20 20 20 20  pair.Y)..       
34690 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
346a0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 52          return R
346b0 65 6d 6f 76 65 46 72 6f 6d 41 73 73 65 6d 62 6c  emoveFromAssembl
346c0 79 46 6f 6c 64 65 72 73 28 0d 0a 20 20 20 20 20  yFolders(..     
346d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
346e0 6f 6f 74 4b 65 79 2c 20 66 72 61 6d 65 77 6f 72  ootKey, framewor
346f0 6b 4e 61 6d 65 2c 20 66 72 61 6d 65 77 6f 72 6b  kName, framework
34700 56 65 72 73 69 6f 6e 2c 20 70 6c 61 74 66 6f 72  Version, platfor
34710 6d 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  mName,..        
34720 20 20 20 20 20 20 20 20 20 20 20 20 4c 65 67 61              Lega
34730 63 79 50 72 6f 6a 65 63 74 4e 61 6d 65 2c 20 70  cyProjectName, p
34740 65 72 55 73 65 72 2c 20 77 6f 77 36 34 2c 20 66  erUser, wow64, f
34750 61 6c 73 65 2c 20 77 68 61 74 49 66 2c 20 76 65  alse, whatIf, ve
34760 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20  rbose,..        
34770 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
34780 65 72 72 6f 72 29 20 26 26 0d 0a 20 20 20 20 20  error) &&..     
34790 20 20 20 20 20 20 20 20 20 20 20 41 64 64 54 6f             AddTo
347a0 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73 28  AssemblyFolders(
347b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
347c0 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 66        rootKey, f
347d0 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20 66 72  rameworkName, fr
347e0 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 20  ameworkVersion, 
347f0 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 0d 0a 20  platformName,.. 
34800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34810 20 20 20 50 72 6f 6a 65 63 74 4e 61 6d 65 2c 20     ProjectName, 
34820 70 61 69 72 2e 58 2c 20 70 65 72 55 73 65 72 2c  pair.X, perUser,
34830 20 77 6f 77 36 34 2c 20 77 68 61 74 49 66 2c 20   wow64, whatIf, 
34840 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20  verbose,..      
34850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
34860 66 20 65 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20  f error);..     
34870 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
34880 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20        else..    
34890 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
348a0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
348b0 6e 20 52 65 6d 6f 76 65 46 72 6f 6d 41 73 73 65  n RemoveFromAsse
348c0 6d 62 6c 79 46 6f 6c 64 65 72 73 28 0d 0a 20 20  mblyFolders(..  
348d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
348e0 20 20 72 6f 6f 74 4b 65 79 2c 20 66 72 61 6d 65    rootKey, frame
348f0 77 6f 72 6b 4e 61 6d 65 2c 20 66 72 61 6d 65 77  workName, framew
34900 6f 72 6b 56 65 72 73 69 6f 6e 2c 20 70 6c 61 74  orkVersion, plat
34910 66 6f 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  formName,..     
34920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 50                 P
34930 72 6f 6a 65 63 74 4e 61 6d 65 2c 20 70 65 72 55  rojectName, perU
34940 73 65 72 2c 20 77 6f 77 36 34 2c 20 74 68 72 6f  ser, wow64, thro
34950 77 4f 6e 4d 69 73 73 69 6e 67 2c 20 77 68 61 74  wOnMissing, what
34960 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If,..           
34970 20 20 20 20 20 20 20 20 20 76 65 72 62 6f 73 65           verbose
34980 2c 20 72 65 66 20 65 72 72 6f 72 29 3b 0d 0a 20  , ref error);.. 
34990 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
349a0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
349b0 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
349c0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
349d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
349e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
349f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34a00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
34a10 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
34a20 6e 20 56 69 73 75 61 6c 20 53 74 75 64 69 6f 20  n Visual Studio 
34a30 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20 20  Handling..      
34a40 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
34a50 20 73 74 72 69 6e 67 20 47 65 74 56 73 52 6f 6f   string GetVsRoo
34a60 74 4b 65 79 4e 61 6d 65 28 0d 0a 20 20 20 20 20  tKeyName(..     
34a70 20 20 20 20 20 20 20 62 6f 6f 6c 20 70 65 72 55         bool perU
34a80 73 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ser,..          
34a90 20 20 62 6f 6f 6c 20 77 6f 77 36 34 0d 0a 20 20    bool wow64..  
34aa0 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
34ab0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
34ac0 20 20 20 20 72 65 74 75 72 6e 20 53 74 72 69 6e      return Strin
34ad0 67 2e 46 6f 72 6d 61 74 28 22 7b 30 7d 5c 5c 4d  g.Format("{0}\\M
34ae0 69 63 72 6f 73 6f 66 74 5c 5c 56 69 73 75 61 6c  icrosoft\\Visual
34af0 53 74 75 64 69 6f 22 2c 0d 0a 20 20 20 20 20 20  Studio",..      
34b00 20 20 20 20 20 20 20 20 20 20 47 65 74 52 6f 6f            GetRoo
34b10 74 4b 65 79 4e 61 6d 65 28 70 65 72 55 73 65 72  tKeyName(perUser
34b20 2c 20 77 6f 77 36 34 29 29 3b 0d 0a 20 20 20 20  , wow64));..    
34b30 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
34b40 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
34b50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34b60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34b70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34b80 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
34b90 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
34ba0 69 63 20 73 74 72 69 6e 67 20 47 65 74 56 73 4b  ic string GetVsK
34bb0 65 79 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20  eyName(..       
34bc0 20 20 20 20 20 56 65 72 73 69 6f 6e 20 76 73 56       Version vsV
34bd0 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20  ersion,..       
34be0 20 20 20 20 20 73 74 72 69 6e 67 20 73 75 66 66       string suff
34bf0 69 78 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ix,..           
34c00 20 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d 0a   bool perUser,..
34c10 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
34c20 20 77 6f 77 36 34 0d 0a 20 20 20 20 20 20 20 20   wow64..        
34c30 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b      )..        {
34c40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
34c50 20 28 76 73 56 65 72 73 69 6f 6e 20 3d 3d 20 6e   (vsVersion == n
34c60 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
34c70 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c        return nul
34c80 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  l;....          
34c90 20 20 72 65 74 75 72 6e 20 53 74 72 69 6e 67 2e    return String.
34ca0 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
34cb0 20 20 20 20 20 20 20 20 20 22 7b 30 7d 5c 5c 7b           "{0}\\{
34cc0 31 7d 7b 32 7d 22 2c 20 47 65 74 56 73 52 6f 6f  1}{2}", GetVsRoo
34cd0 74 4b 65 79 4e 61 6d 65 28 70 65 72 55 73 65 72  tKeyName(perUser
34ce0 2c 20 77 6f 77 36 34 29 2c 20 76 73 56 65 72 73  , wow64), vsVers
34cf0 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ion,..          
34d00 20 20 20 20 20 20 73 75 66 66 69 78 29 3b 0d 0a        suffix);..
34d10 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
34d20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
34d30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34d40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34d50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34d60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
34d70 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
34d80 56 69 73 75 61 6c 20 53 74 75 64 69 6f 20 44 61  Visual Studio Da
34d90 74 61 20 53 6f 75 72 63 65 20 48 61 6e 64 6c 69  ta Source Handli
34da0 6e 67 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ng..        priv
34db0 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20  ate static bool 
34dc0 41 64 64 56 73 44 61 74 61 53 6f 75 72 63 65 28  AddVsDataSource(
34dd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f  ..            Mo
34de0 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f  ckRegistryKey ro
34df0 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20  otKey,..        
34e00 20 20 20 20 56 65 72 73 69 6f 6e 20 76 73 56 65      Version vsVe
34e10 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20  rsion,..        
34e20 20 20 20 20 73 74 72 69 6e 67 20 73 75 66 66 69      string suffi
34e30 78 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  x,..            
34e40 50 61 63 6b 61 67 65 20 70 61 63 6b 61 67 65 2c  Package package,
34e50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
34e60 6f 6c 20 70 65 72 55 73 65 72 2c 0d 0a 20 20 20  ol perUser,..   
34e70 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f           bool wo
34e80 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  w64,..          
34e90 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a    bool whatIf,..
34ea0 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
34eb0 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20   verbose,..     
34ec0 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e         ref strin
34ed0 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20  g error..       
34ee0 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
34ef0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  {..            i
34f00 66 20 28 76 73 56 65 72 73 69 6f 6e 20 3d 3d 20  f (vsVersion == 
34f10 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
34f20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
34f30 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69        error = "i
34f40 6e 76 61 6c 69 64 20 56 53 20 76 65 72 73 69 6f  nvalid VS versio
34f50 6e 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n";..           
34f60 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
34f70 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
34f80 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
34f90 20 69 66 20 28 70 61 63 6b 61 67 65 20 3d 3d 20   if (package == 
34fa0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
34fb0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
34fc0 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69        error = "i
34fd0 6e 76 61 6c 69 64 20 56 53 20 70 61 63 6b 61 67  nvalid VS packag
34fe0 65 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e";..           
34ff0 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
35000 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
35010 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
35020 20 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d 65 20   string keyName 
35030 3d 20 47 65 74 56 73 4b 65 79 4e 61 6d 65 28 76  = GetVsKeyName(v
35040 73 56 65 72 73 69 6f 6e 2c 20 73 75 66 66 69 78  sVersion, suffix
35050 2c 20 70 65 72 55 73 65 72 2c 20 77 6f 77 36 34  , perUser, wow64
35060 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
35070 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67    using (MockReg
35080 69 73 74 72 79 4b 65 79 20 6b 65 79 20 3d 20 52  istryKey key = R
35090 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70  egistryHelper.Op
350a0 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20  enSubKey(..     
350b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
350c0 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 2c  ootKey, keyName,
350d0 20 66 61 6c 73 65 2c 20 77 68 61 74 49 66 2c 20   false, whatIf, 
350e0 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20  verbose))..     
350f0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
35100 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6b 65            if (ke
35110 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y == null)..    
35120 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
35130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35140 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e     error = Strin
35150 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
35160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35170 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70     "could not op
35180 65 6e 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a  en registry key:
35190 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20   {0}\\{1}",..   
351a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
351b0 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65       rootKey, ke
351c0 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  yName);....     
351d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
351e0 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
351f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
35200 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
35210 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65     using (MockRe
35220 67 69 73 74 72 79 4b 65 79 20 73 75 62 4b 65 79  gistryKey subKey
35230 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70 65   = RegistryHelpe
35240 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20  r.OpenSubKey(.. 
35250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35260 20 20 20 20 20 20 20 6b 65 79 2c 20 22 44 61 74         key, "Dat
35270 61 53 6f 75 72 63 65 73 22 2c 20 74 72 75 65 2c  aSources", true,
35280 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
35290 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
352a0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
352b0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73             if (s
352c0 75 62 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  ubKey == null)..
352d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
352e0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
352f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
35300 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f  rror = String.Fo
35310 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
35320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35330 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70     "could not op
35340 65 6e 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a  en registry key:
35350 20 7b 30 7d 5c 5c 44 61 74 61 53 6f 75 72 63 65   {0}\\DataSource
35360 73 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s",..           
35370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35380 20 6b 65 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20   key);....      
35390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
353a0 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
353b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
353c0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
353d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75 73                us
353e0 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72  ing (MockRegistr
353f0 79 4b 65 79 20 64 61 74 61 53 6f 75 72 63 65 4b  yKey dataSourceK
35400 65 79 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20  ey =..          
35410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35420 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72    RegistryHelper
35430 2e 43 72 65 61 74 65 53 75 62 4b 65 79 28 73 75  .CreateSubKey(su
35440 62 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20  bKey,..         
35450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35460 20 20 20 70 61 63 6b 61 67 65 2e 44 61 74 61 53     package.DataS
35470 6f 75 72 63 65 49 64 2e 54 6f 53 74 72 69 6e 67  ourceId.ToString
35480 28 56 73 49 64 46 6f 72 6d 61 74 29 2c 0d 0a 20  (VsIdFormat),.. 
35490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
354a0 20 20 20 20 20 20 20 20 20 20 20 77 68 61 74 49             whatI
354b0 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20  f, verbose))..  
354c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
354d0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
354e0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
354f0 28 64 61 74 61 53 6f 75 72 63 65 4b 65 79 20 3d  (dataSourceKey =
35500 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
35510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35520 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
35530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35540 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46  error = String.F
35550 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
35560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35570 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e          "could n
35580 6f 74 20 63 72 65 61 74 65 20 72 65 67 69 73 74  ot create regist
35590 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d  ry key: {0}\\{1}
355a0 22 2c 20 6b 65 79 2c 0d 0a 20 20 20 20 20 20 20  ", key,..       
355b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
355c0 20 20 20 20 20 20 20 20 20 70 61 63 6b 61 67 65           package
355d0 2e 44 61 74 61 53 6f 75 72 63 65 49 64 2e 54 6f  .DataSourceId.To
355e0 53 74 72 69 6e 67 28 56 73 49 64 46 6f 72 6d 61  String(VsIdForma
355f0 74 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  t));....        
35600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35610 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
35620 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
35630 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
35640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35650 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79          Registry
35660 48 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65 28  Helper.SetValue(
35670 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
35680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 61                da
35690 74 61 53 6f 75 72 63 65 4b 65 79 2c 20 6e 75 6c  taSourceKey, nul
356a0 6c 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  l, String.Format
356b0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
356c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
356d0 7b 30 7d 20 44 61 74 61 62 61 73 65 20 46 69 6c  {0} Database Fil
356e0 65 22 2c 20 50 72 6f 6a 65 63 74 4e 61 6d 65 29  e", ProjectName)
356f0 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20  , whatIf,..     
35700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35710 20 20 20 20 20 20 20 76 65 72 62 6f 73 65 29 3b         verbose);
35720 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
35730 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
35740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35750 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
35760 20 54 68 69 73 20 76 61 6c 75 65 20 69 73 20 6e   This value is n
35770 65 77 20 61 73 20 6f 66 20 31 2e 30 2e 38 33 2e  ew as of 1.0.83.
35780 30 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  0...            
35790 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
357a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
357b0 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79          Registry
357c0 48 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65 28  Helper.SetValue(
357d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
357e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 61                da
357f0 74 61 53 6f 75 72 63 65 4b 65 79 2c 20 22 44 65  taSourceKey, "De
35800 66 61 75 6c 74 50 72 6f 76 69 64 65 72 22 2c 0d  faultProvider",.
35810 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
35820 20 20 20 20 20 20 20 20 20 20 20 20 20 70 61 63               pac
35830 6b 61 67 65 2e 44 61 74 61 50 72 6f 76 69 64 65  kage.DataProvide
35840 72 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49  rId.ToString(VsI
35850 64 46 6f 72 6d 61 74 29 2c 0d 0a 20 20 20 20 20  dFormat),..     
35860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35870 20 20 20 20 20 20 20 77 68 61 74 49 66 2c 20 76         whatIf, v
35880 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20  erbose);....    
35890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
358a0 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70      RegistryHelp
358b0 65 72 2e 43 72 65 61 74 65 53 75 62 4b 65 79 28  er.CreateSubKey(
358c0 64 61 74 61 53 6f 75 72 63 65 4b 65 79 2c 0d 0a  dataSourceKey,..
358d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
358e0 20 20 20 20 20 20 20 20 20 20 20 20 53 74 72 69              Stri
358f0 6e 67 2e 46 6f 72 6d 61 74 28 22 53 75 70 70 6f  ng.Format("Suppo
35900 72 74 69 6e 67 50 72 6f 76 69 64 65 72 73 5c 5c  rtingProviders\\
35910 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  {0}",..         
35920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35930 20 20 20 70 61 63 6b 61 67 65 2e 44 61 74 61 50     package.DataP
35940 72 6f 76 69 64 65 72 49 64 2e 54 6f 53 74 72 69  roviderId.ToStri
35950 6e 67 28 56 73 49 64 46 6f 72 6d 61 74 29 29 2c  ng(VsIdFormat)),
35960 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
35970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77 68                wh
35980 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d  atIf, verbose);.
35990 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
359a0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
359b0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
359c0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
359d0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74          return t
359e0 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  rue;..        }.
359f0 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
35a00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35a10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35a20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35a30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35a40 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72  //....        pr
35a50 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f  ivate static boo
35a60 6c 20 52 65 6d 6f 76 65 56 73 44 61 74 61 53 6f  l RemoveVsDataSo
35a70 75 72 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20  urce(..         
35a80 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b     MockRegistryK
35a90 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20  ey rootKey,..   
35aa0 20 20 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e           Version
35ab0 20 76 73 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20   vsVersion,..   
35ac0 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
35ad0 73 75 66 66 69 78 2c 0d 0a 20 20 20 20 20 20 20  suffix,..       
35ae0 20 20 20 20 20 50 61 63 6b 61 67 65 20 70 61 63       Package pac
35af0 6b 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  kage,..         
35b00 20 20 20 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c     bool perUser,
35b10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
35b20 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20  ol wow64,..     
35b30 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74         bool what
35b40 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If,..           
35b50 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a   bool verbose,..
35b60 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
35b70 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20  string error..  
35b80 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
35b90 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
35ba0 20 20 20 20 69 66 20 28 76 73 56 65 72 73 69 6f      if (vsVersio
35bb0 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  n == null)..    
35bc0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
35bd0 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
35be0 20 3d 20 22 69 6e 76 61 6c 69 64 20 56 53 20 76   = "invalid VS v
35bf0 65 72 73 69 6f 6e 22 3b 0d 0a 20 20 20 20 20 20  ersion";..      
35c00 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
35c10 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
35c20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
35c30 20 20 20 20 20 20 69 66 20 28 70 61 63 6b 61 67        if (packag
35c40 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
35c50 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
35c60 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
35c70 20 3d 20 22 69 6e 76 61 6c 69 64 20 56 53 20 70   = "invalid VS p
35c80 61 63 6b 61 67 65 22 3b 0d 0a 20 20 20 20 20 20  ackage";..      
35c90 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
35ca0 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
35cb0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
35cc0 20 20 20 20 20 20 73 74 72 69 6e 67 20 6b 65 79        string key
35cd0 4e 61 6d 65 20 3d 20 47 65 74 56 73 4b 65 79 4e  Name = GetVsKeyN
35ce0 61 6d 65 28 76 73 56 65 72 73 69 6f 6e 2c 20 73  ame(vsVersion, s
35cf0 75 66 66 69 78 2c 20 70 65 72 55 73 65 72 2c 20  uffix, perUser, 
35d00 77 6f 77 36 34 29 3b 0d 0a 0d 0a 20 20 20 20 20  wow64);....     
35d10 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f         using (Mo
35d20 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65  ckRegistryKey ke
35d30 79 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70  y = RegistryHelp
35d40 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a  er.OpenSubKey(..
35d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35d60 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79      rootKey, key
35d70 4e 61 6d 65 2c 20 66 61 6c 73 65 2c 20 77 68 61  Name, false, wha
35d80 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a  tIf, verbose))..
35d90 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
35da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
35db0 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d  f (key == null).
35dc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
35dd0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
35de0 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
35df0 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
35e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35e10 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e          "could n
35e20 6f 74 20 6f 70 65 6e 20 72 65 67 69 73 74 72 79  ot open registry
35e30 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c   key: {0}\\{1}",
35e40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
35e50 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65            rootKe
35e60 79 2c 20 6b 65 79 4e 61 6d 65 29 3b 0d 0a 0d 0a  y, keyName);....
35e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35e80 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
35e90 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
35ea0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
35eb0 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d          using (M
35ec0 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 73  ockRegistryKey s
35ed0 75 62 4b 65 79 20 3d 20 52 65 67 69 73 74 72 79  ubKey = Registry
35ee0 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65  Helper.OpenSubKe
35ef0 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
35f00 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 2c              key,
35f10 20 22 44 61 74 61 53 6f 75 72 63 65 73 22 2c 20   "DataSources", 
35f20 74 72 75 65 2c 20 77 68 61 74 49 66 2c 20 76 65  true, whatIf, ve
35f30 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20  rbose))..       
35f40 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
35f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35f60 69 66 20 28 73 75 62 4b 65 79 20 3d 3d 20 6e 75  if (subKey == nu
35f70 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
35f80 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
35f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35fa0 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69      error = Stri
35fb0 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
35fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35fd0 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e          "could n
35fe0 6f 74 20 6f 70 65 6e 20 72 65 67 69 73 74 72 79  ot open registry
35ff0 20 6b 65 79 3a 20 7b 30 7d 5c 5c 44 61 74 61 53   key: {0}\\DataS
36000 6f 75 72 63 65 73 22 2c 0d 0a 20 20 20 20 20 20  ources",..      
36010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36020 20 20 20 20 20 20 6b 65 79 29 3b 0d 0a 0d 0a 20        key);.... 
36030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36040 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
36050 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
36060 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
36070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36080 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65     RegistryHelpe
36090 72 2e 44 65 6c 65 74 65 53 75 62 4b 65 79 54 72  r.DeleteSubKeyTr
360a0 65 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ee(..           
360b0 20 20 20 20 20 20 20 20 20 20 20 20 20 73 75 62               sub
360c0 4b 65 79 2c 20 70 61 63 6b 61 67 65 2e 44 61 74  Key, package.Dat
360d0 61 53 6f 75 72 63 65 49 64 2e 54 6f 53 74 72 69  aSourceId.ToStri
360e0 6e 67 28 56 73 49 64 46 6f 72 6d 61 74 29 2c 0d  ng(VsIdFormat),.
360f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
36100 20 20 20 20 20 20 20 20 20 77 68 61 74 49 66 2c           whatIf,
36110 20 76 65 72 62 6f 73 65 29 3b 0d 0a 20 20 20 20   verbose);..    
36120 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
36130 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
36140 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
36150 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20  rn true;..      
36160 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f    }....        /
36170 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36180 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36190 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
361a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
361b0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
361c0 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
361d0 20 62 6f 6f 6c 20 50 72 6f 63 65 73 73 56 73 44   bool ProcessVsD
361e0 61 74 61 53 6f 75 72 63 65 28 0d 0a 20 20 20 20  ataSource(..    
361f0 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69          MockRegi
36200 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c  stryKey rootKey,
36210 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 56 65  ..            Ve
36220 72 73 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e 2c  rsion vsVersion,
36230 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
36240 72 69 6e 67 20 73 75 66 66 69 78 2c 0d 0a 20 20  ring suffix,..  
36250 20 20 20 20 20 20 20 20 20 20 50 61 63 6b 61 67            Packag
36260 65 20 70 61 63 6b 61 67 65 2c 0d 0a 20 20 20 20  e package,..    
36270 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 64          string d
36280 69 72 65 63 74 6f 72 79 2c 0d 0a 20 20 20 20 20  irectory,..     
36290 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 63 6c         object cl
362a0 69 65 6e 74 44 61 74 61 2c 0d 0a 20 20 20 20 20  ientData,..     
362b0 20 20 20 20 20 20 20 62 6f 6f 6c 20 70 65 72 55         bool perU
362c0 73 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ser,..          
362d0 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20    bool wow64,.. 
362e0 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
362f0 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d  throwOnMissing,.
36300 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
36310 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20  l whatIf,..     
36320 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62         bool verb
36330 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ose,..          
36340 20 20 72 65 66 20 73 74 72 69 6e 67 20 65 72 72    ref string err
36350 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  or..            
36360 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
36370 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70 61            if (pa
36380 63 6b 61 67 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  ckage == null)..
36390 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
363a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
363b0 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20  rror = "invalid 
363c0 56 53 20 70 61 63 6b 61 67 65 22 3b 0d 0a 20 20  VS package";..  
363d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
363e0 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
363f0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
36400 20 20 20 20 20 20 20 20 20 20 41 6e 79 50 61 69            AnyPai
36410 72 3c 73 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e 20  r<string, bool> 
36420 70 61 69 72 20 3d 20 63 6c 69 65 6e 74 44 61 74  pair = clientDat
36430 61 20 61 73 20 41 6e 79 50 61 69 72 3c 73 74 72  a as AnyPair<str
36440 69 6e 67 2c 20 62 6f 6f 6c 3e 3b 0d 0a 0d 0a 20  ing, bool>;.... 
36450 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70             if (p
36460 61 69 72 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  air == null)..  
36470 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
36480 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
36490 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 56 53  or = "invalid VS
364a0 20 63 61 6c 6c 62 61 63 6b 20 64 61 74 61 22 3b   callback data";
364b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
364c0 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
364d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
364e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
364f0 20 28 70 61 69 72 2e 59 29 0d 0a 20 20 20 20 20   (pair.Y)..     
36500 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
36510 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
36520 20 41 64 64 56 73 44 61 74 61 53 6f 75 72 63 65   AddVsDataSource
36530 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
36540 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20         rootKey, 
36550 76 73 56 65 72 73 69 6f 6e 2c 20 73 75 66 66 69  vsVersion, suffi
36560 78 2c 20 70 61 63 6b 61 67 65 2c 20 70 65 72 55  x, package, perU
36570 73 65 72 2c 20 77 6f 77 36 34 2c 0d 0a 20 20 20  ser, wow64,..   
36580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36590 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
365a0 2c 20 72 65 66 20 65 72 72 6f 72 29 3b 0d 0a 20  , ref error);.. 
365b0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
365c0 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a            else..
365d0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
365e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
365f0 65 74 75 72 6e 20 52 65 6d 6f 76 65 56 73 44 61  eturn RemoveVsDa
36600 74 61 53 6f 75 72 63 65 28 0d 0a 20 20 20 20 20  taSource(..     
36610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
36620 6f 6f 74 4b 65 79 2c 20 76 73 56 65 72 73 69 6f  ootKey, vsVersio
36630 6e 2c 20 73 75 66 66 69 78 2c 20 70 61 63 6b 61  n, suffix, packa
36640 67 65 2c 20 70 65 72 55 73 65 72 2c 20 77 6f 77  ge, perUser, wow
36650 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  64,..           
36660 20 20 20 20 20 20 20 20 20 77 68 61 74 49 66 2c           whatIf,
36670 20 76 65 72 62 6f 73 65 2c 20 72 65 66 20 65 72   verbose, ref er
36680 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ror);..         
36690 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
366a0 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67  .        #endreg
366b0 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ion....        /
366c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
366d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
366e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
366f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36700 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
36710 20 20 23 72 65 67 69 6f 6e 20 56 69 73 75 61 6c    #region Visual
36720 20 53 74 75 64 69 6f 20 44 61 74 61 20 50 72 6f   Studio Data Pro
36730 76 69 64 65 72 20 48 61 6e 64 6c 69 6e 67 0d 0a  vider Handling..
36740 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
36750 73 74 61 74 69 63 20 62 6f 6f 6c 20 41 64 64 56  static bool AddV
36760 73 44 61 74 61 50 72 6f 76 69 64 65 72 28 0d 0a  sDataProvider(..
36770 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b              Mock
36780 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74  RegistryKey root
36790 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  Key,..          
367a0 20 20 56 65 72 73 69 6f 6e 20 76 73 56 65 72 73    Version vsVers
367b0 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ion,..          
367c0 20 20 73 74 72 69 6e 67 20 73 75 66 66 69 78 2c    string suffix,
367d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 50 61  ..            Pa
367e0 63 6b 61 67 65 20 70 61 63 6b 61 67 65 2c 0d 0a  ckage package,..
367f0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
36800 6e 67 20 66 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20  ng fileName,..  
36810 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 70            bool p
36820 65 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 20  erUser,..       
36830 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c       bool wow64,
36840 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
36850 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20  ol whatIf,..    
36860 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72          bool ver
36870 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  bose,..         
36880 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 65 72     ref string er
36890 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ror..           
368a0 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20   )..        {.. 
368b0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76             if (v
368c0 73 56 65 72 73 69 6f 6e 20 3d 3d 20 6e 75 6c 6c  sVersion == null
368d0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
368e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
368f0 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c    error = "inval
36900 69 64 20 56 53 20 76 65 72 73 69 6f 6e 22 3b 0d  id VS version";.
36910 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
36920 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
36930 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
36940 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
36950 28 70 61 63 6b 61 67 65 20 3d 3d 20 6e 75 6c 6c  (package == null
36960 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
36970 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
36980 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c    error = "inval
36990 69 64 20 56 53 20 70 61 63 6b 61 67 65 22 3b 0d  id VS package";.
369a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
369b0 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
369c0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
369d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
369e0 69 6e 67 20 6b 65 79 4e 61 6d 65 20 3d 20 47 65  ing keyName = Ge
369f0 74 56 73 4b 65 79 4e 61 6d 65 28 76 73 56 65 72  tVsKeyName(vsVer
36a00 73 69 6f 6e 2c 20 73 75 66 66 69 78 2c 20 70 65  sion, suffix, pe
36a10 72 55 73 65 72 2c 20 77 6f 77 36 34 29 3b 0d 0a  rUser, wow64);..
36a20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 73  ..            us
36a30 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72  ing (MockRegistr
36a40 79 4b 65 79 20 6b 65 79 20 3d 20 52 65 67 69 73  yKey key = Regis
36a50 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75  tryHelper.OpenSu
36a60 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20  bKey(..         
36a70 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b             rootK
36a80 65 79 2c 20 6b 65 79 4e 61 6d 65 2c 20 66 61 6c  ey, keyName, fal
36a90 73 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62  se, whatIf, verb
36aa0 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ose))..         
36ab0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
36ac0 20 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d        if (key ==
36ad0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
36ae0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
36af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
36b00 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f  rror = String.Fo
36b10 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
36b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
36b30 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72  could not open r
36b40 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d  egistry key: {0}
36b50 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20  \\{1}",..       
36b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36b70 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d   rootKey, keyNam
36b80 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
36b90 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
36ba0 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
36bb0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
36bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75                 u
36bd0 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74  sing (MockRegist
36be0 72 79 4b 65 79 20 73 75 62 4b 65 79 20 3d 20 52  ryKey subKey = R
36bf0 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70  egistryHelper.Op
36c00 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20  enSubKey(..     
36c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36c20 20 20 20 6b 65 79 2c 20 22 44 61 74 61 50 72 6f     key, "DataPro
36c30 76 69 64 65 72 73 22 2c 20 74 72 75 65 2c 20 77  viders", true, w
36c40 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29  hatIf, verbose))
36c50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
36c60 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
36c70 20 20 20 20 20 20 20 20 20 69 66 20 28 73 75 62           if (sub
36c80 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  Key == null)..  
36c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36ca0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
36cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
36cc0 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d  or = String.Form
36cd0 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
36ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36cf0 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e   "could not open
36d00 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b   registry key: {
36d10 30 7d 5c 5c 44 61 74 61 50 72 6f 76 69 64 65 72  0}\\DataProvider
36d20 73 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s",..           
36d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36d40 20 6b 65 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20   key);....      
36d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36d60 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
36d70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
36d80 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
36d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75 73                us
36da0 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72  ing (MockRegistr
36db0 79 4b 65 79 20 64 61 74 61 50 72 6f 76 69 64 65  yKey dataProvide
36dc0 72 4b 65 79 20 3d 0d 0a 20 20 20 20 20 20 20 20  rKey =..        
36dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36de0 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70      RegistryHelp
36df0 65 72 2e 43 72 65 61 74 65 53 75 62 4b 65 79 28  er.CreateSubKey(
36e00 73 75 62 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20  subKey,..       
36e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36e20 20 20 20 20 20 70 61 63 6b 61 67 65 2e 44 61 74       package.Dat
36e30 61 50 72 6f 76 69 64 65 72 49 64 2e 54 6f 53 74  aProviderId.ToSt
36e40 72 69 6e 67 28 56 73 49 64 46 6f 72 6d 61 74 29  ring(VsIdFormat)
36e50 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
36e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77                 w
36e70 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29  hatIf, verbose))
36e80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
36e90 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
36ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36eb0 20 69 66 20 28 64 61 74 61 50 72 6f 76 69 64 65   if (dataProvide
36ec0 72 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  rKey == null).. 
36ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36ee0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
36ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36f00 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74        error = St
36f10 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
36f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63                "c
36f40 6f 75 6c 64 20 6e 6f 74 20 63 72 65 61 74 65 20  ould not create 
36f50 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30  registry key: {0
36f60 7d 5c 5c 7b 31 7d 22 2c 20 6b 65 79 2c 0d 0a 20  }\\{1}", key,.. 
36f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
36f90 61 63 6b 61 67 65 2e 44 61 74 61 50 72 6f 76 69  ackage.DataProvi
36fa0 64 65 72 49 64 2e 54 6f 53 74 72 69 6e 67 28 56  derId.ToString(V
36fb0 73 49 64 46 6f 72 6d 61 74 29 29 3b 0d 0a 0d 0a  sIdFormat));....
36fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36fd0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
36fe0 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
36ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37000 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
37010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37020 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53  RegistryHelper.S
37030 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20  etValue(..      
37040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37050 20 20 20 20 20 20 64 61 74 61 50 72 6f 76 69 64        dataProvid
37060 65 72 4b 65 79 2c 20 6e 75 6c 6c 2c 20 44 65 73  erKey, null, Des
37070 63 72 69 70 74 69 6f 6e 2c 20 77 68 61 74 49 66  cription, whatIf
37080 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
37090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76                 v
370a0 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20  erbose);....    
370b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
370c0 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
370d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
370e0 2f 2f 20 4e 4f 54 45 3a 20 54 68 69 73 20 76 61  // NOTE: This va
370f0 6c 75 65 20 69 73 20 6e 65 77 20 61 73 20 6f 66  lue is new as of
37100 20 31 2e 30 2e 38 33 2e 30 2e 20 20 48 6f 77 65   1.0.83.0.  Howe
37110 76 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ver,..          
37120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
37130 20 20 20 20 20 20 20 69 74 20 73 68 6f 75 6c 64         it should
37140 20 6f 6e 6c 79 20 62 65 20 73 65 74 20 69 66 20   only be set if 
37150 74 68 65 20 70 61 63 6b 61 67 65 20 61 73 73 65  the package asse
37160 6d 62 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20  mbly..          
37170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
37180 20 20 20 20 20 20 20 61 6e 64 20 61 6c 6c 20 74         and all t
37190 68 65 20 61 73 73 65 6d 62 6c 69 65 73 20 69 74  he assemblies it
371a0 20 72 65 66 65 72 73 20 74 6f 20 61 72 65 20 62   refers to are b
371b0 65 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 20 20  eing..          
371c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
371d0 20 20 20 20 20 20 20 70 6c 61 63 65 64 20 69 6e         placed in
371e0 74 6f 20 74 68 65 20 67 6c 6f 62 61 6c 20 61 73  to the global as
371f0 73 65 6d 62 6c 79 20 63 61 63 68 65 2e 0d 0a 20  sembly cache... 
37200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37210 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
37220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37230 20 20 20 69 66 20 28 70 61 63 6b 61 67 65 2e 47     if (package.G
37240 6c 6f 62 61 6c 41 73 73 65 6d 62 6c 79 43 61 63  lobalAssemblyCac
37250 68 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  he)..           
37260 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
37270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37280 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
37290 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56 61  stryHelper.SetVa
372a0 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  lue(..          
372b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
372c0 20 20 20 20 20 20 64 61 74 61 50 72 6f 76 69 64        dataProvid
372d0 65 72 4b 65 79 2c 20 22 41 73 73 65 6d 62 6c 79  erKey, "Assembly
372e0 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
372f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37300 20 20 20 20 70 61 63 6b 61 67 65 2e 44 65 73 69      package.Desi
37310 67 6e 65 72 41 73 73 65 6d 62 6c 79 4e 61 6d 65  gnerAssemblyName
37320 2e 54 6f 53 74 72 69 6e 67 28 29 2c 0d 0a 20 20  .ToString(),..  
37330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77 68                wh
37350 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d  atIf, verbose);.
37360 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
37370 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
37380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37390 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
373a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
373b0 20 20 2f 2f 20 4e 4f 54 45 3a 20 54 68 69 73 20    // NOTE: This 
373c0 76 61 6c 75 65 20 69 73 20 6e 65 77 20 61 73 20  value is new as 
373d0 6f 66 20 31 2e 30 2e 38 33 2e 30 2e 0d 0a 20 20  of 1.0.83.0...  
373e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
373f0 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
37400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37410 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72    RegistryHelper
37420 2e 53 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20  .SetValue(..    
37430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37440 20 20 20 20 20 20 20 20 64 61 74 61 50 72 6f 76          dataProv
37450 69 64 65 72 4b 65 79 2c 20 22 41 73 73 6f 63 69  iderKey, "Associ
37460 61 74 65 64 53 6f 75 72 63 65 22 2c 0d 0a 20 20  atedSource",..  
37470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37480 20 20 20 20 20 20 20 20 20 20 70 61 63 6b 61 67            packag
37490 65 2e 44 61 74 61 53 6f 75 72 63 65 49 64 2e 54  e.DataSourceId.T
374a0 6f 53 74 72 69 6e 67 28 56 73 49 64 46 6f 72 6d  oString(VsIdForm
374b0 61 74 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  at),..          
374c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
374d0 20 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73    whatIf, verbos
374e0 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
374f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52                 R
37500 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65  egistryHelper.Se
37510 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20  tValue(..       
37520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37530 20 20 20 20 20 64 61 74 61 50 72 6f 76 69 64 65       dataProvide
37540 72 4b 65 79 2c 20 22 49 6e 76 61 72 69 61 6e 74  rKey, "Invariant
37550 4e 61 6d 65 22 2c 0d 0a 20 20 20 20 20 20 20 20  Name",..        
37560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37570 20 20 20 20 70 61 63 6b 61 67 65 2e 50 72 6f 76      package.Prov
37580 69 64 65 72 49 6e 76 61 72 69 61 6e 74 4e 61 6d  iderInvariantNam
37590 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f  e, whatIf, verbo
375a0 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  se);....        
375b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
375c0 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53  RegistryHelper.S
375d0 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20  etValue(..      
375e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
375f0 20 20 20 20 20 20 64 61 74 61 50 72 6f 76 69 64        dataProvid
37600 65 72 4b 65 79 2c 20 22 54 65 63 68 6e 6f 6c 6f  erKey, "Technolo
37610 67 79 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  gy",..          
37620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37630 20 20 70 61 63 6b 61 67 65 2e 41 64 6f 4e 65 74    package.AdoNet
37640 54 65 63 68 6e 6f 6c 6f 67 79 49 64 2e 54 6f 53  TechnologyId.ToS
37650 74 72 69 6e 67 28 56 73 49 64 46 6f 72 6d 61 74  tring(VsIdFormat
37660 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
37670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37680 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29  whatIf, verbose)
37690 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
376a0 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67               Reg
376b0 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56  istryHelper.SetV
376c0 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20  alue(..         
376d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
376e0 20 20 20 64 61 74 61 50 72 6f 76 69 64 65 72 4b     dataProviderK
376f0 65 79 2c 20 22 43 6f 64 65 42 61 73 65 22 2c 20  ey, "CodeBase", 
37700 66 69 6c 65 4e 61 6d 65 2c 20 77 68 61 74 49 66  fileName, whatIf
37710 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
37720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76                 v
37730 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20  erbose);....    
37740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37750 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70      RegistryHelp
37760 65 72 2e 53 65 74 56 61 6c 75 65 28 0d 0a 20 20  er.SetValue(..  
37770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37780 20 20 20 20 20 20 20 20 20 20 64 61 74 61 50 72            dataPr
37790 6f 76 69 64 65 72 4b 65 79 2c 20 22 46 61 63 74  oviderKey, "Fact
377a0 6f 72 79 53 65 72 76 69 63 65 22 2c 0d 0a 20 20  oryService",..  
377b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
377c0 20 20 20 20 20 20 20 20 20 20 70 61 63 6b 61 67            packag
377d0 65 2e 53 65 72 76 69 63 65 49 64 2e 54 6f 53 74  e.ServiceId.ToSt
377e0 72 69 6e 67 28 56 73 49 64 46 6f 72 6d 61 74 29  ring(VsIdFormat)
377f0 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20  , whatIf,..     
37800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37810 20 20 20 20 20 20 20 76 65 72 62 6f 73 65 29 3b         verbose);
37820 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
37830 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
37840 73 74 72 79 48 65 6c 70 65 72 2e 43 72 65 61 74  stryHelper.Creat
37850 65 53 75 62 4b 65 79 28 64 61 74 61 50 72 6f 76  eSubKey(dataProv
37860 69 64 65 72 4b 65 79 2c 0d 0a 20 20 20 20 20 20  iderKey,..      
37870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37880 20 20 20 20 20 20 22 53 75 70 70 6f 72 74 65 64        "Supported
37890 4f 62 6a 65 63 74 73 5c 5c 44 61 74 61 43 6f 6e  Objects\\DataCon
378a0 6e 65 63 74 69 6f 6e 55 49 43 6f 6e 74 72 6f 6c  nectionUIControl
378b0 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
378c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
378d0 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29  whatIf, verbose)
378e0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
378f0 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67               Reg
37900 69 73 74 72 79 48 65 6c 70 65 72 2e 43 72 65 61  istryHelper.Crea
37910 74 65 53 75 62 4b 65 79 28 64 61 74 61 50 72 6f  teSubKey(dataPro
37920 76 69 64 65 72 4b 65 79 2c 0d 0a 20 20 20 20 20  viderKey,..     
37930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37940 20 20 20 20 20 20 20 22 53 75 70 70 6f 72 74 65         "Supporte
37950 64 4f 62 6a 65 63 74 73 5c 5c 44 61 74 61 43 6f  dObjects\\DataCo
37960 6e 6e 65 63 74 69 6f 6e 50 72 6f 70 65 72 74 69  nnectionProperti
37970 65 73 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  es",..          
37980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37990 20 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73    whatIf, verbos
379a0 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
379b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52                 R
379c0 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 43 72  egistryHelper.Cr
379d0 65 61 74 65 53 75 62 4b 65 79 28 64 61 74 61 50  eateSubKey(dataP
379e0 72 6f 76 69 64 65 72 4b 65 79 2c 0d 0a 20 20 20  roviderKey,..   
379f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37a00 20 20 20 20 20 20 20 20 20 22 53 75 70 70 6f 72           "Suppor
37a10 74 65 64 4f 62 6a 65 63 74 73 5c 5c 44 61 74 61  tedObjects\\Data
37a20 43 6f 6e 6e 65 63 74 69 6f 6e 53 75 70 70 6f 72  ConnectionSuppor
37a30 74 22 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20  t", whatIf,..   
37a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37a50 20 20 20 20 20 20 20 20 20 76 65 72 62 6f 73 65           verbose
37a60 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
37a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
37a80 67 69 73 74 72 79 48 65 6c 70 65 72 2e 43 72 65  gistryHelper.Cre
37a90 61 74 65 53 75 62 4b 65 79 28 64 61 74 61 50 72  ateSubKey(dataPr
37aa0 6f 76 69 64 65 72 4b 65 79 2c 0d 0a 20 20 20 20  oviderKey,..    
37ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37ac0 20 20 20 20 20 20 20 20 22 53 75 70 70 6f 72 74          "Support
37ad0 65 64 4f 62 6a 65 63 74 73 5c 5c 44 61 74 61 4f  edObjects\\DataO
37ae0 62 6a 65 63 74 53 75 70 70 6f 72 74 22 2c 20 77  bjectSupport", w
37af0 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20  hatIf,..        
37b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37b10 20 20 20 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d      verbose);...
37b20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
37b30 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72           Registr
37b40 79 48 65 6c 70 65 72 2e 43 72 65 61 74 65 53 75  yHelper.CreateSu
37b50 62 4b 65 79 28 64 61 74 61 50 72 6f 76 69 64 65  bKey(dataProvide
37b60 72 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20  rKey,..         
37b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37b80 20 20 20 22 53 75 70 70 6f 72 74 65 64 4f 62 6a     "SupportedObj
37b90 65 63 74 73 5c 5c 44 61 74 61 56 69 65 77 53 75  ects\\DataViewSu
37ba0 70 70 6f 72 74 22 2c 20 77 68 61 74 49 66 2c 0d  pport", whatIf,.
37bb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
37bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 76 65 72               ver
37bd0 62 6f 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  bose);..        
37be0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
37bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
37c00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
37c10 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ...            r
37c20 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20  eturn true;..   
37c30 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
37c40 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
37c50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37c60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37c70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37c80 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
37c90 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
37ca0 74 69 63 20 62 6f 6f 6c 20 52 65 6d 6f 76 65 56  tic bool RemoveV
37cb0 73 44 61 74 61 50 72 6f 76 69 64 65 72 28 0d 0a  sDataProvider(..
37cc0 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b              Mock
37cd0 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74  RegistryKey root
37ce0 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  Key,..          
37cf0 20 20 56 65 72 73 69 6f 6e 20 76 73 56 65 72 73    Version vsVers
37d00 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ion,..          
37d10 20 20 73 74 72 69 6e 67 20 73 75 66 66 69 78 2c    string suffix,
37d20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 50 61  ..            Pa
37d30 63 6b 61 67 65 20 70 61 63 6b 61 67 65 2c 0d 0a  ckage package,..
37d40 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
37d50 20 70 65 72 55 73 65 72 2c 0d 0a 20 20 20 20 20   perUser,..     
37d60 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36         bool wow6
37d70 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  4,..            
37d80 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20  bool whatIf,..  
37d90 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76            bool v
37da0 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20  erbose,..       
37db0 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20       ref string 
37dc0 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20  error..         
37dd0 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
37de0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
37df0 28 76 73 56 65 72 73 69 6f 6e 20 3d 3d 20 6e 75  (vsVersion == nu
37e00 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
37e10 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
37e20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76      error = "inv
37e30 61 6c 69 64 20 56 53 20 76 65 72 73 69 6f 6e 22  alid VS version"
37e40 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
37e50 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
37e60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
37e70 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ...            s
37e80 74 72 69 6e 67 20 6b 65 79 4e 61 6d 65 20 3d 20  tring keyName = 
37e90 47 65 74 56 73 4b 65 79 4e 61 6d 65 28 76 73 56  GetVsKeyName(vsV
37ea0 65 72 73 69 6f 6e 2c 20 73 75 66 66 69 78 2c 20  ersion, suffix, 
37eb0 70 65 72 55 73 65 72 2c 20 77 6f 77 36 34 29 3b  perUser, wow64);
37ec0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
37ed0 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73  using (MockRegis
37ee0 74 72 79 4b 65 79 20 6b 65 79 20 3d 20 52 65 67  tryKey key = Reg
37ef0 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e  istryHelper.Open
37f00 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20  SubKey(..       
37f10 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f               roo
37f20 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 2c 20 66  tKey, keyName, f
37f30 61 6c 73 65 2c 20 77 68 61 74 49 66 2c 20 76 65  alse, whatIf, ve
37f40 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20  rbose))..       
37f50 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
37f60 20 20 20 20 20 20 20 20 69 66 20 28 6b 65 79 20          if (key 
37f70 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
37f80 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
37f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37fa0 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e   error = String.
37fb0 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
37fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37fd0 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e   "could not open
37fe0 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b   registry key: {
37ff0 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20 20  0}\\{1}",..     
38000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38010 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e     rootKey, keyN
38020 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ame);....       
38030 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
38040 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
38050 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
38060 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
38070 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69   using (MockRegi
38080 73 74 72 79 4b 65 79 20 73 75 62 4b 65 79 20 3d  stryKey subKey =
38090 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
380a0 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20  OpenSubKey(..   
380b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
380c0 20 20 20 20 20 6b 65 79 2c 20 22 44 61 74 61 50       key, "DataP
380d0 72 6f 76 69 64 65 72 73 22 2c 20 74 72 75 65 2c  roviders", true,
380e0 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
380f0 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
38100 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
38110 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73             if (s
38120 75 62 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  ubKey == null)..
38130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38140 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
38150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
38160 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f  rror = String.Fo
38170 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
38180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38190 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70     "could not op
381a0 65 6e 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a  en registry key:
381b0 20 7b 30 7d 5c 5c 44 61 74 61 50 72 6f 76 69 64   {0}\\DataProvid
381c0 65 72 73 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  ers",..         
381d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
381e0 20 20 20 6b 65 79 29 3b 0d 0a 0d 0a 20 20 20 20     key);....    
381f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38200 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
38210 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
38220 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
38230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38240 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 44  RegistryHelper.D
38250 65 6c 65 74 65 53 75 62 4b 65 79 54 72 65 65 28  eleteSubKeyTree(
38260 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
38270 20 20 20 20 20 20 20 20 20 20 73 75 62 4b 65 79            subKey
38280 2c 20 70 61 63 6b 61 67 65 2e 44 61 74 61 50 72  , package.DataPr
38290 6f 76 69 64 65 72 49 64 2e 54 6f 53 74 72 69 6e  oviderId.ToStrin
382a0 67 28 56 73 49 64 46 6f 72 6d 61 74 29 2c 0d 0a  g(VsIdFormat),..
382b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
382c0 20 20 20 20 20 20 20 20 77 68 61 74 49 66 2c 20          whatIf, 
382d0 76 65 72 62 6f 73 65 29 3b 0d 0a 20 20 20 20 20  verbose);..     
382e0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
382f0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
38300 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
38310 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  n true;..       
38320 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f   }....        //
38330 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38340 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38350 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38360 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38370 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
38380 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
38390 62 6f 6f 6c 20 50 72 6f 63 65 73 73 56 73 44 61  bool ProcessVsDa
383a0 74 61 50 72 6f 76 69 64 65 72 28 0d 0a 20 20 20  taProvider(..   
383b0 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67           MockReg
383c0 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79  istryKey rootKey
383d0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 56  ,..            V
383e0 65 72 73 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e  ersion vsVersion
383f0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ,..            s
38400 74 72 69 6e 67 20 73 75 66 66 69 78 2c 0d 0a 20  tring suffix,.. 
38410 20 20 20 20 20 20 20 20 20 20 20 50 61 63 6b 61             Packa
38420 67 65 20 70 61 63 6b 61 67 65 2c 0d 0a 20 20 20  ge package,..   
38430 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
38440 64 69 72 65 63 74 6f 72 79 2c 0d 0a 20 20 20 20  directory,..    
38450 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 63          object c
38460 6c 69 65 6e 74 44 61 74 61 2c 0d 0a 20 20 20 20  lientData,..    
38470 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 70 65 72          bool per
38480 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20  User,..         
38490 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a     bool wow64,..
384a0 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
384b0 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c   throwOnMissing,
384c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
384d0 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20  ol whatIf,..    
384e0 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72          bool ver
384f0 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  bose,..         
38500 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 65 72     ref string er
38510 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ror..           
38520 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20   )..        {.. 
38530 20 20 20 20 20 20 20 20 20 20 20 41 6e 79 50 61             AnyPa
38540 69 72 3c 73 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e  ir<string, bool>
38550 20 70 61 69 72 20 3d 20 63 6c 69 65 6e 74 44 61   pair = clientDa
38560 74 61 20 61 73 20 41 6e 79 50 61 69 72 3c 73 74  ta as AnyPair<st
38570 72 69 6e 67 2c 20 62 6f 6f 6c 3e 3b 0d 0a 0d 0a  ring, bool>;....
38580 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
38590 70 61 69 72 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  pair == null).. 
385a0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
385b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
385c0 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 56  ror = "invalid V
385d0 53 20 63 61 6c 6c 62 61 63 6b 20 64 61 74 61 22  S callback data"
385e0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
385f0 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
38600 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
38610 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
38620 66 20 28 70 61 69 72 2e 59 29 0d 0a 20 20 20 20  f (pair.Y)..    
38630 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
38640 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
38650 6e 20 41 64 64 56 73 44 61 74 61 50 72 6f 76 69  n AddVsDataProvi
38660 64 65 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20  der(..          
38670 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65            rootKe
38680 79 2c 20 76 73 56 65 72 73 69 6f 6e 2c 20 73 75  y, vsVersion, su
38690 66 66 69 78 2c 20 70 61 63 6b 61 67 65 2c 20 70  ffix, package, p
386a0 61 69 72 2e 58 2c 20 70 65 72 55 73 65 72 2c 0d  air.X, perUser,.
386b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
386c0 20 20 20 20 20 77 6f 77 36 34 2c 20 77 68 61 74       wow64, what
386d0 49 66 2c 20 76 65 72 62 6f 73 65 2c 20 72 65 66  If, verbose, ref
386e0 20 65 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20   error);..      
386f0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
38700 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20       else..     
38710 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
38720 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
38730 20 52 65 6d 6f 76 65 56 73 44 61 74 61 50 72 6f   RemoveVsDataPro
38740 76 69 64 65 72 28 0d 0a 20 20 20 20 20 20 20 20  vider(..        
38750 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74              root
38760 4b 65 79 2c 20 76 73 56 65 72 73 69 6f 6e 2c 20  Key, vsVersion, 
38770 73 75 66 66 69 78 2c 20 70 61 63 6b 61 67 65 2c  suffix, package,
38780 20 70 65 72 55 73 65 72 2c 20 77 6f 77 36 34 2c   perUser, wow64,
38790 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
387a0 20 20 20 20 20 20 77 68 61 74 49 66 2c 20 76 65        whatIf, ve
387b0 72 62 6f 73 65 2c 20 72 65 66 20 65 72 72 6f 72  rbose, ref error
387c0 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
387d0 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  }..        }..  
387e0 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
387f0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
38800 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38810 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38820 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38830 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38840 2f 2f 2f 0