System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 74dd3b1513d6a7a988753a7e7c0b5dfc6d03a859:


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 43 6f 72 65 47 6c  ..        CoreGl
0d60: 6f 62 61 6c 41 73 73 65 6d 62 6c 79 43 61 63 68  obalAssemblyCach
0d70: 65 20 3d 20 30 78 31 2c 0d 0a 20 20 20 20 20 20  e = 0x1,..      
0d80: 20 20 4c 69 6e 71 47 6c 6f 62 61 6c 41 73 73 65    LinqGlobalAsse
0d90: 6d 62 6c 79 43 61 63 68 65 20 3d 20 30 78 32 2c  mblyCache = 0x2,
0da0: 0d 0a 20 20 20 20 20 20 20 20 45 66 36 47 6c 6f  ..        Ef6Glo
0db0: 62 61 6c 41 73 73 65 6d 62 6c 79 43 61 63 68 65  balAssemblyCache
0dc0: 20 3d 20 30 78 34 2c 0d 0a 20 20 20 20 20 20 20   = 0x4,..       
0dd0: 20 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73   AssemblyFolders
0de0: 20 3d 20 30 78 38 2c 0d 0a 20 20 20 20 20 20 20   = 0x8,..       
0df0: 20 44 62 50 72 6f 76 69 64 65 72 46 61 63 74 6f   DbProviderFacto
0e00: 72 79 20 3d 20 30 78 31 30 2c 0d 0a 20 20 20 20  ry = 0x10,..    
0e10: 20 20 20 20 56 73 50 61 63 6b 61 67 65 20 3d 20      VsPackage = 
0e20: 30 78 32 30 2c 0d 0a 20 20 20 20 20 20 20 20 56  0x20,..        V
0e30: 73 50 61 63 6b 61 67 65 47 6c 6f 62 61 6c 41 73  sPackageGlobalAs
0e40: 73 65 6d 62 6c 79 43 61 63 68 65 20 3d 20 30 78  semblyCache = 0x
0e50: 34 30 2c 0d 0a 20 20 20 20 20 20 20 20 56 73 44  40,..        VsD
0e60: 61 74 61 53 6f 75 72 63 65 20 3d 20 30 78 38 30  ataSource = 0x80
0e70: 2c 0d 0a 20 20 20 20 20 20 20 20 56 73 44 61 74  ,..        VsDat
0e80: 61 50 72 6f 76 69 64 65 72 20 3d 20 30 78 31 30  aProvider = 0x10
0e90: 30 2c 0d 0a 20 20 20 20 20 20 20 20 56 73 44 65  0,..        VsDe
0ea0: 76 45 6e 76 53 65 74 75 70 20 3d 20 30 78 32 30  vEnvSetup = 0x20
0eb0: 30 2c 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64  0,..        #end
0ec0: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
0ed0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
0ee0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0ef0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0f00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0f10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
0f20: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 43 6f 6d       #region Com
0f30: 70 6f 73 69 74 65 20 56 61 6c 75 65 73 0d 0a 20  posite Values.. 
0f40: 20 20 20 20 20 20 20 46 72 61 6d 65 77 6f 72 6b         Framework
0f50: 47 6c 6f 62 61 6c 41 73 73 65 6d 62 6c 79 43 61  GlobalAssemblyCa
0f60: 63 68 65 20 3d 20 43 6f 72 65 47 6c 6f 62 61 6c  che = CoreGlobal
0f70: 41 73 73 65 6d 62 6c 79 43 61 63 68 65 20 7c 0d  AssemblyCache |.
0f80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
0f90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0fa0: 20 20 20 20 20 20 20 20 4c 69 6e 71 47 6c 6f 62          LinqGlob
0fb0: 61 6c 41 73 73 65 6d 62 6c 79 43 61 63 68 65 20  alAssemblyCache 
0fc0: 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  |..             
0fd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0fe0: 20 20 20 20 20 20 20 20 20 20 45 66 36 47 6c 6f            Ef6Glo
0ff0: 62 61 6c 41 73 73 65 6d 62 6c 79 43 61 63 68 65  balAssemblyCache
1000: 2c 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ,....        ///
1010: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1020: 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
1060: 46 72 61 6d 65 77 6f 72 6b 20 3d 20 46 72 61 6d  Framework = Fram
1070: 65 77 6f 72 6b 47 6c 6f 62 61 6c 41 73 73 65 6d  eworkGlobalAssem
1080: 62 6c 79 43 61 63 68 65 20 7c 20 41 73 73 65 6d  blyCache | Assem
1090: 62 6c 79 46 6f 6c 64 65 72 73 20 7c 0d 0a 20 20  blyFolders |..  
10a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10b0: 20 20 44 62 50 72 6f 76 69 64 65 72 46 61 63 74    DbProviderFact
10c0: 6f 72 79 2c 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ory,....        
10d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1100: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1110: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
1120: 20 20 20 56 73 20 3d 20 56 73 50 61 63 6b 61 67     Vs = VsPackag
1130: 65 20 7c 20 56 73 50 61 63 6b 61 67 65 47 6c 6f  e | VsPackageGlo
1140: 62 61 6c 41 73 73 65 6d 62 6c 79 43 61 63 68 65  balAssemblyCache
1150: 20 7c 20 56 73 44 61 74 61 53 6f 75 72 63 65 20   | VsDataSource 
1160: 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  |..             
1170: 56 73 44 61 74 61 50 72 6f 76 69 64 65 72 20 7c  VsDataProvider |
1180: 20 56 73 44 65 76 45 6e 76 53 65 74 75 70 2c 0d   VsDevEnvSetup,.
1190: 0a 0d 0a 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11e0: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 41 6c  //....        Al
11f0: 6c 47 6c 6f 62 61 6c 41 73 73 65 6d 62 6c 79 43  lGlobalAssemblyC
1200: 61 63 68 65 20 3d 20 46 72 61 6d 65 77 6f 72 6b  ache = Framework
1210: 47 6c 6f 62 61 6c 41 73 73 65 6d 62 6c 79 43 61  GlobalAssemblyCa
1220: 63 68 65 20 7c 0d 0a 20 20 20 20 20 20 20 20 20  che |..         
1230: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1240: 20 20 20 20 20 20 20 20 56 73 50 61 63 6b 61 67          VsPackag
1250: 65 47 6c 6f 62 61 6c 41 73 73 65 6d 62 6c 79 43  eGlobalAssemblyC
1260: 61 63 68 65 2c 0d 0a 0d 0a 20 20 20 20 20 20 20  ache,....       
1270: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
1280: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1290: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12b0: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
12c0: 20 20 20 20 41 6c 6c 20 3d 20 46 72 61 6d 65 77      All = Framew
12d0: 6f 72 6b 20 7c 20 56 73 2c 0d 0a 0d 0a 20 20 20  ork | Vs,....   
12e0: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
12f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1300: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1310: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1320: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
1330: 20 20 20 20 20 20 20 20 41 6c 6c 45 78 63 65 70          AllExcep
1340: 74 47 6c 6f 62 61 6c 41 73 73 65 6d 62 6c 79 43  tGlobalAssemblyC
1350: 61 63 68 65 20 3d 20 41 6c 6c 20 26 20 7e 41 6c  ache = All & ~Al
1360: 6c 47 6c 6f 62 61 6c 41 73 73 65 6d 62 6c 79 43  lGlobalAssemblyC
1370: 61 63 68 65 2c 0d 0a 20 20 20 20 20 20 20 20 23  ache,..        #
1380: 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
1390: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
13a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
13e0: 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
13f0: 53 75 67 67 65 73 74 65 64 20 44 65 66 61 75 6c  Suggested Defaul
1400: 74 20 56 61 6c 75 65 73 0d 0a 20 20 20 20 20 20  t Values..      
1410: 20 20 44 65 66 61 75 6c 74 20 3d 20 41 6c 6c 0d    Default = All.
1420: 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67  .        #endreg
1430: 69 6f 6e 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  ion..    }....  
1440: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
1450: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1460: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1470: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1480: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
1490: 0a 20 20 20 20 5b 46 6c 61 67 73 28 29 5d 0d 0a  .    [Flags()]..
14a0: 20 20 20 20 70 75 62 6c 69 63 20 65 6e 75 6d 20      public enum 
14b0: 50 72 6f 76 69 64 65 72 46 6c 61 67 73 0d 0a 20  ProviderFlags.. 
14c0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 72     {..        #r
14d0: 65 67 69 6f 6e 20 4e 6f 72 6d 61 6c 20 56 61 6c  egion Normal Val
14e0: 75 65 73 0d 0a 20 20 20 20 20 20 20 20 4e 6f 6e  ues..        Non
14f0: 65 20 3d 20 30 78 30 2c 0d 0a 20 20 20 20 20 20  e = 0x0,..      
1500: 20 20 53 79 73 74 65 6d 45 66 36 4d 75 73 74 42    SystemEf6MustB
1510: 65 47 6c 6f 62 61 6c 20 3d 20 30 78 31 2c 0d 0a  eGlobal = 0x1,..
1520: 20 20 20 20 20 20 20 20 44 69 64 4c 69 6e 71 46          DidLinqF
1530: 6f 72 63 65 54 72 61 63 65 20 3d 20 30 78 32 2c  orceTrace = 0x2,
1540: 0d 0a 20 20 20 20 20 20 20 20 44 69 64 45 66 36  ..        DidEf6
1550: 46 6f 72 63 65 54 72 61 63 65 20 3d 20 30 78 34  ForceTrace = 0x4
1560: 2c 0d 0a 20 20 20 20 20 20 20 20 44 69 64 45 66  ,..        DidEf
1570: 36 52 65 73 6f 6c 76 65 54 72 61 63 65 20 3d 20  6ResolveTrace = 
1580: 30 78 38 2c 0d 0a 20 20 20 20 20 20 20 20 46 6f  0x8,..        Fo
1590: 72 63 65 4c 69 6e 71 45 6e 61 62 6c 65 64 20 3d  rceLinqEnabled =
15a0: 20 30 78 31 30 2c 0d 0a 20 20 20 20 20 20 20 20   0x10,..        
15b0: 46 6f 72 63 65 4c 69 6e 71 44 69 73 61 62 6c 65  ForceLinqDisable
15c0: 64 20 3d 20 30 78 32 30 2c 0d 0a 20 20 20 20 20  d = 0x20,..     
15d0: 20 20 20 46 6f 72 63 65 45 66 36 45 6e 61 62 6c     ForceEf6Enabl
15e0: 65 64 20 3d 20 30 78 34 30 2c 0d 0a 20 20 20 20  ed = 0x40,..    
15f0: 20 20 20 20 46 6f 72 63 65 45 66 36 44 69 73 61      ForceEf6Disa
1600: 62 6c 65 64 20 3d 20 30 78 38 30 2c 0d 0a 20 20  bled = 0x80,..  
1610: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
1620: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
1630: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1640: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1650: 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ///....        #
1680: 72 65 67 69 6f 6e 20 53 75 67 67 65 73 74 65 64  region Suggested
1690: 20 44 65 66 61 75 6c 74 20 56 61 6c 75 65 73 0d   Default Values.
16a0: 0a 20 20 20 20 20 20 20 20 44 65 66 61 75 6c 74  .        Default
16b0: 20 3d 20 4e 6f 6e 65 0d 0a 20 20 20 20 20 20 20   = None..       
16c0: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20   #endregion..   
16d0: 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f   }....    //////
16e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1700: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1710: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1720: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 5b 46 6c  /////....    [Fl
1730: 61 67 73 28 29 5d 0d 0a 20 20 20 20 70 75 62 6c  ags()]..    publ
1740: 69 63 20 65 6e 75 6d 20 54 72 61 63 65 50 72 69  ic enum TracePri
1750: 6f 72 69 74 79 0d 0a 20 20 20 20 7b 0d 0a 20 20  ority..    {..  
1760: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 4e 6f        #region No
1770: 72 6d 61 6c 20 56 61 6c 75 65 73 0d 0a 20 20 20  rmal Values..   
1780: 20 20 20 20 20 4e 6f 6e 65 20 3d 20 30 78 30 2c       None = 0x0,
1790: 0d 0a 20 20 20 20 20 20 20 20 4c 6f 77 65 73 74  ..        Lowest
17a0: 20 3d 20 30 78 31 2c 0d 0a 20 20 20 20 20 20 20   = 0x1,..       
17b0: 20 4c 6f 77 65 72 20 3d 20 30 78 32 2c 0d 0a 20   Lower = 0x2,.. 
17c0: 20 20 20 20 20 20 20 4c 6f 77 20 3d 20 30 78 34         Low = 0x4
17d0: 2c 0d 0a 20 20 20 20 20 20 20 20 4d 65 64 69 75  ,..        Mediu
17e0: 6d 4c 6f 77 20 3d 20 30 78 38 2c 0d 0a 20 20 20  mLow = 0x8,..   
17f0: 20 20 20 20 20 4d 65 64 69 75 6d 20 3d 20 30 78       Medium = 0x
1800: 31 30 2c 0d 0a 20 20 20 20 20 20 20 20 4d 65 64  10,..        Med
1810: 69 75 6d 48 69 67 68 20 3d 20 30 78 32 30 2c 0d  iumHigh = 0x20,.
1820: 0a 20 20 20 20 20 20 20 20 48 69 67 68 20 3d 20  .        High = 
1830: 30 78 34 30 2c 0d 0a 20 20 20 20 20 20 20 20 48  0x40,..        H
1840: 69 67 68 65 72 20 3d 20 30 78 38 30 2c 0d 0a 20  igher = 0x80,.. 
1850: 20 20 20 20 20 20 20 48 69 67 68 65 73 74 20 3d         Highest =
1860: 20 30 78 31 30 30 2c 0d 0a 20 20 20 20 20 20 20   0x100,..       
1870: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
1880: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
1890: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
18d0: 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
18e0: 6e 20 53 75 67 67 65 73 74 65 64 20 44 65 66 61  n Suggested Defa
18f0: 75 6c 74 20 46 6c 61 67 73 0d 0a 20 20 20 20 20  ult Flags..     
1900: 20 20 20 44 65 66 61 75 6c 74 20 3d 20 4d 65 64     Default = Med
1910: 69 75 6d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e  ium..        #en
1920: 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20 7d 0d 0a  dregion..    }..
1930: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
1940: 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 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 2f 2f  ////////////////
1990: 2f 0d 0a 0d 0a 20 20 20 20 23 72 65 67 69 6f 6e  /....    #region
19a0: 20 49 6e 73 74 61 6c 6c 65 72 20 43 6c 61 73 73   Installer Class
19b0: 0d 0a 23 69 66 20 4e 45 54 5f 34 30 20 7c 7c 20  ..#if NET_40 || 
19c0: 4e 45 54 5f 34 35 20 7c 7c 20 4e 45 54 5f 34 35  NET_45 || NET_45
19d0: 31 20 7c 7c 20 4e 45 54 5f 34 35 32 20 7c 7c 20  1 || NET_452 || 
19e0: 4e 45 54 5f 34 36 20 7c 7c 20 4e 45 54 5f 34 36  NET_46 || NET_46
19f0: 31 20 7c 7c 20 4e 45 54 5f 34 36 32 0d 0a 20 20  1 || NET_462..  
1a00: 20 20 5b 53 65 63 75 72 69 74 79 43 72 69 74 69    [SecurityCriti
1a10: 63 61 6c 28 29 5d 0d 0a 23 65 6c 73 65 0d 0a 20  cal()]..#else.. 
1a20: 20 20 20 5b 53 65 63 75 72 69 74 79 50 65 72 6d     [SecurityPerm
1a30: 69 73 73 69 6f 6e 28 53 65 63 75 72 69 74 79 41  ission(SecurityA
1a40: 63 74 69 6f 6e 2e 4c 69 6e 6b 44 65 6d 61 6e 64  ction.LinkDemand
1a50: 2c 20 55 6e 6d 61 6e 61 67 65 64 43 6f 64 65 20  , UnmanagedCode 
1a60: 3d 20 74 72 75 65 29 5d 0d 0a 23 65 6e 64 69 66  = true)]..#endif
1a70: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73  ..    internal s
1a80: 74 61 74 69 63 20 63 6c 61 73 73 20 49 6e 73 74  tatic class Inst
1a90: 61 6c 6c 65 72 0d 0a 20 20 20 20 7b 0d 0a 20 20  aller..    {..  
1aa0: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 55 6e        #region Un
1ab0: 73 61 66 65 20 4e 61 74 69 76 65 20 4d 65 74 68  safe Native Meth
1ac0: 6f 64 73 20 43 6c 61 73 73 0d 0a 20 20 20 20 20  ods Class..     
1ad0: 20 20 20 5b 53 75 70 70 72 65 73 73 55 6e 6d 61     [SuppressUnma
1ae0: 6e 61 67 65 64 43 6f 64 65 53 65 63 75 72 69 74  nagedCodeSecurit
1af0: 79 28 29 5d 0d 0a 20 20 20 20 20 20 20 20 70 72  y()]..        pr
1b00: 69 76 61 74 65 20 73 65 61 6c 65 64 20 63 6c 61  ivate sealed cla
1b10: 73 73 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  ss UnsafeNativeM
1b20: 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20  ethods..        
1b30: 7b 0d 0a 23 69 66 20 57 49 4e 44 4f 57 53 0d 0a  {..#if WINDOWS..
1b40: 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67              #reg
1b50: 69 6f 6e 20 4e 61 74 69 76 65 20 57 69 6e 33 32  ion Native Win32
1b60: 20 43 6f 6e 73 74 61 6e 74 73 0d 0a 20 20 20 20   Constants..    
1b70: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
1b80: 63 6f 6e 73 74 20 69 6e 74 20 4d 41 58 5f 50 41  const int MAX_PA
1b90: 54 48 20 3d 20 32 36 30 3b 0d 0a 0d 0a 20 20 20  TH = 260;....   
1ba0: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
1bb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1be0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
1bf0: 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
1c00: 61 74 65 20 63 6f 6e 73 74 20 69 6e 74 20 43 53  ate const int CS
1c10: 49 44 4c 5f 53 59 53 54 45 4d 58 38 36 20 3d 20  IDL_SYSTEMX86 = 
1c20: 30 78 30 30 32 39 3b 0d 0a 0d 0a 20 20 20 20 20  0x0029;....     
1c30: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
1c40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
1c80: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
1c90: 65 20 63 6f 6e 73 74 20 69 6e 74 20 53 48 47 46  e const int SHGF
1ca0: 50 5f 54 59 50 45 5f 43 55 52 52 45 4e 54 20 3d  P_TYPE_CURRENT =
1cb0: 20 30 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20   0;....         
1cc0: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
1cd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ce0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d00: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
1d10: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 63 6f        private co
1d20: 6e 73 74 20 69 6e 74 20 53 5f 4f 4b 20 3d 20 30  nst int S_OK = 0
1d30: 3b 20 2f 2a 20 48 52 45 53 55 4c 54 20 2a 2f 0d  ; /* HRESULT */.
1d40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e  .            #en
1d50: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
1d60: 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1da0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
1db0: 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f            #regio
1dc0: 6e 20 4e 61 74 69 76 65 20 57 69 6e 64 6f 77 73  n Native Windows
1dd0: 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20   Methods..      
1de0: 20 20 20 20 20 20 5b 44 6c 6c 49 6d 70 6f 72 74        [DllImport
1df0: 28 22 73 68 66 6f 6c 64 65 72 2e 64 6c 6c 22 2c  ("shfolder.dll",
1e00: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1e10: 20 20 43 61 6c 6c 69 6e 67 43 6f 6e 76 65 6e 74    CallingConvent
1e20: 69 6f 6e 20 3d 20 43 61 6c 6c 69 6e 67 43 6f 6e  ion = CallingCon
1e30: 76 65 6e 74 69 6f 6e 2e 57 69 6e 61 70 69 2c 0d  vention.Winapi,.
1e40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1e50: 20 43 68 61 72 53 65 74 20 3d 20 43 68 61 72 53   CharSet = CharS
1e60: 65 74 2e 41 75 74 6f 2c 20 42 65 73 74 46 69 74  et.Auto, BestFit
1e70: 4d 61 70 70 69 6e 67 20 3d 20 66 61 6c 73 65 2c  Mapping = false,
1e80: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1e90: 20 20 54 68 72 6f 77 4f 6e 55 6e 6d 61 70 70 61    ThrowOnUnmappa
1ea0: 62 6c 65 43 68 61 72 20 3d 20 74 72 75 65 2c 20  bleChar = true, 
1eb0: 53 65 74 4c 61 73 74 45 72 72 6f 72 20 3d 20 74  SetLastError = t
1ec0: 72 75 65 29 5d 0d 0a 20 20 20 20 20 20 20 20 20  rue)]..         
1ed0: 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
1ee0: 63 20 65 78 74 65 72 6e 20 69 6e 74 20 53 48 47  c extern int SHG
1ef0: 65 74 46 6f 6c 64 65 72 50 61 74 68 28 0d 0a 20  etFolderPath(.. 
1f00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49                 I
1f10: 6e 74 50 74 72 20 68 57 6e 64 4f 77 6e 65 72 2c  ntPtr hWndOwner,
1f20: 20 69 6e 74 20 6e 46 6f 6c 64 65 72 2c 20 49 6e   int nFolder, In
1f30: 74 50 74 72 20 68 54 6f 6b 65 6e 2c 20 75 69 6e  tPtr hToken, uin
1f40: 74 20 66 6c 61 67 73 2c 0d 0a 20 20 20 20 20 20  t flags,..      
1f50: 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
1f60: 20 62 75 66 66 65 72 20 2f 2a 20 3e 3d 20 4d 41   buffer /* >= MA
1f70: 58 5f 50 41 54 48 20 2a 2f 29 3b 0d 0a 20 20 20  X_PATH */);..   
1f80: 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67           #endreg
1f90: 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ion....         
1fa0: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
1fb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fe0: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
1ff0: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75        #region Pu
2000: 62 6c 69 63 20 57 72 61 70 70 65 72 20 4d 65 74  blic Wrapper Met
2010: 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 20 20  hods..          
2020: 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20    public static 
2030: 73 74 72 69 6e 67 20 47 65 74 53 79 73 74 65 6d  string GetSystem
2040: 44 69 72 65 63 74 6f 72 79 28 29 0d 0a 20 20 20  Directory()..   
2050: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2060: 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50              IntP
2070: 74 72 20 62 75 66 66 65 72 20 3d 20 49 6e 74 50  tr buffer = IntP
2080: 74 72 2e 5a 65 72 6f 3b 0d 0a 0d 0a 20 20 20 20  tr.Zero;....    
2090: 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d              try.
20a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
20b0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
20c0: 20 20 20 20 20 20 20 20 62 75 66 66 65 72 20 3d          buffer =
20d0: 20 4d 61 72 73 68 61 6c 2e 41 6c 6c 6f 63 43 6f   Marshal.AllocCo
20e0: 54 61 73 6b 4d 65 6d 28 0d 0a 20 20 20 20 20 20  TaskMem(..      
20f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2100: 20 20 73 69 7a 65 6f 66 28 63 68 61 72 29 20 2a    sizeof(char) *
2110: 20 28 4d 41 58 5f 50 41 54 48 20 2b 20 31 29 29   (MAX_PATH + 1))
2120: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2130: 20 20 20 20 20 20 20 20 20 69 66 20 28 62 75 66           if (buf
2140: 66 65 72 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65  fer != IntPtr.Ze
2150: 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ro)..           
2160: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2170: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2180: 20 20 20 20 69 66 20 28 53 48 47 65 74 46 6f 6c      if (SHGetFol
2190: 64 65 72 50 61 74 68 28 49 6e 74 50 74 72 2e 5a  derPath(IntPtr.Z
21a0: 65 72 6f 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ero,..          
21b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21c0: 20 20 20 20 20 20 43 53 49 44 4c 5f 53 59 53 54        CSIDL_SYST
21d0: 45 4d 58 38 36 2c 20 49 6e 74 50 74 72 2e 5a 65  EMX86, IntPtr.Ze
21e0: 72 6f 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ro,..           
21f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2200: 20 20 20 20 20 53 48 47 46 50 5f 54 59 50 45 5f       SHGFP_TYPE_
2210: 43 55 52 52 45 4e 54 2c 20 62 75 66 66 65 72 29  CURRENT, buffer)
2220: 20 3d 3d 20 53 5f 4f 4b 29 0d 0a 20 20 20 20 20   == S_OK)..     
2230: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2240: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2250: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2260: 20 20 72 65 74 75 72 6e 20 4d 61 72 73 68 61 6c    return Marshal
2270: 2e 50 74 72 54 6f 53 74 72 69 6e 67 41 75 74 6f  .PtrToStringAuto
2280: 28 62 75 66 66 65 72 29 3b 0d 0a 20 20 20 20 20  (buffer);..     
2290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22a0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
22b0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
22c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
22d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22e0: 63 61 74 63 68 20 28 45 78 63 65 70 74 69 6f 6e  catch (Exception
22f0: 20 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20   e)..           
2300: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2310: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
2320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2330: 20 20 20 20 2f 2f 20 54 4f 44 4f 3a 20 49 73 20      // TODO: Is 
2340: 74 68 69 73 20 74 68 65 20 72 69 67 68 74 20 65  this the right e
2350: 72 72 6f 72 20 68 61 6e 64 6c 69 6e 67 20 73 6f  rror handling so
2360: 6c 75 74 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20  lution..        
2370: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
2380: 20 20 20 20 20 74 6f 20 75 73 65 20 61 74 20 74       to use at t
2390: 68 69 73 20 70 6f 69 6e 74 3f 0d 0a 20 20 20 20  his point?..    
23a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23b0: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
23c0: 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
23d0: 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54  .DebugAndTrace(T
23e0: 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4d 65 64  racePriority.Med
23f0: 69 75 6d 48 69 67 68 2c 0d 0a 20 20 20 20 20 20  iumHigh,..      
2400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2410: 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c    debugCallback,
2420: 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
2430: 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
2440: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2450: 20 20 20 20 20 20 20 20 22 43 6f 75 6c 64 20 6e          "Could n
2460: 6f 74 20 67 65 74 20 73 79 73 74 65 6d 20 64 69  ot get system di
2470: 72 65 63 74 6f 72 79 3a 20 7b 30 7d 22 2c 20 65  rectory: {0}", e
2480: 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
2490: 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
24a0: 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
24b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24c0: 20 20 20 74 68 72 6f 77 3b 0d 0a 20 20 20 20 20     throw;..     
24d0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
24e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 69                fi
24f0: 6e 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20 20  nally..         
2500: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2510: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
2520: 20 28 62 75 66 66 65 72 20 21 3d 20 49 6e 74 50   (buffer != IntP
2530: 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20  tr.Zero)..      
2540: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
2550: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2560: 20 20 20 20 20 20 20 20 20 4d 61 72 73 68 61 6c           Marshal
2570: 2e 46 72 65 65 43 6f 54 61 73 6b 4d 65 6d 28 62  .FreeCoTaskMem(b
2580: 75 66 66 65 72 29 3b 0d 0a 20 20 20 20 20 20 20  uffer);..       
2590: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25a0: 20 62 75 66 66 65 72 20 3d 20 49 6e 74 50 74 72   buffer = IntPtr
25b0: 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20 20 20 20 20  .Zero;..        
25c0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
25d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
25e0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
25f0: 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b      return null;
2600: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
2610: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e  .            #en
2620: 64 72 65 67 69 6f 6e 0d 0a 23 65 6e 64 69 66 0d  dregion..#endif.
2630: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
2640: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
2650: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
2660: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2670: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2680: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2690: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26a0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65  /....        #re
26b0: 67 69 6f 6e 20 50 72 69 76 61 74 65 20 48 65 6c  gion Private Hel
26c0: 70 65 72 20 43 6c 61 73 73 65 73 0d 0a 20 20 20  per Classes..   
26d0: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 41 6e 79       #region Any
26e0: 50 61 69 72 20 43 6c 61 73 73 0d 0a 20 20 20 20  Pair Class..    
26f0: 20 20 20 20 70 72 69 76 61 74 65 20 73 65 61 6c      private seal
2700: 65 64 20 63 6c 61 73 73 20 41 6e 79 50 61 69 72  ed class AnyPair
2710: 3c 54 31 2c 20 54 32 3e 0d 0a 20 20 20 20 20 20  <T1, T2>..      
2720: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2730: 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20   #region Public 
2740: 43 6f 6e 73 74 72 75 63 74 6f 72 73 0d 0a 20 20  Constructors..  
2750: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
2760: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 57 41 52            // WAR
2770: 4e 49 4e 47 3a 20 54 68 69 73 20 63 6f 6e 73 74  NING: This const
2780: 72 75 63 74 6f 72 20 70 72 6f 64 75 63 65 73 20  ructor produces 
2790: 61 6e 20 69 6d 6d 75 74 61 62 6c 65 20 22 65 6d  an immutable "em
27a0: 70 74 79 22 20 70 61 69 72 0d 0a 20 20 20 20 20  pty" pair..     
27b0: 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
27c0: 20 20 20 6f 62 6a 65 63 74 2e 0d 0a 20 20 20 20     object...    
27d0: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
27e0: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 41          public A
27f0: 6e 79 50 61 69 72 28 29 0d 0a 20 20 20 20 20 20  nyPair()..      
2800: 20 20 20 20 20 20 20 20 20 20 3a 20 62 61 73 65            : base
2810: 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ()..            
2820: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2830: 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67     // do nothing
2840: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ...            }
2850: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2860: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2870: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2880: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2890: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28a0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
28b0: 20 20 20 70 75 62 6c 69 63 20 41 6e 79 50 61 69     public AnyPai
28c0: 72 28 54 31 20 78 29 0d 0a 20 20 20 20 20 20 20  r(T1 x)..       
28d0: 20 20 20 20 20 20 20 20 20 3a 20 74 68 69 73 28           : this(
28e0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
28f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2900: 20 20 74 68 69 73 2e 78 20 3d 20 78 3b 0d 0a 20    this.x = x;.. 
2910: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
2920: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
2930: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2940: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2950: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2960: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
2970: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
2980: 75 62 6c 69 63 20 41 6e 79 50 61 69 72 28 54 31  ublic AnyPair(T1
2990: 20 78 2c 20 54 32 20 79 29 0d 0a 20 20 20 20 20   x, T2 y)..     
29a0: 20 20 20 20 20 20 20 20 20 20 20 3a 20 74 68 69             : thi
29b0: 73 28 78 29 0d 0a 20 20 20 20 20 20 20 20 20 20  s(x)..          
29c0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
29d0: 20 20 20 20 20 74 68 69 73 2e 79 20 3d 20 79 3b       this.y = y;
29e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
29f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e  .            #en
2a00: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
2a10: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
2a20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
2a60: 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f            #regio
2a70: 6e 20 50 75 62 6c 69 63 20 50 72 6f 70 65 72 74  n Public Propert
2a80: 69 65 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ies..           
2a90: 20 70 72 69 76 61 74 65 20 54 31 20 78 3b 0d 0a   private T1 x;..
2aa0: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
2ab0: 69 63 20 54 31 20 58 0d 0a 20 20 20 20 20 20 20  ic T1 X..       
2ac0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2ad0: 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65          get { re
2ae0: 74 75 72 6e 20 78 3b 20 7d 0d 0a 20 20 20 20 20  turn x; }..     
2af0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
2b00: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
2b10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
2b50: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
2b60: 74 65 20 54 32 20 79 3b 0d 0a 20 20 20 20 20 20  te T2 y;..      
2b70: 20 20 20 20 20 20 70 75 62 6c 69 63 20 54 32 20        public T2 
2b80: 59 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  Y..            {
2b90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2ba0: 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 79    get { return y
2bb0: 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
2bc0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
2bd0: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20  #endregion..    
2be0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23      }..        #
2bf0: 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
2c00: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
2c10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
2c50: 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
2c60: 54 72 61 63 65 4f 70 73 20 43 6c 61 73 73 0d 0a  TraceOps Class..
2c70: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
2c80: 73 74 61 74 69 63 20 63 6c 61 73 73 20 54 72 61  static class Tra
2c90: 63 65 4f 70 73 0d 0a 20 20 20 20 20 20 20 20 7b  ceOps..        {
2ca0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72  ..            #r
2cb0: 65 67 69 6f 6e 20 50 72 69 76 61 74 65 20 43 6f  egion Private Co
2cc0: 6e 73 74 61 6e 74 73 0d 0a 20 20 20 20 20 20 20  nstants..       
2cd0: 20 20 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e       private con
2ce0: 73 74 20 73 74 72 69 6e 67 20 44 65 66 61 75 6c  st string Defaul
2cf0: 74 44 65 62 75 67 46 6f 72 6d 61 74 20 3d 20 22  tDebugFormat = "
2d00: 23 7b 30 3a 30 30 30 7d 20 40 20 7b 31 7d 3a 20  #{0:000} @ {1}: 
2d10: 7b 32 7d 22 3b 0d 0a 20 20 20 20 20 20 20 20 20  {2}";..         
2d20: 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74     private const
2d30: 20 73 74 72 69 6e 67 20 44 65 66 61 75 6c 74 54   string DefaultT
2d40: 72 61 63 65 46 6f 72 6d 61 74 20 3d 20 22 23 7b  raceFormat = "#{
2d50: 30 3a 30 30 30 7d 20 40 20 7b 31 7d 3a 20 7b 32  0:000} @ {1}: {2
2d60: 7d 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  }";....         
2d70: 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74     private const
2d80: 20 73 74 72 69 6e 67 20 49 73 6f 38 36 30 31 44   string Iso8601D
2d90: 61 74 65 54 69 6d 65 4f 75 74 70 75 74 46 6f 72  ateTimeOutputFor
2da0: 6d 61 74 20 3d 0d 0a 20 20 20 20 20 20 20 20 20  mat =..         
2db0: 20 20 20 20 20 20 20 22 79 79 79 79 2e 4d 4d 2e         "yyyy.MM.
2dc0: 64 64 54 48 48 3a 6d 6d 3a 73 73 2e 66 66 66 66  ddTHH:mm:ss.ffff
2dd0: 66 66 66 22 3b 0d 0a 20 20 20 20 20 20 20 20 20  fff";..         
2de0: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
2df0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2e00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e40: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2e50: 23 72 65 67 69 6f 6e 20 50 72 69 76 61 74 65 20  #region Private 
2e60: 53 74 61 74 69 63 20 44 61 74 61 0d 0a 20 20 20  Static Data..   
2e70: 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
2e80: 20 73 74 61 74 69 63 20 6f 62 6a 65 63 74 20 73   static object s
2e90: 79 6e 63 52 6f 6f 74 20 3d 20 6e 65 77 20 6f 62  yncRoot = new ob
2ea0: 6a 65 63 74 28 29 3b 0d 0a 20 20 20 20 20 20 20  ject();..       
2eb0: 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
2ec0: 74 69 63 20 6c 6f 6e 67 20 6e 65 78 74 44 65 62  tic long nextDeb
2ed0: 75 67 49 64 3b 0d 0a 20 20 20 20 20 20 20 20 20  ugId;..         
2ee0: 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
2ef0: 63 20 6c 6f 6e 67 20 6e 65 78 74 54 72 61 63 65  c long nextTrace
2f00: 49 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  Id;..           
2f10: 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
2f20: 49 4c 69 73 74 3c 54 72 61 63 65 4c 69 73 74 65  IList<TraceListe
2f30: 6e 65 72 3e 20 64 65 62 75 67 4c 69 73 74 65 6e  ner> debugListen
2f40: 65 72 73 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ers;..          
2f50: 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
2f60: 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 20 64   TracePriority d
2f70: 65 62 75 67 50 72 69 6f 72 69 74 79 20 3d 20 54  ebugPriority = T
2f80: 72 61 63 65 50 72 69 6f 72 69 74 79 2e 44 65 66  racePriority.Def
2f90: 61 75 6c 74 3b 0d 0a 20 20 20 20 20 20 20 20 20  ault;..         
2fa0: 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
2fb0: 63 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 20  c TracePriority 
2fc0: 74 72 61 63 65 50 72 69 6f 72 69 74 79 20 3d 20  tracePriority = 
2fd0: 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 44 65  TracePriority.De
2fe0: 66 61 75 6c 74 3b 0d 0a 20 20 20 20 20 20 20 20  fault;..        
2ff0: 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
3000: 69 63 20 73 74 72 69 6e 67 20 64 65 62 75 67 46  ic string debugF
3010: 6f 72 6d 61 74 20 3d 20 44 65 66 61 75 6c 74 44  ormat = DefaultD
3020: 65 62 75 67 46 6f 72 6d 61 74 3b 0d 0a 20 20 20  ebugFormat;..   
3030: 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
3040: 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 74   static string t
3050: 72 61 63 65 46 6f 72 6d 61 74 20 3d 20 44 65 66  raceFormat = Def
3060: 61 75 6c 74 54 72 61 63 65 46 6f 72 6d 61 74 3b  aultTraceFormat;
3070: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65  ..            #e
3080: 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
3090: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
30a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
30e0: 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69             #regi
30f0: 6f 6e 20 50 75 62 6c 69 63 20 53 74 61 74 69 63  on Public Static
3100: 20 50 72 6f 70 65 72 74 69 65 73 0d 0a 20 20 20   Properties..   
3110: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
3120: 73 74 61 74 69 63 20 54 72 61 63 65 50 72 69 6f  static TracePrio
3130: 72 69 74 79 20 44 65 62 75 67 50 72 69 6f 72 69  rity DebugPriori
3140: 74 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ty..            
3150: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
3160: 20 20 20 67 65 74 20 7b 20 6c 6f 63 6b 20 28 73     get { lock (s
3170: 79 6e 63 52 6f 6f 74 29 20 7b 20 72 65 74 75 72  yncRoot) { retur
3180: 6e 20 64 65 62 75 67 50 72 69 6f 72 69 74 79 3b  n debugPriority;
3190: 20 7d 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20   } }..          
31a0: 20 20 20 20 20 20 73 65 74 20 7b 20 6c 6f 63 6b        set { lock
31b0: 20 28 73 79 6e 63 52 6f 6f 74 29 20 7b 20 64 65   (syncRoot) { de
31c0: 62 75 67 50 72 69 6f 72 69 74 79 20 3d 20 76 61  bugPriority = va
31d0: 6c 75 65 3b 20 7d 20 7d 0d 0a 20 20 20 20 20 20  lue; } }..      
31e0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
31f0: 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
3240: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
3250: 20 73 74 61 74 69 63 20 54 72 61 63 65 50 72 69   static TracePri
3260: 6f 72 69 74 79 20 54 72 61 63 65 50 72 69 6f 72  ority TracePrior
3270: 69 74 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ity..           
3280: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
3290: 20 20 20 20 67 65 74 20 7b 20 6c 6f 63 6b 20 28      get { lock (
32a0: 73 79 6e 63 52 6f 6f 74 29 20 7b 20 72 65 74 75  syncRoot) { retu
32b0: 72 6e 20 74 72 61 63 65 50 72 69 6f 72 69 74 79  rn tracePriority
32c0: 3b 20 7d 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ; } }..         
32d0: 20 20 20 20 20 20 20 73 65 74 20 7b 20 6c 6f 63         set { loc
32e0: 6b 20 28 73 79 6e 63 52 6f 6f 74 29 20 7b 20 74  k (syncRoot) { t
32f0: 72 61 63 65 50 72 69 6f 72 69 74 79 20 3d 20 76  racePriority = v
3300: 61 6c 75 65 3b 20 7d 20 7d 0d 0a 20 20 20 20 20  alue; } }..     
3310: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
3320: 20 20 20 20 20 20 20 20 2f 2f 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 0d 0a 0d 0a 20  ///////////.... 
3370: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
3380: 63 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20  c static string 
3390: 44 65 62 75 67 46 6f 72 6d 61 74 0d 0a 20 20 20  DebugFormat..   
33a0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
33b0: 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
33c0: 7b 20 6c 6f 63 6b 20 28 73 79 6e 63 52 6f 6f 74  { lock (syncRoot
33d0: 29 20 7b 20 72 65 74 75 72 6e 20 64 65 62 75 67  ) { return debug
33e0: 46 6f 72 6d 61 74 3b 20 7d 20 7d 0d 0a 20 20 20  Format; } }..   
33f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
3400: 20 7b 20 6c 6f 63 6b 20 28 73 79 6e 63 52 6f 6f   { lock (syncRoo
3410: 74 29 20 7b 20 64 65 62 75 67 46 6f 72 6d 61 74  t) { debugFormat
3420: 20 3d 20 76 61 6c 75 65 3b 20 7d 20 7d 0d 0a 20   = value; } }.. 
3430: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
3440: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
3450: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3460: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3470: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3480: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
3490: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
34a0: 75 62 6c 69 63 20 73 74 61 74 69 63 20 73 74 72  ublic static str
34b0: 69 6e 67 20 54 72 61 63 65 46 6f 72 6d 61 74 0d  ing TraceFormat.
34c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
34d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34e0: 67 65 74 20 7b 20 6c 6f 63 6b 20 28 73 79 6e 63  get { lock (sync
34f0: 52 6f 6f 74 29 20 7b 20 72 65 74 75 72 6e 20 74  Root) { return t
3500: 72 61 63 65 46 6f 72 6d 61 74 3b 20 7d 20 7d 0d  raceFormat; } }.
3510: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3520: 20 73 65 74 20 7b 20 6c 6f 63 6b 20 28 73 79 6e   set { lock (syn
3530: 63 52 6f 6f 74 29 20 7b 20 74 72 61 63 65 46 6f  cRoot) { traceFo
3540: 72 6d 61 74 20 3d 20 76 61 6c 75 65 3b 20 7d 20  rmat = value; } 
3550: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
3560: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65  ..            #e
3570: 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
3580: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
3590: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
35d0: 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69             #regi
35e0: 6f 6e 20 49 6e 74 65 72 61 63 74 69 76 65 20 53  on Interactive S
35f0: 75 70 70 6f 72 74 20 4d 65 74 68 6f 64 73 0d 0a  upport Methods..
3600: 20 20 20 20 20 20 20 20 20 20 20 20 5b 4d 65 74              [Met
3610: 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d  hodImpl(MethodIm
3620: 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69  plOptions.NoInli
3630: 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20  ning)]..        
3640: 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
3650: 63 20 44 69 61 6c 6f 67 52 65 73 75 6c 74 20 53  c DialogResult S
3660: 68 6f 77 4d 65 73 73 61 67 65 28 0d 0a 20 20 20  howMessage(..   
3670: 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
3680: 63 65 50 72 69 6f 72 69 74 79 20 74 72 61 63 65  cePriority trace
3690: 50 72 69 6f 72 69 74 79 2c 0d 0a 20 20 20 20 20  Priority,..     
36a0: 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
36b0: 43 61 6c 6c 62 61 63 6b 20 64 65 62 75 67 43 61  Callback debugCa
36c0: 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20  llback,..       
36d0: 20 20 20 20 20 20 20 20 20 54 72 61 63 65 43 61           TraceCa
36e0: 6c 6c 62 61 63 6b 20 74 72 61 63 65 43 61 6c 6c  llback traceCall
36f0: 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20  back,..         
3700: 20 20 20 20 20 20 20 41 73 73 65 6d 62 6c 79 20         Assembly 
3710: 61 73 73 65 6d 62 6c 79 2c 0d 0a 20 20 20 20 20  assembly,..     
3720: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
3730: 67 20 6d 65 73 73 61 67 65 2c 0d 0a 20 20 20 20  g message,..    
3740: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
3750: 6e 67 20 63 61 74 65 67 6f 72 79 2c 0d 0a 20 20  ng category,..  
3760: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4d 65                Me
3770: 73 73 61 67 65 42 6f 78 42 75 74 74 6f 6e 73 20  ssageBoxButtons 
3780: 62 75 74 74 6f 6e 73 2c 0d 0a 20 20 20 20 20 20  buttons,..      
3790: 20 20 20 20 20 20 20 20 20 20 4d 65 73 73 61 67            Messag
37a0: 65 42 6f 78 49 63 6f 6e 20 69 63 6f 6e 0d 0a 20  eBoxIcon icon.. 
37b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29                 )
37c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
37d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
37e0: 20 44 69 61 6c 6f 67 52 65 73 75 6c 74 20 72 65   DialogResult re
37f0: 73 75 6c 74 20 3d 20 44 69 61 6c 6f 67 52 65 73  sult = DialogRes
3800: 75 6c 74 2e 4f 4b 3b 0d 0a 0d 0a 20 20 20 20 20  ult.OK;....     
3810: 20 20 20 20 20 20 20 20 20 20 20 44 65 62 75 67             Debug
3820: 41 6e 64 54 72 61 63 65 28 74 72 61 63 65 50 72  AndTrace(tracePr
3830: 69 6f 72 69 74 79 2c 0d 0a 20 20 20 20 20 20 20  iority,..       
3840: 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62               deb
3850: 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63  ugCallback, trac
3860: 65 43 61 6c 6c 62 61 63 6b 2c 20 6d 65 73 73 61  eCallback, messa
3870: 67 65 2c 20 63 61 74 65 67 6f 72 79 29 3b 0d 0a  ge, category);..
3880: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3890: 20 20 69 66 20 28 53 79 73 74 65 6d 49 6e 66 6f    if (SystemInfo
38a0: 72 6d 61 74 69 6f 6e 2e 55 73 65 72 49 6e 74 65  rmation.UserInte
38b0: 72 61 63 74 69 76 65 29 0d 0a 20 20 20 20 20 20  ractive)..      
38c0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
38d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38e0: 20 73 74 72 69 6e 67 20 74 69 74 6c 65 20 3d 20   string title = 
38f0: 47 65 74 41 73 73 65 6d 62 6c 79 54 69 74 6c 65  GetAssemblyTitle
3900: 28 61 73 73 65 6d 62 6c 79 29 3b 0d 0a 0d 0a 20  (assembly);.... 
3910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3920: 20 20 20 69 66 20 28 74 69 74 6c 65 20 3d 3d 20     if (title == 
3930: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
3940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
3950: 69 74 6c 65 20 3d 20 41 70 70 6c 69 63 61 74 69  itle = Applicati
3960: 6f 6e 2e 50 72 6f 64 75 63 74 4e 61 6d 65 3b 0d  on.ProductName;.
3970: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
3980: 20 20 20 20 20 20 20 72 65 73 75 6c 74 20 3d 20         result = 
3990: 4d 65 73 73 61 67 65 42 6f 78 2e 53 68 6f 77 28  MessageBox.Show(
39a0: 6d 65 73 73 61 67 65 2c 20 74 69 74 6c 65 2c 20  message, title, 
39b0: 62 75 74 74 6f 6e 73 2c 20 69 63 6f 6e 29 3b 0d  buttons, icon);.
39c0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
39d0: 20 20 20 20 20 20 20 44 65 62 75 67 41 6e 64 54         DebugAndT
39e0: 72 61 63 65 28 74 72 61 63 65 50 72 69 6f 72 69  race(tracePriori
39f0: 74 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ty,..           
3a00: 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62               deb
3a10: 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63  ugCallback, trac
3a20: 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
3a30: 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
3a40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3a50: 20 20 20 22 55 73 65 72 20 63 68 6f 69 63 65 20     "User choice 
3a60: 6f 66 20 7b 30 7d 2e 22 2c 20 46 6f 72 44 69 73  of {0}.", ForDis
3a70: 70 6c 61 79 28 72 65 73 75 6c 74 29 29 2c 0d 0a  play(result)),..
3a80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3a90: 20 20 20 20 20 20 20 20 63 61 74 65 67 6f 72 79          category
3aa0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
3ab0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
3ac0: 20 72 65 73 75 6c 74 3b 0d 0a 20 20 20 20 20 20   result;..      
3ad0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
3ae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 44                 D
3af0: 65 62 75 67 41 6e 64 54 72 61 63 65 28 74 72 61  ebugAndTrace(tra
3b00: 63 65 50 72 69 6f 72 69 74 79 2c 0d 0a 20 20 20  cePriority,..   
3b10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3b20: 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20   debugCallback, 
3b30: 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
3b40: 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
3b50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3b60: 20 20 20 22 44 65 66 61 75 6c 74 20 63 68 6f 69     "Default choi
3b70: 63 65 20 6f 66 20 7b 30 7d 2e 22 2c 20 46 6f 72  ce of {0}.", For
3b80: 44 69 73 70 6c 61 79 28 72 65 73 75 6c 74 29 29  Display(result))
3b90: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
3ba0: 20 20 20 20 20 20 20 63 61 74 65 67 6f 72 79 29         category)
3bb0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
3bc0: 20 20 20 20 20 72 65 74 75 72 6e 20 72 65 73 75       return resu
3bd0: 6c 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lt;..           
3be0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
3bf0: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
3c00: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
3c10: 2f 2f 2f 2f 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 0d 0a 0d  /////////////...
3c50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65  .            #re
3c60: 67 69 6f 6e 20 54 72 61 63 69 6e 67 20 53 75 70  gion Tracing Sup
3c70: 70 6f 72 74 20 4d 65 74 68 6f 64 73 0d 0a 20 20  port Methods..  
3c80: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
3c90: 20 73 74 61 74 69 63 20 76 6f 69 64 20 53 65 74   static void Set
3ca0: 75 70 44 65 62 75 67 4c 69 73 74 65 6e 65 72 73  upDebugListeners
3cb0: 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ()..            
3cc0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
3cd0: 20 20 20 69 66 20 28 64 65 62 75 67 4c 69 73 74     if (debugList
3ce0: 65 6e 65 72 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  eners == null)..
3cf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3d00: 20 20 20 20 64 65 62 75 67 4c 69 73 74 65 6e 65      debugListene
3d10: 72 73 20 3d 20 6e 65 77 20 4c 69 73 74 3c 54 72  rs = new List<Tr
3d20: 61 63 65 4c 69 73 74 65 6e 65 72 3e 28 29 3b 0d  aceListener>();.
3d30: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
3d40: 20 20 20 64 65 62 75 67 4c 69 73 74 65 6e 65 72     debugListener
3d50: 73 2e 41 64 64 28 6e 65 77 20 43 6f 6e 73 6f 6c  s.Add(new Consol
3d60: 65 54 72 61 63 65 4c 69 73 74 65 6e 65 72 28 29  eTraceListener()
3d70: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
3d80: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
3d90: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
3da0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3db0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3dc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3dd0: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
3de0: 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
3df0: 63 20 6c 6f 6e 67 20 4e 65 78 74 44 65 62 75 67  c long NextDebug
3e00: 49 64 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20  Id()..          
3e10: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
3e20: 20 20 20 20 20 72 65 74 75 72 6e 20 49 6e 74 65       return Inte
3e30: 72 6c 6f 63 6b 65 64 2e 49 6e 63 72 65 6d 65 6e  rlocked.Incremen
3e40: 74 28 72 65 66 20 6e 65 78 74 44 65 62 75 67 49  t(ref nextDebugI
3e50: 64 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  d);..           
3e60: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
3e70: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
3e80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3e90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3ea0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3eb0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
3ec0: 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
3ed0: 69 63 20 6c 6f 6e 67 20 4e 65 78 74 54 72 61 63  ic long NextTrac
3ee0: 65 49 64 28 29 0d 0a 20 20 20 20 20 20 20 20 20  eId()..         
3ef0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
3f00: 20 20 20 20 20 20 72 65 74 75 72 6e 20 49 6e 74        return Int
3f10: 65 72 6c 6f 63 6b 65 64 2e 49 6e 63 72 65 6d 65  erlocked.Increme
3f20: 6e 74 28 72 65 66 20 6e 65 78 74 54 72 61 63 65  nt(ref nextTrace
3f30: 49 64 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  Id);..          
3f40: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
3f50: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
3f60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3f70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3f80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3f90: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
3fa0: 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61        public sta
3fb0: 74 69 63 20 73 74 72 69 6e 67 20 54 69 6d 65 53  tic string TimeS
3fc0: 74 61 6d 70 28 44 61 74 65 54 69 6d 65 20 64 61  tamp(DateTime da
3fd0: 74 65 54 69 6d 65 29 0d 0a 20 20 20 20 20 20 20  teTime)..       
3fe0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
3ff0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 64          return d
4000: 61 74 65 54 69 6d 65 2e 54 6f 53 74 72 69 6e 67  ateTime.ToString
4010: 28 49 73 6f 38 36 30 31 44 61 74 65 54 69 6d 65  (Iso8601DateTime
4020: 4f 75 74 70 75 74 46 6f 72 6d 61 74 29 3b 0d 0a  OutputFormat);..
4030: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
4040: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
4050: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4060: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4070: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4080: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4090: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
40a0: 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68  [MethodImpl(Meth
40b0: 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f  odImplOptions.No
40c0: 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20  Inlining)]..    
40d0: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
40e0: 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 47 65  static string Ge
40f0: 74 4d 65 74 68 6f 64 4e 61 6d 65 28 0d 0a 20 20  tMethodName(..  
4100: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 74                St
4110: 61 63 6b 54 72 61 63 65 20 73 74 61 63 6b 54 72  ackTrace stackTr
4120: 61 63 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ace,..          
4130: 20 20 20 20 20 20 69 6e 74 20 6c 65 76 65 6c 0d        int level.
4140: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4150: 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
4160: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
4170: 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20     try..        
4180: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
4190: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
41a0: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
41b0: 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
41c0: 49 66 20 61 20 76 61 6c 69 64 20 73 74 61 63 6b  If a valid stack
41d0: 20 74 72 61 63 65 20 77 61 73 20 6e 6f 74 20 73   trace was not s
41e0: 75 70 70 6c 69 65 64 20 62 79 20 74 68 65 0d 0a  upplied by the..
41f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4200: 20 20 20 20 2f 2f 20 20 20 20 20 20 20 63 61 6c      //       cal
4210: 6c 65 72 2c 20 63 72 65 61 74 65 20 6f 6e 65 20  ler, create one 
4220: 6e 6f 77 20 62 61 73 65 64 20 6f 6e 20 74 68 65  now based on the
4230: 20 63 75 72 72 65 6e 74 0d 0a 20 20 20 20 20 20   current..      
4240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
4250: 20 20 20 20 20 20 20 65 78 65 63 75 74 69 6f 6e         execution
4260: 20 73 74 61 63 6b 2e 0d 0a 20 20 20 20 20 20 20   stack...       
4270: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
4280: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4290: 20 20 20 20 20 69 66 20 28 73 74 61 63 6b 54 72       if (stackTr
42a0: 61 63 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ace == null)..  
42b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
42c0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
42d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
42e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
42f0: 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
4300: 3a 20 47 72 61 62 20 74 68 65 20 63 75 72 72 65  : Grab the curre
4310: 6e 74 20 65 78 65 63 75 74 69 6f 6e 20 73 74 61  nt execution sta
4320: 63 6b 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ck...           
4330: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
4340: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4350: 20 20 20 20 20 20 20 20 20 73 74 61 63 6b 54 72           stackTr
4360: 61 63 65 20 3d 20 6e 65 77 20 53 74 61 63 6b 54  ace = new StackT
4370: 72 61 63 65 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  race();....     
4380: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4390: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
43a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
43b0: 2f 20 4e 4f 54 45 3a 20 41 6c 77 61 79 73 20 73  / NOTE: Always s
43c0: 6b 69 70 20 74 68 69 73 20 63 61 6c 6c 20 66 72  kip this call fr
43d0: 61 6d 65 20 77 68 65 6e 20 77 65 20 63 61 70 74  ame when we capt
43e0: 75 72 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ure..           
43f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
4400: 20 20 20 20 20 20 74 68 65 20 73 74 61 63 6b 20        the stack 
4410: 74 72 61 63 65 2e 0d 0a 20 20 20 20 20 20 20 20  trace...        
4420: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4430: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
4440: 20 20 20 20 20 20 20 20 20 20 20 20 6c 65 76 65              leve
4450: 6c 2b 2b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  l++;..          
4460: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
4470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4480: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
4490: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
44a0: 54 45 3a 20 47 65 74 20 74 68 65 20 73 70 65 63  TE: Get the spec
44b0: 69 66 69 65 64 20 73 74 61 63 6b 20 66 72 61 6d  ified stack fram
44c0: 65 20 28 61 6c 77 61 79 73 20 61 64 64 20 6f 6e  e (always add on
44d0: 65 20 74 6f 0d 0a 20 20 20 20 20 20 20 20 20 20  e to..          
44e0: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
44f0: 20 20 20 73 6b 69 70 20 74 68 69 73 20 6d 65 74     skip this met
4500: 68 6f 64 29 2e 0d 0a 20 20 20 20 20 20 20 20 20  hod)...         
4510: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
4520: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4530: 20 20 20 53 74 61 63 6b 46 72 61 6d 65 20 73 74     StackFrame st
4540: 61 63 6b 46 72 61 6d 65 20 3d 20 73 74 61 63 6b  ackFrame = stack
4550: 54 72 61 63 65 2e 47 65 74 46 72 61 6d 65 28 6c  Trace.GetFrame(l
4560: 65 76 65 6c 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  evel);....      
4570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
4580: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4590: 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 47        // NOTE: G
45a0: 65 74 20 74 68 65 20 6d 65 74 68 6f 64 20 66 6f  et the method fo
45b0: 72 20 74 68 65 20 73 74 61 63 6b 20 66 72 61 6d  r the stack fram
45c0: 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e...            
45d0: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
45e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
45f0: 4d 65 74 68 6f 64 42 61 73 65 20 6d 65 74 68 6f  MethodBase metho
4600: 64 42 61 73 65 20 3d 20 73 74 61 63 6b 46 72 61  dBase = stackFra
4610: 6d 65 2e 47 65 74 4d 65 74 68 6f 64 28 29 3b 0d  me.GetMethod();.
4620: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
4630: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
4640: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
4650: 2f 20 4e 4f 54 45 3a 20 47 65 74 20 74 68 65 20  / NOTE: Get the 
4660: 74 79 70 65 20 66 6f 72 20 74 68 65 20 6d 65 74  type for the met
4670: 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  hod...          
4680: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
4690: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
46a0: 20 20 54 79 70 65 20 74 79 70 65 20 3d 20 6d 65    Type type = me
46b0: 74 68 6f 64 42 61 73 65 2e 44 65 63 6c 61 72 69  thodBase.Declari
46c0: 6e 67 54 79 70 65 3b 0d 0a 0d 0a 20 20 20 20 20  ngType;....     
46d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
46e0: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
46f0: 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
4700: 47 65 74 20 74 68 65 20 6e 61 6d 65 20 6f 66 20  Get the name of 
4710: 74 68 65 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20  the method...   
4720: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4730: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
4740: 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
4750: 6e 61 6d 65 20 3d 20 6d 65 74 68 6f 64 42 61 73  name = methodBas
4760: 65 2e 4e 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20  e.Name;....     
4770: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
4780: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
4790: 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
47a0: 52 65 74 75 72 6e 20 74 68 65 20 70 72 6f 70 65  Return the prope
47b0: 72 6c 79 20 66 6f 72 6d 61 74 74 65 64 20 72 65  rly formatted re
47c0: 73 75 6c 74 2e 0d 0a 20 20 20 20 20 20 20 20 20  sult...         
47d0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
47e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
47f0: 20 20 20 72 65 74 75 72 6e 20 53 74 72 69 6e 67     return String
4800: 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
4810: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4820: 20 20 22 7b 30 7d 7b 31 7d 7b 32 7d 22 2c 20 74    "{0}{1}{2}", t
4830: 79 70 65 2e 4e 61 6d 65 2c 20 54 79 70 65 2e 44  ype.Name, Type.D
4840: 65 6c 69 6d 69 74 65 72 2c 20 6e 61 6d 65 29 3b  elimiter, name);
4850: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4860: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
4870: 20 20 20 20 20 63 61 74 63 68 0d 0a 20 20 20 20       catch..    
4880: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
4890: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
48a0: 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67     // do nothing
48b0: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
48c0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
48d0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e          return n
48e0: 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ull;..          
48f0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
4900: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
4910: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4920: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4930: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4940: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
4950: 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61        public sta
4960: 74 69 63 20 76 6f 69 64 20 44 65 62 75 67 43 6f  tic void DebugCo
4970: 72 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  re(..           
4980: 20 20 20 20 20 73 74 72 69 6e 67 20 6d 65 73 73       string mess
4990: 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  age,..          
49a0: 20 20 20 20 20 20 73 74 72 69 6e 67 20 63 61 74        string cat
49b0: 65 67 6f 72 79 0d 0a 20 20 20 20 20 20 20 20 20  egory..         
49c0: 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
49d0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
49e0: 20 20 20 20 20 20 20 20 20 6c 6f 63 6b 20 28 73           lock (s
49f0: 79 6e 63 52 6f 6f 74 29 0d 0a 20 20 20 20 20 20  yncRoot)..      
4a00: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
4a10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4a20: 20 69 66 20 28 64 65 62 75 67 4c 69 73 74 65 6e   if (debugListen
4a30: 65 72 73 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ers != null)..  
4a40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4a50: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
4a60: 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72               for
4a70: 65 61 63 68 20 28 54 72 61 63 65 4c 69 73 74 65  each (TraceListe
4a80: 6e 65 72 20 6c 69 73 74 65 6e 65 72 20 69 6e 20  ner listener in 
4a90: 64 65 62 75 67 4c 69 73 74 65 6e 65 72 73 29 0d  debugListeners).
4aa0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4ab0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
4ac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4ad0: 20 20 20 20 20 20 20 20 6c 69 73 74 65 6e 65 72          listener
4ae0: 2e 57 72 69 74 65 4c 69 6e 65 28 6d 65 73 73 61  .WriteLine(messa
4af0: 67 65 2c 20 63 61 74 65 67 6f 72 79 29 3b 0d 0a  ge, category);..
4b00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4b10: 20 20 20 20 20 20 20 20 20 20 20 20 6c 69 73 74              list
4b20: 65 6e 65 72 2e 46 6c 75 73 68 28 29 3b 0d 0a 20  ener.Flush();.. 
4b30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4b40: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
4b50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
4b60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4b70: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
4b80: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
4b90: 20 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 2f 2f  ////////////////
4bb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4bc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4bd0: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
4be0: 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
4bf0: 63 20 76 6f 69 64 20 54 72 61 63 65 43 6f 72 65  c void TraceCore
4c00: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
4c10: 20 20 20 73 74 72 69 6e 67 20 6d 65 73 73 61 67     string messag
4c20: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
4c30: 20 20 20 20 73 74 72 69 6e 67 20 63 61 74 65 67      string categ
4c40: 6f 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ory..           
4c50: 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
4c60: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
4c70: 20 20 20 20 20 20 20 6c 6f 63 6b 20 28 73 79 6e         lock (syn
4c80: 63 52 6f 6f 74 29 0d 0a 20 20 20 20 20 20 20 20  cRoot)..        
4c90: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
4ca0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
4cb0: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
4cc0: 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
4cd0: 57 72 69 74 65 20 74 68 65 20 6d 65 73 73 61 67  Write the messag
4ce0: 65 20 74 6f 20 61 6c 6c 20 74 68 65 20 61 63 74  e to all the act
4cf0: 69 76 65 20 74 72 61 63 65 0d 0a 20 20 20 20 20  ive trace..     
4d00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
4d10: 2f 20 20 20 20 20 20 20 6c 69 73 74 65 6e 65 72  /       listener
4d20: 73 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s...            
4d30: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
4d40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4d50: 54 72 61 63 65 2e 57 72 69 74 65 4c 69 6e 65 28  Trace.WriteLine(
4d60: 6d 65 73 73 61 67 65 2c 20 63 61 74 65 67 6f 72  message, categor
4d70: 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  y);..           
4d80: 20 20 20 20 20 20 20 20 20 54 72 61 63 65 2e 46           Trace.F
4d90: 6c 75 73 68 28 29 3b 0d 0a 20 20 20 20 20 20 20  lush();..       
4da0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
4db0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
4dc0: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
4dd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4de0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4df0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4e00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
4e10: 20 20 20 20 20 20 20 20 20 20 20 20 5b 4d 65 74              [Met
4e20: 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d  hodImpl(MethodIm
4e30: 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69  plOptions.NoInli
4e40: 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20  ning)]..        
4e50: 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
4e60: 63 20 73 74 72 69 6e 67 20 44 65 62 75 67 41 6e  c string DebugAn
4e70: 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20  dTrace(..       
4e80: 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72           TracePr
4e90: 69 6f 72 69 74 79 20 74 72 61 63 65 50 72 69 6f  iority tracePrio
4ea0: 72 69 74 79 2c 0d 0a 20 20 20 20 20 20 20 20 20  rity,..         
4eb0: 20 20 20 20 20 20 20 54 72 61 63 65 43 61 6c 6c         TraceCall
4ec0: 62 61 63 6b 20 64 65 62 75 67 43 61 6c 6c 62 61  back debugCallba
4ed0: 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ck,..           
4ee0: 20 20 20 20 20 54 72 61 63 65 43 61 6c 6c 62 61       TraceCallba
4ef0: 63 6b 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  ck traceCallback
4f00: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
4f10: 20 20 20 45 78 63 65 70 74 69 6f 6e 20 65 78 63     Exception exc
4f20: 65 70 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20  eption,..       
4f30: 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
4f40: 63 61 74 65 67 6f 72 79 0d 0a 20 20 20 20 20 20  category..      
4f50: 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
4f60: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
4f70: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
4f80: 65 78 63 65 70 74 69 6f 6e 20 21 3d 20 6e 75 6c  exception != nul
4f90: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
4fa0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 44          return D
4fb0: 65 62 75 67 41 6e 64 54 72 61 63 65 28 74 72 61  ebugAndTrace(tra
4fc0: 63 65 50 72 69 6f 72 69 74 79 2c 20 64 65 62 75  cePriority, debu
4fd0: 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20  gCallback,..    
4fe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4ff0: 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
5000: 6b 2c 20 6e 65 77 20 53 74 61 63 6b 54 72 61 63  k, new StackTrac
5010: 65 28 65 78 63 65 70 74 69 6f 6e 2c 20 74 72 75  e(exception, tru
5020: 65 29 2c 20 30 2c 0d 0a 20 20 20 20 20 20 20 20  e), 0,..        
5030: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5040: 65 78 63 65 70 74 69 6f 6e 2e 54 6f 53 74 72 69  exception.ToStri
5050: 6e 67 28 29 2c 20 63 61 74 65 67 6f 72 79 29 3b  ng(), category);
5060: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
5070: 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b      return null;
5080: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
5090: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f  ////////////////
50e0: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
50f0: 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65    [MethodImpl(Me
5100: 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e  thodImplOptions.
5110: 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20  NoInlining)]..  
5120: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
5130: 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 44   static string D
5140: 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20  ebugAndTrace(.. 
5150: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
5160: 72 61 63 65 50 72 69 6f 72 69 74 79 20 74 72 61  racePriority tra
5170: 63 65 50 72 69 6f 72 69 74 79 2c 0d 0a 20 20 20  cePriority,..   
5180: 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
5190: 63 65 43 61 6c 6c 62 61 63 6b 20 64 65 62 75 67  ceCallback debug
51a0: 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20  Callback,..     
51b0: 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
51c0: 43 61 6c 6c 62 61 63 6b 20 74 72 61 63 65 43 61  Callback traceCa
51d0: 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20  llback,..       
51e0: 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
51f0: 6d 65 73 73 61 67 65 2c 0d 0a 20 20 20 20 20 20  message,..      
5200: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
5210: 20 63 61 74 65 67 6f 72 79 0d 0a 20 20 20 20 20   category..     
5220: 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
5230: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
5240: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
5250: 75 72 6e 20 44 65 62 75 67 41 6e 64 54 72 61 63  urn DebugAndTrac
5260: 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
5270: 20 20 20 20 20 20 20 20 74 72 61 63 65 50 72 69          tracePri
5280: 6f 72 69 74 79 2c 20 64 65 62 75 67 43 61 6c 6c  ority, debugCall
5290: 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62  back, traceCallb
52a0: 61 63 6b 2c 20 6e 75 6c 6c 2c 20 31 2c 0d 0a 20  ack, null, 1,.. 
52b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
52c0: 20 20 20 6d 65 73 73 61 67 65 2c 20 63 61 74 65     message, cate
52d0: 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20  gory);..        
52e0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
52f0: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
5300: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5310: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5320: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5330: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
5340: 20 20 20 20 20 20 20 20 5b 4d 65 74 68 6f 64 49          [MethodI
5350: 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70  mpl(MethodImplOp
5360: 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67  tions.NoInlining
5370: 29 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  )]..            
5380: 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 73  private static s
5390: 74 72 69 6e 67 20 44 65 62 75 67 41 6e 64 54 72  tring DebugAndTr
53a0: 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ace(..          
53b0: 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72        TracePrior
53c0: 69 74 79 20 74 72 61 63 65 50 72 69 6f 72 69 74  ity tracePriorit
53d0: 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
53e0: 20 20 20 20 54 72 61 63 65 43 61 6c 6c 62 61 63      TraceCallbac
53f0: 6b 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c  k debugCallback,
5400: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5410: 20 20 54 72 61 63 65 43 61 6c 6c 62 61 63 6b 20    TraceCallback 
5420: 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 0d 0a  traceCallback,..
5430: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5440: 53 74 61 63 6b 54 72 61 63 65 20 73 74 61 63 6b  StackTrace stack
5450: 54 72 61 63 65 2c 0d 0a 20 20 20 20 20 20 20 20  Trace,..        
5460: 20 20 20 20 20 20 20 20 69 6e 74 20 6c 65 76 65          int leve
5470: 6c 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l,..            
5480: 20 20 20 20 73 74 72 69 6e 67 20 6d 65 73 73 61      string messa
5490: 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ge,..           
54a0: 20 20 20 20 20 73 74 72 69 6e 67 20 63 61 74 65       string cate
54b0: 67 6f 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20  gory..          
54c0: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
54d0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
54e0: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
54f0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
5500: 4f 54 45 3a 20 41 6c 77 61 79 73 20 73 6b 69 70  OTE: Always skip
5510: 20 74 68 69 73 20 63 61 6c 6c 20 66 72 61 6d 65   this call frame
5520: 20 69 66 20 74 68 65 20 73 74 61 63 6b 20 74 72   if the stack tr
5530: 61 63 65 20 69 73 0d 0a 20 20 20 20 20 20 20 20  ace is..        
5540: 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
5550: 20 67 6f 69 6e 67 20 74 6f 20 62 65 20 63 61 70   going to be cap
5560: 74 75 72 65 64 20 62 79 20 47 65 74 4d 65 74 68  tured by GetMeth
5570: 6f 64 4e 61 6d 65 2e 0d 0a 20 20 20 20 20 20 20  odName...       
5580: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
5590: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
55a0: 28 73 74 61 63 6b 54 72 61 63 65 20 3d 3d 20 6e  (stackTrace == n
55b0: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
55c0: 20 20 20 20 20 20 20 20 20 20 6c 65 76 65 6c 2b            level+
55d0: 2b 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  +;....          
55e0: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
55f0: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
5600: 45 3a 20 46 6f 72 6d 61 74 20 74 68 65 20 6d 65  E: Format the me
5610: 73 73 61 67 65 20 66 6f 72 20 64 69 73 70 6c 61  ssage for displa
5620: 79 20 28 6f 6e 63 65 29 2e 0d 0a 20 20 20 20 20  y (once)...     
5630: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
5640: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
5650: 74 72 69 6e 67 20 66 6f 72 6d 61 74 74 65 64 20  tring formatted 
5660: 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  = String.Format(
5670: 22 7b 30 7d 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20  "{0}: {1}",..   
5680: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5690: 20 47 65 74 4d 65 74 68 6f 64 4e 61 6d 65 28 73   GetMethodName(s
56a0: 74 61 63 6b 54 72 61 63 65 2c 20 6c 65 76 65 6c  tackTrace, level
56b0: 29 2c 20 6d 65 73 73 61 67 65 29 3b 0d 0a 0d 0a  ), message);....
56c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
56d0: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
56e0: 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 49 66 20      // NOTE: If 
56f0: 74 68 65 20 64 65 62 75 67 20 63 61 6c 6c 62 61  the debug callba
5700: 63 6b 20 69 73 20 69 6e 76 61 6c 69 64 20 6f 72  ck is invalid or
5710: 20 74 68 65 20 74 72 61 63 65 20 70 72 69 6f 72   the trace prior
5720: 69 74 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ity..           
5730: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6f 66       //       of
5740: 20 74 68 69 73 20 6d 65 73 73 61 67 65 20 69 73   this message is
5750: 20 6c 65 73 73 20 74 68 61 6e 20 77 68 61 74 20   less than what 
5760: 77 65 20 63 75 72 72 65 6e 74 6c 79 20 77 61 6e  we currently wan
5770: 74 20 74 6f 0d 0a 20 20 20 20 20 20 20 20 20 20  t to..          
5780: 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 64        //       d
5790: 65 62 75 67 2c 20 73 6b 69 70 20 69 74 2e 0d 0a  ebug, skip it...
57a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
57b0: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
57c0: 20 20 20 20 69 66 20 28 28 64 65 62 75 67 43 61      if ((debugCa
57d0: 6c 6c 62 61 63 6b 20 21 3d 20 6e 75 6c 6c 29 20  llback != null) 
57e0: 26 26 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  &&..            
57f0: 20 20 20 20 20 20 20 20 28 74 72 61 63 65 50 72          (tracePr
5800: 69 6f 72 69 74 79 20 3e 3d 20 44 65 62 75 67 50  iority >= DebugP
5810: 72 69 6f 72 69 74 79 29 29 0d 0a 20 20 20 20 20  riority))..     
5820: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
5830: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5840: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
5850: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
5860: 45 3a 20 49 6e 76 6f 6b 65 20 74 68 65 20 64 65  E: Invoke the de
5870: 62 75 67 20 63 61 6c 6c 62 61 63 6b 20 77 69 74  bug callback wit
5880: 68 20 74 68 65 20 66 6f 72 6d 61 74 74 65 64 0d  h the formatted.
5890: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
58a0: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6d 65       //       me
58b0: 73 73 61 67 65 20 61 6e 64 20 74 68 65 20 63 61  ssage and the ca
58c0: 74 65 67 6f 72 79 20 73 70 65 63 69 66 69 65 64  tegory specified
58d0: 20 62 79 20 74 68 65 0d 0a 20 20 20 20 20 20 20   by the..       
58e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
58f0: 20 20 20 20 20 20 63 61 6c 6c 65 72 2e 0d 0a 20        caller... 
5900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5910: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
5920: 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67             debug
5930: 43 61 6c 6c 62 61 63 6b 28 66 6f 72 6d 61 74 74  Callback(formatt
5940: 65 64 2c 20 63 61 74 65 67 6f 72 79 29 3b 0d 0a  ed, category);..
5950: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5960: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
5970: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
5980: 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
5990: 3a 20 49 66 20 74 68 65 20 74 72 61 63 65 20 63  : If the trace c
59a0: 61 6c 6c 62 61 63 6b 20 69 73 20 69 6e 76 61 6c  allback is inval
59b0: 69 64 20 6f 72 20 74 68 65 20 74 72 61 63 65 20  id or the trace 
59c0: 70 72 69 6f 72 69 74 79 0d 0a 20 20 20 20 20 20  priority..      
59d0: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
59e0: 20 20 20 6f 66 20 74 68 69 73 20 6d 65 73 73 61     of this messa
59f0: 67 65 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20  ge is less than 
5a00: 77 68 61 74 20 77 65 20 63 75 72 72 65 6e 74 6c  what we currentl
5a10: 79 20 77 61 6e 74 20 74 6f 0d 0a 20 20 20 20 20  y want to..     
5a20: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
5a30: 20 20 20 20 74 72 61 63 65 2c 20 73 6b 69 70 20      trace, skip 
5a40: 69 74 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  it...           
5a50: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
5a60: 20 20 20 20 20 20 20 20 20 69 66 20 28 28 74 72           if ((tr
5a70: 61 63 65 43 61 6c 6c 62 61 63 6b 20 21 3d 20 6e  aceCallback != n
5a80: 75 6c 6c 29 20 26 26 0d 0a 20 20 20 20 20 20 20  ull) &&..       
5a90: 20 20 20 20 20 20 20 20 20 20 20 20 20 28 74 72               (tr
5aa0: 61 63 65 50 72 69 6f 72 69 74 79 20 3e 3d 20 54  acePriority >= T
5ab0: 72 61 63 65 50 72 69 6f 72 69 74 79 29 29 0d 0a  racePriority))..
5ac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5ad0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
5ae0: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
5af0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
5b00: 2f 20 4e 4f 54 45 3a 20 49 6e 76 6f 6b 65 20 74  / NOTE: Invoke t
5b10: 68 65 20 74 72 61 63 65 20 63 61 6c 6c 62 61 63  he trace callbac
5b20: 6b 20 77 69 74 68 20 74 68 65 20 66 6f 72 6d 61  k with the forma
5b30: 74 74 65 64 0d 0a 20 20 20 20 20 20 20 20 20 20  tted..          
5b40: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
5b50: 20 20 20 6d 65 73 73 61 67 65 20 61 6e 64 20 74     message and t
5b60: 68 65 20 63 61 74 65 67 6f 72 79 20 73 70 65 63  he category spec
5b70: 69 66 69 65 64 20 62 79 20 74 68 65 0d 0a 20 20  ified by the..  
5b80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5b90: 20 20 2f 2f 20 20 20 20 20 20 20 63 61 6c 6c 65    //       calle
5ba0: 72 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r...            
5bb0: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
5bc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5bd0: 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 66 6f  traceCallback(fo
5be0: 72 6d 61 74 74 65 64 2c 20 63 61 74 65 67 6f 72  rmatted, categor
5bf0: 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  y);..           
5c00: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
5c10: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
5c20: 20 6d 65 73 73 61 67 65 3b 0d 0a 20 20 20 20 20   message;..     
5c30: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
5c40: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
5c50: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
5c60: 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
5c70: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
5c80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5c90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5ca0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5cb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5cc0: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72  //....        #r
5cd0: 65 67 69 6f 6e 20 4d 6f 63 6b 52 65 67 69 73 74  egion MockRegist
5ce0: 72 79 20 43 6c 61 73 73 0d 0a 20 20 20 20 20 20  ry Class..      
5cf0: 20 20 70 72 69 76 61 74 65 20 73 65 61 6c 65 64    private sealed
5d00: 20 63 6c 61 73 73 20 4d 6f 63 6b 52 65 67 69 73   class MockRegis
5d10: 74 72 79 20 3a 20 49 44 69 73 70 6f 73 61 62 6c  try : IDisposabl
5d20: 65 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  e..        {..  
5d30: 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f            #regio
5d40: 6e 20 50 75 62 6c 69 63 20 43 6f 6e 73 74 72 75  n Public Constru
5d50: 63 74 6f 72 73 0d 0a 20 20 20 20 20 20 20 20 20  ctors..         
5d60: 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65     public MockRe
5d70: 67 69 73 74 72 79 28 29 0d 0a 20 20 20 20 20 20  gistry()..      
5d80: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
5d90: 20 20 20 20 20 20 20 20 20 77 68 61 74 49 66 20           whatIf 
5da0: 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  = true;..       
5db0: 20 20 20 20 20 20 20 20 20 72 65 61 64 4f 6e 6c           readOnl
5dc0: 79 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  y = true;..     
5dd0: 20 20 20 20 20 20 20 20 20 20 20 73 61 66 65 20             safe 
5de0: 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  = true;..       
5df0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
5e00: 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5e30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5e40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
5e50: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
5e60: 4d 6f 63 6b 52 65 67 69 73 74 72 79 28 0d 0a 20  MockRegistry(.. 
5e70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
5e80: 6f 6f 6c 20 77 68 61 74 49 66 0d 0a 20 20 20 20  ool whatIf..    
5e90: 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
5ea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3a                 :
5eb0: 20 74 68 69 73 28 29 0d 0a 20 20 20 20 20 20 20   this()..       
5ec0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
5ed0: 20 20 20 20 20 20 20 20 74 68 69 73 2e 77 68 61          this.wha
5ee0: 74 49 66 20 3d 20 77 68 61 74 49 66 3b 0d 0a 20  tIf = whatIf;.. 
5ef0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
5f00: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
5f10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5f20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5f30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5f40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
5f50: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
5f60: 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73 74  ublic MockRegist
5f70: 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ry(..           
5f80: 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66       bool whatIf
5f90: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
5fa0: 20 20 20 62 6f 6f 6c 20 72 65 61 64 4f 6e 6c 79     bool readOnly
5fb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5fc0: 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20    )..           
5fd0: 20 20 20 20 20 3a 20 74 68 69 73 28 77 68 61 74       : this(what
5fe0: 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If)..           
5ff0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
6000: 20 20 20 20 74 68 69 73 2e 72 65 61 64 4f 6e 6c      this.readOnl
6010: 79 20 3d 20 72 65 61 64 4f 6e 6c 79 3b 0d 0a 20  y = readOnly;.. 
6020: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
6030: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
6040: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6050: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6060: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6070: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
6080: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
6090: 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73 74  ublic MockRegist
60a0: 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ry(..           
60b0: 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66       bool whatIf
60c0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
60d0: 20 20 20 62 6f 6f 6c 20 72 65 61 64 4f 6e 6c 79     bool readOnly
60e0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
60f0: 20 20 20 62 6f 6f 6c 20 73 61 66 65 0d 0a 20 20     bool safe..  
6100: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d                ).
6110: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6120: 20 3a 20 74 68 69 73 28 77 68 61 74 49 66 2c 20   : this(whatIf, 
6130: 72 65 61 64 4f 6e 6c 79 29 0d 0a 20 20 20 20 20  readOnly)..     
6140: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
6150: 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 73            this.s
6160: 61 66 65 20 3d 20 73 61 66 65 3b 0d 0a 20 20 20  afe = safe;..   
6170: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
6180: 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
6190: 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  on....          
61a0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
61b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
61c0: 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
61f0: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62       #region Pub
6200: 6c 69 63 20 50 72 6f 70 65 72 74 69 65 73 0d 0a  lic Properties..
6210: 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
6220: 61 74 65 20 62 6f 6f 6c 20 77 68 61 74 49 66 3b  ate bool whatIf;
6230: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
6240: 62 6c 69 63 20 62 6f 6f 6c 20 57 68 61 74 49 66  blic bool WhatIf
6250: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
6260: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6270: 20 67 65 74 20 7b 20 43 68 65 63 6b 44 69 73 70   get { CheckDisp
6280: 6f 73 65 64 28 29 3b 20 72 65 74 75 72 6e 20 77  osed(); return w
6290: 68 61 74 49 66 3b 20 7d 0d 0a 20 20 20 20 20 20  hatIf; }..      
62a0: 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20            set { 
62b0: 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b  CheckDisposed();
62c0: 20 77 68 61 74 49 66 20 3d 20 76 61 6c 75 65 3b   whatIf = value;
62d0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
62e0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
62f0: 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6330: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
6340: 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c      private bool
6350: 20 72 65 61 64 4f 6e 6c 79 3b 0d 0a 20 20 20 20   readOnly;..    
6360: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62          public b
6370: 6f 6f 6c 20 52 65 61 64 4f 6e 6c 79 0d 0a 20 20  ool ReadOnly..  
6380: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
6390: 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
63a0: 20 7b 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64   { CheckDisposed
63b0: 28 29 3b 20 72 65 74 75 72 6e 20 72 65 61 64 4f  (); return readO
63c0: 6e 6c 79 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  nly; }..        
63d0: 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 43 68          set { Ch
63e0: 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 20 72  eckDisposed(); r
63f0: 65 61 64 4f 6e 6c 79 20 3d 20 76 61 6c 75 65 3b  eadOnly = value;
6400: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
6410: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
6420: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
6430: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6440: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6450: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6460: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
6470: 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c      private bool
6480: 20 73 61 66 65 3b 0d 0a 20 20 20 20 20 20 20 20   safe;..        
6490: 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20      public bool 
64a0: 53 61 66 65 0d 0a 20 20 20 20 20 20 20 20 20 20  Safe..          
64b0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
64c0: 20 20 20 20 20 67 65 74 20 7b 20 43 68 65 63 6b       get { Check
64d0: 44 69 73 70 6f 73 65 64 28 29 3b 20 72 65 74 75  Disposed(); retu
64e0: 72 6e 20 73 61 66 65 3b 20 7d 0d 0a 20 20 20 20  rn safe; }..    
64f0: 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
6500: 7b 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28  { CheckDisposed(
6510: 29 3b 20 73 61 66 65 20 3d 20 76 61 6c 75 65 3b  ); safe = value;
6520: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
6530: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
6540: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
6550: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6560: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6570: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6580: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
6590: 20 20 20 20 70 72 69 76 61 74 65 20 4d 6f 63 6b      private Mock
65a0: 52 65 67 69 73 74 72 79 4b 65 79 20 63 6c 61 73  RegistryKey clas
65b0: 73 65 73 52 6f 6f 74 3b 0d 0a 20 20 20 20 20 20  sesRoot;..      
65c0: 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63        public Moc
65d0: 6b 52 65 67 69 73 74 72 79 4b 65 79 20 43 6c 61  kRegistryKey Cla
65e0: 73 73 65 73 52 6f 6f 74 0d 0a 20 20 20 20 20 20  ssesRoot..      
65f0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
6600: 20 20 20 20 20 20 20 20 20 67 65 74 0d 0a 20 20           get..  
6610: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
6620: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6630: 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73       CheckDispos
6640: 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ed();....       
6650: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
6660: 28 63 6c 61 73 73 65 73 52 6f 6f 74 20 3d 3d 20  (classesRoot == 
6670: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
6680: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
6690: 6c 61 73 73 65 73 52 6f 6f 74 20 3d 20 6e 65 77  lassesRoot = new
66a0: 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
66b0: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
66c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52                 R
66d0: 65 67 69 73 74 72 79 2e 43 6c 61 73 73 65 73 52  egistry.ClassesR
66e0: 6f 6f 74 2c 20 77 68 61 74 49 66 2c 20 72 65 61  oot, whatIf, rea
66f0: 64 4f 6e 6c 79 2c 20 73 61 66 65 29 3b 0d 0a 0d  dOnly, safe);...
6700: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6710: 20 20 20 20 20 72 65 74 75 72 6e 20 63 6c 61 73       return clas
6720: 73 65 73 52 6f 6f 74 3b 0d 0a 20 20 20 20 20 20  sesRoot;..      
6730: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
6740: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
6750: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
6760: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6770: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6780: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6790: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
67a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
67b0: 76 61 74 65 20 4d 6f 63 6b 52 65 67 69 73 74 72  vate MockRegistr
67c0: 79 4b 65 79 20 63 75 72 72 65 6e 74 43 6f 6e 66  yKey currentConf
67d0: 69 67 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ig;..           
67e0: 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69   public MockRegi
67f0: 73 74 72 79 4b 65 79 20 43 75 72 72 65 6e 74 43  stryKey CurrentC
6800: 6f 6e 66 69 67 0d 0a 20 20 20 20 20 20 20 20 20  onfig..         
6810: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
6820: 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20        get..     
6830: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
6840: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6850: 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28    CheckDisposed(
6860: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
6870: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63 75            if (cu
6880: 72 72 65 6e 74 43 6f 6e 66 69 67 20 3d 3d 20 6e  rrentConfig == n
6890: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
68a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 75                cu
68b0: 72 72 65 6e 74 43 6f 6e 66 69 67 20 3d 20 6e 65  rrentConfig = ne
68c0: 77 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65  w MockRegistryKe
68d0: 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
68e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
68f0: 52 65 67 69 73 74 72 79 2e 43 75 72 72 65 6e 74  Registry.Current
6900: 43 6f 6e 66 69 67 2c 20 77 68 61 74 49 66 2c 20  Config, whatIf, 
6910: 72 65 61 64 4f 6e 6c 79 2c 20 73 61 66 65 29 3b  readOnly, safe);
6920: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
6930: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 63          return c
6940: 75 72 72 65 6e 74 43 6f 6e 66 69 67 3b 0d 0a 20  urrentConfig;.. 
6950: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
6960: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
6970: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
6980: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6990: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
69a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
69b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
69c0: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
69d0: 20 20 70 72 69 76 61 74 65 20 4d 6f 63 6b 52 65    private MockRe
69e0: 67 69 73 74 72 79 4b 65 79 20 63 75 72 72 65 6e  gistryKey curren
69f0: 74 55 73 65 72 3b 0d 0a 20 20 20 20 20 20 20 20  tUser;..        
6a00: 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52      public MockR
6a10: 65 67 69 73 74 72 79 4b 65 79 20 43 75 72 72 65  egistryKey Curre
6a20: 6e 74 55 73 65 72 0d 0a 20 20 20 20 20 20 20 20  ntUser..        
6a30: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
6a40: 20 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20         get..    
6a50: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
6a60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6a70: 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64     CheckDisposed
6a80: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
6a90: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63             if (c
6aa0: 75 72 72 65 6e 74 55 73 65 72 20 3d 3d 20 6e 75  urrentUser == nu
6ab0: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
6ac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 63 75 72               cur
6ad0: 72 65 6e 74 55 73 65 72 20 3d 20 6e 65 77 20 4d  rentUser = new M
6ae0: 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28 0d  ockRegistryKey(.
6af0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6b00: 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67               Reg
6b10: 69 73 74 72 79 2e 43 75 72 72 65 6e 74 55 73 65  istry.CurrentUse
6b20: 72 2c 20 77 68 61 74 49 66 2c 20 72 65 61 64 4f  r, whatIf, readO
6b30: 6e 6c 79 2c 20 73 61 66 65 29 3b 0d 0a 0d 0a 20  nly, safe);.... 
6b40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6b50: 20 20 20 72 65 74 75 72 6e 20 63 75 72 72 65 6e     return curren
6b60: 74 55 73 65 72 3b 0d 0a 20 20 20 20 20 20 20 20  tUser;..        
6b70: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
6b80: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
6b90: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
6ba0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6bb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6bc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6bd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
6be0: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
6bf0: 74 65 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  te MockRegistryK
6c00: 65 79 20 64 79 6e 44 61 74 61 3b 0d 0a 20 20 20  ey dynData;..   
6c10: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
6c20: 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
6c30: 44 79 6e 44 61 74 61 0d 0a 20 20 20 20 20 20 20  DynData..       
6c40: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
6c50: 20 20 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20          get..   
6c60: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
6c70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6c80: 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65      CheckDispose
6c90: 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  d();....        
6ca0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
6cb0: 64 79 6e 44 61 74 61 20 3d 3d 20 6e 75 6c 6c 29  dynData == null)
6cc0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
6cd0: 20 20 20 20 20 20 20 20 20 20 64 79 6e 44 61 74            dynDat
6ce0: 61 20 3d 20 6e 65 77 20 4d 6f 63 6b 52 65 67 69  a = new MockRegi
6cf0: 73 74 72 79 4b 65 79 28 0d 0a 20 20 20 20 20 20  stryKey(..      
6d00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6d10: 20 20 20 20 20 20 52 65 67 69 73 74 72 79 2e 44        Registry.D
6d20: 79 6e 44 61 74 61 2c 20 77 68 61 74 49 66 2c 20  ynData, whatIf, 
6d30: 72 65 61 64 4f 6e 6c 79 2c 20 73 61 66 65 29 3b  readOnly, safe);
6d40: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
6d50: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 64          return d
6d60: 79 6e 44 61 74 61 3b 0d 0a 20 20 20 20 20 20 20  ynData;..       
6d70: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
6d80: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
6d90: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
6da0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6db0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6dc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6dd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
6de0: 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
6df0: 61 74 65 20 4d 6f 63 6b 52 65 67 69 73 74 72 79  ate MockRegistry
6e00: 4b 65 79 20 6c 6f 63 61 6c 4d 61 63 68 69 6e 65  Key localMachine
6e10: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
6e20: 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73 74  ublic MockRegist
6e30: 72 79 4b 65 79 20 4c 6f 63 61 6c 4d 61 63 68 69  ryKey LocalMachi
6e40: 6e 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ne..            
6e50: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
6e60: 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20 20 20     get..        
6e70: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
6e80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43                 C
6e90: 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d  heckDisposed();.
6ea0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
6eb0: 20 20 20 20 20 20 20 69 66 20 28 6c 6f 63 61 6c         if (local
6ec0: 4d 61 63 68 69 6e 65 20 3d 3d 20 6e 75 6c 6c 29  Machine == null)
6ed0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
6ee0: 20 20 20 20 20 20 20 20 20 20 6c 6f 63 61 6c 4d            localM
6ef0: 61 63 68 69 6e 65 20 3d 20 6e 65 77 20 4d 6f 63  achine = new Moc
6f00: 6b 52 65 67 69 73 74 72 79 4b 65 79 28 0d 0a 20  kRegistryKey(.. 
6f10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6f20: 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73             Regis
6f30: 74 72 79 2e 4c 6f 63 61 6c 4d 61 63 68 69 6e 65  try.LocalMachine
6f40: 2c 20 77 68 61 74 49 66 2c 20 72 65 61 64 4f 6e  , whatIf, readOn
6f50: 6c 79 2c 20 73 61 66 65 29 3b 0d 0a 0d 0a 20 20  ly, safe);....  
6f60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6f70: 20 20 72 65 74 75 72 6e 20 6c 6f 63 61 6c 4d 61    return localMa
6f80: 63 68 69 6e 65 3b 0d 0a 20 20 20 20 20 20 20 20  chine;..        
6f90: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
6fa0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
6fb0: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
6fc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6fd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6fe0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6ff0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
7000: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
7010: 74 65 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  te MockRegistryK
7020: 65 79 20 70 65 72 66 6f 72 6d 61 6e 63 65 44 61  ey performanceDa
7030: 74 61 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ta;..           
7040: 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69   public MockRegi
7050: 73 74 72 79 4b 65 79 20 50 65 72 66 6f 72 6d 61  stryKey Performa
7060: 6e 63 65 44 61 74 61 0d 0a 20 20 20 20 20 20 20  nceData..       
7070: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
7080: 20 20 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20          get..   
7090: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
70a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
70b0: 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65      CheckDispose
70c0: 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  d();....        
70d0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
70e0: 70 65 72 66 6f 72 6d 61 6e 63 65 44 61 74 61 20  performanceData 
70f0: 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
7100: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7110: 20 20 70 65 72 66 6f 72 6d 61 6e 63 65 44 61 74    performanceDat
7120: 61 20 3d 20 6e 65 77 20 4d 6f 63 6b 52 65 67 69  a = new MockRegi
7130: 73 74 72 79 4b 65 79 28 0d 0a 20 20 20 20 20 20  stryKey(..      
7140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7150: 20 20 20 20 20 20 52 65 67 69 73 74 72 79 2e 50        Registry.P
7160: 65 72 66 6f 72 6d 61 6e 63 65 44 61 74 61 2c 20  erformanceData, 
7170: 77 68 61 74 49 66 2c 20 72 65 61 64 4f 6e 6c 79  whatIf, readOnly
7180: 2c 20 73 61 66 65 29 3b 0d 0a 0d 0a 20 20 20 20  , safe);....    
7190: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
71a0: 72 65 74 75 72 6e 20 70 65 72 66 6f 72 6d 61 6e  return performan
71b0: 63 65 44 61 74 61 3b 0d 0a 20 20 20 20 20 20 20  ceData;..       
71c0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
71d0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
71e0: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
71f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7200: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7210: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7220: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
7230: 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
7240: 61 74 65 20 4d 6f 63 6b 52 65 67 69 73 74 72 79  ate MockRegistry
7250: 4b 65 79 20 75 73 65 72 73 3b 0d 0a 20 20 20 20  Key users;..    
7260: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d          public M
7270: 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 55  ockRegistryKey U
7280: 73 65 72 73 0d 0a 20 20 20 20 20 20 20 20 20 20  sers..          
7290: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
72a0: 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20       get..      
72b0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
72c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
72d0: 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
72e0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
72f0: 20 20 20 20 20 20 20 20 20 69 66 20 28 75 73 65           if (use
7300: 72 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  rs == null)..   
7310: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7320: 20 20 20 20 20 75 73 65 72 73 20 3d 20 6e 65 77       users = new
7330: 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
7340: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
7350: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52                 R
7360: 65 67 69 73 74 72 79 2e 55 73 65 72 73 2c 20 77  egistry.Users, w
7370: 68 61 74 49 66 2c 20 72 65 61 64 4f 6e 6c 79 2c  hatIf, readOnly,
7380: 20 73 61 66 65 29 3b 0d 0a 0d 0a 20 20 20 20 20   safe);....     
7390: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
73a0: 65 74 75 72 6e 20 75 73 65 72 73 3b 0d 0a 20 20  eturn users;..  
73b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
73c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
73d0: 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64              #end
73e0: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
73f0: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
7400: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7410: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7420: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7430: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
7440: 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e           #region
7450: 20 50 75 62 6c 69 63 20 22 52 65 67 69 73 74 72   Public "Registr
7460: 79 22 20 4d 65 74 68 6f 64 73 0d 0a 23 69 66 20  y" Methods..#if 
7470: 66 61 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20  false..         
7480: 20 20 20 70 75 62 6c 69 63 20 6f 62 6a 65 63 74     public object
7490: 20 47 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20   GetValue(..    
74a0: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
74b0: 6e 67 20 6b 65 79 4e 61 6d 65 2c 0d 0a 20 20 20  ng keyName,..   
74c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
74d0: 69 6e 67 20 76 61 6c 75 65 4e 61 6d 65 2c 0d 0a  ing valueName,..
74e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
74f0: 6f 62 6a 65 63 74 20 64 65 66 61 75 6c 74 56 61  object defaultVa
7500: 6c 75 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lue..           
7510: 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
7520: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
7530: 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70         CheckDisp
7540: 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  osed();....     
7550: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
7560: 6e 20 52 65 67 69 73 74 72 79 2e 47 65 74 56 61  n Registry.GetVa
7570: 6c 75 65 28 6b 65 79 4e 61 6d 65 2c 20 76 61 6c  lue(keyName, val
7580: 75 65 4e 61 6d 65 2c 20 64 65 66 61 75 6c 74 56  ueName, defaultV
7590: 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  alue);..        
75a0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
75b0: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
75c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
75d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
75e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
75f0: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
7600: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 76          public v
7610: 6f 69 64 20 53 65 74 56 61 6c 75 65 28 0d 0a 20  oid SetValue(.. 
7620: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
7630: 74 72 69 6e 67 20 6b 65 79 4e 61 6d 65 2c 0d 0a  tring keyName,..
7640: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7650: 73 74 72 69 6e 67 20 76 61 6c 75 65 4e 61 6d 65  string valueName
7660: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
7670: 20 20 20 6f 62 6a 65 63 74 20 76 61 6c 75 65 0d     object value.
7680: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
7690: 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
76a0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
76b0: 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64     CheckDisposed
76c0: 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ();..           
76d0: 20 20 20 20 20 43 68 65 63 6b 52 65 61 64 4f 6e       CheckReadOn
76e0: 6c 79 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ly();....       
76f0: 20 20 20 20 20 20 20 20 20 69 66 20 28 21 77 68           if (!wh
7700: 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20  atIf)..         
7710: 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73             Regis
7720: 74 72 79 2e 53 65 74 56 61 6c 75 65 28 6b 65 79  try.SetValue(key
7730: 4e 61 6d 65 2c 20 76 61 6c 75 65 4e 61 6d 65 2c  Name, valueName,
7740: 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20   value);..      
7750: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
7760: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
7770: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7780: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7790: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
77a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
77b0: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
77c0: 20 76 6f 69 64 20 53 65 74 56 61 6c 75 65 28 0d   void SetValue(.
77d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
77e0: 20 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d 65 2c   string keyName,
77f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7800: 20 20 73 74 72 69 6e 67 20 76 61 6c 75 65 4e 61    string valueNa
7810: 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
7820: 20 20 20 20 20 6f 62 6a 65 63 74 20 76 61 6c 75       object valu
7830: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
7840: 20 20 20 20 52 65 67 69 73 74 72 79 56 61 6c 75      RegistryValu
7850: 65 4b 69 6e 64 20 76 61 6c 75 65 4b 69 6e 64 0d  eKind valueKind.
7860: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
7870: 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
7880: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
7890: 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64     CheckDisposed
78a0: 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ();..           
78b0: 20 20 20 20 20 43 68 65 63 6b 52 65 61 64 4f 6e       CheckReadOn
78c0: 6c 79 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ly();....       
78d0: 20 20 20 20 20 20 20 20 20 69 66 20 28 21 77 68           if (!wh
78e0: 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20  atIf)..         
78f0: 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73             Regis
7900: 74 72 79 2e 53 65 74 56 61 6c 75 65 28 6b 65 79  try.SetValue(key
7910: 4e 61 6d 65 2c 20 76 61 6c 75 65 4e 61 6d 65 2c  Name, valueName,
7920: 20 76 61 6c 75 65 2c 20 76 61 6c 75 65 4b 69 6e   value, valueKin
7930: 64 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  d);..           
7940: 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20   }..#endif..    
7950: 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
7960: 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  on....          
7970: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
7980: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7990: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
79a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
79b0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
79c0: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72 69       #region Pri
79d0: 76 61 74 65 20 4d 65 74 68 6f 64 73 0d 0a 20 20  vate Methods..  
79e0: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
79f0: 65 20 76 6f 69 64 20 43 68 65 63 6b 52 65 61 64  e void CheckRead
7a00: 4f 6e 6c 79 28 29 0d 0a 20 20 20 20 20 20 20 20  Only()..        
7a10: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
7a20: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
7a30: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
7a40: 54 45 3a 20 49 6e 20 22 72 65 61 64 2d 6f 6e 6c  TE: In "read-onl
7a50: 79 22 20 6d 6f 64 65 2c 20 77 65 20 64 69 73 61  y" mode, we disa
7a60: 6c 6c 6f 77 20 61 6c 6c 20 77 72 69 74 65 20 61  llow all write a
7a70: 63 63 65 73 73 2e 0d 0a 20 20 20 20 20 20 20 20  ccess...        
7a80: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
7a90: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
7aa0: 21 72 65 61 64 4f 6e 6c 79 29 0d 0a 20 20 20 20  !readOnly)..    
7ab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7ac0: 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20  return;....     
7ad0: 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
7ae0: 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72   new InvalidOper
7af0: 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 29  ationException()
7b00: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
7b10: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65  ..            #e
7b20: 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
7b30: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
7b40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7b50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7b60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7b70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
7b80: 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69             #regi
7b90: 6f 6e 20 49 44 69 73 70 6f 73 61 62 6c 65 20 22  on IDisposable "
7ba0: 50 61 74 74 65 72 6e 22 20 4d 65 6d 62 65 72 73  Pattern" Members
7bb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
7bc0: 69 76 61 74 65 20 62 6f 6f 6c 20 64 69 73 70 6f  ivate bool dispo
7bd0: 73 65 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  sed;..          
7be0: 20 20 70 72 69 76 61 74 65 20 76 6f 69 64 20 43    private void C
7bf0: 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 20 2f  heckDisposed() /
7c00: 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20  * throw */..    
7c10: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
7c20: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
7c30: 64 69 73 70 6f 73 65 64 29 0d 0a 20 20 20 20 20  disposed)..     
7c40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
7c50: 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20  eturn;....      
7c60: 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
7c70: 6e 65 77 20 4f 62 6a 65 63 74 44 69 73 70 6f 73  new ObjectDispos
7c80: 65 64 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20  edException(..  
7c90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7ca0: 20 20 74 79 70 65 6f 66 28 4d 6f 63 6b 52 65 67    typeof(MockReg
7cb0: 69 73 74 72 79 29 2e 4e 61 6d 65 29 3b 0d 0a 20  istry).Name);.. 
7cc0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
7cd0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
7ce0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7cf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7d00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7d10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
7d20: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
7d30: 72 69 76 61 74 65 20 2f 2a 20 70 72 6f 74 65 63  rivate /* protec
7d40: 74 65 64 20 76 69 72 74 75 61 6c 20 2a 2f 20 76  ted virtual */ v
7d50: 6f 69 64 20 44 69 73 70 6f 73 65 28 0d 0a 20 20  oid Dispose(..  
7d60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
7d70: 6f 6c 20 64 69 73 70 6f 73 69 6e 67 0d 0a 20 20  ol disposing..  
7d80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d                ).
7d90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
7da0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7db0: 69 66 20 28 21 64 69 73 70 6f 73 65 64 29 0d 0a  if (!disposed)..
7dc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7dd0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
7de0: 20 20 20 20 20 20 20 69 66 20 28 64 69 73 70 6f         if (dispo
7df0: 73 69 6e 67 29 0d 0a 20 20 20 20 20 20 20 20 20  sing)..         
7e00: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
7e10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7e20: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
7e30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7e40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20 20  //////////..    
7e50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7e60: 20 20 20 20 2f 2f 20 64 69 73 70 6f 73 65 20 6d      // dispose m
7e70: 61 6e 61 67 65 64 20 72 65 73 6f 75 72 63 65 73  anaged resources
7e80: 20 68 65 72 65 2e 2e 2e 0d 0a 20 20 20 20 20 20   here.....      
7e90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7ea0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
7eb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7ec0: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
7ed0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7ee0: 20 20 69 66 20 28 63 6c 61 73 73 65 73 52 6f 6f    if (classesRoo
7ef0: 74 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  t != null)..    
7f00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7f10: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
7f20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7f30: 20 20 20 63 6c 61 73 73 65 73 52 6f 6f 74 2e 43     classesRoot.C
7f40: 6c 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20 20 20  lose();..       
7f50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7f60: 20 20 20 20 20 63 6c 61 73 73 65 73 52 6f 6f 74       classesRoot
7f70: 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20   = null;..      
7f80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7f90: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
7fa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
7fb0: 66 20 28 63 75 72 72 65 6e 74 43 6f 6e 66 69 67  f (currentConfig
7fc0: 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   != null)..     
7fd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7fe0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
7ff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8000: 20 20 63 75 72 72 65 6e 74 43 6f 6e 66 69 67 2e    currentConfig.
8010: 43 6c 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20 20  Close();..      
8020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8030: 20 20 20 20 20 20 63 75 72 72 65 6e 74 43 6f 6e        currentCon
8040: 66 69 67 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20  fig = null;..   
8050: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8060: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
8070: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8080: 20 20 69 66 20 28 63 75 72 72 65 6e 74 55 73 65    if (currentUse
8090: 72 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  r != null)..    
80a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
80b0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
80c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
80d0: 20 20 20 63 75 72 72 65 6e 74 55 73 65 72 2e 43     currentUser.C
80e0: 6c 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20 20 20  lose();..       
80f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8100: 20 20 20 20 20 63 75 72 72 65 6e 74 55 73 65 72       currentUser
8110: 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20   = null;..      
8120: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8130: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
8140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
8150: 66 20 28 64 79 6e 44 61 74 61 20 21 3d 20 6e 75  f (dynData != nu
8160: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
8170: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
8180: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8190: 20 20 20 20 20 20 20 20 20 20 20 20 64 79 6e 44              dynD
81a0: 61 74 61 2e 43 6c 6f 73 65 28 29 3b 0d 0a 20 20  ata.Close();..  
81b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
81c0: 20 20 20 20 20 20 20 20 20 20 64 79 6e 44 61 74            dynDat
81d0: 61 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20  a = null;..     
81e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
81f0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
8200: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8210: 69 66 20 28 6c 6f 63 61 6c 4d 61 63 68 69 6e 65  if (localMachine
8220: 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   != null)..     
8230: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8240: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
8250: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8260: 20 20 6c 6f 63 61 6c 4d 61 63 68 69 6e 65 2e 43    localMachine.C
8270: 6c 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20 20 20  lose();..       
8280: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8290: 20 20 20 20 20 6c 6f 63 61 6c 4d 61 63 68 69 6e       localMachin
82a0: 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20  e = null;..     
82b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
82c0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
82d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
82e0: 69 66 20 28 70 65 72 66 6f 72 6d 61 6e 63 65 44  if (performanceD
82f0: 61 74 61 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ata != null)..  
8300: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8310: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
8320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8330: 20 20 20 20 20 70 65 72 66 6f 72 6d 61 6e 63 65       performance
8340: 44 61 74 61 2e 43 6c 6f 73 65 28 29 3b 0d 0a 20  Data.Close();.. 
8350: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8360: 20 20 20 20 20 20 20 20 20 20 20 70 65 72 66 6f             perfo
8370: 72 6d 61 6e 63 65 44 61 74 61 20 3d 20 6e 75 6c  rmanceData = nul
8380: 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l;..            
8390: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
83a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
83b0: 20 20 20 20 20 20 20 20 20 69 66 20 28 75 73 65           if (use
83c0: 72 73 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  rs != null)..   
83d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
83e0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
83f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8400: 20 20 20 20 75 73 65 72 73 2e 43 6c 6f 73 65 28      users.Close(
8410: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
8420: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8430: 75 73 65 72 73 20 3d 20 6e 75 6c 6c 3b 0d 0a 20  users = null;.. 
8440: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8450: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
8460: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
8470: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
8480: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
8490: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
84a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20  /////////////.. 
84b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
84c0: 20 20 20 2f 2f 20 72 65 6c 65 61 73 65 20 75 6e     // release un
84d0: 6d 61 6e 61 67 65 64 20 72 65 73 6f 75 72 63 65  managed resource
84e0: 73 20 68 65 72 65 2e 2e 2e 0d 0a 20 20 20 20 20  s here.....     
84f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
8500: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8510: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8520: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
8530: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
8540: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8550: 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 54 68       // NOTE: Th
8560: 69 73 20 6f 62 6a 65 63 74 20 69 73 20 6e 6f 77  is object is now
8570: 20 64 69 73 70 6f 73 65 64 2e 0d 0a 20 20 20 20   disposed...    
8580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8590: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
85a0: 20 20 20 20 20 20 20 20 64 69 73 70 6f 73 65 64          disposed
85b0: 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20   = true;..      
85c0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
85d0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
85e0: 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
85f0: 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  on....          
8600: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
8610: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8620: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8630: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8640: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
8650: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 49 44 69       #region IDi
8660: 73 70 6f 73 61 62 6c 65 20 4d 65 6d 62 65 72 73  sposable Members
8670: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
8680: 62 6c 69 63 20 76 6f 69 64 20 44 69 73 70 6f 73  blic void Dispos
8690: 65 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e()..           
86a0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
86b0: 20 20 20 20 44 69 73 70 6f 73 65 28 74 72 75 65      Dispose(true
86c0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
86d0: 20 20 20 20 47 43 2e 53 75 70 70 72 65 73 73 46      GC.SuppressF
86e0: 69 6e 61 6c 69 7a 65 28 74 68 69 73 29 3b 0d 0a  inalize(this);..
86f0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
8700: 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72             #endr
8710: 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
8720: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
8730: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8740: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8750: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8760: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
8770: 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
8780: 44 65 73 74 72 75 63 74 6f 72 0d 0a 20 20 20 20  Destructor..    
8790: 20 20 20 20 20 20 20 20 7e 4d 6f 63 6b 52 65 67          ~MockReg
87a0: 69 73 74 72 79 28 29 0d 0a 20 20 20 20 20 20 20  istry()..       
87b0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
87c0: 20 20 20 20 20 20 20 20 44 69 73 70 6f 73 65 28          Dispose(
87d0: 66 61 6c 73 65 29 3b 0d 0a 20 20 20 20 20 20 20  false);..       
87e0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
87f0: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
8800: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
8810: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
8820: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
8830: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8840: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8850: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8860: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8870: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67  ....        #reg
8880: 69 6f 6e 20 4d 6f 63 6b 52 65 67 69 73 74 72 79  ion MockRegistry
8890: 4b 65 79 20 43 6c 61 73 73 0d 0a 20 20 20 20 20  Key Class..     
88a0: 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 65 61 6c     internal seal
88b0: 65 64 20 63 6c 61 73 73 20 4d 6f 63 6b 52 65 67  ed class MockReg
88c0: 69 73 74 72 79 4b 65 79 20 3a 20 49 44 69 73 70  istryKey : IDisp
88d0: 6f 73 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20  osable..        
88e0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  {..            #
88f0: 72 65 67 69 6f 6e 20 50 72 69 76 61 74 65 20 43  region Private C
8900: 6f 6e 73 74 72 75 63 74 6f 72 73 0d 0a 20 20 20  onstructors..   
8910: 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
8920: 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
8930: 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ()..            
8940: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
8950: 20 20 20 77 68 61 74 49 66 20 3d 20 74 72 75 65     whatIf = true
8960: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
8970: 20 20 20 72 65 61 64 4f 6e 6c 79 20 3d 20 74 72     readOnly = tr
8980: 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
8990: 20 20 20 20 20 73 61 66 65 20 3d 20 74 72 75 65       safe = true
89a0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
89b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65  ..            #e
89c0: 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
89d0: 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
8a20: 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69             #regi
8a30: 6f 6e 20 50 75 62 6c 69 63 20 43 6f 6e 73 74 72  on Public Constr
8a40: 75 63 74 6f 72 73 0d 0a 20 20 20 20 20 20 20 20  uctors..        
8a50: 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52      public MockR
8a60: 65 67 69 73 74 72 79 4b 65 79 28 0d 0a 20 20 20  egistryKey(..   
8a70: 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67               Reg
8a80: 69 73 74 72 79 4b 65 79 20 6b 65 79 0d 0a 20 20  istryKey key..  
8a90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d                ).
8aa0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8ab0: 20 3a 20 74 68 69 73 28 29 0d 0a 20 20 20 20 20   : this()..     
8ac0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
8ad0: 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 6b            this.k
8ae0: 65 79 20 3d 20 6b 65 79 3b 0d 0a 20 20 20 20 20  ey = key;..     
8af0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
8b00: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
8b10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8b20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8b30: 2f 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 0d 0a 0d 0a 20  ///////////.... 
8b50: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
8b60: 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65  c MockRegistryKe
8b70: 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
8b80: 20 20 20 20 52 65 67 69 73 74 72 79 4b 65 79 20      RegistryKey 
8b90: 6b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  key,..          
8ba0: 20 20 20 20 20 20 73 74 72 69 6e 67 20 73 75 62        string sub
8bb0: 4b 65 79 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20  KeyName..       
8bc0: 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
8bd0: 20 20 20 20 20 20 20 20 20 20 20 20 3a 20 74 68              : th
8be0: 69 73 28 6b 65 79 29 0d 0a 20 20 20 20 20 20 20  is(key)..       
8bf0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
8c00: 20 20 20 20 20 20 20 20 74 68 69 73 2e 73 75 62          this.sub
8c10: 4b 65 79 4e 61 6d 65 20 3d 20 73 75 62 4b 65 79  KeyName = subKey
8c20: 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  Name;..         
8c30: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
8c40: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
8c50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8c60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8c70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8c80: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
8c90: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f         public Mo
8ca0: 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28 0d 0a  ckRegistryKey(..
8cb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8cc0: 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 2c  RegistryKey key,
8cd0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8ce0: 20 20 73 74 72 69 6e 67 20 73 75 62 4b 65 79 4e    string subKeyN
8cf0: 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
8d00: 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49        bool whatI
8d10: 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  f..             
8d20: 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20     )..          
8d30: 20 20 20 20 20 20 3a 20 74 68 69 73 28 6b 65 79        : this(key
8d40: 2c 20 73 75 62 4b 65 79 4e 61 6d 65 29 0d 0a 20  , subKeyName).. 
8d50: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
8d60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
8d70: 69 73 2e 77 68 61 74 49 66 20 3d 20 77 68 61 74  is.whatIf = what
8d80: 49 66 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If;..           
8d90: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
8da0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
8db0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8dc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8dd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8de0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
8df0: 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b       public Mock
8e00: 52 65 67 69 73 74 72 79 4b 65 79 28 0d 0a 20 20  RegistryKey(..  
8e10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
8e20: 67 69 73 74 72 79 4b 65 79 20 6b 65 79 2c 0d 0a  gistryKey key,..
8e30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8e40: 73 74 72 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d  string subKeyNam
8e50: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
8e60: 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c      bool whatIf,
8e70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8e80: 20 20 62 6f 6f 6c 20 72 65 61 64 4f 6e 6c 79 0d    bool readOnly.
8e90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8ea0: 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
8eb0: 20 20 20 20 3a 20 74 68 69 73 28 6b 65 79 2c 20      : this(key, 
8ec0: 73 75 62 4b 65 79 4e 61 6d 65 2c 20 77 68 61 74  subKeyName, what
8ed0: 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If)..           
8ee0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
8ef0: 20 20 20 20 74 68 69 73 2e 72 65 61 64 4f 6e 6c      this.readOnl
8f00: 79 20 3d 20 72 65 61 64 4f 6e 6c 79 3b 0d 0a 20  y = readOnly;.. 
8f10: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
8f20: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
8f30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8f40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8f50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8f60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
8f70: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
8f80: 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73 74  ublic MockRegist
8f90: 72 79 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20  ryKey(..        
8fa0: 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79          Registry
8fb0: 4b 65 79 20 6b 65 79 2c 0d 0a 20 20 20 20 20 20  Key key,..      
8fc0: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
8fd0: 20 73 75 62 4b 65 79 4e 61 6d 65 2c 0d 0a 20 20   subKeyName,..  
8fe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
8ff0: 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20  ol whatIf,..    
9000: 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
9010: 20 72 65 61 64 4f 6e 6c 79 2c 0d 0a 20 20 20 20   readOnly,..    
9020: 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
9030: 20 73 61 66 65 0d 0a 20 20 20 20 20 20 20 20 20   safe..         
9040: 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
9050: 20 20 20 20 20 20 20 20 20 20 3a 20 74 68 69 73            : this
9060: 28 6b 65 79 2c 20 73 75 62 4b 65 79 4e 61 6d 65  (key, subKeyName
9070: 2c 20 77 68 61 74 49 66 2c 20 72 65 61 64 4f 6e  , whatIf, readOn
9080: 6c 79 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ly)..           
9090: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
90a0: 20 20 20 20 74 68 69 73 2e 73 61 66 65 20 3d 20      this.safe = 
90b0: 73 61 66 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  safe;..         
90c0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
90d0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
90e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
90f0: 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20  ///////....     
9120: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f         public Mo
9130: 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28 0d 0a  ckRegistryKey(..
9140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9150: 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 2c  RegistryKey key,
9160: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9170: 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 0d 0a 20    bool whatIf.. 
9180: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29                 )
9190: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
91a0: 20 20 3a 20 74 68 69 73 28 6b 65 79 2c 20 6e 75    : this(key, nu
91b0: 6c 6c 2c 20 77 68 61 74 49 66 29 0d 0a 20 20 20  ll, whatIf)..   
91c0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
91d0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64              // d
91e0: 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20  o nothing...    
91f0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
9200: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
9210: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9220: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9230: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9240: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
9250: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
9260: 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  ic MockRegistryK
9270: 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey(..           
9280: 20 20 20 20 20 52 65 67 69 73 74 72 79 4b 65 79       RegistryKey
9290: 20 6b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20   key,..         
92a0: 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74         bool what
92b0: 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If,..           
92c0: 20 20 20 20 20 62 6f 6f 6c 20 72 65 61 64 4f 6e       bool readOn
92d0: 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ly..            
92e0: 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20      )..         
92f0: 20 20 20 20 20 20 20 3a 20 74 68 69 73 28 6b 65         : this(ke
9300: 79 2c 20 6e 75 6c 6c 2c 20 77 68 61 74 49 66 2c  y, null, whatIf,
9310: 20 72 65 61 64 4f 6e 6c 79 29 0d 0a 20 20 20 20   readOnly)..    
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 20 64 6f             // do
9340: 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20   nothing...     
9350: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
9360: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
9370: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9380: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9390: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
93a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
93b0: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
93c0: 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65  c MockRegistryKe
93d0: 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
93e0: 20 20 20 20 52 65 67 69 73 74 72 79 4b 65 79 20      RegistryKey 
93f0: 6b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  key,..          
9400: 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49        bool whatI
9410: 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
9420: 20 20 20 20 62 6f 6f 6c 20 72 65 61 64 4f 6e 6c      bool readOnl
9430: 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
9440: 20 20 20 20 62 6f 6f 6c 20 73 61 66 65 0d 0a 20      bool safe.. 
9450: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29                 )
9460: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9470: 20 20 3a 20 74 68 69 73 28 6b 65 79 2c 20 6e 75    : this(key, nu
9480: 6c 6c 2c 20 77 68 61 74 49 66 2c 20 72 65 61 64  ll, whatIf, read
9490: 4f 6e 6c 79 2c 20 73 61 66 65 29 0d 0a 20 20 20  Only, safe)..   
94a0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
94b0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64              // d
94c0: 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20  o nothing...    
94d0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
94e0: 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
94f0: 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n....           
9500: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
9510: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9520: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9530: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9540: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
9550: 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c      #region Publ
9560: 69 63 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20  ic Methods..    
9570: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 76          public v
9580: 6f 69 64 20 43 6c 6f 73 65 28 29 0d 0a 20 20 20  oid Close()..   
9590: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
95a0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
95b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
95c0: 2f 2f 20 4e 4f 54 45 3a 20 4e 6f 20 64 69 73 70  // NOTE: No disp
95d0: 6f 73 65 64 20 63 68 65 63 6b 20 68 65 72 65 20  osed check here 
95e0: 62 65 63 61 75 73 65 20 63 61 6c 6c 69 6e 67 20  because calling 
95f0: 74 68 69 73 20 6d 65 74 68 6f 64 0d 0a 20 20 20  this method..   
9600: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
9610: 20 20 20 20 20 20 73 68 6f 75 6c 64 20 62 65 20        should be 
9620: 6a 75 73 74 20 6c 69 6b 65 20 63 61 6c 6c 69 6e  just like callin
9630: 67 20 44 69 73 70 6f 73 65 2e 0d 0a 20 20 20 20  g Dispose...    
9640: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
9650: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9660: 44 69 73 70 6f 73 65 28 74 72 75 65 29 3b 0d 0a  Dispose(true);..
9670: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
9680: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
9690: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
96a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
96b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
96c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
96d0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
96e0: 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73  public MockRegis
96f0: 74 72 79 4b 65 79 20 43 72 65 61 74 65 53 75 62  tryKey CreateSub
9700: 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Key(..          
9710: 20 20 20 20 20 20 73 74 72 69 6e 67 20 73 75 62        string sub
9720: 4b 65 79 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20  KeyName..       
9730: 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
9740: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
9750: 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b             Check
9760: 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20  Disposed();..   
9770: 20 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65               Che
9780: 63 6b 52 65 61 64 4f 6e 6c 79 28 29 3b 0d 0a 0d  ckReadOnly();...
9790: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
97a0: 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c   if (key == null
97b0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
97c0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75         return nu
97d0: 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ll;....         
97e0: 20 20 20 20 20 20 20 69 66 20 28 77 68 61 74 49         if (whatI
97f0: 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f)..            
9800: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
9810: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
9820: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9830: 20 20 20 2f 2f 20 48 41 43 4b 3a 20 41 74 74 65     // HACK: Atte
9840: 6d 70 74 20 74 6f 20 6f 70 65 6e 20 74 68 65 20  mpt to open the 
9850: 73 70 65 63 69 66 69 65 64 20 73 75 62 2d 6b 65  specified sub-ke
9860: 79 2e 20 20 49 66 20 74 68 69 73 0d 0a 20 20 20  y.  If this..   
9870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9880: 20 2f 2f 20 20 20 20 20 20 20 66 61 69 6c 73 2c   //       fails,
9890: 20 77 65 20 77 69 6c 6c 20 73 69 6d 70 6c 79 20   we will simply 
98a0: 72 65 74 75 72 6e 20 74 68 65 20 77 72 61 70 70  return the wrapp
98b0: 65 64 20 72 6f 6f 74 20 6b 65 79 0d 0a 20 20 20  ed root key..   
98c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
98d0: 20 2f 2f 20 20 20 20 20 20 20 69 74 73 65 6c 66   //       itself
98e0: 20 73 69 6e 63 65 20 6e 6f 20 77 72 69 74 65 73   since no writes
98f0: 20 61 72 65 20 61 6c 6c 6f 77 65 64 20 69 6e 20   are allowed in 
9900: 22 77 68 61 74 2d 69 66 22 0d 0a 20 20 20 20 20  "what-if"..     
9910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
9920: 2f 20 20 20 20 20 20 20 6d 6f 64 65 20 61 6e 79  /       mode any
9930: 68 6f 77 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  how...          
9940: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
9950: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9960: 20 20 52 65 67 69 73 74 72 79 4b 65 79 20 73 75    RegistryKey su
9970: 62 4b 65 79 20 3d 20 6b 65 79 2e 4f 70 65 6e 53  bKey = key.OpenS
9980: 75 62 4b 65 79 28 73 75 62 4b 65 79 4e 61 6d 65  ubKey(subKeyName
9990: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
99a0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
99b0: 20 28 73 75 62 4b 65 79 20 21 3d 20 6e 75 6c 6c   (subKey != null
99c0: 29 20 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ) ?..           
99d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77               new
99e0: 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
99f0: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
9a00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9a10: 20 20 20 73 75 62 4b 65 79 2c 20 77 68 61 74 49     subKey, whatI
9a20: 66 2c 20 72 65 61 64 4f 6e 6c 79 2c 20 73 61 66  f, readOnly, saf
9a30: 65 29 20 3a 0d 0a 20 20 20 20 20 20 20 20 20 20  e) :..          
9a40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 65                ne
9a50: 77 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65  w MockRegistryKe
9a60: 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
9a70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9a80: 20 20 20 20 6b 65 79 2c 20 73 75 62 4b 65 79 4e      key, subKeyN
9a90: 61 6d 65 2c 20 77 68 61 74 49 66 2c 20 72 65 61  ame, whatIf, rea
9aa0: 64 4f 6e 6c 79 2c 20 73 61 66 65 29 3b 0d 0a 20  dOnly, safe);.. 
9ab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
9ac0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9ad0: 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20    else..        
9ae0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
9af0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
9b00: 65 74 75 72 6e 20 6e 65 77 20 4d 6f 63 6b 52 65  eturn new MockRe
9b10: 67 69 73 74 72 79 4b 65 79 28 0d 0a 20 20 20 20  gistryKey(..    
9b20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9b30: 20 20 20 20 6b 65 79 2e 43 72 65 61 74 65 53 75      key.CreateSu
9b40: 62 4b 65 79 28 73 75 62 4b 65 79 4e 61 6d 65 29  bKey(subKeyName)
9b50: 2c 20 77 68 61 74 49 66 2c 20 72 65 61 64 4f 6e  , whatIf, readOn
9b60: 6c 79 2c 20 73 61 66 65 29 3b 0d 0a 20 20 20 20  ly, safe);..    
9b70: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
9b80: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
9b90: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
9ba0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9bb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9bc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9bd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
9be0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
9bf0: 75 62 6c 69 63 20 76 6f 69 64 20 44 65 6c 65 74  ublic void Delet
9c00: 65 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20  eSubKey(..      
9c10: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
9c20: 20 73 75 62 4b 65 79 4e 61 6d 65 2c 0d 0a 20 20   subKeyName,..  
9c30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
9c40: 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e  ol throwOnMissin
9c50: 67 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  g..             
9c60: 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20     )..          
9c70: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
9c80: 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73       CheckDispos
9c90: 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ed();..         
9ca0: 20 20 20 20 20 20 20 43 68 65 63 6b 52 65 61 64         CheckRead
9cb0: 4f 6e 6c 79 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  Only();....     
9cc0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6b             if (k
9cd0: 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ey == null)..   
9ce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9cf0: 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20   return;....    
9d00: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
9d10: 21 77 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20  !whatIf)..      
9d20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65                ke
9d30: 79 2e 44 65 6c 65 74 65 53 75 62 4b 65 79 28 73  y.DeleteSubKey(s
9d40: 75 62 4b 65 79 4e 61 6d 65 2c 20 74 68 72 6f 77  ubKeyName, throw
9d50: 4f 6e 4d 69 73 73 69 6e 67 29 3b 0d 0a 20 20 20  OnMissing);..   
9d60: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
9d70: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
9d80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9d90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9da0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9db0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
9dc0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
9dd0: 6c 69 63 20 76 6f 69 64 20 44 65 6c 65 74 65 53  lic void DeleteS
9de0: 75 62 4b 65 79 54 72 65 65 28 0d 0a 20 20 20 20  ubKeyTree(..    
9df0: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
9e00: 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65 0d 0a 20  ng subKeyName.. 
9e10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29                 )
9e20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
9e30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9e40: 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
9e50: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
9e60: 20 20 20 43 68 65 63 6b 52 65 61 64 4f 6e 6c 79     CheckReadOnly
9e70: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
9e80: 20 20 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d         if (key =
9e90: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
9ea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
9eb0: 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  urn;....        
9ec0: 20 20 20 20 20 20 20 20 69 66 20 28 21 77 68 61          if (!wha
9ed0: 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf)..          
9ee0: 20 20 20 20 20 20 20 20 20 20 6b 65 79 2e 44 65            key.De
9ef0: 6c 65 74 65 53 75 62 4b 65 79 54 72 65 65 28 73  leteSubKeyTree(s
9f00: 75 62 4b 65 79 4e 61 6d 65 29 3b 0d 0a 20 20 20  ubKeyName);..   
9f10: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
9f20: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
9f30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9f40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9f50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9f60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
9f70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
9f80: 6c 69 63 20 76 6f 69 64 20 44 65 6c 65 74 65 56  lic void DeleteV
9f90: 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20  alue(..         
9fa0: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6e 61         string na
9fb0: 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
9fc0: 20 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f       bool throwO
9fd0: 6e 4d 69 73 73 69 6e 67 0d 0a 20 20 20 20 20 20  nMissing..      
9fe0: 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
9ff0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
a000: 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63              Chec
a010: 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20  kDisposed();..  
a020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43 68                Ch
a030: 65 63 6b 52 65 61 64 4f 6e 6c 79 28 29 3b 0d 0a  eckReadOnly();..
a040: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
a050: 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c    if (key == nul
a060: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
a070: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0d          return;.
a080: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
a090: 20 20 20 69 66 20 28 21 77 68 61 74 49 66 29 0d     if (!whatIf).
a0a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
a0b0: 20 20 20 20 20 6b 65 79 2e 44 65 6c 65 74 65 56       key.DeleteV
a0c0: 61 6c 75 65 28 6e 61 6d 65 2c 20 74 68 72 6f 77  alue(name, throw
a0d0: 4f 6e 4d 69 73 73 69 6e 67 29 3b 0d 0a 20 20 20  OnMissing);..   
a0e0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
a0f0: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
a100: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a110: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a120: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a130: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
a140: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
a150: 6c 69 63 20 73 74 72 69 6e 67 5b 5d 20 47 65 74  lic string[] Get
a160: 53 75 62 4b 65 79 4e 61 6d 65 73 28 29 0d 0a 20  SubKeyNames().. 
a170: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
a180: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43 68                Ch
a190: 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a  eckDisposed();..
a1a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
a1b0: 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c    if (key == nul
a1c0: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
a1d0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e          return n
a1e0: 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ull;....        
a1f0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6b          return k
a200: 65 79 2e 47 65 74 53 75 62 4b 65 79 4e 61 6d 65  ey.GetSubKeyName
a210: 73 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  s();..          
a220: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
a230: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
a240: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a250: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a260: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a270: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
a280: 20 20 20 20 20 20 70 75 62 6c 69 63 20 6f 62 6a        public obj
a290: 65 63 74 20 47 65 74 56 61 6c 75 65 28 0d 0a 20  ect GetValue(.. 
a2a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
a2b0: 74 72 69 6e 67 20 6e 61 6d 65 2c 0d 0a 20 20 20  tring name,..   
a2c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a               obj
a2d0: 65 63 74 20 64 65 66 61 75 6c 74 56 61 6c 75 65  ect defaultValue
a2e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
a2f0: 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20    )..           
a300: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
a310: 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65      CheckDispose
a320: 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  d();....        
a330: 20 20 20 20 20 20 20 20 69 66 20 28 6b 65 79 20          if (key 
a340: 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
a350: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
a360: 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20  turn null;....  
a370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
a380: 74 75 72 6e 20 6b 65 79 2e 47 65 74 56 61 6c 75  turn key.GetValu
a390: 65 28 6e 61 6d 65 2c 20 64 65 66 61 75 6c 74 56  e(name, defaultV
a3a0: 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  alue);..        
a3b0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
a3c0: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
a3d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a3e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a3f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a400: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
a410: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d          public M
a420: 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 4f  ockRegistryKey O
a430: 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20  penSubKey(..    
a440: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
a450: 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65 0d 0a 20  ng subKeyName.. 
a460: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29                 )
a470: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
a480: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
a490: 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
a4a0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
a4b0: 20 20 20 20 20 72 65 74 75 72 6e 20 4f 70 65 6e       return Open
a4c0: 53 75 62 4b 65 79 28 73 75 62 4b 65 79 4e 61 6d  SubKey(subKeyNam
a4d0: 65 2c 20 66 61 6c 73 65 29 3b 0d 0a 20 20 20 20  e, false);..    
a4e0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
a4f0: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
a500: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a510: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a520: 2f 2f 2f 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 0d 0a 0d 0a  ////////////....
a540: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
a550: 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  ic MockRegistryK
a560: 65 79 20 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a  ey OpenSubKey(..
a570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a580: 73 74 72 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d  string subKeyNam
a590: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
a5a0: 20 20 20 20 62 6f 6f 6c 20 77 72 69 74 61 62 6c      bool writabl
a5b0: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
a5c0: 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20     )..          
a5d0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
a5e0: 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73       CheckDispos
a5f0: 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ed();....       
a600: 20 20 20 20 20 20 20 20 20 69 66 20 28 77 72 69           if (wri
a610: 74 61 62 6c 65 29 0d 0a 20 20 20 20 20 20 20 20  table)..        
a620: 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63              Chec
a630: 6b 52 65 61 64 4f 6e 6c 79 28 29 3b 0d 0a 0d 0a  kReadOnly();....
a640: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a650: 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29  if (key == null)
a660: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
a670: 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c        return nul
a680: 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  l;....          
a690: 20 20 20 20 20 20 52 65 67 69 73 74 72 79 4b 65        RegistryKe
a6a0: 79 20 73 75 62 4b 65 79 20 3d 20 6b 65 79 2e 4f  y subKey = key.O
a6b0: 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20  penSubKey(..    
a6c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a6d0: 73 75 62 4b 65 79 4e 61 6d 65 2c 20 77 68 61 74  subKeyName, what
a6e0: 49 66 20 3f 20 66 61 6c 73 65 20 3a 20 77 72 69  If ? false : wri
a6f0: 74 61 62 6c 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  table);....     
a700: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
a710: 6e 20 28 73 75 62 4b 65 79 20 21 3d 20 6e 75 6c  n (subKey != nul
a720: 6c 29 20 3f 0d 0a 20 20 20 20 20 20 20 20 20 20  l) ?..          
a730: 20 20 20 20 20 20 20 20 20 20 6e 65 77 20 4d 6f            new Mo
a740: 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28 73 75  ckRegistryKey(su
a750: 62 4b 65 79 2c 20 77 68 61 74 49 66 2c 20 72 65  bKey, whatIf, re
a760: 61 64 4f 6e 6c 79 2c 20 73 61 66 65 29 20 3a 20  adOnly, safe) : 
a770: 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20  null;..         
a780: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
a790: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
a7a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a7b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a7c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a7d0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
a7e0: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 76 6f         public vo
a7f0: 69 64 20 53 65 74 56 61 6c 75 65 28 0d 0a 20 20  id SetValue(..  
a800: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
a810: 72 69 6e 67 20 6e 61 6d 65 2c 0d 0a 20 20 20 20  ring name,..    
a820: 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65              obje
a830: 63 74 20 76 61 6c 75 65 0d 0a 20 20 20 20 20 20  ct value..      
a840: 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
a850: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
a860: 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63              Chec
a870: 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20  kDisposed();..  
a880: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43 68                Ch
a890: 65 63 6b 52 65 61 64 4f 6e 6c 79 28 29 3b 0d 0a  eckReadOnly();..
a8a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
a8b0: 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c    if (key == nul
a8c0: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
a8d0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0d          return;.
a8e0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
a8f0: 20 20 20 69 66 20 28 21 77 68 61 74 49 66 29 0d     if (!whatIf).
a900: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
a910: 20 20 20 20 20 6b 65 79 2e 53 65 74 56 61 6c 75       key.SetValu
a920: 65 28 6e 61 6d 65 2c 20 76 61 6c 75 65 29 3b 0d  e(name, value);.
a930: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
a940: 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64              #end
a950: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
a960: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
a970: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a980: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a990: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a9a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
a9b0: 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e           #region
a9c0: 20 50 75 62 6c 69 63 20 50 72 6f 70 65 72 74 69   Public Properti
a9d0: 65 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  es..            
a9e0: 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20 4e 61  public string Na
a9f0: 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  me..            
aa00: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
aa10: 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20 20 20     get..        
aa20: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
aa30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43                 C
aa40: 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d  heckDisposed();.
aa50: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
aa60: 20 20 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d         if (key =
aa70: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
aa80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
aa90: 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d   return null;...
aaa0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
aab0: 20 20 20 20 20 72 65 74 75 72 6e 20 21 53 74 72       return !Str
aac0: 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74  ing.IsNullOrEmpt
aad0: 79 28 73 75 62 4b 65 79 4e 61 6d 65 29 20 3f 0d  y(subKeyName) ?.
aae0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
aaf0: 20 20 20 20 20 20 20 20 20 53 74 72 69 6e 67 2e           String.
ab00: 46 6f 72 6d 61 74 28 22 7b 30 7d 5c 5c 7b 31 7d  Format("{0}\\{1}
ab10: 22 2c 20 6b 65 79 2e 4e 61 6d 65 2c 20 73 75 62  ", key.Name, sub
ab20: 4b 65 79 4e 61 6d 65 29 20 3a 0d 0a 20 20 20 20  KeyName) :..    
ab30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ab40: 20 20 20 20 6b 65 79 2e 4e 61 6d 65 3b 0d 0a 20      key.Name;.. 
ab50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
ab60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
ab70: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
ab80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ab90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aba0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
abb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
abc0: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
abd0: 20 20 70 72 69 76 61 74 65 20 52 65 67 69 73 74    private Regist
abe0: 72 79 4b 65 79 20 6b 65 79 3b 0d 0a 20 20 20 20  ryKey key;..    
abf0: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 52          public R
ac00: 65 67 69 73 74 72 79 4b 65 79 20 4b 65 79 0d 0a  egistryKey Key..
ac10: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
ac20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
ac30: 65 74 20 7b 20 43 68 65 63 6b 44 69 73 70 6f 73  et { CheckDispos
ac40: 65 64 28 29 3b 20 43 68 65 63 6b 53 61 66 65 28  ed(); CheckSafe(
ac50: 29 3b 20 72 65 74 75 72 6e 20 6b 65 79 3b 20 7d  ); return key; }
ac60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
ac70: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
ac80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ac90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aca0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
acb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
acc0: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
acd0: 20 20 70 72 69 76 61 74 65 20 73 74 72 69 6e 67    private string
ace0: 20 73 75 62 4b 65 79 4e 61 6d 65 3b 0d 0a 20 20   subKeyName;..  
acf0: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
ad00: 20 73 74 72 69 6e 67 20 53 75 62 4b 65 79 4e 61   string SubKeyNa
ad10: 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  me..            
ad20: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
ad30: 20 20 20 67 65 74 20 7b 20 43 68 65 63 6b 44 69     get { CheckDi
ad40: 73 70 6f 73 65 64 28 29 3b 20 72 65 74 75 72 6e  sposed(); return
ad50: 20 73 75 62 4b 65 79 4e 61 6d 65 3b 20 7d 0d 0a   subKeyName; }..
ad60: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
ad70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
ad80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ad90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ada0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
adb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
adc0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
add0: 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 77 68 61  private bool wha
ade0: 74 49 66 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf;..          
adf0: 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 57 68    public bool Wh
ae00: 61 74 49 66 0d 0a 20 20 20 20 20 20 20 20 20 20  atIf..          
ae10: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
ae20: 20 20 20 20 20 67 65 74 20 7b 20 43 68 65 63 6b       get { Check
ae30: 44 69 73 70 6f 73 65 64 28 29 3b 20 72 65 74 75  Disposed(); retu
ae40: 72 6e 20 77 68 61 74 49 66 3b 20 7d 0d 0a 20 20  rn whatIf; }..  
ae50: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
ae60: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
ae70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ae80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ae90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aea0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
aeb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
aec0: 69 76 61 74 65 20 62 6f 6f 6c 20 72 65 61 64 4f  ivate bool readO
aed0: 6e 6c 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  nly;..          
aee0: 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 52 65    public bool Re
aef0: 61 64 4f 6e 6c 79 0d 0a 20 20 20 20 20 20 20 20  adOnly..        
af00: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
af10: 20 20 20 20 20 20 20 67 65 74 20 7b 20 43 68 65         get { Che
af20: 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 20 72 65  ckDisposed(); re
af30: 74 75 72 6e 20 72 65 61 64 4f 6e 6c 79 3b 20 7d  turn readOnly; }
af40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
af50: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
af60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
af70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
af80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
af90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
afa0: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
afb0: 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 73 61    public bool sa
afc0: 66 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  fe;..           
afd0: 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 53 61 66   public bool Saf
afe0: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  e..            {
aff0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
b000: 20 20 67 65 74 20 7b 20 43 68 65 63 6b 44 69 73    get { CheckDis
b010: 70 6f 73 65 64 28 29 3b 20 72 65 74 75 72 6e 20  posed(); return 
b020: 73 61 66 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  safe; }..       
b030: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
b040: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
b050: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
b060: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b070: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b080: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b090: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b0a0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
b0b0: 20 23 72 65 67 69 6f 6e 20 50 72 69 76 61 74 65   #region Private
b0c0: 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20   Methods..      
b0d0: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 76 6f        private vo
b0e0: 69 64 20 43 68 65 63 6b 52 65 61 64 4f 6e 6c 79  id CheckReadOnly
b0f0: 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ()..            
b100: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
b110: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
b120: 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
b130: 49 6e 20 22 72 65 61 64 2d 6f 6e 6c 79 22 20 6d  In "read-only" m
b140: 6f 64 65 2c 20 77 65 20 64 69 73 61 6c 6c 6f 77  ode, we disallow
b150: 20 61 6c 6c 20 77 72 69 74 65 20 61 63 63 65 73   all write acces
b160: 73 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s...            
b170: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
b180: 20 20 20 20 20 20 20 20 69 66 20 28 21 72 65 61          if (!rea
b190: 64 4f 6e 6c 79 29 0d 0a 20 20 20 20 20 20 20 20  dOnly)..        
b1a0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
b1b0: 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  rn;....         
b1c0: 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
b1d0: 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f   InvalidOperatio
b1e0: 6e 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 20  nException();.. 
b1f0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
b200: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
b210: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b220: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b230: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b240: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
b250: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
b260: 72 69 76 61 74 65 20 76 6f 69 64 20 43 68 65 63  rivate void Chec
b270: 6b 53 61 66 65 28 29 0d 0a 20 20 20 20 20 20 20  kSafe()..       
b280: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
b290: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
b2a0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
b2b0: 4f 54 45 3a 20 49 6e 20 22 73 61 66 65 22 20 6d  OTE: In "safe" m
b2c0: 6f 64 65 2c 20 77 65 20 64 69 73 61 6c 6c 6f 77  ode, we disallow
b2d0: 20 61 6c 6c 20 64 69 72 65 63 74 20 61 63 63 65   all direct acce
b2e0: 73 73 20 74 6f 20 74 68 65 0d 0a 20 20 20 20 20  ss to the..     
b2f0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
b300: 20 20 20 20 63 6f 6e 74 61 69 6e 65 64 20 72 65      contained re
b310: 67 69 73 74 72 79 20 6b 65 79 2e 0d 0a 20 20 20  gistry key...   
b320: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
b330: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
b340: 20 69 66 20 28 21 73 61 66 65 29 0d 0a 20 20 20   if (!safe)..   
b350: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b360: 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20   return;....    
b370: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
b380: 77 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65  w new InvalidOpe
b390: 72 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28  rationException(
b3a0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
b3b0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  }..            #
b3c0: 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
b3d0: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
b3e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b3f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b400: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b410: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
b420: 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67              #reg
b430: 69 6f 6e 20 53 79 73 74 65 6d 2e 4f 62 6a 65 63  ion System.Objec
b440: 74 20 4f 76 65 72 72 69 64 65 73 0d 0a 20 20 20  t Overrides..   
b450: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
b460: 6f 76 65 72 72 69 64 65 20 73 74 72 69 6e 67 20  override string 
b470: 54 6f 53 74 72 69 6e 67 28 29 0d 0a 20 20 20 20  ToString()..    
b480: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
b490: 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b             Check
b4a0: 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20  Disposed();.... 
b4b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
b4c0: 65 74 75 72 6e 20 74 68 69 73 2e 4e 61 6d 65 3b  eturn this.Name;
b4d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
b4e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e  .            #en
b4f0: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
b500: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
b510: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b520: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b530: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b540: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
b550: 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f            #regio
b560: 6e 20 49 6d 70 6c 69 63 69 74 20 43 6f 6e 76 65  n Implicit Conve
b570: 72 73 69 6f 6e 20 4f 70 65 72 61 74 6f 72 73 0d  rsion Operators.
b580: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d  .            //.
b590: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20  .            // 
b5a0: 42 55 47 42 55 47 3a 20 52 65 6d 6f 76 65 20 6d  BUGBUG: Remove m
b5b0: 65 3f 20 20 54 68 69 73 20 73 68 6f 75 6c 64 20  e?  This should 
b5c0: 62 65 20 73 61 66 65 20 62 65 63 61 75 73 65 20  be safe because 
b5d0: 69 6e 20 22 77 68 61 74 2d 69 66 22 0d 0a 20 20  in "what-if"..  
b5e0: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
b5f0: 20 20 20 20 20 6d 6f 64 65 20 61 6c 6c 20 6b 65       mode all ke
b600: 79 73 20 61 72 65 20 6f 70 65 6e 65 64 20 72 65  ys are opened re
b610: 61 64 2d 6f 6e 6c 79 2e 0d 0a 20 20 20 20 20 20  ad-only...      
b620: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
b630: 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61        public sta
b640: 74 69 63 20 69 6d 70 6c 69 63 69 74 20 6f 70 65  tic implicit ope
b650: 72 61 74 6f 72 20 52 65 67 69 73 74 72 79 4b 65  rator RegistryKe
b660: 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
b670: 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79      MockRegistry
b680: 4b 65 79 20 6b 65 79 0d 0a 20 20 20 20 20 20 20  Key key..       
b690: 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
b6a0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
b6b0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
b6c0: 6e 20 28 6b 65 79 20 21 3d 20 6e 75 6c 6c 29 20  n (key != null) 
b6d0: 3f 20 6b 65 79 2e 4b 65 79 20 3a 20 6e 75 6c 6c  ? key.Key : null
b6e0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
b6f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65  ..            #e
b700: 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
b710: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
b720: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b730: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b740: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b750: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
b760: 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69             #regi
b770: 6f 6e 20 49 44 69 73 70 6f 73 61 62 6c 65 20 22  on IDisposable "
b780: 50 61 74 74 65 72 6e 22 20 4d 65 6d 62 65 72 73  Pattern" Members
b790: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
b7a0: 69 76 61 74 65 20 62 6f 6f 6c 20 64 69 73 70 6f  ivate bool dispo
b7b0: 73 65 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  sed;..          
b7c0: 20 20 70 72 69 76 61 74 65 20 76 6f 69 64 20 43    private void C
b7d0: 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 20 2f  heckDisposed() /
b7e0: 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20  * throw */..    
b7f0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
b800: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
b810: 64 69 73 70 6f 73 65 64 29 0d 0a 20 20 20 20 20  disposed)..     
b820: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
b830: 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20  eturn;....      
b840: 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
b850: 6e 65 77 20 4f 62 6a 65 63 74 44 69 73 70 6f 73  new ObjectDispos
b860: 65 64 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20  edException(..  
b870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b880: 20 20 74 79 70 65 6f 66 28 4d 6f 63 6b 52 65 67    typeof(MockReg
b890: 69 73 74 72 79 4b 65 79 29 2e 4e 61 6d 65 29 3b  istryKey).Name);
b8a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
b8b0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
b8c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b8d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b8e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b8f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b900: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
b910: 20 20 70 72 69 76 61 74 65 20 2f 2a 20 70 72 6f    private /* pro
b920: 74 65 63 74 65 64 20 76 69 72 74 75 61 6c 20 2a  tected virtual *
b930: 2f 20 76 6f 69 64 20 44 69 73 70 6f 73 65 28 0d  / void Dispose(.
b940: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
b950: 20 62 6f 6f 6c 20 64 69 73 70 6f 73 69 6e 67 0d   bool disposing.
b960: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
b970: 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
b980: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
b990: 20 20 20 69 66 20 28 21 64 69 73 70 6f 73 65 64     if (!disposed
b9a0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
b9b0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
b9c0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 64 69            if (di
b9d0: 73 70 6f 73 69 6e 67 29 0d 0a 20 20 20 20 20 20  sposing)..      
b9e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
b9f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
ba00: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
ba10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ba20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20  /////////////.. 
ba30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ba40: 20 20 20 20 20 20 20 2f 2f 20 64 69 73 70 6f 73         // dispos
ba50: 65 20 6d 61 6e 61 67 65 64 20 72 65 73 6f 75 72  e managed resour
ba60: 63 65 73 20 68 65 72 65 2e 2e 2e 0d 0a 20 20 20  ces here.....   
ba70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ba80: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
ba90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
baa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
bab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bac0: 20 20 20 20 20 69 66 20 28 6b 65 79 20 21 3d 20       if (key != 
bad0: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
bae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
baf0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
bb00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65                ke
bb10: 79 2e 43 6c 6f 73 65 28 29 3b 0d 0a 20 20 20 20  y.Close();..    
bb20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bb30: 20 20 20 20 20 20 20 20 6b 65 79 20 3d 20 6e 75          key = nu
bb40: 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll;..           
bb50: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
bb60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bb70: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
bb80: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f               ///
bb90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bba0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bbb0: 2f 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ///..           
bbc0: 20 20 20 20 20 20 20 20 20 2f 2f 20 72 65 6c 65           // rele
bbd0: 61 73 65 20 75 6e 6d 61 6e 61 67 65 64 20 72 65  ase unmanaged re
bbe0: 73 6f 75 72 63 65 73 20 68 65 72 65 2e 2e 2e 0d  sources here....
bbf0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
bc00: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
bc10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bc20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
bc30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bc40: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
bc50: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
bc60: 54 45 3a 20 54 68 69 73 20 6f 62 6a 65 63 74 20  TE: This object 
bc70: 69 73 20 6e 6f 77 20 64 69 73 70 6f 73 65 64 2e  is now disposed.
bc80: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
bc90: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
bca0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 69                di
bcb0: 73 70 6f 73 65 64 20 3d 20 74 72 75 65 3b 0d 0a  sposed = true;..
bcc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bcd0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
bce0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65  ..            #e
bcf0: 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
bd00: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
bd10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bd20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bd30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bd40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
bd50: 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69             #regi
bd60: 6f 6e 20 49 44 69 73 70 6f 73 61 62 6c 65 20 4d  on IDisposable M
bd70: 65 6d 62 65 72 73 0d 0a 20 20 20 20 20 20 20 20  embers..        
bd80: 20 20 20 20 70 75 62 6c 69 63 20 76 6f 69 64 20      public void 
bd90: 44 69 73 70 6f 73 65 28 29 0d 0a 20 20 20 20 20  Dispose()..     
bda0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
bdb0: 20 20 20 20 20 20 20 20 20 20 44 69 73 70 6f 73            Dispos
bdc0: 65 28 74 72 75 65 29 3b 0d 0a 20 20 20 20 20 20  e(true);..      
bdd0: 20 20 20 20 20 20 20 20 20 20 47 43 2e 53 75 70            GC.Sup
bde0: 70 72 65 73 73 46 69 6e 61 6c 69 7a 65 28 74 68  pressFinalize(th
bdf0: 69 73 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  is);..          
be00: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
be10: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
be20: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
be30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
be40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
be50: 2f 2f 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 0d 0a  //////////////..
be70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72  ..            #r
be80: 65 67 69 6f 6e 20 44 65 73 74 72 75 63 74 6f 72  egion Destructor
be90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7e 4d  ..            ~M
bea0: 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28 29  ockRegistryKey()
beb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
bec0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
bed0: 20 44 69 73 70 6f 73 65 28 66 61 6c 73 65 29 3b   Dispose(false);
bee0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
bef0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e  .            #en
bf00: 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20 20 20 20  dregion..       
bf10: 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64   }..        #end
bf20: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
bf30: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
bf40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bf50: 2f 2f 2f 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 0d 0a 0d 0a 20 20 20  /////////....   
bf80: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 52 65 67       #region Reg
bf90: 69 73 74 72 79 48 65 6c 70 65 72 20 43 6c 61 73  istryHelper Clas
bfa0: 73 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  s..        priva
bfb0: 74 65 20 73 74 61 74 69 63 20 63 6c 61 73 73 20  te static class 
bfc0: 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 0d 0a  RegistryHelper..
bfd0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
bfe0: 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50         #region P
bff0: 75 62 6c 69 63 20 53 74 61 74 69 63 20 50 72 6f  ublic Static Pro
c000: 70 65 72 74 69 65 73 0d 0a 20 20 20 20 20 20 20  perties..       
c010: 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
c020: 74 69 63 20 69 6e 74 20 73 75 62 4b 65 79 73 43  tic int subKeysC
c030: 72 65 61 74 65 64 3b 0d 0a 20 20 20 20 20 20 20  reated;..       
c040: 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
c050: 69 63 20 69 6e 74 20 53 75 62 4b 65 79 73 43 72  ic int SubKeysCr
c060: 65 61 74 65 64 0d 0a 20 20 20 20 20 20 20 20 20  eated..         
c070: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
c080: 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75        get { retu
c090: 72 6e 20 73 75 62 4b 65 79 73 43 72 65 61 74 65  rn subKeysCreate
c0a0: 64 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  d; }..          
c0b0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
c0c0: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
c0d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c0e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c0f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c100: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
c110: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
c120: 61 74 69 63 20 69 6e 74 20 73 75 62 4b 65 79 73  atic int subKeys
c130: 44 65 6c 65 74 65 64 3b 0d 0a 20 20 20 20 20 20  Deleted;..      
c140: 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61        public sta
c150: 74 69 63 20 69 6e 74 20 53 75 62 4b 65 79 73 44  tic int SubKeysD
c160: 65 6c 65 74 65 64 0d 0a 20 20 20 20 20 20 20 20  eleted..        
c170: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
c180: 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
c190: 75 72 6e 20 73 75 62 4b 65 79 73 44 65 6c 65 74  urn subKeysDelet
c1a0: 65 64 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ed; }..         
c1b0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
c1c0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
c1d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c1e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c1f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c200: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
c210: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
c220: 74 61 74 69 63 20 69 6e 74 20 6b 65 79 56 61 6c  tatic int keyVal
c230: 75 65 73 52 65 61 64 3b 0d 0a 20 20 20 20 20 20  uesRead;..      
c240: 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61        public sta
c250: 74 69 63 20 69 6e 74 20 4b 65 79 56 61 6c 75 65  tic int KeyValue
c260: 73 52 65 61 64 0d 0a 20 20 20 20 20 20 20 20 20  sRead..         
c270: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
c280: 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75        get { retu
c290: 72 6e 20 6b 65 79 56 61 6c 75 65 73 52 65 61 64  rn keyValuesRead
c2a0: 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
c2b0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
c2c0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
c2d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c2e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c2f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c300: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
c310: 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
c320: 74 69 63 20 69 6e 74 20 6b 65 79 56 61 6c 75 65  tic int keyValue
c330: 73 57 72 69 74 74 65 6e 3b 0d 0a 20 20 20 20 20  sWritten;..     
c340: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74         public st
c350: 61 74 69 63 20 69 6e 74 20 4b 65 79 56 61 6c 75  atic int KeyValu
c360: 65 73 57 72 69 74 74 65 6e 0d 0a 20 20 20 20 20  esWritten..     
c370: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
c380: 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
c390: 72 65 74 75 72 6e 20 6b 65 79 56 61 6c 75 65 73  return keyValues
c3a0: 57 72 69 74 74 65 6e 3b 20 7d 0d 0a 20 20 20 20  Written; }..    
c3b0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
c3c0: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
c3d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c3e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c3f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c400: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
c410: 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
c420: 61 74 65 20 73 74 61 74 69 63 20 69 6e 74 20 6b  ate static int k
c430: 65 79 56 61 6c 75 65 73 44 65 6c 65 74 65 64 3b  eyValuesDeleted;
c440: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
c450: 62 6c 69 63 20 73 74 61 74 69 63 20 69 6e 74 20  blic static int 
c460: 4b 65 79 56 61 6c 75 65 73 44 65 6c 65 74 65 64  KeyValuesDeleted
c470: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
c480: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
c490: 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6b 65   get { return ke
c4a0: 79 56 61 6c 75 65 73 44 65 6c 65 74 65 64 3b 20  yValuesDeleted; 
c4b0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
c4c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65  ..            #e
c4d0: 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
c4e0: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
c4f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c500: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c510: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c520: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
c530: 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69             #regi
c540: 6f 6e 20 50 75 62 6c 69 63 20 53 74 61 74 69 63  on Public Static
c550: 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20   Methods..      
c560: 20 20 20 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70        [MethodImp
c570: 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69  l(MethodImplOpti
c580: 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d  ons.NoInlining)]
c590: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
c5a0: 62 6c 69 63 20 73 74 61 74 69 63 20 4d 6f 63 6b  blic static Mock
c5b0: 52 65 67 69 73 74 72 79 4b 65 79 20 4f 70 65 6e  RegistryKey Open
c5c0: 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20  SubKey(..       
c5d0: 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67           MockReg
c5e0: 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79  istryKey rootKey
c5f0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
c600: 20 20 20 73 74 72 69 6e 67 20 73 75 62 4b 65 79     string subKey
c610: 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
c620: 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 72 69 74         bool writ
c630: 61 62 6c 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  able,..         
c640: 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74         bool what
c650: 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If,..           
c660: 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73       bool verbos
c670: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
c680: 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20     )..          
c690: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
c6a0: 20 20 20 20 20 69 66 20 28 76 65 72 62 6f 73 65       if (verbose
c6b0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
c6c0: 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e         TraceOps.
c6d0: 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 77 72  DebugAndTrace(wr
c6e0: 69 74 61 62 6c 65 20 3f 0d 0a 20 20 20 20 20 20  itable ?..      
c6f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c700: 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e    TracePriority.
c710: 48 69 67 68 65 73 74 20 3a 20 54 72 61 63 65 50  Highest : TraceP
c720: 72 69 6f 72 69 74 79 2e 48 69 67 68 65 72 2c 0d  riority.Higher,.
c730: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
c740: 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61           debugCa
c750: 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c  llback, traceCal
c760: 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
c770: 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
c780: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
c790: 72 6f 6f 74 4b 65 79 20 3d 20 7b 30 7d 2c 20 73  rootKey = {0}, s
c7a0: 75 62 4b 65 79 4e 61 6d 65 20 3d 20 7b 31 7d 2c  ubKeyName = {1},
c7b0: 20 77 72 69 74 61 62 6c 65 20 3d 20 7b 32 7d 22   writable = {2}"
c7c0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
c7d0: 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69             ForDi
c7e0: 73 70 6c 61 79 28 72 6f 6f 74 4b 65 79 29 2c 20  splay(rootKey), 
c7f0: 46 6f 72 44 69 73 70 6c 61 79 28 73 75 62 4b 65  ForDisplay(subKe
c800: 79 4e 61 6d 65 29 2c 0d 0a 20 20 20 20 20 20 20  yName),..       
c810: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c820: 20 46 6f 72 44 69 73 70 6c 61 79 28 77 72 69 74   ForDisplay(writ
c830: 61 62 6c 65 29 29 2c 20 74 72 61 63 65 43 61 74  able)), traceCat
c840: 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
c850: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 72             if (r
c860: 6f 6f 74 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d  ootKey == null).
c870: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
c880: 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c       return null
c890: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
c8a0: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
c8b0: 20 20 20 20 20 20 20 20 20 2f 2f 20 48 41 43 4b           // HACK
c8c0: 3a 20 41 6c 77 61 79 73 20 66 6f 72 62 69 64 20  : Always forbid 
c8d0: 77 72 69 74 61 62 6c 65 20 61 63 63 65 73 73 20  writable access 
c8e0: 77 68 65 6e 20 6f 70 65 72 61 74 69 6e 67 20 69  when operating i
c8f0: 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  n..             
c900: 20 20 20 2f 2f 20 20 20 20 20 20 20 22 77 68 61     //       "wha
c910: 74 2d 69 66 22 20 6d 6f 64 65 2e 0d 0a 20 20 20  t-if" mode...   
c920: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
c930: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
c940: 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
c950: 20 6b 65 79 20 3d 20 72 6f 6f 74 4b 65 79 2e 4f   key = rootKey.O
c960: 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20  penSubKey(..    
c970: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c980: 73 75 62 4b 65 79 4e 61 6d 65 2c 20 77 68 61 74  subKeyName, what
c990: 49 66 20 3f 20 66 61 6c 73 65 20 3a 20 77 72 69  If ? false : wri
c9a0: 74 61 62 6c 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  table);....     
c9b0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
c9c0: 6e 20 28 6b 65 79 20 21 3d 20 6e 75 6c 6c 29 20  n (key != null) 
c9d0: 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ?..             
c9e0: 20 20 20 20 20 20 20 6e 65 77 20 4d 6f 63 6b 52         new MockR
c9f0: 65 67 69 73 74 72 79 4b 65 79 28 6b 65 79 2c 20  egistryKey(key, 
ca00: 77 68 61 74 49 66 2c 20 66 61 6c 73 65 2c 20 66  whatIf, false, f
ca10: 61 6c 73 65 29 20 3a 20 6e 75 6c 6c 3b 0d 0a 20  alse) : null;.. 
ca20: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
ca30: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
ca40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ca50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ca60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ca70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
ca80: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b  ...            [
ca90: 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f  MethodImpl(Metho
caa0: 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49  dImplOptions.NoI
cab0: 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20  nlining)]..     
cac0: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74         public st
cad0: 61 74 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72  atic MockRegistr
cae0: 79 4b 65 79 20 43 72 65 61 74 65 53 75 62 4b 65  yKey CreateSubKe
caf0: 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
cb00: 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79      MockRegistry
cb10: 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20  Key rootKey,..  
cb20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
cb30: 72 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65 2c  ring subKeyName,
cb40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
cb50: 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a    bool whatIf,..
cb60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cb70: 62 6f 6f 6c 20 76 65 72 62 6f 73 65 0d 0a 20 20  bool verbose..  
cb80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d                ).
cb90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
cba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cbb0: 69 66 20 28 76 65 72 62 6f 73 65 29 0d 0a 20 20  if (verbose)..  
cbc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cbd0: 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67    TraceOps.Debug
cbe0: 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72  AndTrace(TracePr
cbf0: 69 6f 72 69 74 79 2e 48 69 67 68 65 73 74 2c 0d  iority.Highest,.
cc00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
cc10: 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61           debugCa
cc20: 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c  llback, traceCal
cc30: 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
cc40: 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
cc50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
cc60: 72 6f 6f 74 4b 65 79 20 3d 20 7b 30 7d 2c 20 73  rootKey = {0}, s
cc70: 75 62 4b 65 79 4e 61 6d 65 20 3d 20 7b 31 7d 22  ubKeyName = {1}"
cc80: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
cc90: 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69             ForDi
cca0: 73 70 6c 61 79 28 72 6f 6f 74 4b 65 79 29 2c 20  splay(rootKey), 
ccb0: 46 6f 72 44 69 73 70 6c 61 79 28 73 75 62 4b 65  ForDisplay(subKe
ccc0: 79 4e 61 6d 65 29 29 2c 0d 0a 20 20 20 20 20 20  yName)),..      
ccd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cce0: 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
ccf0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
cd00: 20 20 20 20 20 69 66 20 28 72 6f 6f 74 4b 65 79       if (rootKey
cd10: 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
cd20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
cd30: 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20  eturn null;.... 
cd40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
cd50: 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ry..            
cd60: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
cd70: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
cd80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cd90: 20 20 20 2f 2f 20 48 41 43 4b 3a 20 41 6c 77 61     // HACK: Alwa
cda0: 79 73 20 6f 70 65 6e 20 61 20 6b 65 79 2c 20 72  ys open a key, r
cdb0: 61 74 68 65 72 20 74 68 61 6e 20 63 72 65 61 74  ather than creat
cdc0: 69 6e 67 20 6f 6e 65 20 77 68 65 6e 0d 0a 20 20  ing one when..  
cdd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cde0: 20 20 2f 2f 20 20 20 20 20 20 20 6f 70 65 72 61    //       opera
cdf0: 74 69 6e 67 20 69 6e 20 22 77 68 61 74 2d 69 66  ting in "what-if
ce00: 22 20 6d 6f 64 65 2e 0d 0a 20 20 20 20 20 20 20  " mode...       
ce10: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
ce20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
ce30: 20 20 20 20 20 69 66 20 28 77 68 61 74 49 66 29       if (whatIf)
ce40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
ce50: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
ce60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ce70: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
ce80: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
ce90: 48 41 43 4b 3a 20 41 74 74 65 6d 70 74 20 74 6f  HACK: Attempt to
cea0: 20 6f 70 65 6e 20 74 68 65 20 73 70 65 63 69 66   open the specif
ceb0: 69 65 64 20 73 75 62 2d 6b 65 79 2e 20 20 49 66  ied sub-key.  If
cec0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
ced0: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
cee0: 20 20 20 74 68 69 73 20 66 61 69 6c 73 2c 20 77     this fails, w
cef0: 65 20 77 69 6c 6c 20 73 69 6d 70 6c 79 20 72 65  e will simply re
cf00: 74 75 72 6e 20 74 68 65 20 72 6f 6f 74 0d 0a 20  turn the root.. 
cf10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cf20: 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
cf30: 6b 65 79 20 69 74 73 65 6c 66 20 73 69 6e 63 65  key itself since
cf40: 20 6e 6f 20 77 72 69 74 65 73 20 61 72 65 20 61   no writes are a
cf50: 6c 6c 6f 77 65 64 20 69 6e 0d 0a 20 20 20 20 20  llowed in..     
cf60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cf70: 20 20 20 2f 2f 20 20 20 20 20 20 20 22 77 68 61     //       "wha
cf80: 74 2d 69 66 22 20 6d 6f 64 65 20 61 6e 79 68 6f  t-if" mode anyho
cf90: 77 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  w...            
cfa0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
cfb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cfc0: 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69          MockRegi
cfd0: 73 74 72 79 4b 65 79 20 6b 65 79 20 3d 20 72 6f  stryKey key = ro
cfe0: 6f 74 4b 65 79 2e 4f 70 65 6e 53 75 62 4b 65 79  otKey.OpenSubKey
cff0: 28 73 75 62 4b 65 79 4e 61 6d 65 29 3b 0d 0a 0d  (subKeyName);...
d000: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
d010: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
d020: 28 6b 65 79 20 21 3d 20 6e 75 6c 6c 29 20 3f 0d  (key != null) ?.
d030: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
d040: 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79               key
d050: 20 3a 20 6e 65 77 20 4d 6f 63 6b 52 65 67 69 73   : new MockRegis
d060: 74 72 79 4b 65 79 28 0d 0a 20 20 20 20 20 20 20  tryKey(..       
d070: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d080: 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79           rootKey
d090: 2c 20 73 75 62 4b 65 79 4e 61 6d 65 2c 20 77 68  , subKeyName, wh
d0a0: 61 74 49 66 2c 20 66 61 6c 73 65 2c 20 66 61 6c  atIf, false, fal
d0b0: 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  se);..          
d0c0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
d0d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d0e0: 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20   else..         
d0f0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
d100: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d110: 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 65 77        return new
d120: 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
d130: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
d140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
d150: 6f 6f 74 4b 65 79 2e 43 72 65 61 74 65 53 75 62  ootKey.CreateSub
d160: 4b 65 79 28 73 75 62 4b 65 79 4e 61 6d 65 29 2c  Key(subKeyName),
d170: 20 77 68 61 74 49 66 2c 20 66 61 6c 73 65 2c 0d   whatIf, false,.
d180: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
d190: 20 20 20 20 20 20 20 20 20 20 20 20 20 66 61 6c               fal
d1a0: 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  se);..          
d1b0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
d1c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
d1d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d1e0: 66 69 6e 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20  finally..       
d1f0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
d200: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d210: 73 75 62 4b 65 79 73 43 72 65 61 74 65 64 2b 2b  subKeysCreated++
d220: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
d230: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
d240: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
d250: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
d260: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d270: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d280: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d290: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
d2a0: 20 20 20 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70        [MethodImp
d2b0: 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69  l(MethodImplOpti
d2c0: 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d  ons.NoInlining)]
d2d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
d2e0: 62 6c 69 63 20 73 74 61 74 69 63 20 76 6f 69 64  blic static void
d2f0: 20 44 65 6c 65 74 65 53 75 62 4b 65 79 28 0d 0a   DeleteSubKey(..
d300: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d310: 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
d320: 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20  rootKey,..      
d330: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
d340: 20 73 75 62 4b 65 79 4e 61 6d 65 2c 0d 0a 20 20   subKeyName,..  
d350: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
d360: 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e  ol throwOnMissin
d370: 67 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g,..            
d380: 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c      bool whatIf,
d390: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d3a0: 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 0d 0a    bool verbose..
d3b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d3c0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
d3d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d3e0: 20 20 69 66 20 28 76 65 72 62 6f 73 65 29 0d 0a    if (verbose)..
d3f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d400: 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62      TraceOps.Deb
d410: 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65  ugAndTrace(Trace
d420: 50 72 69 6f 72 69 74 79 2e 48 69 67 68 65 73 74  Priority.Highest
d430: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
d440: 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67             debug
d450: 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43  Callback, traceC
d460: 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e  allback, String.
d470: 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
d480: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d490: 20 22 72 6f 6f 74 4b 65 79 20 3d 20 7b 30 7d 2c   "rootKey = {0},
d4a0: 20 73 75 62 4b 65 79 4e 61 6d 65 20 3d 20 7b 31   subKeyName = {1
d4b0: 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }",..           
d4c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72               For
d4d0: 44 69 73 70 6c 61 79 28 72 6f 6f 74 4b 65 79 29  Display(rootKey)
d4e0: 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 73 75 62  , ForDisplay(sub
d4f0: 4b 65 79 4e 61 6d 65 29 29 2c 0d 0a 20 20 20 20  KeyName)),..    
d500: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d510: 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
d520: 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
d530: 20 20 20 20 20 20 20 69 66 20 28 72 6f 6f 74 4b         if (rootK
d540: 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ey == null)..   
d550: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d560: 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20   return;....    
d570: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
d580: 21 77 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20  !whatIf)..      
d590: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
d5a0: 6f 74 4b 65 79 2e 44 65 6c 65 74 65 53 75 62 4b  otKey.DeleteSubK
d5b0: 65 79 28 73 75 62 4b 65 79 4e 61 6d 65 2c 20 74  ey(subKeyName, t
d5c0: 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 29 3b 0d  hrowOnMissing);.
d5d0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
d5e0: 20 20 20 73 75 62 4b 65 79 73 44 65 6c 65 74 65     subKeysDelete
d5f0: 64 2b 2b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  d++;..          
d600: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
d610: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
d620: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
d660: 20 20 20 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70        [MethodImp
d670: 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69  l(MethodImplOpti
d680: 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d  ons.NoInlining)]
d690: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
d6a0: 62 6c 69 63 20 73 74 61 74 69 63 20 76 6f 69 64  blic static void
d6b0: 20 44 65 6c 65 74 65 53 75 62 4b 65 79 54 72 65   DeleteSubKeyTre
d6c0: 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
d6d0: 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79      MockRegistry
d6e0: 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20  Key rootKey,..  
d6f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
d700: 72 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65 2c  ring subKeyName,
d710: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d720: 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a    bool whatIf,..
d730: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d740: 62 6f 6f 6c 20 76 65 72 62 6f 73 65 0d 0a 20 20  bool verbose..  
d750: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d                ).
d760: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
d770: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d780: 69 66 20 28 76 65 72 62 6f 73 65 29 0d 0a 20 20  if (verbose)..  
d790: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d7a0: 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67    TraceOps.Debug
d7b0: 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72  AndTrace(TracePr
d7c0: 69 6f 72 69 74 79 2e 48 69 67 68 65 73 74 2c 0d  iority.Highest,.
d7d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
d7e0: 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61           debugCa
d7f0: 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c  llback, traceCal
d800: 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
d810: 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
d820: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
d830: 72 6f 6f 74 4b 65 79 20 3d 20 7b 30 7d 2c 20 73  rootKey = {0}, s
d840: 75 62 4b 65 79 4e 61 6d 65 20 3d 20 7b 31 7d 22  ubKeyName = {1}"
d850: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
d860: 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69             ForDi
d870: 73 70 6c 61 79 28 72 6f 6f 74 4b 65 79 29 2c 20  splay(rootKey), 
d880: 46 6f 72 44 69 73 70 6c 61 79 28 73 75 62 4b 65  ForDisplay(subKe
d890: 79 4e 61 6d 65 29 29 2c 0d 0a 20 20 20 20 20 20  yName)),..      
d8a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d8b0: 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
d8c0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
d8d0: 20 20 20 20 20 69 66 20 28 72 6f 6f 74 4b 65 79       if (rootKey
d8e0: 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
d8f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
d900: 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20  eturn;....      
d910: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 77            if (!w
d920: 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20  hatIf)..        
d930: 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74              root
d940: 4b 65 79 2e 44 65 6c 65 74 65 53 75 62 4b 65 79  Key.DeleteSubKey
d950: 54 72 65 65 28 73 75 62 4b 65 79 4e 61 6d 65 29  Tree(subKeyName)
d960: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
d970: 20 20 20 20 20 73 75 62 4b 65 79 73 44 65 6c 65       subKeysDele
d980: 74 65 64 2b 2b 3b 0d 0a 20 20 20 20 20 20 20 20  ted++;..        
d990: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
d9a0: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
d9b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d9c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d9d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d9e0: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
d9f0: 20 20 20 20 20 20 20 20 5b 4d 65 74 68 6f 64 49          [MethodI
da00: 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70  mpl(MethodImplOp
da10: 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67  tions.NoInlining
da20: 29 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  )]..            
da30: 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 73 74  public static st
da40: 72 69 6e 67 5b 5d 20 47 65 74 53 75 62 4b 65 79  ring[] GetSubKey
da50: 4e 61 6d 65 73 28 0d 0a 20 20 20 20 20 20 20 20  Names(..        
da60: 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69          MockRegi
da70: 73 74 72 79 4b 65 79 20 6b 65 79 2c 0d 0a 20 20  stryKey key,..  
da80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
da90: 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20  ol whatIf,..    
daa0: 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
dab0: 20 76 65 72 62 6f 73 65 0d 0a 20 20 20 20 20 20   verbose..      
dac0: 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
dad0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
dae0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
daf0: 76 65 72 62 6f 73 65 29 0d 0a 20 20 20 20 20 20  verbose)..      
db00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
db10: 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
db20: 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69  race(TracePriori
db30: 74 79 2e 48 69 67 68 2c 0d 0a 20 20 20 20 20 20  ty.High,..      
db40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
db50: 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c    debugCallback,
db60: 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
db70: 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
db80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
db90: 20 20 20 20 20 20 20 20 22 6b 65 79 20 3d 20 7b          "key = {
dba0: 30 7d 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  0}", ForDisplay(
dbb0: 6b 65 79 29 29 2c 20 74 72 61 63 65 43 61 74 65  key)), traceCate
dbc0: 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
dbd0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6b 65            if (ke
dbe0: 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y == null)..    
dbf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dc00: 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a  return null;....
dc10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dc20: 72 65 74 75 72 6e 20 6b 65 79 2e 47 65 74 53 75  return key.GetSu
dc30: 62 4b 65 79 4e 61 6d 65 73 28 29 3b 0d 0a 20 20  bKeyNames();..  
dc40: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
dc50: 20 20 20 20 20 20 20 20 20 20 20 2f 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 0d 0a  //////////////..
dca0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 4d  ..            [M
dcb0: 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64  ethodImpl(Method
dcc0: 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e  ImplOptions.NoIn
dcd0: 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20  lining)]..      
dce0: 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61        public sta
dcf0: 74 69 63 20 6f 62 6a 65 63 74 20 47 65 74 56 61  tic object GetVa
dd00: 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  lue(..          
dd10: 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74        MockRegist
dd20: 72 79 4b 65 79 20 6b 65 79 2c 0d 0a 20 20 20 20  ryKey key,..    
dd30: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
dd40: 6e 67 20 6e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  ng name,..      
dd50: 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74            object
dd60: 20 64 65 66 61 75 6c 74 56 61 6c 75 65 2c 0d 0a   defaultValue,..
dd70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dd80: 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20  bool whatIf,..  
dd90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
dda0: 6f 6c 20 76 65 72 62 6f 73 65 0d 0a 20 20 20 20  ol verbose..    
ddb0: 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
ddc0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
ddd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
dde0: 20 28 76 65 72 62 6f 73 65 29 0d 0a 20 20 20 20   (verbose)..    
ddf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
de00: 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
de10: 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f  dTrace(TracePrio
de20: 72 69 74 79 2e 48 69 67 68 2c 0d 0a 20 20 20 20  rity.High,..    
de30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
de40: 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63      debugCallbac
de50: 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  k, traceCallback
de60: 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
de70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
de80: 20 20 20 20 20 20 20 20 20 20 22 6b 65 79 20 3d            "key =
de90: 20 7b 30 7d 2c 20 6e 61 6d 65 20 3d 20 7b 31 7d   {0}, name = {1}
dea0: 2c 20 64 65 66 61 75 6c 74 56 61 6c 75 65 20 3d  , defaultValue =
deb0: 20 7b 32 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20   {2}",..        
dec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ded0: 46 6f 72 44 69 73 70 6c 61 79 28 6b 65 79 29 2c  ForDisplay(key),
dee0: 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 61 6d 65   ForDisplay(name
def0: 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
df00: 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44              ForD
df10: 69 73 70 6c 61 79 28 64 65 66 61 75 6c 74 56 61  isplay(defaultVa
df20: 6c 75 65 29 29 2c 20 74 72 61 63 65 43 61 74 65  lue)), traceCate
df30: 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
df40: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6b 65            if (ke
df50: 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y == null)..    
df60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
df70: 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a  return null;....
df80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
df90: 6f 62 6a 65 63 74 20 76 61 6c 75 65 20 3d 20 6b  object value = k
dfa0: 65 79 2e 47 65 74 56 61 6c 75 65 28 6e 61 6d 65  ey.GetValue(name
dfb0: 2c 20 64 65 66 61 75 6c 74 56 61 6c 75 65 29 3b  , defaultValue);
dfc0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
dfd0: 20 20 20 20 6b 65 79 56 61 6c 75 65 73 52 65 61      keyValuesRea
dfe0: 64 2b 2b 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  d++;....        
dff0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 76          return v
e000: 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alue;..         
e010: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
e020: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
e030: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e040: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e050: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e060: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
e070: 20 20 20 20 20 20 20 5b 4d 65 74 68 6f 64 49 6d         [MethodIm
e080: 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 74  pl(MethodImplOpt
e090: 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29  ions.NoInlining)
e0a0: 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ]..            p
e0b0: 75 62 6c 69 63 20 73 74 61 74 69 63 20 76 6f 69  ublic static voi
e0c0: 64 20 53 65 74 56 61 6c 75 65 28 0d 0a 20 20 20  d SetValue(..   
e0d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63               Moc
e0e0: 6b 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79  kRegistryKey key
e0f0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
e100: 20 20 20 73 74 72 69 6e 67 20 6e 61 6d 65 2c 0d     string name,.
e110: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
e120: 20 6f 62 6a 65 63 74 20 76 61 6c 75 65 2c 0d 0a   object value,..
e130: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e140: 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20  bool whatIf,..  
e150: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
e160: 6f 6c 20 76 65 72 62 6f 73 65 0d 0a 20 20 20 20  ol verbose..    
e170: 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
e180: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
e190: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
e1a0: 20 28 76 65 72 62 6f 73 65 29 0d 0a 20 20 20 20   (verbose)..    
e1b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e1c0: 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
e1d0: 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f  dTrace(TracePrio
e1e0: 72 69 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20  rity.Highest,.. 
e1f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e200: 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c         debugCall
e210: 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62  back, traceCallb
e220: 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ack, String.Form
e230: 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
e240: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 6b 65               "ke
e250: 79 20 3d 20 7b 30 7d 2c 20 6e 61 6d 65 20 3d 20  y = {0}, name = 
e260: 7b 31 7d 2c 20 76 61 6c 75 65 20 3d 20 7b 32 7d  {1}, value = {2}
e270: 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
e280: 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44              ForD
e290: 69 73 70 6c 61 79 28 6b 65 79 29 2c 20 46 6f 72  isplay(key), For
e2a0: 44 69 73 70 6c 61 79 28 6e 61 6d 65 29 2c 20 46  Display(name), F
e2b0: 6f 72 44 69 73 70 6c 61 79 28 76 61 6c 75 65 29  orDisplay(value)
e2c0: 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
e2d0: 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
e2e0: 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
e2f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
e300: 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d  f (key == null).
e310: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
e320: 20 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a       return;....
e330: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e340: 69 66 20 28 21 77 68 61 74 49 66 29 0d 0a 20 20  if (!whatIf)..  
e350: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e360: 20 20 6b 65 79 2e 53 65 74 56 61 6c 75 65 28 6e    key.SetValue(n
e370: 61 6d 65 2c 20 76 61 6c 75 65 29 3b 0d 0a 0d 0a  ame, value);....
e380: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e390: 6b 65 79 56 61 6c 75 65 73 57 72 69 74 74 65 6e  keyValuesWritten
e3a0: 2b 2b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ++;..           
e3b0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
e3c0: 20 20 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 2f 2f 2f 2f 2f  ////////////////
e3f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e400: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
e410: 20 20 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c       [MethodImpl
e420: 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f  (MethodImplOptio
e430: 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d  ns.NoInlining)].
e440: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
e450: 6c 69 63 20 73 74 61 74 69 63 20 76 6f 69 64 20  lic static void 
e460: 44 65 6c 65 74 65 56 61 6c 75 65 28 0d 0a 20 20  DeleteValue(..  
e470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f                Mo
e480: 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65  ckRegistryKey ke
e490: 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
e4a0: 20 20 20 20 73 74 72 69 6e 67 20 6e 61 6d 65 2c      string name,
e4b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e4c0: 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69    bool throwOnMi
e4d0: 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20  ssing,..        
e4e0: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61          bool wha
e4f0: 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf,..          
e500: 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f        bool verbo
e510: 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
e520: 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20      )..         
e530: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
e540: 20 20 20 20 20 20 69 66 20 28 76 65 72 62 6f 73        if (verbos
e550: 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e)..            
e560: 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
e570: 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54  .DebugAndTrace(T
e580: 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67  racePriority.Hig
e590: 68 65 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  hest,..         
e5a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
e5b0: 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72  ebugCallback, tr
e5c0: 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
e5d0: 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
e5e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e5f0: 20 20 20 20 20 22 6b 65 79 20 3d 20 7b 30 7d 2c       "key = {0},
e600: 20 6e 61 6d 65 20 3d 20 7b 31 7d 22 2c 20 46 6f   name = {1}", Fo
e610: 72 44 69 73 70 6c 61 79 28 6b 65 79 29 2c 0d 0a  rDisplay(key),..
e620: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e630: 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
e640: 61 79 28 6e 61 6d 65 29 29 2c 20 74 72 61 63 65  ay(name)), trace
e650: 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
e660: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
e670: 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a   (key == null)..
e680: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e690: 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20      return;.... 
e6a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
e6b0: 66 20 28 21 77 68 61 74 49 66 29 0d 0a 20 20 20  f (!whatIf)..   
e6c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e6d0: 20 6b 65 79 2e 44 65 6c 65 74 65 56 61 6c 75 65   key.DeleteValue
e6e0: 28 6e 61 6d 65 2c 20 74 68 72 6f 77 4f 6e 4d 69  (name, throwOnMi
e6f0: 73 73 69 6e 67 29 3b 0d 0a 0d 0a 20 20 20 20 20  ssing);....     
e700: 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 56 61             keyVa
e710: 6c 75 65 73 44 65 6c 65 74 65 64 2b 2b 3b 0d 0a  luesDeleted++;..
e720: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
e730: 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72             #endr
e740: 65 67 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 7d  egion..        }
e750: 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
e760: 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
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 2f 2f 2f 2f 2f  ////////////////
e790: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e7a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e7b0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
e7c0: 20 20 20 23 72 65 67 69 6f 6e 20 53 74 72 69 6e     #region Strin
e7d0: 67 4c 69 73 74 20 43 6c 61 73 73 0d 0a 20 20 20  gList Class..   
e7e0: 20 20 20 20 20 70 72 69 76 61 74 65 20 73 65 61       private sea
e7f0: 6c 65 64 20 63 6c 61 73 73 20 53 74 72 69 6e 67  led class String
e800: 4c 69 73 74 20 3a 20 4c 69 73 74 3c 73 74 72 69  List : List<stri
e810: 6e 67 3e 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  ng>..        {..
e820: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
e830: 69 63 20 53 74 72 69 6e 67 4c 69 73 74 28 29 0d  ic StringList().
e840: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
e850: 20 3a 20 62 61 73 65 28 29 0d 0a 20 20 20 20 20   : base()..     
e860: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
e870: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20            // do 
e880: 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20  nothing...      
e890: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
e8a0: 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e8d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e8e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
e8f0: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
e900: 20 53 74 72 69 6e 67 4c 69 73 74 28 49 45 6e 75   StringList(IEnu
e910: 6d 65 72 61 62 6c 65 3c 73 74 72 69 6e 67 3e 20  merable<string> 
e920: 63 6f 6c 6c 65 63 74 69 6f 6e 29 0d 0a 20 20 20  collection)..   
e930: 20 20 20 20 20 20 20 20 20 20 20 20 20 3a 20 62               : b
e940: 61 73 65 28 63 6f 6c 6c 65 63 74 69 6f 6e 29 0d  ase(collection).
e950: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
e960: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e970: 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a  // do nothing...
e980: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
e990: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
e9a0: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
e9b0: 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f  ////////////////
e9e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e9f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
ea00: 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  ...        #regi
ea10: 6f 6e 20 53 74 72 69 6e 67 44 69 63 74 69 6f 6e  on StringDiction
ea20: 61 72 79 20 43 6c 61 73 73 0d 0a 20 20 20 20 20  ary Class..     
ea30: 20 20 20 70 72 69 76 61 74 65 20 73 65 61 6c 65     private seale
ea40: 64 20 63 6c 61 73 73 20 53 74 72 69 6e 67 44 69  d class StringDi
ea50: 63 74 69 6f 6e 61 72 79 20 3a 20 44 69 63 74 69  ctionary : Dicti
ea60: 6f 6e 61 72 79 3c 73 74 72 69 6e 67 2c 20 73 74  onary<string, st
ea70: 72 69 6e 67 3e 0d 0a 20 20 20 20 20 20 20 20 7b  ring>..        {
ea80: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
ea90: 62 6c 69 63 20 53 74 72 69 6e 67 44 69 63 74 69  blic StringDicti
eaa0: 6f 6e 61 72 79 28 29 0d 0a 20 20 20 20 20 20 20  onary()..       
eab0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
eac0: 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f          // do no
ead0: 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20  thing...        
eae0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
eaf0: 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
eb00: 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
eb10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eb20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eb30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eb40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eb50: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
eb60: 20 20 20 23 72 65 67 69 6f 6e 20 56 65 72 73 69     #region Versi
eb70: 6f 6e 4c 69 73 74 20 43 6c 61 73 73 0d 0a 20 20  onList Class..  
eb80: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 65        private se
eb90: 61 6c 65 64 20 63 6c 61 73 73 20 56 65 72 73 69  aled class Versi
eba0: 6f 6e 4c 69 73 74 20 3a 20 4c 69 73 74 3c 56 65  onList : List<Ve
ebb0: 72 73 69 6f 6e 3e 0d 0a 20 20 20 20 20 20 20 20  rsion>..        
ebc0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  {..            p
ebd0: 75 62 6c 69 63 20 56 65 72 73 69 6f 6e 4c 69 73  ublic VersionLis
ebe0: 74 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t()..           
ebf0: 20 20 20 20 20 3a 20 62 61 73 65 28 29 0d 0a 20       : base().. 
ec00: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
ec10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
ec20: 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20   do nothing...  
ec30: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
ec40: 20 20 20 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ec70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ec80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
ec90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
eca0: 62 6c 69 63 20 56 65 72 73 69 6f 6e 4c 69 73 74  blic VersionList
ecb0: 28 49 45 6e 75 6d 65 72 61 62 6c 65 3c 56 65 72  (IEnumerable<Ver
ecc0: 73 69 6f 6e 3e 20 63 6f 6c 6c 65 63 74 69 6f 6e  sion> collection
ecd0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
ece0: 20 20 20 3a 20 62 61 73 65 28 63 6f 6c 6c 65 63     : base(collec
ecf0: 74 69 6f 6e 29 0d 0a 20 20 20 20 20 20 20 20 20  tion)..         
ed00: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
ed10: 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68        // do noth
ed20: 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ing...          
ed30: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
ed40: 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
ed50: 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  on....        //
ed60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ed70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ed80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ed90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eda0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
edb0: 20 23 72 65 67 69 6f 6e 20 56 65 72 73 69 6f 6e   #region Version
edc0: 4d 61 70 20 43 6c 61 73 73 0d 0a 20 20 20 20 20  Map Class..     
edd0: 20 20 20 70 72 69 76 61 74 65 20 73 65 61 6c 65     private seale
ede0: 64 20 63 6c 61 73 73 20 56 65 72 73 69 6f 6e 4d  d class VersionM
edf0: 61 70 20 3a 20 44 69 63 74 69 6f 6e 61 72 79 3c  ap : Dictionary<
ee00: 73 74 72 69 6e 67 2c 20 56 65 72 73 69 6f 6e 4c  string, VersionL
ee10: 69 73 74 3e 0d 0a 20 20 20 20 20 20 20 20 7b 0d  ist>..        {.
ee20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
ee30: 6c 69 63 20 56 65 72 73 69 6f 6e 4d 61 70 28 29  lic VersionMap()
ee40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
ee50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
ee60: 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d   // do nothing..
ee70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
ee80: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
ee90: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
eea0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
eeb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67  ....        #reg
ef00: 69 6f 6e 20 50 61 63 6b 61 67 65 20 43 6c 61 73  ion Package Clas
ef10: 73 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 65 72  s..        inter
ef20: 6e 61 6c 20 73 65 61 6c 65 64 20 63 6c 61 73 73  nal sealed class
ef30: 20 50 61 63 6b 61 67 65 0d 0a 20 20 20 20 20 20   Package..      
ef40: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
ef50: 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20   #region Public 
ef60: 43 6f 6e 73 74 72 75 63 74 6f 72 73 0d 0a 20 20  Constructors..  
ef70: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
ef80: 20 50 61 63 6b 61 67 65 28 29 0d 0a 20 20 20 20   Package()..    
ef90: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
efa0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f             // do
efb0: 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20   nothing...     
efc0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
efd0: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
efe0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
eff0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f000: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
f040: 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69     #region Publi
f050: 63 20 50 72 6f 70 65 72 74 69 65 73 0d 0a 20 20  c Properties..  
f060: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
f070: 65 20 73 74 72 69 6e 67 20 70 72 6f 76 69 64 65  e string provide
f080: 72 49 6e 76 61 72 69 61 6e 74 4e 61 6d 65 3b 0d  rInvariantName;.
f090: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
f0a0: 6c 69 63 20 73 74 72 69 6e 67 20 50 72 6f 76 69  lic string Provi
f0b0: 64 65 72 49 6e 76 61 72 69 61 6e 74 4e 61 6d 65  derInvariantName
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 70 72   get { return pr
f0f0: 6f 76 69 64 65 72 49 6e 76 61 72 69 61 6e 74 4e  oviderInvariantN
f100: 61 6d 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  ame; }..        
f110: 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 70 72          set { pr
f120: 6f 76 69 64 65 72 49 6e 76 61 72 69 61 6e 74 4e  oviderInvariantN
f130: 61 6d 65 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  ame = value; }..
f140: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
f150: 0a 20 20 20 20 20 20 20 20 20 20 20 20 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 2f 2f  ////////////////
f1a0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
f1b0: 70 72 69 76 61 74 65 20 73 74 72 69 6e 67 20 66  private string f
f1c0: 61 63 74 6f 72 79 54 79 70 65 4e 61 6d 65 3b 0d  actoryTypeName;.
f1d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
f1e0: 6c 69 63 20 73 74 72 69 6e 67 20 46 61 63 74 6f  lic string Facto
f1f0: 72 79 54 79 70 65 4e 61 6d 65 0d 0a 20 20 20 20  ryTypeName..    
f200: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
f210: 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
f220: 20 72 65 74 75 72 6e 20 66 61 63 74 6f 72 79 54   return factoryT
f230: 79 70 65 4e 61 6d 65 3b 20 7d 0d 0a 20 20 20 20  ypeName; }..    
f240: 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
f250: 7b 20 66 61 63 74 6f 72 79 54 79 70 65 4e 61 6d  { factoryTypeNam
f260: 65 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20  e = value; }..  
f270: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
f280: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
f290: 2f 2f 2f 2f 2f 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 0d 0a  //////////////..
f2d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
f2e0: 69 76 61 74 65 20 41 73 73 65 6d 62 6c 79 4e 61  ivate AssemblyNa
f2f0: 6d 65 20 70 72 6f 76 69 64 65 72 41 73 73 65 6d  me providerAssem
f300: 62 6c 79 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20  blyName;..      
f310: 20 20 20 20 20 20 70 75 62 6c 69 63 20 41 73 73        public Ass
f320: 65 6d 62 6c 79 4e 61 6d 65 20 50 72 6f 76 69 64  emblyName Provid
f330: 65 72 41 73 73 65 6d 62 6c 79 4e 61 6d 65 0d 0a  erAssemblyName..
f340: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
f350: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
f360: 65 74 20 7b 20 72 65 74 75 72 6e 20 70 72 6f 76  et { return prov
f370: 69 64 65 72 41 73 73 65 6d 62 6c 79 4e 61 6d 65  iderAssemblyName
f380: 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
f390: 20 20 20 20 20 73 65 74 20 7b 20 70 72 6f 76 69       set { provi
f3a0: 64 65 72 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20  derAssemblyName 
f3b0: 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
f3c0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
f3d0: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
f3e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f3f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f400: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f410: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
f420: 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
f430: 61 74 65 20 41 73 73 65 6d 62 6c 79 4e 61 6d 65  ate AssemblyName
f440: 20 64 65 73 69 67 6e 65 72 41 73 73 65 6d 62 6c   designerAssembl
f450: 79 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20  yName;..        
f460: 20 20 20 20 70 75 62 6c 69 63 20 41 73 73 65 6d      public Assem
f470: 62 6c 79 4e 61 6d 65 20 44 65 73 69 67 6e 65 72  blyName Designer
f480: 41 73 73 65 6d 62 6c 79 4e 61 6d 65 0d 0a 20 20  AssemblyName..  
f490: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
f4a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
f4b0: 20 7b 20 72 65 74 75 72 6e 20 64 65 73 69 67 6e   { return design
f4c0: 65 72 41 73 73 65 6d 62 6c 79 4e 61 6d 65 3b 20  erAssemblyName; 
f4d0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
f4e0: 20 20 20 73 65 74 20 7b 20 64 65 73 69 67 6e 65     set { designe
f4f0: 72 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20 3d 20  rAssemblyName = 
f500: 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
f510: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
f520: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
f530: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f540: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f550: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f560: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
f570: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
f580: 65 20 62 6f 6f 6c 20 67 6c 6f 62 61 6c 41 73 73  e bool globalAss
f590: 65 6d 62 6c 79 43 61 63 68 65 3b 0d 0a 20 20 20  emblyCache;..   
f5a0: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
f5b0: 62 6f 6f 6c 20 47 6c 6f 62 61 6c 41 73 73 65 6d  bool GlobalAssem
f5c0: 62 6c 79 43 61 63 68 65 0d 0a 20 20 20 20 20 20  blyCache..      
f5d0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
f5e0: 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
f5f0: 65 74 75 72 6e 20 67 6c 6f 62 61 6c 41 73 73 65  eturn globalAsse
f600: 6d 62 6c 79 43 61 63 68 65 3b 20 7d 0d 0a 20 20  mblyCache; }..  
f610: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
f620: 74 20 7b 20 67 6c 6f 62 61 6c 41 73 73 65 6d 62  t { globalAssemb
f630: 6c 79 43 61 63 68 65 20 3d 20 76 61 6c 75 65 3b  lyCache = value;
f640: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
f650: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
f660: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
f670: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f680: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f690: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f6a0: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
f6b0: 20 20 20 20 70 72 69 76 61 74 65 20 47 75 69 64      private Guid
f6c0: 20 70 61 63 6b 61 67 65 49 64 3b 0d 0a 20 20 20   packageId;..   
f6d0: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
f6e0: 47 75 69 64 20 50 61 63 6b 61 67 65 49 64 0d 0a  Guid PackageId..
f6f0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
f700: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
f710: 65 74 20 7b 20 72 65 74 75 72 6e 20 70 61 63 6b  et { return pack
f720: 61 67 65 49 64 3b 20 7d 0d 0a 20 20 20 20 20 20  ageId; }..      
f730: 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20            set { 
f740: 70 61 63 6b 61 67 65 49 64 20 3d 20 76 61 6c 75  packageId = valu
f750: 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
f760: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
f770: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
f780: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f790: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f7a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f7b0: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
f7c0: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 47 75        private Gu
f7d0: 69 64 20 73 65 72 76 69 63 65 49 64 3b 0d 0a 20  id serviceId;.. 
f7e0: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
f7f0: 63 20 47 75 69 64 20 53 65 72 76 69 63 65 49 64  c Guid ServiceId
f800: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
f810: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
f820: 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 73 65   get { return se
f830: 72 76 69 63 65 49 64 3b 20 7d 0d 0a 20 20 20 20  rviceId; }..    
f840: 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
f850: 7b 20 73 65 72 76 69 63 65 49 64 20 3d 20 76 61  { serviceId = va
f860: 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  lue; }..        
f870: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
f880: 20 20 20 20 20 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 2f 2f 2f  ////////////////
f8b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f8c0: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
f8d0: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
f8e0: 47 75 69 64 20 64 61 74 61 53 6f 75 72 63 65 49  Guid dataSourceI
f8f0: 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d;..            
f900: 70 75 62 6c 69 63 20 47 75 69 64 20 44 61 74 61  public Guid Data
f910: 53 6f 75 72 63 65 49 64 0d 0a 20 20 20 20 20 20  SourceId..      
f920: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
f930: 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
f940: 65 74 75 72 6e 20 64 61 74 61 53 6f 75 72 63 65  eturn dataSource
f950: 49 64 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  Id; }..         
f960: 20 20 20 20 20 20 20 73 65 74 20 7b 20 64 61 74         set { dat
f970: 61 53 6f 75 72 63 65 49 64 20 3d 20 76 61 6c 75  aSourceId = valu
f980: 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
f990: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
f9a0: 20 20 20 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 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
f9f0: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 47 75        private Gu
fa00: 69 64 20 64 61 74 61 50 72 6f 76 69 64 65 72 49  id dataProviderI
fa10: 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d;..            
fa20: 70 75 62 6c 69 63 20 47 75 69 64 20 44 61 74 61  public Guid Data
fa30: 50 72 6f 76 69 64 65 72 49 64 0d 0a 20 20 20 20  ProviderId..    
fa40: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
fa50: 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
fa60: 20 72 65 74 75 72 6e 20 64 61 74 61 50 72 6f 76   return dataProv
fa70: 69 64 65 72 49 64 3b 20 7d 0d 0a 20 20 20 20 20  iderId; }..     
fa80: 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
fa90: 20 64 61 74 61 50 72 6f 76 69 64 65 72 49 64 20   dataProviderId 
faa0: 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
fab0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
fac0: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
fad0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fae0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
faf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fb00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
fb10: 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
fb20: 61 74 65 20 47 75 69 64 20 61 64 6f 4e 65 74 54  ate Guid adoNetT
fb30: 65 63 68 6e 6f 6c 6f 67 79 49 64 3b 0d 0a 20 20  echnologyId;..  
fb40: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
fb50: 20 47 75 69 64 20 41 64 6f 4e 65 74 54 65 63 68   Guid AdoNetTech
fb60: 6e 6f 6c 6f 67 79 49 64 0d 0a 20 20 20 20 20 20  nologyId..      
fb70: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
fb80: 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
fb90: 65 74 75 72 6e 20 61 64 6f 4e 65 74 54 65 63 68  eturn adoNetTech
fba0: 6e 6f 6c 6f 67 79 49 64 3b 20 7d 0d 0a 20 20 20  nologyId; }..   
fbb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
fbc0: 20 7b 20 61 64 6f 4e 65 74 54 65 63 68 6e 6f 6c   { adoNetTechnol
fbd0: 6f 67 79 49 64 20 3d 20 76 61 6c 75 65 3b 20 7d  ogyId = value; }
fbe0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
fbf0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e  .            #en
fc00: 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20 20 20 20  dregion..       
fc10: 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64   }..        #end
fc20: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
fc30: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
fc40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fc50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fc60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fc70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
fc80: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 43 6f 6e       #region Con
fc90: 66 69 67 75 72 61 74 69 6f 6e 20 43 6c 61 73 73  figuration Class
fca0: 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
fcb0: 65 20 73 65 61 6c 65 64 20 63 6c 61 73 73 20 43  e sealed class C
fcc0: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 0d 0a 20 20  onfiguration..  
fcd0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
fce0: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72 69       #region Pri
fcf0: 76 61 74 65 20 43 6f 6e 73 74 61 6e 74 73 0d 0a  vate Constants..
fd00: 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
fd10: 61 74 65 20 63 6f 6e 73 74 20 63 68 61 72 20 53  ate const char S
fd20: 77 69 74 63 68 20 3d 20 27 2d 27 3b 0d 0a 20 20  witch = '-';..  
fd30: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
fd40: 65 20 63 6f 6e 73 74 20 63 68 61 72 20 41 6c 74  e const char Alt
fd50: 53 77 69 74 63 68 20 3d 20 27 2f 27 3b 0d 0a 0d  Switch = '/';...
fd60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 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: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
fdc0: 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 72  private static r
fdd0: 65 61 64 6f 6e 6c 79 20 63 68 61 72 5b 5d 20 53  eadonly char[] S
fde0: 77 69 74 63 68 43 68 61 72 73 20 3d 20 7b 0d 0a  witchChars = {..
fdf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fe00: 53 77 69 74 63 68 2c 20 41 6c 74 53 77 69 74 63  Switch, AltSwitc
fe10: 68 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  h..            }
fe20: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
fe30: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
fe40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fe50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fe60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fe70: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
fe80: 20 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73      private cons
fe90: 74 20 73 74 72 69 6e 67 20 49 6e 76 61 72 69 61  t string Invaria
fea0: 6e 74 4e 61 6d 65 20 3d 20 22 53 79 73 74 65 6d  ntName = "System
feb0: 2e 44 61 74 61 2e 53 51 4c 69 74 65 22 3b 0d 0a  .Data.SQLite";..
fec0: 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
fed0: 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67  ate const string
fee0: 20 45 66 36 49 6e 76 61 72 69 61 6e 74 4e 61 6d   Ef6InvariantNam
fef0: 65 20 3d 20 22 53 79 73 74 65 6d 2e 44 61 74 61  e = "System.Data
ff00: 2e 53 51 4c 69 74 65 2e 45 46 36 22 3b 0d 0a 0d  .SQLite.EF6";...
ff10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
ff20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ff30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ff40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ff50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ff60: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
ff70: 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74  private const st
ff80: 72 69 6e 67 20 46 61 63 74 6f 72 79 54 79 70 65  ring FactoryType
ff90: 4e 61 6d 65 20 3d 0d 0a 20 20 20 20 20 20 20 20  Name =..        
ffa0: 20 20 20 20 20 20 20 20 22 53 79 73 74 65 6d 2e          "System.
ffb0: 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69  Data.SQLite.SQLi
ffc0: 74 65 46 61 63 74 6f 72 79 22 3b 0d 0a 0d 0a 20  teFactory";.... 
ffd0: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
ffe0: 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20  te const string 
fff0: 45 66 36 46 61 63 74 6f 72 79 54 79 70 65 4e 61  Ef6FactoryTypeNa
10000 6d 65 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20  me =..          
10010 20 20 20 20 20 20 22 53 79 73 74 65 6d 2e 44 61        "System.Da
10020 74 61 2e 53 51 4c 69 74 65 2e 45 46 36 2e 53 51  ta.SQLite.EF6.SQ
10030 4c 69 74 65 50 72 6f 76 69 64 65 72 46 61 63 74  LiteProviderFact
10040 6f 72 79 22 3b 0d 0a 20 20 20 20 20 20 20 20 20  ory";..         
10050 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
10060 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
10070 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10080 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10090 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
100a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
100b0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
100c0 23 72 65 67 69 6f 6e 20 50 72 69 76 61 74 65 20  #region Private 
100d0 53 74 61 74 69 63 20 44 61 74 61 0d 0a 20 20 20  Static Data..   
100e0 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
100f0 20 73 74 61 74 69 63 20 41 73 73 65 6d 62 6c 79   static Assembly
10100 20 73 79 73 74 65 6d 45 66 36 41 73 73 65 6d 62   systemEf6Assemb
10110 6c 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ly;..           
10120 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
10130 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
10140 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10150 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10160 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10170 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
10180 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72  ..            #r
10190 65 67 69 6f 6e 20 50 72 69 76 61 74 65 20 44 61  egion Private Da
101a0 74 61 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ta..            
101b0 70 72 69 76 61 74 65 20 41 73 73 65 6d 62 6c 79  private Assembly
101c0 4e 61 6d 65 20 63 6f 72 65 41 73 73 65 6d 62 6c  Name coreAssembl
101d0 79 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20  yName;..        
101e0 20 20 20 20 70 72 69 76 61 74 65 20 41 73 73 65      private Asse
101f0 6d 62 6c 79 4e 61 6d 65 20 6c 69 6e 71 41 73 73  mblyName linqAss
10200 65 6d 62 6c 79 4e 61 6d 65 3b 0d 0a 20 20 20 20  emblyName;..    
10210 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
10220 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20 65 66 36  AssemblyName ef6
10230 41 73 73 65 6d 62 6c 79 4e 61 6d 65 3b 0d 0a 20  AssemblyName;.. 
10240 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
10250 74 65 20 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20  te AssemblyName 
10260 64 65 73 69 67 6e 65 72 41 73 73 65 6d 62 6c 79  designerAssembly
10270 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  Name;..         
10280 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
10290 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
102a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
102b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
102c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
102d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
102e0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
102f0 23 72 65 67 69 6f 6e 20 50 72 69 76 61 74 65 20  #region Private 
10300 43 6f 6e 73 74 72 75 63 74 6f 72 73 0d 0a 20 20  Constructors..  
10310 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
10320 65 20 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 28  e Configuration(
10330 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10340 20 20 41 73 73 65 6d 62 6c 79 20 61 73 73 65 6d    Assembly assem
10350 62 6c 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  bly,..          
10360 20 20 20 20 20 20 73 74 72 69 6e 67 20 6c 6f 67        string log
10370 46 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  FileName,..     
10380 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
10390 67 20 64 69 72 65 63 74 6f 72 79 2c 0d 0a 20 20  g directory,..  
103a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
103b0 72 69 6e 67 20 63 6f 72 65 46 69 6c 65 4e 61 6d  ring coreFileNam
103c0 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
103d0 20 20 20 20 73 74 72 69 6e 67 20 6c 69 6e 71 46      string linqF
103e0 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  ileName,..      
103f0 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
10400 20 65 66 36 46 69 6c 65 4e 61 6d 65 2c 0d 0a 20   ef6FileName,.. 
10410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
10420 74 72 69 6e 67 20 64 65 73 69 67 6e 65 72 46 69  tring designerFi
10430 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  leName,..       
10440 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
10450 72 65 67 69 73 74 72 79 56 65 72 73 69 6f 6e 2c  registryVersion,
10460 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10470 20 20 73 74 72 69 6e 67 20 63 6f 6e 66 69 67 56    string configV
10480 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20  ersion,..       
10490 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
104a0 76 73 56 65 72 73 69 6f 6e 53 75 66 66 69 78 2c  vsVersionSuffix,
104b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
104c0 20 20 73 74 72 69 6e 67 20 64 65 62 75 67 46 6f    string debugFo
104d0 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  rmat,..         
104e0 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 74 72         string tr
104f0 61 63 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20  aceFormat,..    
10500 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 73 74              Inst
10510 61 6c 6c 46 6c 61 67 73 20 69 6e 73 74 61 6c 6c  allFlags install
10520 46 6c 61 67 73 2c 0d 0a 20 20 20 20 20 20 20 20  Flags,..        
10530 20 20 20 20 20 20 20 20 50 72 6f 76 69 64 65 72          Provider
10540 46 6c 61 67 73 20 70 72 6f 76 69 64 65 72 46 6c  Flags providerFl
10550 61 67 73 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ags,..          
10560 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72        TracePrior
10570 69 74 79 20 64 65 62 75 67 50 72 69 6f 72 69 74  ity debugPriorit
10580 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
10590 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74      TracePriorit
105a0 79 20 74 72 61 63 65 50 72 69 6f 72 69 74 79 2c  y tracePriority,
105b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
105c0 20 20 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d    bool perUser,.
105d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
105e0 20 62 6f 6f 6c 20 69 6e 73 74 61 6c 6c 2c 0d 0a   bool install,..
105f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10600 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20  bool wow64,..   
10610 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
10620 6c 20 6e 6f 52 75 6e 74 69 6d 65 56 65 72 73 69  l noRuntimeVersi
10630 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on,..           
10640 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 44 65 73 6b       bool noDesk
10650 74 6f 70 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  top,..          
10660 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 43 6f 6d        bool noCom
10670 70 61 63 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  pact,..         
10680 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 4e 65         bool noNe
10690 74 46 78 32 30 2c 0d 0a 20 20 20 20 20 20 20 20  tFx20,..        
106a0 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 4e          bool noN
106b0 65 74 46 78 33 35 2c 0d 0a 20 20 20 20 20 20 20  etFx35,..       
106c0 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f           bool no
106d0 4e 65 74 46 78 34 30 2c 0d 0a 20 20 20 20 20 20  NetFx40,..      
106e0 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e            bool n
106f0 6f 4e 65 74 46 78 34 35 2c 0d 0a 20 20 20 20 20  oNetFx45,..     
10700 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
10710 6e 6f 4e 65 74 46 78 34 35 31 2c 0d 0a 20 20 20  noNetFx451,..   
10720 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
10730 6c 20 6e 6f 4e 65 74 46 78 34 35 32 2c 0d 0a 20  l noNetFx452,.. 
10740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
10750 6f 6f 6c 20 6e 6f 4e 65 74 46 78 34 36 2c 0d 0a  ool noNetFx46,..
10760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10770 62 6f 6f 6c 20 6e 6f 4e 65 74 46 78 34 36 31 2c  bool noNetFx461,
10780 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10790 20 20 62 6f 6f 6c 20 6e 6f 4e 65 74 46 78 34 36    bool noNetFx46
107a0 32 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  2,..            
107b0 20 20 20 20 62 6f 6f 6c 20 6e 6f 56 73 32 30 30      bool noVs200
107c0 35 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  5,..            
107d0 20 20 20 20 62 6f 6f 6c 20 6e 6f 56 73 32 30 30      bool noVs200
107e0 38 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  8,..            
107f0 20 20 20 20 62 6f 6f 6c 20 6e 6f 56 73 32 30 31      bool noVs201
10800 30 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  0,..            
10810 20 20 20 20 62 6f 6f 6c 20 6e 6f 56 73 32 30 31      bool noVs201
10820 32 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  2,..            
10830 20 20 20 20 62 6f 6f 6c 20 6e 6f 56 73 32 30 31      bool noVs201
10840 33 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  3,..            
10850 20 20 20 20 62 6f 6f 6c 20 6e 6f 56 73 32 30 31      bool noVs201
10860 35 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  5,..            
10870 20 20 20 20 62 6f 6f 6c 20 6e 6f 54 72 61 63 65      bool noTrace
10880 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
10890 20 20 20 62 6f 6f 6c 20 6e 6f 43 6f 6e 73 6f 6c     bool noConsol
108a0 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
108b0 20 20 20 20 62 6f 6f 6c 20 6e 6f 4c 6f 67 2c 0d      bool noLog,.
108c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
108d0 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73   bool throwOnMis
108e0 73 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20 20  sing,..         
108f0 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74         bool what
10900 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If,..           
10910 20 20 20 20 20 62 6f 6f 6c 20 64 65 62 75 67 2c       bool debug,
10920 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10930 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d    bool verbose,.
10940 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10950 20 62 6f 6f 6c 20 63 6f 6e 66 69 72 6d 0d 0a 20   bool confirm.. 
10960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29                 )
10970 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
10980 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10990 20 74 68 69 73 2e 61 73 73 65 6d 62 6c 79 20 3d   this.assembly =
109a0 20 61 73 73 65 6d 62 6c 79 3b 0d 0a 20 20 20 20   assembly;..    
109b0 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
109c0 2e 6c 6f 67 46 69 6c 65 4e 61 6d 65 20 3d 20 6c  .logFileName = l
109d0 6f 67 46 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20  ogFileName;..   
109e0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
109f0 73 2e 64 69 72 65 63 74 6f 72 79 20 3d 20 64 69  s.directory = di
10a00 72 65 63 74 6f 72 79 3b 0d 0a 20 20 20 20 20 20  rectory;..      
10a10 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 63            this.c
10a20 6f 72 65 46 69 6c 65 4e 61 6d 65 20 3d 20 63 6f  oreFileName = co
10a30 72 65 46 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20  reFileName;..   
10a40 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
10a50 73 2e 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 20 3d  s.linqFileName =
10a60 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 3b 0d 0a   linqFileName;..
10a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10a80 74 68 69 73 2e 65 66 36 46 69 6c 65 4e 61 6d 65  this.ef6FileName
10a90 20 3d 20 65 66 36 46 69 6c 65 4e 61 6d 65 3b 0d   = ef6FileName;.
10aa0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10ab0 20 74 68 69 73 2e 64 65 73 69 67 6e 65 72 46 69   this.designerFi
10ac0 6c 65 4e 61 6d 65 20 3d 20 64 65 73 69 67 6e 65  leName = designe
10ad0 72 46 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20 20  rFileName;..    
10ae0 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
10af0 2e 72 65 67 69 73 74 72 79 56 65 72 73 69 6f 6e  .registryVersion
10b00 20 3d 20 72 65 67 69 73 74 72 79 56 65 72 73 69   = registryVersi
10b10 6f 6e 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on;..           
10b20 20 20 20 20 20 74 68 69 73 2e 63 6f 6e 66 69 67       this.config
10b30 56 65 72 73 69 6f 6e 20 3d 20 63 6f 6e 66 69 67  Version = config
10b40 56 65 72 73 69 6f 6e 3b 0d 0a 20 20 20 20 20 20  Version;..      
10b50 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 76            this.v
10b60 73 56 65 72 73 69 6f 6e 53 75 66 66 69 78 20 3d  sVersionSuffix =
10b70 20 76 73 56 65 72 73 69 6f 6e 53 75 66 66 69 78   vsVersionSuffix
10b80 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
10b90 20 20 20 74 68 69 73 2e 64 65 62 75 67 46 6f 72     this.debugFor
10ba0 6d 61 74 20 3d 20 64 65 62 75 67 46 6f 72 6d 61  mat = debugForma
10bb0 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t;..            
10bc0 20 20 20 20 74 68 69 73 2e 74 72 61 63 65 46 6f      this.traceFo
10bd0 72 6d 61 74 20 3d 20 74 72 61 63 65 46 6f 72 6d  rmat = traceForm
10be0 61 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at;..           
10bf0 20 20 20 20 20 74 68 69 73 2e 69 6e 73 74 61 6c       this.instal
10c00 6c 46 6c 61 67 73 20 3d 20 69 6e 73 74 61 6c 6c  lFlags = install
10c10 46 6c 61 67 73 3b 0d 0a 20 20 20 20 20 20 20 20  Flags;..        
10c20 20 20 20 20 20 20 20 20 74 68 69 73 2e 70 72 6f          this.pro
10c30 76 69 64 65 72 46 6c 61 67 73 20 3d 20 70 72 6f  viderFlags = pro
10c40 76 69 64 65 72 46 6c 61 67 73 3b 0d 0a 20 20 20  viderFlags;..   
10c50 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
10c60 73 2e 64 65 62 75 67 50 72 69 6f 72 69 74 79 20  s.debugPriority 
10c70 3d 20 64 65 62 75 67 50 72 69 6f 72 69 74 79 3b  = debugPriority;
10c80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10c90 20 20 74 68 69 73 2e 74 72 61 63 65 50 72 69 6f    this.tracePrio
10ca0 72 69 74 79 20 3d 20 74 72 61 63 65 50 72 69 6f  rity = tracePrio
10cb0 72 69 74 79 3b 0d 0a 20 20 20 20 20 20 20 20 20  rity;..         
10cc0 20 20 20 20 20 20 20 74 68 69 73 2e 70 65 72 55         this.perU
10cd0 73 65 72 20 3d 20 70 65 72 55 73 65 72 3b 0d 0a  ser = perUser;..
10ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10cf0 74 68 69 73 2e 69 6e 73 74 61 6c 6c 20 3d 20 69  this.install = i
10d00 6e 73 74 61 6c 6c 3b 0d 0a 20 20 20 20 20 20 20  nstall;..       
10d10 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 77 6f           this.wo
10d20 77 36 34 20 3d 20 77 6f 77 36 34 3b 0d 0a 20 20  w64 = wow64;..  
10d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
10d40 69 73 2e 6e 6f 52 75 6e 74 69 6d 65 56 65 72 73  is.noRuntimeVers
10d50 69 6f 6e 20 3d 20 6e 6f 52 75 6e 74 69 6d 65 56  ion = noRuntimeV
10d60 65 72 73 69 6f 6e 3b 0d 0a 20 20 20 20 20 20 20  ersion;..       
10d70 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 6e 6f           this.no
10d80 44 65 73 6b 74 6f 70 20 3d 20 6e 6f 44 65 73 6b  Desktop = noDesk
10d90 74 6f 70 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  top;..          
10da0 20 20 20 20 20 20 74 68 69 73 2e 6e 6f 43 6f 6d        this.noCom
10db0 70 61 63 74 20 3d 20 6e 6f 43 6f 6d 70 61 63 74  pact = noCompact
10dc0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
10dd0 20 20 20 74 68 69 73 2e 6e 6f 4e 65 74 46 78 32     this.noNetFx2
10de0 30 20 3d 20 6e 6f 4e 65 74 46 78 32 30 3b 0d 0a  0 = noNetFx20;..
10df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10e00 74 68 69 73 2e 6e 6f 4e 65 74 46 78 33 35 20 3d  this.noNetFx35 =
10e10 20 6e 6f 4e 65 74 46 78 33 35 3b 0d 0a 20 20 20   noNetFx35;..   
10e20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
10e30 73 2e 6e 6f 4e 65 74 46 78 34 30 20 3d 20 6e 6f  s.noNetFx40 = no
10e40 4e 65 74 46 78 34 30 3b 0d 0a 20 20 20 20 20 20  NetFx40;..      
10e50 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 6e            this.n
10e60 6f 4e 65 74 46 78 34 35 20 3d 20 6e 6f 4e 65 74  oNetFx45 = noNet
10e70 46 78 34 35 3b 0d 0a 20 20 20 20 20 20 20 20 20  Fx45;..         
10e80 20 20 20 20 20 20 20 74 68 69 73 2e 6e 6f 4e 65         this.noNe
10e90 74 46 78 34 35 31 20 3d 20 6e 6f 4e 65 74 46 78  tFx451 = noNetFx
10ea0 34 35 31 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  451;..          
10eb0 20 20 20 20 20 20 74 68 69 73 2e 6e 6f 4e 65 74        this.noNet
10ec0 46 78 34 35 32 20 3d 20 6e 6f 4e 65 74 46 78 34  Fx452 = noNetFx4
10ed0 35 32 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  52;..           
10ee0 20 20 20 20 20 74 68 69 73 2e 6e 6f 4e 65 74 46       this.noNetF
10ef0 78 34 36 20 3d 20 6e 6f 4e 65 74 46 78 34 36 3b  x46 = noNetFx46;
10f00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10f10 20 20 74 68 69 73 2e 6e 6f 4e 65 74 46 78 34 36    this.noNetFx46
10f20 31 20 3d 20 6e 6f 4e 65 74 46 78 34 36 31 3b 0d  1 = noNetFx461;.
10f30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10f40 20 74 68 69 73 2e 6e 6f 4e 65 74 46 78 34 36 32   this.noNetFx462
10f50 20 3d 20 6e 6f 4e 65 74 46 78 34 36 32 3b 0d 0a   = noNetFx462;..
10f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10f70 74 68 69 73 2e 6e 6f 56 73 32 30 30 35 20 3d 20  this.noVs2005 = 
10f80 6e 6f 56 73 32 30 30 35 3b 0d 0a 20 20 20 20 20  noVs2005;..     
10f90 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
10fa0 6e 6f 56 73 32 30 30 38 20 3d 20 6e 6f 56 73 32  noVs2008 = noVs2
10fb0 30 30 38 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  008;..          
10fc0 20 20 20 20 20 20 74 68 69 73 2e 6e 6f 56 73 32        this.noVs2
10fd0 30 31 30 20 3d 20 6e 6f 56 73 32 30 31 30 3b 0d  010 = noVs2010;.
10fe0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10ff0 20 74 68 69 73 2e 6e 6f 56 73 32 30 31 32 20 3d   this.noVs2012 =
11000 20 6e 6f 56 73 32 30 31 32 3b 0d 0a 20 20 20 20   noVs2012;..    
11010 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
11020 2e 6e 6f 56 73 32 30 31 33 20 3d 20 6e 6f 56 73  .noVs2013 = noVs
11030 32 30 31 33 3b 0d 0a 20 20 20 20 20 20 20 20 20  2013;..         
11040 20 20 20 20 20 20 20 74 68 69 73 2e 6e 6f 56 73         this.noVs
11050 32 30 31 35 20 3d 20 6e 6f 56 73 32 30 31 35 3b  2015 = noVs2015;
11060 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11070 20 20 74 68 69 73 2e 6e 6f 54 72 61 63 65 20 3d    this.noTrace =
11080 20 6e 6f 54 72 61 63 65 3b 0d 0a 20 20 20 20 20   noTrace;..     
11090 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
110a0 6e 6f 43 6f 6e 73 6f 6c 65 20 3d 20 6e 6f 43 6f  noConsole = noCo
110b0 6e 73 6f 6c 65 3b 0d 0a 20 20 20 20 20 20 20 20  nsole;..        
110c0 20 20 20 20 20 20 20 20 74 68 69 73 2e 6e 6f 4c          this.noL
110d0 6f 67 20 3d 20 6e 6f 4c 6f 67 3b 0d 0a 20 20 20  og = noLog;..   
110e0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
110f0 73 2e 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67  s.throwOnMissing
11100 20 3d 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e   = throwOnMissin
11110 67 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g;..            
11120 20 20 20 20 74 68 69 73 2e 77 68 61 74 49 66 20      this.whatIf 
11130 3d 20 77 68 61 74 49 66 3b 0d 0a 20 20 20 20 20  = whatIf;..     
11140 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
11150 64 65 62 75 67 20 3d 20 64 65 62 75 67 3b 0d 0a  debug = debug;..
11160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11170 74 68 69 73 2e 76 65 72 62 6f 73 65 20 3d 20 76  this.verbose = v
11180 65 72 62 6f 73 65 3b 0d 0a 20 20 20 20 20 20 20  erbose;..       
11190 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 63 6f           this.co
111a0 6e 66 69 72 6d 20 3d 20 63 6f 6e 66 69 72 6d 3b  nfirm = confirm;
111b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
111c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e  .            #en
111d0 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
111e0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
111f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11200 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11210 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11220 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
11230 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f            #regio
11240 6e 20 50 72 69 76 61 74 65 20 53 74 61 74 69 63  n Private Static
11250 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20   Methods..      
11260 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
11270 61 74 69 63 20 76 6f 69 64 20 47 65 74 44 65 66  atic void GetDef
11280 61 75 6c 74 46 69 6c 65 4e 61 6d 65 73 28 0d 0a  aultFileNames(..
11290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
112a0 72 65 66 20 73 74 72 69 6e 67 20 64 69 72 65 63  ref string direc
112b0 74 6f 72 79 2c 0d 0a 20 20 20 20 20 20 20 20 20  tory,..         
112c0 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e         ref strin
112d0 67 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65 2c 0d  g coreFileName,.
112e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
112f0 20 72 65 66 20 73 74 72 69 6e 67 20 6c 69 6e 71   ref string linq
11300 46 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  FileName,..     
11310 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73             ref s
11320 74 72 69 6e 67 20 65 66 36 46 69 6c 65 4e 61 6d  tring ef6FileNam
11330 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
11340 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 64      ref string d
11350 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 0d  esignerFileName.
11360 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11370 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
11380 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
11390 20 20 20 69 66 20 28 74 68 69 73 41 73 73 65 6d     if (thisAssem
113a0 62 6c 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  bly == null)..  
113b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
113c0 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20    return;....   
113d0 20 20 20 20 20 20 20 20 20 20 20 20 20 64 69 72               dir
113e0 65 63 74 6f 72 79 20 3d 20 50 61 74 68 2e 47 65  ectory = Path.Ge
113f0 74 44 69 72 65 63 74 6f 72 79 4e 61 6d 65 28 74  tDirectoryName(t
11400 68 69 73 41 73 73 65 6d 62 6c 79 2e 4c 6f 63 61  hisAssembly.Loca
11410 74 69 6f 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  tion);....      
11420 20 20 20 20 20 20 20 20 20 20 69 66 20 28 53 74            if (St
11430 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70  ring.IsNullOrEmp
11440 74 79 28 64 69 72 65 63 74 6f 72 79 29 29 0d 0a  ty(directory))..
11450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11460 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20      return;.... 
11470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
11480 6f 72 65 46 69 6c 65 4e 61 6d 65 20 3d 20 50 61  oreFileName = Pa
11490 74 68 2e 43 6f 6d 62 69 6e 65 28 64 69 72 65 63  th.Combine(direc
114a0 74 6f 72 79 2c 0d 0a 20 20 20 20 20 20 20 20 20  tory,..         
114b0 20 20 20 20 20 20 20 20 20 20 20 49 6e 73 74 61             Insta
114c0 6c 6c 65 72 2e 43 6f 72 65 46 69 6c 65 4e 61 6d  ller.CoreFileNam
114d0 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
114e0 20 20 20 20 20 20 20 6c 69 6e 71 46 69 6c 65 4e         linqFileN
114f0 61 6d 65 20 3d 20 50 61 74 68 2e 43 6f 6d 62 69  ame = Path.Combi
11500 6e 65 28 64 69 72 65 63 74 6f 72 79 2c 0d 0a 20  ne(directory,.. 
11510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11520 20 20 20 49 6e 73 74 61 6c 6c 65 72 2e 4c 69 6e     Installer.Lin
11530 71 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20  qFileName);.... 
11540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
11550 66 36 46 69 6c 65 4e 61 6d 65 20 3d 20 50 61 74  f6FileName = Pat
11560 68 2e 43 6f 6d 62 69 6e 65 28 64 69 72 65 63 74  h.Combine(direct
11570 6f 72 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ory,..          
11580 20 20 20 20 20 20 20 20 20 20 49 6e 73 74 61 6c            Instal
11590 6c 65 72 2e 45 66 36 46 69 6c 65 4e 61 6d 65 29  ler.Ef6FileName)
115a0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
115b0 20 20 20 20 20 64 65 73 69 67 6e 65 72 46 69 6c       designerFil
115c0 65 4e 61 6d 65 20 3d 20 50 61 74 68 2e 43 6f 6d  eName = Path.Com
115d0 62 69 6e 65 28 64 69 72 65 63 74 6f 72 79 2c 0d  bine(directory,.
115e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
115f0 20 20 20 20 20 49 6e 73 74 61 6c 6c 65 72 2e 44       Installer.D
11600 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 29  esignerFileName)
11610 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
11620 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
11630 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11640 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11650 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11660 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11670 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
11680 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
11690 63 20 62 6f 6f 6c 20 43 68 65 63 6b 4f 70 74 69  c bool CheckOpti
116a0 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on(..           
116b0 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20       ref string 
116c0 61 72 67 0d 0a 20 20 20 20 20 20 20 20 20 20 20  arg..           
116d0 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
116e0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
116f0 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 72 65         string re
11700 73 75 6c 74 20 3d 20 61 72 67 3b 0d 0a 0d 0a 20  sult = arg;.... 
11710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
11720 66 20 28 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c  f (!String.IsNul
11730 6c 4f 72 45 6d 70 74 79 28 72 65 73 75 6c 74 29  lOrEmpty(result)
11740 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
11750 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
11760 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
11770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11780 20 20 2f 2f 20 4e 4f 54 45 3a 20 52 65 6d 6f 76    // NOTE: Remov
11790 65 20 61 6c 6c 20 6c 65 61 64 69 6e 67 20 73 77  e all leading sw
117a0 69 74 63 68 20 63 68 61 72 73 2e 0d 0a 20 20 20  itch chars...   
117b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
117c0 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
117d0 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 20           result 
117e0 3d 20 72 65 73 75 6c 74 2e 54 72 69 6d 53 74 61  = result.TrimSta
117f0 72 74 28 53 77 69 74 63 68 43 68 61 72 73 29 3b  rt(SwitchChars);
11800 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
11810 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
11820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11830 2f 2f 20 4e 4f 54 45 3a 20 48 6f 77 20 6d 61 6e  // NOTE: How man
11840 79 20 63 68 61 72 73 20 77 65 72 65 20 72 65 6d  y chars were rem
11850 6f 76 65 64 3f 0d 0a 20 20 20 20 20 20 20 20 20  oved?..         
11860 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
11870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11880 20 20 20 69 6e 74 20 63 6f 75 6e 74 20 3d 20 61     int count = a
11890 72 67 2e 4c 65 6e 67 74 68 20 2d 20 72 65 73 75  rg.Length - resu
118a0 6c 74 2e 4c 65 6e 67 74 68 3b 0d 0a 0d 0a 20 20  lt.Length;....  
118b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
118c0 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
118d0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
118e0 45 3a 20 57 61 73 20 74 68 65 72 65 20 61 74 20  E: Was there at 
118f0 6c 65 61 73 74 20 6f 6e 65 3f 0d 0a 20 20 20 20  least one?..    
11900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11910 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
11920 20 20 20 20 20 20 20 20 69 66 20 28 63 6f 75 6e          if (coun
11930 74 20 3e 20 30 29 0d 0a 20 20 20 20 20 20 20 20  t > 0)..        
11940 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
11950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11960 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
11970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11980 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 4f 6b 2c 20     // NOTE: Ok, 
11990 72 65 70 6c 61 63 65 20 74 68 65 69 72 20 6f 72  replace their or
119a0 69 67 69 6e 61 6c 0d 0a 20 20 20 20 20 20 20 20  iginal..        
119b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
119c0 2f 2f 20 20 20 20 20 20 20 61 72 67 75 6d 65 6e  //       argumen
119d0 74 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t...            
119e0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
119f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11a00 20 20 20 20 20 20 20 20 61 72 67 20 3d 20 72 65          arg = re
11a10 73 75 6c 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  sult;....       
11a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11a30 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
11a40 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
11a50 4e 4f 54 45 3a 20 59 65 73 2c 20 74 68 69 73 20  NOTE: Yes, this 
11a60 69 73 20 61 20 73 77 69 74 63 68 2e 0d 0a 20 20  is a switch...  
11a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11a80 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
11a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11aa0 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a    return true;..
11ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11ac0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
11ad0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
11ae0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
11af0 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
11b00 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
11b10 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
11b20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11b30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11b40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11b50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
11b60 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
11b70 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 4d  te static bool M
11b80 61 74 63 68 4f 70 74 69 6f 6e 28 0d 0a 20 20 20  atchOption(..   
11b90 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
11ba0 69 6e 67 20 61 72 67 2c 0d 0a 20 20 20 20 20 20  ing arg,..      
11bb0 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
11bc0 20 6f 70 74 69 6f 6e 0d 0a 20 20 20 20 20 20 20   option..       
11bd0 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
11be0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
11bf0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28             if ((
11c00 61 72 67 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20  arg == null) || 
11c10 28 6f 70 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29  (option == null)
11c20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
11c30 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
11c40 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lse;....        
11c50 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53          return S
11c60 74 72 69 6e 67 2e 43 6f 6d 70 61 72 65 28 61 72  tring.Compare(ar
11c70 67 2c 20 30 2c 20 6f 70 74 69 6f 6e 2c 20 30 2c  g, 0, option, 0,
11c80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11c90 20 20 20 20 20 20 61 72 67 2e 4c 65 6e 67 74 68        arg.Length
11ca0 2c 20 53 74 72 69 6e 67 43 6f 6d 70 61 72 69 73  , StringComparis
11cb0 6f 6e 2e 4f 72 64 69 6e 61 6c 49 67 6e 6f 72 65  on.OrdinalIgnore
11cc0 43 61 73 65 29 20 3d 3d 20 30 3b 0d 0a 20 20 20  Case) == 0;..   
11cd0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
11ce0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
11cf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11d00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11d10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11d20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
11d30 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
11d40 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c  vate static bool
11d50 3f 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 0d  ? ParseBoolean(.
11d60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11d70 20 73 74 72 69 6e 67 20 74 65 78 74 0d 0a 20 20   string text..  
11d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d                ).
11d90 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
11da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11db0 69 66 20 28 21 53 74 72 69 6e 67 2e 49 73 4e 75  if (!String.IsNu
11dc0 6c 6c 4f 72 45 6d 70 74 79 28 74 65 78 74 29 29  llOrEmpty(text))
11dd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11de0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
11df0 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 61           bool va
11e00 6c 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lue;....        
11e10 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
11e20 62 6f 6f 6c 2e 54 72 79 50 61 72 73 65 28 74 65  bool.TryParse(te
11e30 78 74 2c 20 6f 75 74 20 76 61 6c 75 65 29 29 0d  xt, out value)).
11e40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11e50 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
11e60 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  value;..        
11e70 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
11e80 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
11e90 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20  urn null;..     
11ea0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
11eb0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
11ec0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11ed0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11ee0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11ef0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
11f00 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
11f10 74 65 20 73 74 61 74 69 63 20 6f 62 6a 65 63 74  te static object
11f20 20 50 61 72 73 65 45 6e 75 6d 28 0d 0a 20 20 20   ParseEnum(..   
11f30 20 20 20 20 20 20 20 20 20 20 20 20 20 54 79 70               Typ
11f40 65 20 65 6e 75 6d 54 79 70 65 2c 0d 0a 20 20 20  e enumType,..   
11f50 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
11f60 69 6e 67 20 74 65 78 74 2c 0d 0a 20 20 20 20 20  ing text,..     
11f70 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
11f80 6e 6f 43 61 73 65 0d 0a 20 20 20 20 20 20 20 20  noCase..        
11f90 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
11fa0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
11fb0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28 65            if ((e
11fc0 6e 75 6d 54 79 70 65 20 3d 3d 20 6e 75 6c 6c 29  numType == null)
11fd0 20 7c 7c 20 21 65 6e 75 6d 54 79 70 65 2e 49 73   || !enumType.Is
11fe0 45 6e 75 6d 29 0d 0a 20 20 20 20 20 20 20 20 20  Enum)..         
11ff0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
12000 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20  n null;....     
12010 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
12020 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45  String.IsNullOrE
12030 6d 70 74 79 28 74 65 78 74 29 29 0d 0a 20 20 20  mpty(text))..   
12040 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
12050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12060 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20      try..       
12070 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
12080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12090 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 45          return E
120a0 6e 75 6d 2e 50 61 72 73 65 28 65 6e 75 6d 54 79  num.Parse(enumTy
120b0 70 65 2c 20 74 65 78 74 2c 20 6e 6f 43 61 73 65  pe, text, noCase
120c0 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
120d0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
120e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
120f0 61 74 63 68 0d 0a 20 20 20 20 20 20 20 20 20 20  atch..          
12100 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
12110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12120 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69       // do nothi
12130 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ng...           
12140 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
12150 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
12160 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12170 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 20   return null;.. 
12180 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
12190 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
121a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
121b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
121c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
121d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
121e0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
121f0 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f  rivate static bo
12200 6f 6c 20 49 73 53 79 73 74 65 6d 45 66 36 41 73  ol IsSystemEf6As
12210 73 65 6d 62 6c 79 47 6c 6f 62 61 6c 28 29 0d 0a  semblyGlobal()..
12220 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
12230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
12240 66 20 28 73 79 73 74 65 6d 45 66 36 41 73 73 65  f (systemEf6Asse
12250 6d 62 6c 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  mbly == null).. 
12260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12270 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
12280 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
12290 20 20 20 20 72 65 74 75 72 6e 20 73 79 73 74 65      return syste
122a0 6d 45 66 36 41 73 73 65 6d 62 6c 79 2e 47 6c 6f  mEf6Assembly.Glo
122b0 62 61 6c 41 73 73 65 6d 62 6c 79 43 61 63 68 65  balAssemblyCache
122c0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
122d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65  ..            #e
122e0 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
122f0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
12300 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12310 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12320 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12330 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
12340 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69             #regi
12350 6f 6e 20 50 75 62 6c 69 63 20 53 74 61 74 69 63  on Public Static
12360 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20   Methods..      
12370 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61        public sta
12380 74 69 63 20 76 6f 69 64 20 42 72 65 61 6b 49 6e  tic void BreakIn
12390 74 6f 44 65 62 75 67 67 65 72 28 29 0d 0a 20 20  toDebugger()..  
123a0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
123b0 20 20 20 20 20 20 20 20 20 20 20 20 20 43 6f 6e               Con
123c0 73 6f 6c 65 2e 57 72 69 74 65 4c 69 6e 65 28 0d  sole.WriteLine(.
123d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
123e0 20 20 20 20 20 22 41 74 74 61 63 68 20 61 20 64       "Attach a d
123f0 65 62 75 67 67 65 72 20 74 6f 20 70 72 6f 63 65  ebugger to proce
12400 73 73 20 7b 30 7d 20 61 6e 64 20 70 72 65 73 73  ss {0} and press
12410 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20   " +..          
12420 20 20 20 20 20 20 20 20 20 20 22 61 6e 79 20 6b            "any k
12430 65 79 20 74 6f 20 63 6f 6e 74 69 6e 75 65 2e 22  ey to continue."
12440 2c 20 28 74 68 69 73 50 72 6f 63 65 73 73 20 21  , (thisProcess !
12450 3d 20 6e 75 6c 6c 29 20 3f 0d 0a 20 20 20 20 20  = null) ?..     
12460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
12470 68 69 73 50 72 6f 63 65 73 73 2e 49 64 2e 54 6f  hisProcess.Id.To
12480 53 74 72 69 6e 67 28 29 20 3a 20 22 3c 75 6e 6b  String() : "<unk
12490 6e 6f 77 6e 3e 22 29 3b 0d 0a 0d 0a 20 20 20 20  nown>");....    
124a0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d              try.
124b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
124c0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
124d0 20 20 20 20 20 20 20 20 43 6f 6e 73 6f 6c 65 2e          Console.
124e0 52 65 61 64 4b 65 79 28 74 72 75 65 29 3b 20 2f  ReadKey(true); /
124f0 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20  * throw */..    
12500 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
12510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
12520 61 74 63 68 20 28 49 6e 76 61 6c 69 64 4f 70 65  atch (InvalidOpe
12530 72 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 29  rationException)
12540 20 2f 2f 20 43 6f 6e 73 6f 6c 65 2e 52 65 61 64   // Console.Read
12550 4b 65 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  Key..           
12560 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
12570 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64              // d
12580 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20  o nothing...    
12590 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
125a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
125b0 20 44 65 62 75 67 67 65 72 2e 42 72 65 61 6b 28   Debugger.Break(
125c0 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
125d0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
125e0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
125f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12600 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12610 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12620 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
12630 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
12640 63 20 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20  c Configuration 
12650 43 72 65 61 74 65 44 65 66 61 75 6c 74 28 29 0d  CreateDefault().
12660 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
12670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12680 73 74 72 69 6e 67 20 64 69 72 65 63 74 6f 72 79  string directory
12690 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20   = null;..      
126a0 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
126b0 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65 20 3d 20   coreFileName = 
126c0 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20  null;..         
126d0 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6c 69         string li
126e0 6e 71 46 69 6c 65 4e 61 6d 65 20 3d 20 6e 75 6c  nqFileName = nul
126f0 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l;..            
12700 20 20 20 20 73 74 72 69 6e 67 20 65 66 36 46 69      string ef6Fi
12710 6c 65 4e 61 6d 65 20 3d 20 6e 75 6c 6c 3b 0d 0a  leName = null;..
12720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12730 73 74 72 69 6e 67 20 64 65 73 69 67 6e 65 72 46  string designerF
12740 69 6c 65 4e 61 6d 65 20 3d 20 6e 75 6c 6c 3b 0d  ileName = null;.
12750 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
12760 20 20 20 47 65 74 44 65 66 61 75 6c 74 46 69 6c     GetDefaultFil
12770 65 4e 61 6d 65 73 28 0d 0a 20 20 20 20 20 20 20  eNames(..       
12780 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66               ref
12790 20 64 69 72 65 63 74 6f 72 79 2c 20 72 65 66 20   directory, ref 
127a0 63 6f 72 65 46 69 6c 65 4e 61 6d 65 2c 20 72 65  coreFileName, re
127b0 66 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 2c 0d  f linqFileName,.
127c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
127d0 20 20 20 20 20 72 65 66 20 65 66 36 46 69 6c 65       ref ef6File
127e0 4e 61 6d 65 2c 20 72 65 66 20 64 65 73 69 67 6e  Name, ref design
127f0 65 72 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a  erFileName);....
12800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12810 72 65 74 75 72 6e 20 6e 65 77 20 43 6f 6e 66 69  return new Confi
12820 67 75 72 61 74 69 6f 6e 28 0d 0a 20 20 20 20 20  guration(..     
12830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
12840 68 69 73 41 73 73 65 6d 62 6c 79 2c 20 6e 75 6c  hisAssembly, nul
12850 6c 2c 20 64 69 72 65 63 74 6f 72 79 2c 20 63 6f  l, directory, co
12860 72 65 46 69 6c 65 4e 61 6d 65 2c 20 6c 69 6e 71  reFileName, linq
12870 46 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  FileName,..     
12880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
12890 66 36 46 69 6c 65 4e 61 6d 65 2c 20 64 65 73 69  f6FileName, desi
128a0 67 6e 65 72 46 69 6c 65 4e 61 6d 65 2c 20 6e 75  gnerFileName, nu
128b0 6c 6c 2c 20 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c 0d  ll, null, null,.
128c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
128d0 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65       TraceOps.De
128e0 62 75 67 46 6f 72 6d 61 74 2c 20 54 72 61 63 65  bugFormat, Trace
128f0 4f 70 73 2e 54 72 61 63 65 46 6f 72 6d 61 74 2c  Ops.TraceFormat,
12900 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
12910 20 20 20 20 20 20 49 6e 73 74 61 6c 6c 46 6c 61        InstallFla
12920 67 73 2e 44 65 66 61 75 6c 74 2c 20 50 72 6f 76  gs.Default, Prov
12930 69 64 65 72 46 6c 61 67 73 2e 44 65 66 61 75 6c  iderFlags.Defaul
12940 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
12950 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69          TracePri
12960 6f 72 69 74 79 2e 44 65 66 61 75 6c 74 2c 20 54  ority.Default, T
12970 72 61 63 65 50 72 69 6f 72 69 74 79 2e 44 65 66  racePriority.Def
12980 61 75 6c 74 2c 20 66 61 6c 73 65 2c 20 74 72 75  ault, false, tru
12990 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
129a0 20 20 20 20 20 20 20 20 66 61 6c 73 65 2c 20 66          false, f
129b0 61 6c 73 65 2c 20 66 61 6c 73 65 2c 20 66 61 6c  alse, false, fal
129c0 73 65 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73 65  se, false, false
129d0 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73 65 2c 0d  , false, false,.
129e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
129f0 20 20 20 20 20 66 61 6c 73 65 2c 20 66 61 6c 73       false, fals
12a00 65 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73 65 2c  e, false, false,
12a10 20 66 61 6c 73 65 2c 20 66 61 6c 73 65 2c 20 66   false, false, f
12a20 61 6c 73 65 2c 20 66 61 6c 73 65 2c 0d 0a 20 20  alse, false,..  
12a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12a40 20 20 66 61 6c 73 65 2c 20 66 61 6c 73 65 2c 20    false, false, 
12a50 66 61 6c 73 65 2c 20 66 61 6c 73 65 2c 20 66 61  false, false, fa
12a60 6c 73 65 2c 20 66 61 6c 73 65 2c 20 74 72 75 65  lse, false, true
12a70 2c 20 74 72 75 65 2c 0d 0a 20 20 20 20 20 20 20  , true,..       
12a80 20 20 20 20 20 20 20 20 20 20 20 20 20 66 61 6c               fal
12a90 73 65 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73 65  se, false, false
12aa0 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
12ab0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
12ac0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
12ad0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12ae0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12af0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12b00 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
12b10 20 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28      [MethodImpl(
12b20 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e  MethodImplOption
12b30 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a  s.NoInlining)]..
12b40 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
12b50 69 63 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 46  ic static bool F
12b60 72 6f 6d 41 72 67 73 28 0d 0a 20 20 20 20 20 20  romArgs(..      
12b70 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
12b80 5b 5d 20 61 72 67 73 2c 0d 0a 20 20 20 20 20 20  [] args,..      
12b90 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 73            bool s
12ba0 74 72 69 63 74 2c 0d 0a 20 20 20 20 20 20 20 20  trict,..        
12bb0 20 20 20 20 20 20 20 20 72 65 66 20 43 6f 6e 66          ref Conf
12bc0 69 67 75 72 61 74 69 6f 6e 20 63 6f 6e 66 69 67  iguration config
12bd0 75 72 61 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20  uration,..      
12be0 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74            ref st
12bf0 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20  ring error..    
12c00 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
12c10 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
12c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
12c30 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  y..             
12c40 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
12c50 20 20 20 20 20 20 20 20 20 20 69 66 20 28 61 72            if (ar
12c60 67 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  gs == null)..   
12c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12c80 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65       return true
12c90 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
12ca0 20 20 20 20 20 20 20 20 20 69 66 20 28 63 6f 6e           if (con
12cb0 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75  figuration == nu
12cc0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
12cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
12ce0 66 69 67 75 72 61 74 69 6f 6e 20 3d 20 43 6f 6e  figuration = Con
12cf0 66 69 67 75 72 61 74 69 6f 6e 2e 43 72 65 61 74  figuration.Creat
12d00 65 44 65 66 61 75 6c 74 28 29 3b 0d 0a 0d 0a 20  eDefault();.... 
12d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12d20 20 20 20 69 6e 74 20 6c 65 6e 67 74 68 20 3d 20     int length = 
12d30 61 72 67 73 2e 4c 65 6e 67 74 68 3b 0d 0a 0d 0a  args.Length;....
12d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12d50 20 20 20 20 66 6f 72 20 28 69 6e 74 20 69 6e 64      for (int ind
12d60 65 78 20 3d 20 30 3b 20 69 6e 64 65 78 20 3c 20  ex = 0; index < 
12d70 6c 65 6e 67 74 68 3b 20 69 6e 64 65 78 2b 2b 29  length; index++)
12d80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
12d90 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
12da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12db0 20 73 74 72 69 6e 67 20 61 72 67 20 3d 20 61 72   string arg = ar
12dc0 67 73 5b 69 6e 64 65 78 5d 3b 0d 0a 0d 0a 20 20  gs[index];....  
12dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12de0 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
12df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12e00 20 20 2f 2f 20 4e 4f 54 45 3a 20 53 6b 69 70 20    // NOTE: Skip 
12e10 61 6e 79 20 61 72 67 75 6d 65 6e 74 20 74 68 61  any argument tha
12e20 74 20 69 73 20 6e 75 6c 6c 20 28 3f 29 20 6f 72  t is null (?) or
12e30 20 61 6e 20 65 6d 70 74 79 0d 0a 20 20 20 20 20   an empty..     
12e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12e50 20 20 20 2f 2f 20 20 20 20 20 20 20 73 74 72 69     //       stri
12e60 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ng...           
12e70 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
12e80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12e90 20 20 20 20 20 20 20 20 20 69 66 20 28 53 74 72           if (Str
12ea0 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74  ing.IsNullOrEmpt
12eb0 79 28 61 72 67 29 29 0d 0a 20 20 20 20 20 20 20  y(arg))..       
12ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12ed0 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a       continue;..
12ee0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
12ef0 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
12f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12f10 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 57        // NOTE: W
12f20 65 20 61 72 65 20 67 6f 69 6e 67 20 74 6f 20 6d  e are going to m
12f30 6f 64 69 66 79 20 74 68 65 20 6f 72 69 67 69 6e  odify the origin
12f40 61 6c 20 61 72 67 75 6d 65 6e 74 0d 0a 20 20 20  al argument..   
12f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12f60 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 62 79       //       by
12f70 20 72 65 6d 6f 76 69 6e 67 20 61 6e 79 20 6c 65   removing any le
12f80 61 64 69 6e 67 20 6f 70 74 69 6f 6e 20 63 68 61  ading option cha
12f90 72 61 63 74 65 72 73 3b 0d 0a 20 20 20 20 20 20  racters;..      
12fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12fb0 20 20 2f 2f 20 20 20 20 20 20 20 74 68 65 72 65    //       there
12fc0 66 6f 72 65 2c 20 77 65 20 75 73 65 20 61 20 6e  fore, we use a n
12fd0 65 77 20 73 74 72 69 6e 67 20 74 6f 20 68 6f 6c  ew string to hol
12fe0 64 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 20  d the..         
12ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
13000 2f 20 20 20 20 20 20 20 6d 6f 64 69 66 69 65 64  /       modified
13010 20 61 72 67 75 6d 65 6e 74 2e 0d 0a 20 20 20 20   argument...    
13020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13030 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
13040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13050 73 74 72 69 6e 67 20 6e 65 77 41 72 67 20 3d 20  string newArg = 
13060 61 72 67 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  arg;....        
13070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13080 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
13090 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
130a0 4f 54 45 3a 20 41 6c 6c 20 74 68 65 20 73 75 70  OTE: All the sup
130b0 70 6f 72 74 65 64 20 63 6f 6d 6d 61 6e 64 20 6c  ported command l
130c0 69 6e 65 20 6f 70 74 69 6f 6e 73 20 6d 75 73 74  ine options must
130d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
130e0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
130f0 20 20 20 62 65 67 69 6e 20 77 69 74 68 20 61 6e     begin with an
13100 20 6f 70 74 69 6f 6e 20 63 68 61 72 61 63 74 65   option characte
13110 72 20 28 65 2e 67 2e 20 61 20 6d 69 6e 75 73 0d  r (e.g. a minus.
13120 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13130 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
13140 20 20 6f 72 20 66 6f 72 77 61 72 64 20 73 6c 61    or forward sla
13150 73 68 29 3b 20 61 74 74 65 6d 70 74 20 74 6f 20  sh); attempt to 
13160 76 61 6c 69 64 61 74 65 20 74 68 61 74 0d 0a 20  validate that.. 
13170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13180 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
13190 6e 6f 77 2e 20 20 49 66 20 77 65 20 66 61 69 6c  now.  If we fail
131a0 20 69 6e 20 73 74 72 69 63 74 20 6d 6f 64 65 2c   in strict mode,
131b0 20 77 65 20 61 72 65 20 64 6f 6e 65 3b 0d 0a 20   we are done;.. 
131c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
131d0 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
131e0 6f 74 68 65 72 77 69 73 65 2c 20 6a 75 73 74 20  otherwise, just 
131f0 73 6b 69 70 20 74 68 69 73 20 61 72 67 75 6d 65  skip this argume
13200 6e 74 20 61 6e 64 20 61 64 76 61 6e 63 65 0d 0a  nt and advance..
13210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13220 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
13230 20 74 6f 20 74 68 65 20 6e 65 78 74 20 6f 6e 65   to the next one
13240 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
13250 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
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 69 66 20 28 21 43 68 65 63         if (!Chec
13280 6b 4f 70 74 69 6f 6e 28 72 65 66 20 6e 65 77 41  kOption(ref newA
13290 72 67 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  rg))..          
132a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
132b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
132c0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
132d0 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65  or = TraceOps.De
132e0 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20  bugAndTrace(..  
132f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
13310 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65  acePriority.Lowe
13320 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63  st, debugCallbac
13330 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k,..            
13340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13350 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
13360 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
13370 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
13380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13390 20 20 20 22 55 6e 73 75 70 70 6f 72 74 65 64 20     "Unsupported 
133a0 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20 61 72 67  command line arg
133b0 75 6d 65 6e 74 3a 20 7b 30 7d 22 2c 0d 0a 20 20  ument: {0}",..  
133c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
133d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f                Fo
133e0 72 44 69 73 70 6c 61 79 28 61 72 67 29 29 2c 20  rDisplay(arg)), 
133f0 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
13400 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
13410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
13420 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20  f (strict)..    
13430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13440 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
13450 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20  rn false;....   
13460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13470 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75           continu
13480 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
13490 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
134a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
134b0 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
134c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
134d0 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 41 6c       // NOTE: Al
134e0 6c 20 74 68 65 20 73 75 70 70 6f 72 74 65 64 20  l the supported 
134f0 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20 6f 70 74  command line opt
13500 69 6f 6e 73 20 6d 75 73 74 0d 0a 20 20 20 20 20  ions must..     
13510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13520 20 20 20 2f 2f 20 20 20 20 20 20 20 68 61 76 65     //       have
13530 20 61 20 76 61 6c 75 65 3b 20 74 68 65 72 65 66   a value; theref
13540 6f 72 65 2c 20 61 74 74 65 6d 70 74 20 74 6f 20  ore, attempt to 
13550 61 64 76 61 6e 63 65 0d 0a 20 20 20 20 20 20 20  advance..       
13560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13570 20 2f 2f 20 20 20 20 20 20 20 74 6f 20 69 74 20   //       to it 
13580 6e 6f 77 2e 20 20 49 66 20 77 65 20 66 61 69 6c  now.  If we fail
13590 2c 20 77 65 20 61 72 65 20 64 6f 6e 65 2e 0d 0a  , we are done...
135a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
135b0 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
135c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
135d0 20 20 20 20 69 6e 64 65 78 2b 2b 3b 0d 0a 0d 0a      index++;....
135e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
135f0 20 20 20 20 20 20 20 20 69 66 20 28 69 6e 64 65          if (inde
13600 78 20 3e 3d 20 6c 65 6e 67 74 68 29 0d 0a 20 20  x >= length)..  
13610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13620 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
13630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13640 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61       error = Tra
13650 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72  ceOps.DebugAndTr
13660 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ace(..          
13670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13680 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72        TracePrior
13690 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75  ity.Lowest, debu
136a0 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20  gCallback,..    
136b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
136c0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
136d0 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
136e0 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
136f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13700 20 20 20 20 20 20 20 20 20 20 20 22 4d 69 73 73             "Miss
13710 69 6e 67 20 76 61 6c 75 65 20 66 6f 72 20 6f 70  ing value for op
13720 74 69 6f 6e 3a 20 7b 30 7d 22 2c 0d 0a 20 20 20  tion: {0}",..   
13730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13740 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72               For
13750 44 69 73 70 6c 61 79 28 61 72 67 29 29 2c 20 74  Display(arg)), t
13760 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
13770 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
13790 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20   (strict)..     
137a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
137b0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
137c0 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20  n false;....    
137d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
137e0 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a          break;..
137f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13800 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
13810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13820 20 20 20 20 20 2f 2f 0d 0a 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 20 2f 2f 20 4e 4f 54 45 3a 20 47 72 61 62 20 74   // NOTE: Grab t
13850 68 65 20 74 65 78 74 75 61 6c 20 76 61 6c 75 65  he textual value
13860 20 6f 66 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64   of this command
13870 20 6c 69 6e 65 0d 0a 20 20 20 20 20 20 20 20 20   line..         
13880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
13890 2f 20 20 20 20 20 20 20 6f 70 74 69 6f 6e 2e 0d  /       option..
138a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
138b0 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
138c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
138d0 20 20 20 20 20 73 74 72 69 6e 67 20 74 65 78 74       string text
138e0 20 3d 20 61 72 67 73 5b 69 6e 64 65 78 5d 3b 0d   = args[index];.
138f0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
13900 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
13910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13920 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
13930 46 69 67 75 72 65 20 6f 75 74 20 77 68 69 63 68  Figure out which
13940 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20 6f 70   command line op
13950 74 69 6f 6e 20 74 68 69 73 20 69 73 0d 0a 20 20  tion this is..  
13960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13970 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 28        //       (
13980 62 61 73 65 64 20 6f 6e 20 61 20 70 61 72 74 69  based on a parti
13990 61 6c 20 6e 61 6d 65 20 6d 61 74 63 68 29 20 61  al name match) a
139a0 6e 64 20 74 68 65 6e 20 74 72 79 0d 0a 20 20 20  nd then try..   
139b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
139c0 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74 6f       //       to
139d0 20 69 6e 74 65 72 70 72 65 74 20 74 68 65 20 74   interpret the t
139e0 65 78 74 75 61 6c 20 76 61 6c 75 65 20 61 73 20  extual value as 
139f0 74 68 65 20 63 6f 72 72 65 63 74 0d 0a 20 20 20  the correct..   
13a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13a10 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74 79       //       ty
13a20 70 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  pe...           
13a30 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
13a40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13a50 20 20 20 20 20 20 20 20 20 69 66 20 28 4d 61 74           if (Mat
13a60 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c  chOption(newArg,
13a70 20 22 62 72 65 61 6b 22 29 29 0d 0a 20 20 20 20   "break"))..    
13a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13a90 20 20 20 20 7b 0d 0a 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 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d     bool? value =
13ac0 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65   ParseBoolean(te
13ad0 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  xt);....        
13ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13af0 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d      if (value ==
13b00 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
13b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13b20 20 20 20 20 7b 0d 0a 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 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54         error = T
13b50 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
13b60 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20  Trace(..        
13b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13b80 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
13b90 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74  ePriority.Lowest
13ba0 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c  , debugCallback,
13bb0 0d 0a 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 20 20 20 20 20                  
13bd0 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
13be0 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ack, String.Form
13bf0 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
13c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13c10 20 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69           "Invali
13c20 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61  d {0} boolean va
13c30 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20  lue: {1}",..    
13c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13c60 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c  ForDisplay(arg),
13c70 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74   ForDisplay(text
13c80 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
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 74 72 61 63 65 43 61           traceCa
13cb0 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
13cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13cd0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
13ce0 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20  strict)..       
13cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13d00 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
13d10 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20  urn false;....  
13d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
13d40 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20  ntinue;..       
13d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13d60 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
13d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13d80 20 20 20 20 20 20 69 66 20 28 28 62 6f 6f 6c 29        if ((bool)
13d90 76 61 6c 75 65 29 0d 0a 20 20 20 20 20 20 20 20  value)..        
13da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13db0 20 20 20 20 20 20 20 20 42 72 65 61 6b 49 6e 74          BreakInt
13dc0 6f 44 65 62 75 67 67 65 72 28 29 3b 0d 0a 20 20  oDebugger();..  
13dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13de0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
13df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13e00 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f   else if (MatchO
13e10 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 63  ption(newArg, "c
13e20 6f 6e 66 69 67 56 65 72 73 69 6f 6e 22 29 29 0d  onfigVersion")).
13e30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13e40 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
13e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13e60 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
13e70 61 74 69 6f 6e 2e 63 6f 6e 66 69 67 56 65 72 73  ation.configVers
13e80 69 6f 6e 20 3d 20 74 65 78 74 3b 0d 0a 20 20 20  ion = text;..   
13e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13ea0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
13eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13ec0 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70  else if (MatchOp
13ed0 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 63 6f  tion(newArg, "co
13ee0 6e 66 69 72 6d 22 29 29 0d 0a 20 20 20 20 20 20  nfirm"))..      
13ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13f00 20 20 7b 0d 0a 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 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50   bool? value = P
13f30 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74  arseBoolean(text
13f40 29 3b 0d 0a 0d 0a 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 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e    if (value == n
13f70 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
13f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13f90 20 20 7b 0d 0a 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 20                  
13fb0 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61       error = Tra
13fc0 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72  ceOps.DebugAndTr
13fd0 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ace(..          
13fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13ff0 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50            TraceP
14000 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20  riority.Lowest, 
14010 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a  debugCallback,..
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 20 20 20 20 20 20 20                  
14040 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
14050 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
14060 28 0d 0a 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 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20         "Invalid 
14090 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75  {0} boolean valu
140a0 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20  e: {1}",..      
140b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
140c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f                Fo
140d0 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46  rDisplay(arg), F
140e0 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74 29 29  orDisplay(text))
140f0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
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 74 72 61 63 65 43 61 74 65         traceCate
14120 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
14130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14140 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74            if (st
14150 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20  rict)..         
14160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14170 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
14180 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20  n false;....    
14190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
141a0 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74              cont
141b0 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  inue;..         
141c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
141d0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
141e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
141f0 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
14200 6e 2e 63 6f 6e 66 69 72 6d 20 3d 20 28 62 6f 6f  n.confirm = (boo
14210 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20  l)value;..      
14220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14230 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
14240 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73               els
14250 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f  e if (MatchOptio
14260 6e 28 6e 65 77 41 72 67 2c 20 22 63 6f 72 65 46  n(newArg, "coreF
14270 69 6c 65 4e 61 6d 65 22 29 29 0d 0a 20 20 20 20  ileName"))..    
14280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14290 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
142a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
142b0 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
142c0 2e 63 6f 72 65 46 69 6c 65 4e 61 6d 65 20 3d 20  .coreFileName = 
142d0 74 65 78 74 3b 0d 0a 20 20 20 20 20 20 20 20 20  text;..         
142e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
142f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14300 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69            else i
14310 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e  f (MatchOption(n
14320 65 77 41 72 67 2c 20 22 64 65 62 75 67 22 29 29  ewArg, "debug"))
14330 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14340 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 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 20 62 6f 6f 6c 3f 20 76           bool? v
14370 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c  alue = ParseBool
14380 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20  ean(text);....  
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 69 66 20 28 76 61            if (va
143b0 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  lue == null)..  
143c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
143d0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 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 20 20 20 20 20 20 65 72 72               err
14400 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65  or = TraceOps.De
14410 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20  bugAndTrace(..  
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 20 20 20 20 20 20                  
14440 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e    TracePriority.
14450 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c  Lowest, debugCal
14460 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20  lback,..        
14470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14480 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
14490 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
144a0 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
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 20 20 20 20 20 22                 "
144d0 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c  Invalid {0} bool
144e0 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c  ean value: {1}",
144f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14510 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
14520 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61  (arg), ForDispla
14530 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20  y(text)),..     
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 74                 t
14560 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
14570 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14590 20 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20    if (strict).. 
145a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
145b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
145c0 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
145d0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
145e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
145f0 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20      continue;.. 
14600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14610 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
14620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14630 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
14640 69 67 75 72 61 74 69 6f 6e 2e 64 65 62 75 67 20  iguration.debug 
14650 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a  = (bool)value;..
14660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14670 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
14680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14690 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63     else if (Matc
146a0 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20  hOption(newArg, 
146b0 22 64 65 62 75 67 46 6f 72 6d 61 74 22 29 29 0d  "debugFormat")).
146c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
146d0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
146e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
146f0 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
14700 61 74 69 6f 6e 2e 64 65 62 75 67 46 6f 72 6d 61  ation.debugForma
14710 74 20 3d 20 74 65 78 74 3b 0d 0a 20 20 20 20 20  t = text;..     
14720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14730 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e         TraceOps.
14740 44 65 62 75 67 46 6f 72 6d 61 74 20 3d 20 63 6f  DebugFormat = co
14750 6e 66 69 67 75 72 61 74 69 6f 6e 2e 64 65 62 75  nfiguration.debu
14760 67 46 6f 72 6d 61 74 3b 0d 0a 20 20 20 20 20 20  gFormat;..      
14770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14780 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
14790 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73               els
147a0 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f  e if (MatchOptio
147b0 6e 28 6e 65 77 41 72 67 2c 20 22 64 65 62 75 67  n(newArg, "debug
147c0 50 72 69 6f 72 69 74 79 22 29 29 0d 0a 20 20 20  Priority"))..   
147d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
147e0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
147f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14800 20 20 20 20 6f 62 6a 65 63 74 20 76 61 6c 75 65      object value
14810 20 3d 20 50 61 72 73 65 45 6e 75 6d 28 0d 0a 20   = ParseEnum(.. 
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 74                 t
14840 79 70 65 6f 66 28 54 72 61 63 65 50 72 69 6f 72  ypeof(TracePrior
14850 69 74 79 29 2c 20 74 65 78 74 2c 20 74 72 75 65  ity), text, true
14860 29 3b 0d 0a 0d 0a 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 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e    if (value == n
14890 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
148a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
148b0 20 20 7b 0d 0a 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 20                  
148d0 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61       error = Tra
148e0 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72  ceOps.DebugAndTr
148f0 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ace(..          
14900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14910 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50            TraceP
14920 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20  riority.Lowest, 
14930 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a  debugCallback,..
14940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14960 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
14970 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
14980 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
14990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
149a0 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20         "Invalid 
149b0 7b 30 7d 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c  {0} value: {1}",
149c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
149d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
149e0 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
149f0 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61  (arg), ForDispla
14a00 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20  y(text)),..     
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 74                 t
14a30 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
14a40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14a60 20 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20    if (strict).. 
14a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14a90 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
14aa0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
14ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14ac0 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20      continue;.. 
14ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14ae0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
14af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14b00 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
14b10 69 67 75 72 61 74 69 6f 6e 2e 64 65 62 75 67 50  iguration.debugP
14b20 72 69 6f 72 69 74 79 20 3d 20 28 54 72 61 63 65  riority = (Trace
14b30 50 72 69 6f 72 69 74 79 29 76 61 6c 75 65 3b 0d  Priority)value;.
14b40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14b50 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
14b60 63 65 4f 70 73 2e 44 65 62 75 67 50 72 69 6f 72  ceOps.DebugPrior
14b70 69 74 79 20 3d 20 63 6f 6e 66 69 67 75 72 61 74  ity = configurat
14b80 69 6f 6e 2e 64 65 62 75 67 50 72 69 6f 72 69 74  ion.debugPriorit
14b90 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y;..            
14ba0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
14bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14bc0 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28         else if (
14bd0 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41  MatchOption(newA
14be0 72 67 2c 20 22 64 65 73 69 67 6e 65 72 46 69 6c  rg, "designerFil
14bf0 65 4e 61 6d 65 22 29 29 0d 0a 20 20 20 20 20 20  eName"))..      
14c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14c10 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
14c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14c30 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 64   configuration.d
14c40 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 20  esignerFileName 
14c50 3d 20 74 65 78 74 3b 0d 0a 20 20 20 20 20 20 20  = text;..       
14c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14c70 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
14c80 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
14c90 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e   if (MatchOption
14ca0 28 6e 65 77 41 72 67 2c 20 22 64 69 72 65 63 74  (newArg, "direct
14cb0 6f 72 79 22 29 29 0d 0a 20 20 20 20 20 20 20 20  ory"))..        
14cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14cd0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
14ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
14cf0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 64 69 72  onfiguration.dir
14d00 65 63 74 6f 72 79 20 3d 20 74 65 78 74 3b 0d 0a  ectory = text;..
14d10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
14d30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
14d50 20 4e 4f 54 45 3a 20 2a 53 50 45 43 49 41 4c 2a   NOTE: *SPECIAL*
14d60 20 4d 75 73 74 20 72 65 66 72 65 73 68 20 74 68   Must refresh th
14d70 65 20 66 69 6c 65 20 6e 61 6d 65 73 0d 0a 20 20  e file names..  
14d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14d90 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
14da0 20 20 20 68 65 72 65 20 62 65 63 61 75 73 65 20     here because 
14db0 74 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 64  the underlying d
14dc0 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 20  irectory..      
14dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14de0 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 68        //       h
14df0 61 73 20 63 68 61 6e 67 65 64 2e 0d 0a 20 20 20  as changed...   
14e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14e10 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
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 73 74 72 69 6e 67 20           string 
14e40 63 6f 72 65 46 69 6c 65 4e 61 6d 65 20 3d 20 63  coreFileName = c
14e50 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 63 6f 72  onfiguration.cor
14e60 65 46 69 6c 65 4e 61 6d 65 3b 0d 0a 0d 0a 20 20  eFileName;....  
14e70 20 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 69 66 20 28 21 53            if (!S
14e90 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d  tring.IsNullOrEm
14ea0 70 74 79 28 63 6f 72 65 46 69 6c 65 4e 61 6d 65  pty(coreFileName
14eb0 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
14ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14ed0 20 20 20 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65      coreFileName
14ee0 20 3d 20 50 61 74 68 2e 47 65 74 46 69 6c 65 4e   = Path.GetFileN
14ef0 61 6d 65 28 63 6f 72 65 46 69 6c 65 4e 61 6d 65  ame(coreFileName
14f00 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
14f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14f20 20 20 69 66 20 28 53 74 72 69 6e 67 2e 49 73 4e    if (String.IsN
14f30 75 6c 6c 4f 72 45 6d 70 74 79 28 63 6f 72 65 46  ullOrEmpty(coreF
14f40 69 6c 65 4e 61 6d 65 29 29 0d 0a 20 20 20 20 20  ileName))..     
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 20 20 20 63 6f 72 65 46             coreF
14f70 69 6c 65 4e 61 6d 65 20 3d 20 49 6e 73 74 61 6c  ileName = Instal
14f80 6c 65 72 2e 43 6f 72 65 46 69 6c 65 4e 61 6d 65  ler.CoreFileName
14f90 3b 0d 0a 0d 0a 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 20                  
14fb0 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 63   configuration.c
14fc0 6f 72 65 46 69 6c 65 4e 61 6d 65 20 3d 20 50 61  oreFileName = Pa
14fd0 74 68 2e 43 6f 6d 62 69 6e 65 28 0d 0a 20 20 20  th.Combine(..   
14fe0 20 20 20 20 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 63 6f 6e               con
15000 66 69 67 75 72 61 74 69 6f 6e 2e 64 69 72 65 63  figuration.direc
15010 74 6f 72 79 2c 20 63 6f 72 65 46 69 6c 65 4e 61  tory, coreFileNa
15020 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  me);....        
15030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15040 20 20 20 20 73 74 72 69 6e 67 20 6c 69 6e 71 46      string linqF
15050 69 6c 65 4e 61 6d 65 20 3d 20 63 6f 6e 66 69 67  ileName = config
15060 75 72 61 74 69 6f 6e 2e 6c 69 6e 71 46 69 6c 65  uration.linqFile
15070 4e 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  Name;....       
15080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15090 20 20 20 20 20 69 66 20 28 21 53 74 72 69 6e 67       if (!String
150a0 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 6c  .IsNullOrEmpty(l
150b0 69 6e 71 46 69 6c 65 4e 61 6d 65 29 29 0d 0a 20  inqFileName)).. 
150c0 20 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 6c                 l
150e0 69 6e 71 46 69 6c 65 4e 61 6d 65 20 3d 20 50 61  inqFileName = Pa
150f0 74 68 2e 47 65 74 46 69 6c 65 4e 61 6d 65 28 6c  th.GetFileName(l
15100 69 6e 71 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d  inqFileName);...
15110 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15120 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
15130 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72  (String.IsNullOr
15140 45 6d 70 74 79 28 6c 69 6e 71 46 69 6c 65 4e 61  Empty(linqFileNa
15150 6d 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  me))..          
15160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15170 20 20 20 20 20 20 6c 69 6e 71 46 69 6c 65 4e 61        linqFileNa
15180 6d 65 20 3d 20 49 6e 73 74 61 6c 6c 65 72 2e 4c  me = Installer.L
15190 69 6e 71 46 69 6c 65 4e 61 6d 65 3b 0d 0a 0d 0a  inqFileName;....
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 20 20 63 6f 6e 66              conf
151c0 69 67 75 72 61 74 69 6f 6e 2e 6c 69 6e 71 46 69  iguration.linqFi
151d0 6c 65 4e 61 6d 65 20 3d 20 50 61 74 68 2e 43 6f  leName = Path.Co
151e0 6d 62 69 6e 65 28 0d 0a 20 20 20 20 20 20 20 20  mbine(..        
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 63 6f 6e 66 69 67 75 72          configur
15210 61 74 69 6f 6e 2e 64 69 72 65 63 74 6f 72 79 2c  ation.directory,
15220 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 29 3b 0d   linqFileName);.
15230 0a 0d 0a 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 73                 s
15250 74 72 69 6e 67 20 65 66 36 46 69 6c 65 4e 61 6d  tring ef6FileNam
15260 65 20 3d 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  e = configuratio
15270 6e 2e 65 66 36 46 69 6c 65 4e 61 6d 65 3b 0d 0a  n.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 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c   (!String.IsNull
152b0 4f 72 45 6d 70 74 79 28 65 66 36 46 69 6c 65 4e  OrEmpty(ef6FileN
152c0 61 6d 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ame))..         
152d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
152e0 20 20 20 20 20 20 20 65 66 36 46 69 6c 65 4e 61         ef6FileNa
152f0 6d 65 20 3d 20 50 61 74 68 2e 47 65 74 46 69 6c  me = Path.GetFil
15300 65 4e 61 6d 65 28 65 66 36 46 69 6c 65 4e 61 6d  eName(ef6FileNam
15310 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
15320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15330 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e 49 73     if (String.Is
15340 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 65 66 36 46  NullOrEmpty(ef6F
15350 69 6c 65 4e 61 6d 65 29 29 0d 0a 20 20 20 20 20  ileName))..     
15360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15370 20 20 20 20 20 20 20 20 20 20 20 65 66 36 46 69             ef6Fi
15380 6c 65 4e 61 6d 65 20 3d 20 49 6e 73 74 61 6c 6c  leName = Install
15390 65 72 2e 45 66 36 46 69 6c 65 4e 61 6d 65 3b 0d  er.Ef6FileName;.
153a0 0a 0d 0a 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 20 20 20 20 63                 c
153c0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 65 66 36  onfiguration.ef6
153d0 46 69 6c 65 4e 61 6d 65 20 3d 20 50 61 74 68 2e  FileName = Path.
153e0 43 6f 6d 62 69 6e 65 28 0d 0a 20 20 20 20 20 20  Combine(..      
153f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15400 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
15410 75 72 61 74 69 6f 6e 2e 64 69 72 65 63 74 6f 72  uration.director
15420 79 2c 20 65 66 36 46 69 6c 65 4e 61 6d 65 29 3b  y, ef6FileName);
15430 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
15440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15450 73 74 72 69 6e 67 20 64 65 73 69 67 6e 65 72 46  string designerF
15460 69 6c 65 4e 61 6d 65 20 3d 20 63 6f 6e 66 69 67  ileName = config
15470 75 72 61 74 69 6f 6e 2e 64 65 73 69 67 6e 65 72  uration.designer
15480 46 69 6c 65 4e 61 6d 65 3b 0d 0a 0d 0a 20 20 20  FileName;....   
15490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
154a0 20 20 20 20 20 20 20 20 20 69 66 20 28 21 53 74           if (!St
154b0 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70  ring.IsNullOrEmp
154c0 74 79 28 64 65 73 69 67 6e 65 72 46 69 6c 65 4e  ty(designerFileN
154d0 61 6d 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ame))..         
154e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
154f0 20 20 20 20 20 20 20 64 65 73 69 67 6e 65 72 46         designerF
15500 69 6c 65 4e 61 6d 65 20 3d 20 50 61 74 68 2e 47  ileName = Path.G
15510 65 74 46 69 6c 65 4e 61 6d 65 28 64 65 73 69 67  etFileName(desig
15520 6e 65 72 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d  nerFileName);...
15530 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15540 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
15550 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72  (String.IsNullOr
15560 45 6d 70 74 79 28 64 65 73 69 67 6e 65 72 46 69  Empty(designerFi
15570 6c 65 4e 61 6d 65 29 29 0d 0a 20 20 20 20 20 20  leName))..      
15580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15590 20 20 20 20 20 20 20 20 20 20 64 65 73 69 67 6e            design
155a0 65 72 46 69 6c 65 4e 61 6d 65 20 3d 20 49 6e 73  erFileName = Ins
155b0 74 61 6c 6c 65 72 2e 44 65 73 69 67 6e 65 72 46  taller.DesignerF
155c0 69 6c 65 4e 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20  ileName;....    
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 63 6f 6e 66 69 67 75 72          configur
155f0 61 74 69 6f 6e 2e 64 65 73 69 67 6e 65 72 46 69  ation.designerFi
15600 6c 65 4e 61 6d 65 20 3d 20 50 61 74 68 2e 43 6f  leName = Path.Co
15610 6d 62 69 6e 65 28 0d 0a 20 20 20 20 20 20 20 20  mbine(..        
15620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15630 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
15640 61 74 69 6f 6e 2e 64 69 72 65 63 74 6f 72 79 2c  ation.directory,
15650 20 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d   designerFileNam
15660 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e);..           
15670 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
15680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15690 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20          else if 
156a0 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77  (MatchOption(new
156b0 41 72 67 2c 20 22 65 66 36 46 69 6c 65 4e 61 6d  Arg, "ef6FileNam
156c0 65 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  e"))..          
156d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
156e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
156f0 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
15700 66 69 67 75 72 61 74 69 6f 6e 2e 65 66 36 46 69  figuration.ef6Fi
15710 6c 65 4e 61 6d 65 20 3d 20 74 65 78 74 3b 0d 0a  leName = text;..
15720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15730 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
15740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15750 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63     else if (Matc
15760 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20  hOption(newArg, 
15770 22 69 6e 73 74 61 6c 6c 22 29 29 0d 0a 20 20 20  "install"))..   
15780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15790 20 20 20 20 20 7b 0d 0a 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 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20      bool? value 
157c0 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74  = ParseBoolean(t
157d0 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ext);....       
157e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
157f0 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d       if (value =
15800 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
15810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15820 20 20 20 20 20 7b 0d 0a 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 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
15850 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
15860 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20  dTrace(..       
15870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15880 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
15890 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73  cePriority.Lowes
158a0 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b  t, debugCallback
158b0 2c 0d 0a 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 20 20 20 20                  
158d0 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
158e0 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
158f0 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
15900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15910 20 20 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c            "Inval
15920 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76  id {0} boolean v
15930 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20  alue: {1}",..   
15940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15960 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29   ForDisplay(arg)
15970 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78  , ForDisplay(tex
15980 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  t)),..          
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 74 72 61 63 65 43            traceC
159b0 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
159c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
159d0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
159e0 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20  (strict)..      
159f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
15a10 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20  turn false;.... 
15a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
15a40 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20  ontinue;..      
15a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15a60 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
15a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15a80 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
15a90 74 69 6f 6e 2e 69 6e 73 74 61 6c 6c 20 3d 20 28  tion.install = (
15aa0 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20  bool)value;..   
15ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15ac0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
15ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15ae0 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70  else if (MatchOp
15af0 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 69 6e  tion(newArg, "in
15b00 73 74 61 6c 6c 46 6c 61 67 73 22 29 29 0d 0a 20  stallFlags")).. 
15b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15b20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
15b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15b40 20 20 20 20 20 20 6f 62 6a 65 63 74 20 76 61 6c        object val
15b50 75 65 20 3d 20 50 61 72 73 65 45 6e 75 6d 28 0d  ue = ParseEnum(.
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 74 79 70 65 6f 66 28 49 6e 73 74 61 6c 6c 46   typeof(InstallF
15b90 6c 61 67 73 29 2c 20 74 65 78 74 2c 20 74 72 75  lags), text, tru
15ba0 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
15bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15bc0 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20     if (value == 
15bd0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
15be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15bf0 20 20 20 7b 0d 0a 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 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72        error = Tr
15c20 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
15c30 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20  race(..         
15c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15c50 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
15c60 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c  Priority.Lowest,
15c70 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d   debugCallback,.
15c80 0a 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 20 20 20 20                  
15ca0 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
15cb0 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
15cc0 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
15cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15ce0 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64          "Invalid
15cf0 20 7b 30 7d 20 76 61 6c 75 65 3a 20 7b 31 7d 22   {0} value: {1}"
15d00 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
15d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15d20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61         ForDispla
15d30 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c  y(arg), ForDispl
15d40 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20  ay(text)),..    
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 20 20 20 20 20                  
15d70 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
15d80 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
15d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15da0 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a     if (strict)..
15db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15dd0 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
15de0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
15df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15e00 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a       continue;..
15e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15e20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
15e30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15e40 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
15e50 66 69 67 75 72 61 74 69 6f 6e 2e 69 6e 73 74 61  figuration.insta
15e60 6c 6c 46 6c 61 67 73 20 3d 20 28 49 6e 73 74 61  llFlags = (Insta
15e70 6c 6c 46 6c 61 67 73 29 76 61 6c 75 65 3b 0d 0a  llFlags)value;..
15e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15e90 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
15ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15eb0 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63     else if (Matc
15ec0 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20  hOption(newArg, 
15ed0 22 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 22 29 29  "linqFileName"))
15ee0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
15ef0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 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 20 20 20 20 20 63 6f 6e 66 69 67 75           configu
15f20 72 61 74 69 6f 6e 2e 6c 69 6e 71 46 69 6c 65 4e  ration.linqFileN
15f30 61 6d 65 20 3d 20 74 65 78 74 3b 0d 0a 20 20 20  ame = text;..   
15f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15f50 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
15f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15f70 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70  else if (MatchOp
15f80 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6c 6f  tion(newArg, "lo
15f90 67 46 69 6c 65 4e 61 6d 65 22 29 29 0d 0a 20 20  gFileName"))..  
15fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15fb0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
15fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15fd0 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
15fe0 6f 6e 2e 6c 6f 67 46 69 6c 65 4e 61 6d 65 20 3d  on.logFileName =
15ff0 20 74 65 78 74 3b 0d 0a 20 20 20 20 20 20 20 20   text;..        
16000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16010 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
16020 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20             else 
16030 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28  if (MatchOption(
16040 6e 65 77 41 72 67 2c 20 22 6e 6f 43 6f 6d 70 61  newArg, "noCompa
16050 63 74 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ct"))..         
16060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
16070 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
16090 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73  ol? value = Pars
160a0 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d  eBoolean(text);.
160b0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
160c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
160d0 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c  f (value == null
160e0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
160f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
16100 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16120 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f    error = TraceO
16130 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
16140 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
16150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16160 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f         TracePrio
16170 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62  rity.Lowest, deb
16180 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20  ugCallback,..   
16190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
161a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
161b0 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
161c0 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
161d0 20 20 20 20 20 20 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 22 49 6e 76 61 6c 69 64 20 7b 30 7d      "Invalid {0}
16200 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20   boolean value: 
16210 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  {1}",..         
16220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16230 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69             ForDi
16240 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44  splay(arg), ForD
16250 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a  isplay(text)),..
16260 20 20 20 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 20                  
16280 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
16290 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
162a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
162b0 20 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63         if (stric
162c0 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t)..            
162d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
162e0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
162f0 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  alse;....       
16300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16310 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75           continu
16320 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
16330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16340 7d 0d 0a 0d 0a 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 20 20                  
16360 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e   configuration.n
16370 6f 43 6f 6d 70 61 63 74 20 3d 20 28 62 6f 6f 6c  oCompact = (bool
16380 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20  )value;..       
16390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
163a0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
163b0 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
163c0 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e   if (MatchOption
163d0 28 6e 65 77 41 72 67 2c 20 22 6e 6f 43 6f 6e 73  (newArg, "noCons
163e0 6f 6c 65 22 29 29 0d 0a 20 20 20 20 20 20 20 20  ole"))..        
163f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16400 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
16410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
16420 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72  ool? value = Par
16430 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b  seBoolean(text);
16440 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
16450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16460 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c  if (value == nul
16470 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
16480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16490 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
164a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
164b0 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65     error = Trace
164c0 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
164d0 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
164e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
164f0 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69          TracePri
16500 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65  ority.Lowest, de
16510 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20  bugCallback,..  
16520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16540 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c    traceCallback,
16550 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
16560 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16580 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30       "Invalid {0
16590 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a  } boolean value:
165a0 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20   {1}",..        
165b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
165c0 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44              ForD
165d0 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72  isplay(arg), For
165e0 44 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d  Display(text)),.
165f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16610 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
16620 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
16630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16640 20 20 20 20 20 20 20 20 69 66 20 28 73 74 72 69          if (stri
16650 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ct)..           
16660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16670 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
16680 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  false;....      
16690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
166a0 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e            contin
166b0 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
166c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
166d0 20 7d 0d 0a 0d 0a 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 20                  
166f0 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e    configuration.
16700 6e 6f 43 6f 6e 73 6f 6c 65 20 3d 20 28 62 6f 6f  noConsole = (boo
16710 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20  l)value;..      
16720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16730 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
16740 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73               els
16750 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f  e if (MatchOptio
16760 6e 28 6e 65 77 41 72 67 2c 20 22 6e 6f 44 65 73  n(newArg, "noDes
16770 6b 74 6f 70 22 29 29 0d 0a 20 20 20 20 20 20 20  ktop"))..       
16780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16790 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
167a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
167b0 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61  bool? value = Pa
167c0 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29  rseBoolean(text)
167d0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
167e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
167f0 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75   if (value == nu
16800 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
16810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16820 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
16830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16840 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63      error = Trac
16850 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
16860 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce(..           
16870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16880 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72           TracePr
16890 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64  iority.Lowest, d
168a0 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20  ebugCallback,.. 
168b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
168c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
168d0 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
168e0 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
168f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16910 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b        "Invalid {
16920 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65  0} boolean value
16930 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20  : {1}",..       
16940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16950 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72               For
16960 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f  Display(arg), Fo
16970 72 44 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c  rDisplay(text)),
16980 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
169a0 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
169b0 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
169c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
169d0 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74 72           if (str
169e0 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ict)..          
169f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16a00 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
16a10 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20   false;....     
16a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16a30 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69             conti
16a40 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  nue;..          
16a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16a60 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
16a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16a80 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
16a90 2e 6e 6f 44 65 73 6b 74 6f 70 20 3d 20 28 62 6f  .noDesktop = (bo
16aa0 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20  ol)value;..     
16ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16ac0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
16ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
16ae0 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69  se if (MatchOpti
16af0 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e 6f 4c 6f  on(newArg, "noLo
16b00 67 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  g"))..          
16b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
16b20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16b30 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
16b40 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65  l? value = Parse
16b50 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a  Boolean(text);..
16b60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
16b80 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29   (value == null)
16b90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
16bb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16bd0 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70   error = TraceOp
16be0 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
16bf0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16c10 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72        TracePrior
16c20 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75  ity.Lowest, debu
16c30 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20  gCallback,..    
16c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16c60 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
16c70 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
16c80 20 20 20 20 20 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 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20     "Invalid {0} 
16cb0 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b  boolean value: {
16cc0 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  1}",..          
16cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16ce0 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
16cf0 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69  play(arg), ForDi
16d00 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20  splay(text)),.. 
16d10 20 20 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 20 20                  
16d30 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
16d40 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
16d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16d60 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74        if (strict
16d70 29 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 20 20 20 20 20                  
16d90 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
16da0 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lse;....        
16db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16dc0 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65          continue
16dd0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
16de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
16df0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
16e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16e10 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f  configuration.no
16e20 4c 6f 67 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75  Log = (bool)valu
16e30 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
16e40 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
16e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16e60 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28         else if (
16e70 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41  MatchOption(newA
16e80 72 67 2c 20 22 6e 6f 4e 65 74 46 78 32 30 22 29  rg, "noNetFx20")
16e90 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
16ea0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
16eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16ec0 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20            bool? 
16ed0 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f  value = ParseBoo
16ee0 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20  lean(text);.... 
16ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16f00 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76             if (v
16f10 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  alue == null).. 
16f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16f30 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
16f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
16f60 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44  ror = TraceOps.D
16f70 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20  ebugAndTrace(.. 
16f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16fa0 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79     TracePriority
16fb0 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61  .Lowest, debugCa
16fc0 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20  llback,..       
16fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
16ff0 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69  ceCallback, Stri
17000 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
17010 20 20 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 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f  "Invalid {0} boo
17040 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22  lean value: {1}"
17050 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
17060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17070 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61         ForDispla
17080 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c  y(arg), ForDispl
17090 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20  ay(text)),..    
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 20 20 20 20 20                  
170c0 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
170d0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
170e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
170f0 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a     if (strict)..
17100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17120 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
17130 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
17140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17150 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a       continue;..
17160 20 20 20 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 20 7d 0d 0a 0d              }...
17180 0a 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 20 20 20 63 6f 6e               con
171a0 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 4e 65 74  figuration.noNet
171b0 46 78 32 30 20 3d 20 28 62 6f 6f 6c 29 76 61 6c  Fx20 = (bool)val
171c0 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
171d0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
171e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
171f0 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20          else if 
17200 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77  (MatchOption(new
17210 41 72 67 2c 20 22 6e 6f 4e 65 74 46 78 33 35 22  Arg, "noNetFx35"
17220 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
17230 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
17240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17250 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f             bool?
17260 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f   value = ParseBo
17270 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a  olean(text);....
17280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17290 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
172a0 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  value == null)..
172b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
172c0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
172d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
172e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
172f0 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e  rror = TraceOps.
17300 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a  DebugAndTrace(..
17310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17330 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74      TracePriorit
17340 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43  y.Lowest, debugC
17350 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20  allback,..      
17360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
17380 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
17390 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
173a0 20 20 20 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 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f   "Invalid {0} bo
173d0 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d  olean value: {1}
173e0 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
173f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17400 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
17410 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70  ay(arg), ForDisp
17420 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20  lay(text)),..   
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 20 20 20 20                  
17450 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
17460 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
17470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17480 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d      if (strict).
17490 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
174a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
174b0 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
174c0 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
174d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
174e0 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d        continue;.
174f0 0a 20 20 20 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 20 7d 0d 0a               }..
17510 0d 0a 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 20 20 20 63 6f                co
17530 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 4e 65  nfiguration.noNe
17540 74 46 78 33 35 20 3d 20 28 62 6f 6f 6c 29 76 61  tFx35 = (bool)va
17550 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lue;..          
17560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
17570 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17580 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66           else if
17590 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65   (MatchOption(ne
175a0 77 41 72 67 2c 20 22 6e 6f 4e 65 74 46 78 34 30  wArg, "noNetFx40
175b0 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  "))..           
175c0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
175d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
175e0 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
175f0 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42  ? value = ParseB
17600 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d  oolean(text);...
17610 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17620 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
17630 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d  (value == null).
17640 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17650 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
17660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17680 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73  error = TraceOps
17690 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d  .DebugAndTrace(.
176a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
176b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
176c0 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69       TracePriori
176d0 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67  ty.Lowest, debug
176e0 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20  Callback,..     
176f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
17710 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
17720 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
17730 20 20 20 20 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 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62    "Invalid {0} b
17760 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31  oolean value: {1
17770 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }",..           
17780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17790 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
177a0 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73  lay(arg), ForDis
177b0 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20  play(text)),..  
177c0 20 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 20 20 20                  
177e0 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
177f0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
17800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17810 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29       if (strict)
17820 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
17830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17840 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
17850 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  se;....         
17860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17870 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b         continue;
17880 0d 0a 20 20 20 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 20 7d 0d                }.
178a0 0a 0d 0a 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 20 20 20 63                 c
178c0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 4e  onfiguration.noN
178d0 65 74 46 78 34 30 20 3d 20 28 62 6f 6f 6c 29 76  etFx40 = (bool)v
178e0 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alue;..         
178f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
17900 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
17910 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69            else i
17920 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e  f (MatchOption(n
17930 65 77 41 72 67 2c 20 22 6e 6f 4e 65 74 46 78 34  ewArg, "noNetFx4
17940 35 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  5"))..          
17950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
17960 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17970 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
17980 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65  l? value = Parse
17990 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a  Boolean(text);..
179a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
179b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
179c0 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29   (value == null)
179d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
179e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
179f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17a10 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70   error = TraceOp
17a20 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
17a30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
17a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17a50 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72        TracePrior
17a60 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75  ity.Lowest, debu
17a70 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20  gCallback,..    
17a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17aa0 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
17ab0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
17ac0 20 20 20 20 20 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 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20     "Invalid {0} 
17af0 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b  boolean value: {
17b00 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  1}",..          
17b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17b20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
17b30 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69  play(arg), ForDi
17b40 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20  splay(text)),.. 
17b50 20 20 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 20 20                  
17b70 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
17b80 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
17b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17ba0 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74        if (strict
17bb0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
17bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17bd0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
17be0 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lse;....        
17bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17c00 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65          continue
17c10 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
17c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
17c30 0d 0a 0d 0a 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 20 20                  
17c50 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f  configuration.no
17c60 4e 65 74 46 78 34 35 20 3d 20 28 62 6f 6f 6c 29  NetFx45 = (bool)
17c70 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  value;..        
17c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17c90 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
17ca0 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20             else 
17cb0 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28  if (MatchOption(
17cc0 6e 65 77 41 72 67 2c 20 22 6e 6f 4e 65 74 46 78  newArg, "noNetFx
17cd0 34 35 31 22 29 29 0d 0a 20 20 20 20 20 20 20 20  451"))..        
17ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17cf0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
17d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
17d10 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72  ool? value = Par
17d20 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b  seBoolean(text);
17d30 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
17d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17d50 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c  if (value == nul
17d60 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
17d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17d80 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
17d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17da0 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65     error = Trace
17db0 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
17dc0 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
17dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17de0 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69          TracePri
17df0 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65  ority.Lowest, de
17e00 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20  bugCallback,..  
17e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17e30 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c    traceCallback,
17e40 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
17e50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17e70 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30       "Invalid {0
17e80 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a  } boolean value:
17e90 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20   {1}",..        
17ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17eb0 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44              ForD
17ec0 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72  isplay(arg), For
17ed0 44 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d  Display(text)),.
17ee0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17f00 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
17f10 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
17f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17f30 20 20 20 20 20 20 20 20 69 66 20 28 73 74 72 69          if (stri
17f40 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ct)..           
17f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17f60 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
17f70 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  false;....      
17f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17f90 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e            contin
17fa0 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
17fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17fc0 20 7d 0d 0a 0d 0a 20 20 20 20 20 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 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e    configuration.
17ff0 6e 6f 4e 65 74 46 78 34 35 31 20 3d 20 28 62 6f  noNetFx451 = (bo
18000 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20  ol)value;..     
18010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18020 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
18030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
18040 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69  se if (MatchOpti
18050 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e 6f 4e 65  on(newArg, "noNe
18060 74 46 78 34 35 32 22 29 29 0d 0a 20 20 20 20 20  tFx452"))..     
18070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18080 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
18090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
180a0 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20    bool? value = 
180b0 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78  ParseBoolean(tex
180c0 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  t);....         
180d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
180e0 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20     if (value == 
180f0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
18100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18110 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
18120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18130 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72        error = Tr
18140 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
18150 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20  race(..         
18160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18170 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
18180 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c  Priority.Lowest,
18190 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d   debugCallback,.
181a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
181b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
181c0 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
181d0 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
181e0 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
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 22 49 6e 76 61 6c 69 64          "Invalid
18210 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c   {0} boolean val
18220 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20  ue: {1}",..     
18230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46                 F
18250 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20  orDisplay(arg), 
18260 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74 29  ForDisplay(text)
18270 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
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 74 72 61 63 65 43 61 74          traceCat
182a0 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
182b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
182c0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73             if (s
182d0 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20  trict)..        
182e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
182f0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
18300 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20  rn false;....   
18310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18320 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
18330 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  tinue;..        
18340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18350 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
18360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18370 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
18380 6f 6e 2e 6e 6f 4e 65 74 46 78 34 35 32 20 3d 20  on.noNetFx452 = 
18390 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20  (bool)value;..  
183a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
183b0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
183c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
183d0 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f   else if (MatchO
183e0 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e  ption(newArg, "n
183f0 6f 4e 65 74 46 78 34 36 22 29 29 0d 0a 20 20 20  oNetFx46"))..   
18400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18410 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
18420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18430 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20      bool? value 
18440 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74  = ParseBoolean(t
18450 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ext);....       
18460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18470 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d       if (value =
18480 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
18490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
184a0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
184b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
184c0 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
184d0 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
184e0 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20  dTrace(..       
184f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18500 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
18510 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73  cePriority.Lowes
18520 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b  t, debugCallback
18530 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
18540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18550 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
18560 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
18570 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
18580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18590 20 20 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c            "Inval
185a0 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76  id {0} boolean v
185b0 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20  alue: {1}",..   
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 20 20 20 20 20 20 20 20 20                  
185e0 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29   ForDisplay(arg)
185f0 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78  , ForDisplay(tex
18600 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  t)),..          
18610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18620 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
18630 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
18640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18650 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
18660 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20  (strict)..      
18670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
18690 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20  turn false;.... 
186a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
186b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
186c0 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20  ontinue;..      
186d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
186e0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 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 63 6f 6e 66 69 67 75 72 61         configura
18710 74 69 6f 6e 2e 6e 6f 4e 65 74 46 78 34 36 20 3d  tion.noNetFx46 =
18720 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20   (bool)value;.. 
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 7d 0d 0a 20 20 20 20 20 20         }..      
18750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18760 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68    else if (Match
18770 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22  Option(newArg, "
18780 6e 6f 4e 65 74 46 78 34 36 31 22 29 29 0d 0a 20  noNetFx461")).. 
18790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
187a0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
187b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
187c0 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75        bool? valu
187d0 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e  e = ParseBoolean
187e0 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20  (text);....     
187f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18800 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65         if (value
18810 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
18820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18830 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
18840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18850 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
18860 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67  = TraceOps.Debug
18870 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20  AndTrace(..     
18880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
188a0 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77  racePriority.Low
188b0 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61  est, debugCallba
188c0 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ck,..           
188d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
188e0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
188f0 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46  llback, String.F
18900 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
18910 20 20 20 20 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 22 49 6e 76              "Inv
18930 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e  alid {0} boolean
18940 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20   value: {1}",.. 
18950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18970 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72     ForDisplay(ar
18980 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74  g), ForDisplay(t
18990 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ext)),..        
189a0 20 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 74 72 61 63              trac
189c0 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
189d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
189e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
189f0 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20  f (strict)..    
18a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18a20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d  return false;...
18a30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18a50 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20   continue;..    
18a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18a70 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 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 63 6f 6e 66 69 67 75           configu
18aa0 72 61 74 69 6f 6e 2e 6e 6f 4e 65 74 46 78 34 36  ration.noNetFx46
18ab0 31 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b  1 = (bool)value;
18ac0 0d 0a 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 7d 0d 0a 20 20 20            }..   
18ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18af0 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61       else if (Ma
18b00 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67  tchOption(newArg
18b10 2c 20 22 6e 6f 4e 65 74 46 78 34 36 32 22 29 29  , "noNetFx462"))
18b20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18b30 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
18b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18b50 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76           bool? v
18b60 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c  alue = ParseBool
18b70 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20  ean(text);....  
18b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18b90 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61            if (va
18ba0 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  lue == null)..  
18bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18bc0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
18bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18be0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
18bf0 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65  or = TraceOps.De
18c00 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20  bugAndTrace(..  
18c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18c30 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e    TracePriority.
18c40 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c  Lowest, debugCal
18c50 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20  lback,..        
18c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18c70 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
18c80 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
18c90 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
18ca0 20 20 20 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 22                 "
18cc0 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c  Invalid {0} bool
18cd0 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c  ean value: {1}",
18ce0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18d00 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
18d10 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61  (arg), ForDispla
18d20 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20  y(text)),..     
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 20 20 20 74                 t
18d50 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
18d60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18d80 20 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20    if (strict).. 
18d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18db0 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
18dc0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
18dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18de0 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20      continue;.. 
18df0 20 20 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 20 7d 0d 0a 0d 0a             }....
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 20 20 20 63 6f 6e 66              conf
18e30 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 4e 65 74 46  iguration.noNetF
18e40 78 34 36 32 20 3d 20 28 62 6f 6f 6c 29 76 61 6c  x462 = (bool)val
18e50 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
18e60 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
18e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18e80 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20          else if 
18e90 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77  (MatchOption(new
18ea0 41 72 67 2c 20 22 6e 6f 52 75 6e 74 69 6d 65 56  Arg, "noRuntimeV
18eb0 65 72 73 69 6f 6e 22 29 29 0d 0a 20 20 20 20 20  ersion"))..     
18ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18ed0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
18ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18ef0 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20    bool? value = 
18f00 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78  ParseBoolean(tex
18f10 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  t);....         
18f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18f30 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20     if (value == 
18f40 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
18f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18f60 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
18f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18f80 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72        error = Tr
18f90 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
18fa0 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20  race(..         
18fb0 20 20 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 54 72 61 63 65             Trace
18fd0 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c  Priority.Lowest,
18fe0 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d   debugCallback,.
18ff0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19010 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
19020 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
19030 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
19040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19050 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64          "Invalid
19060 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c   {0} boolean val
19070 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20  ue: {1}",..     
19080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46                 F
190a0 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20  orDisplay(arg), 
190b0 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74 29  ForDisplay(text)
190c0 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
190d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
190e0 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
190f0 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
19100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19110 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73             if (s
19120 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20  trict)..        
19130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19140 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
19150 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20  rn false;....   
19160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19170 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
19180 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  tinue;..        
19190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
191a0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
191b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
191c0 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
191d0 6f 6e 2e 6e 6f 52 75 6e 74 69 6d 65 56 65 72 73  on.noRuntimeVers
191e0 69 6f 6e 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75  ion = (bool)valu
191f0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
19200 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
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 65 6c 73 65 20 69 66 20 28         else if (
19230 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41  MatchOption(newA
19240 72 67 2c 20 22 6e 6f 54 72 61 63 65 22 29 29 0d  rg, "noTrace")).
19250 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19260 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
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 62 6f 6f 6c 3f 20 76 61          bool? va
19290 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65  lue = ParseBoole
192a0 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20  an(text);....   
192b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
192c0 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c           if (val
192d0 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ue == null)..   
192e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
192f0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
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 65 72 72 6f              erro
19320 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62  r = TraceOps.Deb
19330 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20  ugAndTrace(..   
19340 20 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 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c   TracePriority.L
19370 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c  owest, debugCall
19380 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20  back,..         
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 74 72 61 63 65             trace
193b0 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67  Callback, String
193c0 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
193d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
193e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 49                "I
193f0 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65  nvalid {0} boole
19400 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d  an value: {1}",.
19410 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19430 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28       ForDisplay(
19440 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79  arg), ForDisplay
19450 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20  (text)),..      
19460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
19480 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
19490 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
194a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
194b0 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20   if (strict)..  
194c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
194d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
194e0 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
194f0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
19500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19510 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20     continue;..  
19520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19530 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
19540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19550 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69             confi
19560 67 75 72 61 74 69 6f 6e 2e 6e 6f 54 72 61 63 65  guration.noTrace
19570 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d   = (bool)value;.
19580 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19590 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
195a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
195b0 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74      else if (Mat
195c0 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c  chOption(newArg,
195d0 20 22 6e 6f 56 73 32 30 30 35 22 29 29 0d 0a 20   "noVs2005")).. 
195e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
195f0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
19600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19610 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75        bool? valu
19620 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e  e = ParseBoolean
19630 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20  (text);....     
19640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19650 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65         if (value
19660 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
19670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19680 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
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 65 72 72 6f 72 20            error 
196b0 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67  = TraceOps.Debug
196c0 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20  AndTrace(..     
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 54                 T
196f0 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77  racePriority.Low
19700 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61  est, debugCallba
19710 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ck,..           
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 74 72 61 63 65 43 61           traceCa
19740 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46  llback, String.F
19750 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
19760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19770 20 20 20 20 20 20 20 20 20 20 20 20 22 49 6e 76              "Inv
19780 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e  alid {0} boolean
19790 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20   value: {1}",.. 
197a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
197b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
197c0 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72     ForDisplay(ar
197d0 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74  g), ForDisplay(t
197e0 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ext)),..        
197f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19800 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
19810 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
19820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
19840 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20  f (strict)..    
19850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19870 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d  return false;...
19880 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
198a0 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20   continue;..    
198b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
198c0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
198d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
198e0 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75           configu
198f0 72 61 74 69 6f 6e 2e 6e 6f 56 73 32 30 30 35 20  ration.noVs2005 
19900 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a  = (bool)value;..
19910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19920 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
19930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19940 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63     else if (Matc
19950 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20  hOption(newArg, 
19960 22 6e 6f 56 73 32 30 30 38 22 29 29 0d 0a 20 20  "noVs2008"))..  
19970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19980 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
19990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
199a0 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65       bool? value
199b0 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28   = ParseBoolean(
199c0 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  text);....      
199d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
199e0 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20        if (value 
199f0 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
19a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19a10 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
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 65 72 72 6f 72 20 3d           error =
19a40 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
19a50 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20  ndTrace(..      
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 54 72                Tr
19a80 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65  acePriority.Lowe
19a90 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63  st, debugCallbac
19aa0 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k,..            
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 74 72 61 63 65 43 61 6c          traceCal
19ad0 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
19ae0 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
19af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19b00 20 20 20 20 20 20 20 20 20 20 20 22 49 6e 76 61             "Inva
19b10 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20  lid {0} boolean 
19b20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20  value: {1}",..  
19b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19b50 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67    ForDisplay(arg
19b60 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65  ), ForDisplay(te
19b70 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  xt)),..         
19b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19b90 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
19ba0 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
19bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
19bd0 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20   (strict)..     
19be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
19c00 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a  eturn false;....
19c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19c30 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20  continue;..     
19c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19c50 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
19c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19c70 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
19c80 61 74 69 6f 6e 2e 6e 6f 56 73 32 30 30 38 20 3d  ation.noVs2008 =
19c90 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20   (bool)value;.. 
19ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19cb0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
19cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19cd0 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68    else if (Match
19ce0 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22  Option(newArg, "
19cf0 6e 6f 56 73 32 30 31 30 22 29 29 0d 0a 20 20 20  noVs2010"))..   
19d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19d10 20 20 20 20 20 7b 0d 0a 20 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 62 6f 6f 6c 3f 20 76 61 6c 75 65 20      bool? value 
19d40 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74  = ParseBoolean(t
19d50 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ext);....       
19d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19d70 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d       if (value =
19d80 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
19d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19da0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
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 65 72 72 6f 72 20 3d 20          error = 
19dd0 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
19de0 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20  dTrace(..       
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 20 20 54 72 61               Tra
19e10 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73  cePriority.Lowes
19e20 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b  t, debugCallback
19e30 2c 0d 0a 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 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
19e60 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
19e70 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
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 22 49 6e 76 61 6c            "Inval
19ea0 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76  id {0} boolean v
19eb0 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20  alue: {1}",..   
19ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19ee0 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29   ForDisplay(arg)
19ef0 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78  , ForDisplay(tex
19f00 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  t)),..          
19f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19f20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
19f30 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
19f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19f50 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
19f60 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20  (strict)..      
19f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
19f90 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20  turn false;.... 
19fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
19fc0 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20  ontinue;..      
19fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19fe0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
19ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a000 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
1a010 74 69 6f 6e 2e 6e 6f 56 73 32 30 31 30 20 3d 20  tion.noVs2010 = 
1a020 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20  (bool)value;..  
1a030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a040 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
1a050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a060 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f   else if (MatchO
1a070 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e  ption(newArg, "n
1a080 6f 56 73 32 30 31 32 22 29 29 0d 0a 20 20 20 20  oVs2012"))..    
1a090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a0a0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1a0b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a0c0 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d     bool? value =
1a0d0 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65   ParseBoolean(te
1a0e0 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  xt);....        
1a0f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a100 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d      if (value ==
1a110 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
1a120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a130 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1a140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a150 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54         error = T
1a160 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
1a170 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20  Trace(..        
1a180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a190 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
1a1a0 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74  ePriority.Lowest
1a1b0 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c  , debugCallback,
1a1c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1a1d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a1e0 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
1a1f0 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ack, String.Form
1a200 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
1a210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a220 20 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69           "Invali
1a230 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61  d {0} boolean va
1a240 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20  lue: {1}",..    
1a250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a270 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c  ForDisplay(arg),
1a280 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74   ForDisplay(text
1a290 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
1a2a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a2b0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
1a2c0 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
1a2d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a2e0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
1a2f0 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20  strict)..       
1a300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a310 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
1a320 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20  urn false;....  
1a330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
1a350 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20  ntinue;..       
1a360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a370 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
1a380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a390 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
1a3a0 69 6f 6e 2e 6e 6f 56 73 32 30 31 32 20 3d 20 28  ion.noVs2012 = (
1a3b0 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20  bool)value;..   
1a3c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a3d0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
1a3e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a3f0 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70  else if (MatchOp
1a400 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e 6f  tion(newArg, "no
1a410 56 73 32 30 31 33 22 29 29 0d 0a 20 20 20 20 20  Vs2013"))..     
1a420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a430 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1a440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a450 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20    bool? value = 
1a460 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78  ParseBoolean(tex
1a470 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  t);....         
1a480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a490 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20     if (value == 
1a4a0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
1a4b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a4c0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1a4d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a4e0 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72        error = Tr
1a4f0 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
1a500 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20  race(..         
1a510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a520 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
1a530 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c  Priority.Lowest,
1a540 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d   debugCallback,.
1a550 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1a560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a570 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
1a580 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
1a590 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
1a5a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a5b0 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64          "Invalid
1a5c0 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c   {0} boolean val
1a5d0 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20  ue: {1}",..     
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 20 20 20 20 20 20 46                 F
1a600 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20  orDisplay(arg), 
1a610 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74 29  ForDisplay(text)
1a620 29 2c 0d 0a 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 20 20                  
1a640 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
1a650 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
1a660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a670 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73             if (s
1a680 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20  trict)..        
1a690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a6a0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
1a6b0 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20  rn false;....   
1a6c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a6d0 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
1a6e0 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  tinue;..        
1a6f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a700 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
1a710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a720 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
1a730 6f 6e 2e 6e 6f 56 73 32 30 31 33 20 3d 20 28 62  on.noVs2013 = (b
1a740 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20  ool)value;..    
1a750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a760 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
1a770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
1a780 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74  lse if (MatchOpt
1a790 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e 6f 56  ion(newArg, "noV
1a7a0 73 32 30 31 35 22 29 29 0d 0a 20 20 20 20 20 20  s2015"))..      
1a7b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a7c0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1a7d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a7e0 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50   bool? value = P
1a7f0 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74  arseBoolean(text
1a800 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
1a810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a820 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e    if (value == n
1a830 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
1a840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a850 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1a860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a870 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61       error = Tra
1a880 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72  ceOps.DebugAndTr
1a890 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ace(..          
1a8a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a8b0 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50            TraceP
1a8c0 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20  riority.Lowest, 
1a8d0 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a  debugCallback,..
1a8e0 20 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 20 20 20                  
1a900 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
1a910 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
1a920 28 0d 0a 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 20 20 20 20                  
1a940 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20         "Invalid 
1a950 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75  {0} boolean valu
1a960 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20  e: {1}",..      
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 20 20 20 20 20 20 20 46 6f                Fo
1a990 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46  rDisplay(arg), F
1a9a0 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74 29 29  orDisplay(text))
1a9b0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1a9c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a9d0 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
1a9e0 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
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 20 69 66 20 28 73 74            if (st
1aa10 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20  rict)..         
1aa20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aa30 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
1aa40 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20  n false;....    
1aa50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aa60 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74              cont
1aa70 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  inue;..         
1aa80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aa90 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
1aaa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aab0 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
1aac0 6e 2e 6e 6f 56 73 32 30 31 35 20 3d 20 28 62 6f  n.noVs2015 = (bo
1aad0 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20  ol)value;..     
1aae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aaf0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
1ab00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
1ab10 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69  se if (MatchOpti
1ab20 6f 6e 28 6e 65 77 41 72 67 2c 20 22 70 65 72 55  on(newArg, "perU
1ab30 73 65 72 22 29 29 0d 0a 20 20 20 20 20 20 20 20  ser"))..        
1ab40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ab50 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1ab60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
1ab70 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72  ool? value = Par
1ab80 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b  seBoolean(text);
1ab90 0d 0a 0d 0a 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 20 20 20 20                  
1abb0 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c  if (value == nul
1abc0 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
1abd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1abe0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1abf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ac00 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65     error = Trace
1ac10 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
1ac20 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
1ac30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ac40 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69          TracePri
1ac50 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65  ority.Lowest, de
1ac60 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20  bugCallback,..  
1ac70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ac80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ac90 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c    traceCallback,
1aca0 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
1acb0 0a 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 20 20 20 20 20 20 20                  
1acd0 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30       "Invalid {0
1ace0 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a  } boolean value:
1acf0 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20   {1}",..        
1ad00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ad10 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44              ForD
1ad20 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72  isplay(arg), For
1ad30 44 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d  Display(text)),.
1ad40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1ad50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ad60 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
1ad70 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
1ad80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ad90 20 20 20 20 20 20 20 20 69 66 20 28 73 74 72 69          if (stri
1ada0 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ct)..           
1adb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1adc0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
1add0 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  false;....      
1ade0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1adf0 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e            contin
1ae00 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
1ae10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ae20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
1ae30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ae40 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e    configuration.
1ae50 70 65 72 55 73 65 72 20 3d 20 28 62 6f 6f 6c 29  perUser = (bool)
1ae60 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  value;..        
1ae70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ae80 7d 0d 0a 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 65 6c 73 65 20             else 
1aea0 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28  if (MatchOption(
1aeb0 6e 65 77 41 72 67 2c 20 22 70 72 6f 76 69 64 65  newArg, "provide
1aec0 72 46 6c 61 67 73 22 29 29 0d 0a 20 20 20 20 20  rFlags"))..     
1aed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aee0 20 20 20 7b 0d 0a 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 6f 62 6a 65 63 74 20 76 61 6c 75 65 20 3d    object value =
1af10 20 50 61 72 73 65 45 6e 75 6d 28 0d 0a 20 20 20   ParseEnum(..   
1af20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1af30 20 20 20 20 20 20 20 20 20 20 20 20 20 74 79 70               typ
1af40 65 6f 66 28 50 72 6f 76 69 64 65 72 46 6c 61 67  eof(ProviderFlag
1af50 73 29 2c 20 74 65 78 74 2c 20 74 72 75 65 29 3b  s), text, true);
1af60 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1af70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1af80 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c  if (value == nul
1af90 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
1afa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1afb0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1afc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1afd0 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65     error = Trace
1afe0 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
1aff0 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
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 54 72 61 63 65 50 72 69          TracePri
1b020 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65  ority.Lowest, de
1b030 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20  bugCallback,..  
1b040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b060 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c    traceCallback,
1b070 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
1b080 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1b090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b0a0 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30       "Invalid {0
1b0b0 7d 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a  } value: {1}",..
1b0c0 20 20 20 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 20                  
1b0e0 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61      ForDisplay(a
1b0f0 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  rg), ForDisplay(
1b100 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20  text)),..       
1b110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b120 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
1b130 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
1b140 20 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 20 20 20 20 20 20 20                  
1b160 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20  if (strict)..   
1b170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b190 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
1b1a0 0d 0a 20 20 20 20 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 74 69 6e 75 65 3b 0d 0a 20 20 20    continue;..   
1b1d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b1e0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
1b1f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b200 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
1b210 75 72 61 74 69 6f 6e 2e 70 72 6f 76 69 64 65 72  uration.provider
1b220 46 6c 61 67 73 20 3d 20 28 50 72 6f 76 69 64 65  Flags = (Provide
1b230 72 46 6c 61 67 73 29 76 61 6c 75 65 3b 0d 0a 20  rFlags)value;.. 
1b240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b250 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
1b260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b270 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68    else if (Match
1b280 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22  Option(newArg, "
1b290 72 65 67 69 73 74 72 79 56 65 72 73 69 6f 6e 22  registryVersion"
1b2a0 29 29 0d 0a 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 7b 0d 0a 20              {.. 
1b2c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b2d0 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69             confi
1b2e0 67 75 72 61 74 69 6f 6e 2e 72 65 67 69 73 74 72  guration.registr
1b2f0 79 56 65 72 73 69 6f 6e 20 3d 20 74 65 78 74 3b  yVersion = text;
1b300 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1b310 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
1b320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b330 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61       else if (Ma
1b340 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67  tchOption(newArg
1b350 2c 20 22 73 74 72 69 63 74 22 29 29 0d 0a 20 20  , "strict"))..  
1b360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b370 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1b380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b390 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65       bool? value
1b3a0 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28   = ParseBoolean(
1b3b0 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  text);....      
1b3c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b3d0 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20        if (value 
1b3e0 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
1b3f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b400 20 20 20 20 20 20 7b 0d 0a 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 65 72 72 6f 72 20 3d           error =
1b430 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
1b440 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20  ndTrace(..      
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 54 72                Tr
1b470 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65  acePriority.Lowe
1b480 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63  st, debugCallbac
1b490 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k,..            
1b4a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b4b0 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
1b4c0 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
1b4d0 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
1b4e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b4f0 20 20 20 20 20 20 20 20 20 20 20 22 49 6e 76 61             "Inva
1b500 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20  lid {0} boolean 
1b510 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20  value: {1}",..  
1b520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b540 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67    ForDisplay(arg
1b550 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65  ), ForDisplay(te
1b560 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  xt)),..         
1b570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b580 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
1b590 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
1b5a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b5b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
1b5c0 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20   (strict)..     
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 20 20 20 20 20 20 20 20 72                 r
1b5f0 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a  eturn false;....
1b600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b620 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20  continue;..     
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 7d 0d 0a 0d 0a 20 20 20 20         }....    
1b650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b660 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
1b670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b680 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
1b690 20 41 6c 6c 6f 77 20 74 68 65 20 63 6f 6d 6d 61   Allow the comma
1b6a0 6e 64 20 6c 69 6e 65 20 61 72 67 75 6d 65 6e 74  nd line argument
1b6b0 73 20 74 6f 0d 0a 20 20 20 20 20 20 20 20 20 20  s to..          
1b6c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b6d0 20 20 2f 2f 20 20 20 20 20 20 20 6f 76 65 72 72    //       overr
1b6e0 69 64 65 20 74 68 65 20 22 73 74 72 69 63 74 6e  ide the "strictn
1b6f0 65 73 73 22 20 73 65 74 74 69 6e 67 0d 0a 20 20  ess" setting..  
1b700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b710 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
1b720 20 20 20 70 72 6f 76 69 64 65 64 20 62 79 20 6f     provided by o
1b730 75 72 20 63 61 6c 6c 65 72 2e 0d 0a 20 20 20 20  ur caller...    
1b740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b750 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
1b760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b770 20 20 20 20 20 20 20 20 73 74 72 69 63 74 20 3d          strict =
1b780 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20   (bool)value;.. 
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 7d 0d 0a 20 20 20 20 20 20         }..      
1b7b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b7c0 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68    else if (Match
1b7d0 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22  Option(newArg, "
1b7e0 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 22 29  throwOnMissing")
1b7f0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
1b800 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
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 62 6f 6f 6c 3f 20            bool? 
1b830 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f  value = ParseBoo
1b840 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20  lean(text);.... 
1b850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b860 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76             if (v
1b870 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  alue == null).. 
1b880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b890 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
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 20 20 20 20 20 20 65 72                er
1b8c0 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44  ror = TraceOps.D
1b8d0 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20  ebugAndTrace(.. 
1b8e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b8f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b900 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79     TracePriority
1b910 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61  .Lowest, debugCa
1b920 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20  llback,..       
1b930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b940 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
1b950 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69  ceCallback, Stri
1b960 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
1b970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b990 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f  "Invalid {0} boo
1b9a0 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22  lean value: {1}"
1b9b0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1b9c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b9d0 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61         ForDispla
1b9e0 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c  y(arg), ForDispl
1b9f0 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20  ay(text)),..    
1ba00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ba10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ba20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
1ba30 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1ba40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ba50 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a     if (strict)..
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 20 20 20 20                  
1ba80 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
1ba90 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1baa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bab0 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a       continue;..
1bac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bad0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
1bae0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1baf0 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
1bb00 66 69 67 75 72 61 74 69 6f 6e 2e 74 68 72 6f 77  figuration.throw
1bb10 4f 6e 4d 69 73 73 69 6e 67 20 3d 20 28 62 6f 6f  OnMissing = (boo
1bb20 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20  l)value;..      
1bb30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bb40 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
1bb50 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73               els
1bb60 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f  e if (MatchOptio
1bb70 6e 28 6e 65 77 41 72 67 2c 20 22 74 72 61 63 65  n(newArg, "trace
1bb80 46 6f 72 6d 61 74 22 29 29 0d 0a 20 20 20 20 20  Format"))..     
1bb90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bba0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1bbb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bbc0 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e    configuration.
1bbd0 74 72 61 63 65 46 6f 72 6d 61 74 20 3d 20 74 65  traceFormat = te
1bbe0 78 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  xt;..           
1bbf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bc00 20 54 72 61 63 65 4f 70 73 2e 54 72 61 63 65 46   TraceOps.TraceF
1bc10 6f 72 6d 61 74 20 3d 20 63 6f 6e 66 69 67 75 72  ormat = configur
1bc20 61 74 69 6f 6e 2e 74 72 61 63 65 46 6f 72 6d 61  ation.traceForma
1bc30 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t;..            
1bc40 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
1bc50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bc60 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28         else if (
1bc70 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41  MatchOption(newA
1bc80 72 67 2c 20 22 74 72 61 63 65 50 72 69 6f 72 69  rg, "tracePriori
1bc90 74 79 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ty"))..         
1bca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
1bcb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1bcc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 62                ob
1bcd0 6a 65 63 74 20 76 61 6c 75 65 20 3d 20 50 61 72  ject value = Par
1bce0 73 65 45 6e 75 6d 28 0d 0a 20 20 20 20 20 20 20  seEnum(..       
1bcf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bd00 20 20 20 20 20 20 20 20 20 74 79 70 65 6f 66 28           typeof(
1bd10 54 72 61 63 65 50 72 69 6f 72 69 74 79 29 2c 20  TracePriority), 
1bd20 74 65 78 74 2c 20 74 72 75 65 29 3b 0d 0a 0d 0a  text, true);....
1bd30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bd40 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
1bd50 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  value == null)..
1bd60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bd70 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1bd80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bd90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
1bda0 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e  rror = TraceOps.
1bdb0 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a  DebugAndTrace(..
1bdc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bdd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bde0 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74      TracePriorit
1bdf0 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43  y.Lowest, debugC
1be00 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20  allback,..      
1be10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1be20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
1be30 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
1be40 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
1be50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1be60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1be70 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 76 61   "Invalid {0} va
1be80 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20  lue: {1}",..    
1be90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1beb0 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c  ForDisplay(arg),
1bec0 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74   ForDisplay(text
1bed0 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
1bee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bef0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
1bf00 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
1bf10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bf20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
1bf30 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20  strict)..       
1bf40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bf50 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
1bf60 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20  urn false;....  
1bf70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bf80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
1bf90 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20  ntinue;..       
1bfa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bfb0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
1bfc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bfd0 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
1bfe0 69 6f 6e 2e 74 72 61 63 65 50 72 69 6f 72 69 74  ion.tracePriorit
1bff0 79 20 3d 20 28 54 72 61 63 65 50 72 69 6f 72 69  y = (TracePriori
1c000 74 79 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20  ty)value;..     
1c010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c020 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e         TraceOps.
1c030 54 72 61 63 65 50 72 69 6f 72 69 74 79 20 3d 20  TracePriority = 
1c040 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 74 72  configuration.tr
1c050 61 63 65 50 72 69 6f 72 69 74 79 3b 0d 0a 20 20  acePriority;..  
1c060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c070 20 20 20 20 20 20 7d 0d 0a 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 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f   else if (MatchO
1c0a0 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 76  ption(newArg, "v
1c0b0 65 72 62 6f 73 65 22 29 29 0d 0a 20 20 20 20 20  erbose"))..     
1c0c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c0d0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1c0e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c0f0 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20    bool? value = 
1c100 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78  ParseBoolean(tex
1c110 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  t);....         
1c120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c130 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20     if (value == 
1c140 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
1c150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c160 20 20 20 7b 0d 0a 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 20 20                  
1c180 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72        error = Tr
1c190 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
1c1a0 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20  race(..         
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 54 72 61 63 65             Trace
1c1d0 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c  Priority.Lowest,
1c1e0 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d   debugCallback,.
1c1f0 0a 20 20 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 20 20 20 20 20                  
1c210 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
1c220 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
1c230 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
1c240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c250 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64          "Invalid
1c260 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c   {0} boolean val
1c270 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20  ue: {1}",..     
1c280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46                 F
1c2a0 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20  orDisplay(arg), 
1c2b0 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74 29  ForDisplay(text)
1c2c0 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
1c2d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c2e0 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
1c2f0 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
1c300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c310 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73             if (s
1c320 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20  trict)..        
1c330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c340 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
1c350 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20  rn false;....   
1c360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c370 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
1c380 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  tinue;..        
1c390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c3a0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
1c3b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c3c0 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
1c3d0 6f 6e 2e 76 65 72 62 6f 73 65 20 3d 20 28 62 6f  on.verbose = (bo
1c3e0 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20  ol)value;..     
1c3f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c400 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
1c410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
1c420 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69  se if (MatchOpti
1c430 6f 6e 28 6e 65 77 41 72 67 2c 20 22 76 73 56 65  on(newArg, "vsVe
1c440 72 73 69 6f 6e 53 75 66 66 69 78 22 29 29 0d 0a  rsionSuffix"))..
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 7b 0d 0a 20 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 63 6f 6e 66 69 67 75 72 61         configura
1c490 74 69 6f 6e 2e 76 73 56 65 72 73 69 6f 6e 53 75  tion.vsVersionSu
1c4a0 66 66 69 78 20 3d 20 74 65 78 74 3b 0d 0a 20 20  ffix = text;..  
1c4b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c4c0 20 20 20 20 20 20 7d 0d 0a 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 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f   else if (MatchO
1c4f0 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 77  ption(newArg, "w
1c500 68 61 74 49 66 22 29 29 0d 0a 20 20 20 20 20 20  hatIf"))..      
1c510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c520 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1c530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c540 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50   bool? value = P
1c550 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74  arseBoolean(text
1c560 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
1c570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c580 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e    if (value == n
1c590 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
1c5a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c5b0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1c5c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c5d0 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61       error = Tra
1c5e0 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72  ceOps.DebugAndTr
1c5f0 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ace(..          
1c600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c610 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50            TraceP
1c620 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20  riority.Lowest, 
1c630 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a  debugCallback,..
1c640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c660 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
1c670 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
1c680 28 0d 0a 20 20 20 20 20 20 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 22 49 6e 76 61 6c 69 64 20         "Invalid 
1c6b0 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75  {0} boolean valu
1c6c0 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20  e: {1}",..      
1c6d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c6e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f                Fo
1c6f0 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46  rDisplay(arg), F
1c700 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74 29 29  orDisplay(text))
1c710 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1c720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c730 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
1c740 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
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 69 66 20 28 73 74            if (st
1c770 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20  rict)..         
1c780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c790 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
1c7a0 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20  n false;....    
1c7b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c7c0 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74              cont
1c7d0 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  inue;..         
1c7e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c7f0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
1c800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c810 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
1c820 6e 2e 77 68 61 74 49 66 20 3d 20 28 62 6f 6f 6c  n.whatIf = (bool
1c830 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20  )value;..       
1c840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c850 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
1c860 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
1c870 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e   if (MatchOption
1c880 28 6e 65 77 41 72 67 2c 20 22 77 6f 77 36 34 22  (newArg, "wow64"
1c890 29 29 0d 0a 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 7b 0d 0a 20              {.. 
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 62 6f 6f 6c 3f             bool?
1c8d0 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f   value = ParseBo
1c8e0 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a  olean(text);....
1c8f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c900 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
1c910 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  value == null)..
1c920 20 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 20 20 20 7b 0d 0a 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 20 20 20 20 20 20 20 20 20 65                 e
1c960 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e  rror = TraceOps.
1c970 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a  DebugAndTrace(..
1c980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c9a0 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74      TracePriorit
1c9b0 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43  y.Lowest, debugC
1c9c0 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20  allback,..      
1c9d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c9e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
1c9f0 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
1ca00 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
1ca10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ca20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ca30 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f   "Invalid {0} bo
1ca40 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d  olean value: {1}
1ca50 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
1ca60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ca70 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
1ca80 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70  ay(arg), ForDisp
1ca90 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20  lay(text)),..   
1caa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cac0 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
1cad0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1cae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1caf0 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d      if (strict).
1cb00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1cb10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cb20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
1cb30 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
1cb40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cb50 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d        continue;.
1cb60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1cb70 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
1cb80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1cb90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
1cba0 6e 66 69 67 75 72 61 74 69 6f 6e 2e 77 6f 77 36  nfiguration.wow6
1cbb0 34 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b  4 = (bool)value;
1cbc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1cbd0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
1cbe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cbf0 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20       else..     
1cc00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cc10 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1cc20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cc30 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f    error = TraceO
1cc40 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
1cc50 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
1cc60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cc70 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79     TracePriority
1cc80 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61  .Lowest, debugCa
1cc90 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20  llback,..       
1cca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ccb0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
1ccc0 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46  llback, String.F
1ccd0 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
1cce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ccf0 20 20 20 20 20 20 20 20 22 55 6e 73 75 70 70 6f          "Unsuppo
1cd00 72 74 65 64 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e  rted command lin
1cd10 65 20 6f 70 74 69 6f 6e 3a 20 7b 30 7d 22 2c 0d  e option: {0}",.
1cd20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1cd30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cd40 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29   ForDisplay(arg)
1cd50 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79  ), traceCategory
1cd60 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
1cd70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cd80 20 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20    if (strict).. 
1cd90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cda0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
1cdb0 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
1cdc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cdd0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
1cde0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
1cdf0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1ce00 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75        return tru
1ce10 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
1ce20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
1ce30 20 20 20 20 20 20 20 63 61 74 63 68 20 28 45 78         catch (Ex
1ce40 63 65 70 74 69 6f 6e 20 65 29 0d 0a 20 20 20 20  ception e)..    
1ce50 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1ce60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ce70 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75     TraceOps.Debu
1ce80 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50  gAndTrace(TraceP
1ce90 72 69 6f 72 69 74 79 2e 48 69 67 68 65 73 74 2c  riority.Highest,
1cea0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1ceb0 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43            debugC
1cec0 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61  allback, traceCa
1ced0 6c 6c 62 61 63 6b 2c 20 65 2c 20 74 72 61 63 65  llback, e, trace
1cee0 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
1cef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cf00 20 20 65 72 72 6f 72 20 3d 20 22 46 61 69 6c 65    error = "Faile
1cf10 64 20 74 6f 20 6d 6f 64 69 66 79 20 63 6f 6e 66  d to modify conf
1cf20 69 67 75 72 61 74 69 6f 6e 2e 22 3b 0d 0a 20 20  iguration.";..  
1cf30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
1cf40 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1cf50 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
1cf60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
1cf70 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
1cf80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cf90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cfa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cfb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cfc0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
1cfd0 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65    [MethodImpl(Me
1cfe0 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e  thodImplOptions.
1cff0 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20  NoInlining)]..  
1d000 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
1d010 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 50 72 6f   static bool Pro
1d020 63 65 73 73 28 0d 0a 20 20 20 20 20 20 20 20 20  cess(..         
1d030 20 20 20 20 20 20 20 73 74 72 69 6e 67 5b 5d 20         string[] 
1d040 61 72 67 73 2c 0d 0a 20 20 20 20 20 20 20 20 20  args,..         
1d050 20 20 20 20 20 20 20 43 6f 6e 66 69 67 75 72 61         Configura
1d060 74 69 6f 6e 20 63 6f 6e 66 69 67 75 72 61 74 69  tion configurati
1d070 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on,..           
1d080 20 20 20 20 20 62 6f 6f 6c 20 73 74 72 69 63 74       bool strict
1d090 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1d0a0 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 65 72     ref string er
1d0b0 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ror..           
1d0c0 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
1d0d0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1d0e0 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20         try..    
1d0f0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1d100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d110 20 20 20 69 66 20 28 63 6f 6e 66 69 67 75 72 61     if (configura
1d120 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  tion == null).. 
1d130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d140 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1d150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
1d160 72 6f 72 20 3d 20 22 49 6e 76 61 6c 69 64 20 63  ror = "Invalid c
1d170 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 22 3b 0d  onfiguration.";.
1d180 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d190 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
1d1a0 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
1d1b0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
1d1c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d1d0 20 20 20 20 20 41 73 73 65 6d 62 6c 79 20 61 73       Assembly as
1d1e0 73 65 6d 62 6c 79 20 3d 20 63 6f 6e 66 69 67 75  sembly = configu
1d1f0 72 61 74 69 6f 6e 2e 61 73 73 65 6d 62 6c 79 3b  ration.assembly;
1d200 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1d210 20 20 20 20 20 20 20 20 69 66 20 28 61 73 73 65          if (asse
1d220 6d 62 6c 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  mbly == null).. 
1d230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d240 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1d250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
1d260 72 6f 72 20 3d 20 22 49 6e 76 61 6c 69 64 20 61  ror = "Invalid a
1d270 73 73 65 6d 62 6c 79 2e 22 3b 0d 0a 20 20 20 20  ssembly.";..    
1d280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d290 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
1d2a0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
1d2b0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
1d2c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d2d0 69 66 20 28 21 63 6f 6e 66 69 67 75 72 61 74 69  if (!configurati
1d2e0 6f 6e 2e 6e 6f 54 72 61 63 65 29 0d 0a 20 20 20  on.noTrace)..   
1d2f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d300 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1d310 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
1d320 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e  !configuration.n
1d330 6f 4c 6f 67 20 26 26 0d 0a 20 20 20 20 20 20 20  oLog &&..       
1d340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d350 20 20 20 20 20 53 74 72 69 6e 67 2e 49 73 4e 75       String.IsNu
1d360 6c 6c 4f 72 45 6d 70 74 79 28 63 6f 6e 66 69 67  llOrEmpty(config
1d370 75 72 61 74 69 6f 6e 2e 6c 6f 67 46 69 6c 65 4e  uration.logFileN
1d380 61 6d 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ame))..         
1d390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
1d3a0 0d 0a 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 2f 2f                //
1d3c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1d3d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1d3e0 20 4e 4f 54 45 3a 20 55 73 65 20 74 68 65 20 64   NOTE: Use the d
1d3f0 65 66 61 75 6c 74 20 6c 6f 67 20 66 69 6c 65 20  efault log file 
1d400 6e 61 6d 65 2e 0d 0a 20 20 20 20 20 20 20 20 20  name...         
1d410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d420 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
1d430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d440 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
1d450 2e 6c 6f 67 46 69 6c 65 4e 61 6d 65 20 3d 20 47  .logFileName = G
1d460 65 74 4c 6f 67 46 69 6c 65 4e 61 6d 65 28 0d 0a  etLogFileName(..
1d470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d490 22 74 72 61 63 65 22 29 3b 0d 0a 20 20 20 20 20  "trace");..     
1d4a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d4b0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
1d4c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d4d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d4e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d4f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d500 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
1d510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d520 20 20 20 69 66 20 28 21 63 6f 6e 66 69 67 75 72     if (!configur
1d530 61 74 69 6f 6e 2e 6e 6f 43 6f 6e 73 6f 6c 65 29  ation.noConsole)
1d540 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1d550 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1d560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d570 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
1d580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d590 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
1d5a0 3a 20 49 6e 20 76 65 72 62 6f 73 65 20 6d 6f 64  : In verbose mod
1d5b0 65 2c 20 64 65 62 75 67 20 6f 75 74 70 75 74 20  e, debug output 
1d5c0 28 74 68 61 74 20 6d 65 65 74 73 0d 0a 20 20 20  (that meets..   
1d5d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d5e0 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
1d5f0 20 20 74 68 65 20 63 6f 6e 66 69 67 75 72 65 64    the configured
1d600 20 70 72 69 6f 72 69 74 79 20 63 72 69 74 65 72   priority criter
1d610 69 61 29 20 77 69 6c 6c 20 62 65 0d 0a 20 20 20  ia) will be..   
1d620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d630 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
1d640 20 20 64 69 73 70 6c 61 79 65 64 20 74 6f 20 74    displayed to t
1d650 68 65 20 63 6f 6e 73 6f 6c 65 3b 20 6f 74 68 65  he console; othe
1d660 72 77 69 73 65 2c 20 74 72 61 63 65 0d 0a 20 20  rwise, trace..  
1d670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d680 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
1d690 20 20 20 6f 75 74 70 75 74 20 28 74 68 61 74 20     output (that 
1d6a0 6d 65 65 74 73 20 74 68 65 20 63 6f 6e 66 69 67  meets the config
1d6b0 75 72 65 64 20 70 72 69 6f 72 69 74 79 0d 0a 20  ured priority.. 
1d6c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d6d0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
1d6e0 20 20 20 20 63 72 69 74 65 72 69 61 29 20 77 69      criteria) wi
1d6f0 6c 6c 20 62 65 20 64 69 73 70 6c 61 79 65 64 20  ll be displayed 
1d700 74 6f 20 74 68 65 20 63 6f 6e 73 6f 6c 65 2e 0d  to the console..
1d710 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d720 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
1d730 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d740 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
1d750 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 64  (configuration.d
1d760 65 62 75 67 29 0d 0a 20 20 20 20 20 20 20 20 20  ebug)..         
1d770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d780 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1d790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d7a0 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
1d7b0 20 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 20 2f 2f 20 4e 4f 54            // NOT
1d7d0 45 3a 20 41 64 64 20 74 68 65 20 63 6f 6e 73 6f  E: Add the conso
1d7e0 6c 65 20 74 72 61 63 65 20 6c 69 73 74 65 6e 65  le trace listene
1d7f0 72 20 74 6f 20 74 68 65 0d 0a 20 20 20 20 20 20  r to the..      
1d800 20 20 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 2f 2f 20 20 20 20            //    
1d820 20 20 20 6c 69 73 74 20 6f 66 20 74 72 61 63 65     list of trace
1d830 20 6c 69 73 74 65 6e 65 72 73 20 6d 61 69 6e 74   listeners maint
1d840 61 69 6e 65 64 20 62 79 0d 0a 20 20 20 20 20 20  ained by..      
1d850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d860 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
1d870 20 20 20 74 68 65 20 54 72 61 63 65 4f 70 73 20     the TraceOps 
1d880 63 6c 61 73 73 20 28 69 2e 65 2e 20 6f 6e 6c 79  class (i.e. only
1d890 20 6d 65 73 73 61 67 65 73 0d 0a 20 20 20 20 20   messages..     
1d8a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d8b0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
1d8c0 20 20 20 20 74 68 61 74 20 6d 65 65 74 20 74 68      that meet th
1d8d0 65 20 64 65 62 75 67 20 70 72 69 6f 72 69 74 79  e debug priority
1d8e0 20 77 69 6c 6c 20 62 65 0d 0a 20 20 20 20 20 20   will be..      
1d8f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d900 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
1d910 20 20 20 73 65 65 6e 20 6f 6e 20 74 68 65 20 63     seen on the c
1d920 6f 6e 73 6f 6c 65 29 2e 0d 0a 20 20 20 20 20 20  onsole)...      
1d930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d940 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
1d950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
1d970 61 63 65 4f 70 73 2e 53 65 74 75 70 44 65 62 75  aceOps.SetupDebu
1d980 67 4c 69 73 74 65 6e 65 72 73 28 29 3b 0d 0a 20  gListeners();.. 
1d990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d9a0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
1d9b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d9c0 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a            else..
1d9d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d9e0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1d9f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1da00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1da10 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
1da20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1da30 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 41 64 64 20     // NOTE: Add 
1da40 74 68 65 20 63 6f 6e 73 6f 6c 65 20 74 72 61 63  the console trac
1da50 65 20 6c 69 73 74 65 6e 65 72 20 74 6f 20 74 68  e listener to th
1da60 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
1da70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1da80 20 20 20 2f 2f 20 20 20 20 20 20 20 6c 69 73 74     //       list
1da90 20 6f 66 20 62 75 69 6c 74 2d 69 6e 20 74 72 61   of built-in tra
1daa0 63 65 20 6c 69 73 74 65 6e 65 72 73 20 28 69 2e  ce listeners (i.
1dab0 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e...            
1dac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dad0 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6f 6e 6c      //       onl
1dae0 79 20 6d 65 73 73 61 67 65 73 20 74 68 61 74 20  y messages that 
1daf0 6d 65 65 74 20 74 68 65 20 74 72 61 63 65 0d 0a  meet the trace..
1db00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1db10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1db20 2f 2f 20 20 20 20 20 20 20 70 72 69 6f 72 69 74  //       priorit
1db30 79 20 77 69 6c 6c 20 62 65 20 73 65 65 6e 20 6f  y will be seen o
1db40 6e 20 74 68 65 20 63 6f 6e 73 6f 6c 65 29 2e 0d  n the console)..
1db50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1db60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1db70 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
1db80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1db90 20 20 20 20 20 54 72 61 63 65 2e 4c 69 73 74 65       Trace.Liste
1dba0 6e 65 72 73 2e 41 64 64 28 6e 65 77 20 43 6f 6e  ners.Add(new Con
1dbb0 73 6f 6c 65 54 72 61 63 65 4c 69 73 74 65 6e 65  soleTraceListene
1dbc0 72 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  r());..         
1dbd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dbe0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
1dbf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
1dc00 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1dc10 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
1dc20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1dc30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1dc40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1dc50 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
1dc60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
1dc70 20 28 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e   (!configuration
1dc80 2e 6e 6f 4c 6f 67 20 26 26 0d 0a 20 20 20 20 20  .noLog &&..     
1dc90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dca0 20 20 20 20 20 20 20 21 53 74 72 69 6e 67 2e 49         !String.I
1dcb0 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 63 6f 6e  sNullOrEmpty(con
1dcc0 66 69 67 75 72 61 74 69 6f 6e 2e 6c 6f 67 46 69  figuration.logFi
1dcd0 6c 65 4e 61 6d 65 29 29 0d 0a 20 20 20 20 20 20  leName))..      
1dce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dcf0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1dd00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dd10 20 54 72 61 63 65 2e 4c 69 73 74 65 6e 65 72 73   Trace.Listeners
1dd20 2e 41 64 64 28 6e 65 77 20 54 65 78 74 57 72 69  .Add(new TextWri
1dd30 74 65 72 54 72 61 63 65 4c 69 73 74 65 6e 65 72  terTraceListener
1dd40 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
1dd50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dd60 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
1dd70 2e 6c 6f 67 46 69 6c 65 4e 61 6d 65 29 29 3b 0d  .logFileName));.
1dd80 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1dd90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1dda0 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
1ddb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1ddc0 2f 20 4e 4f 54 45 3a 20 54 65 63 68 6e 69 63 61  / NOTE: Technica
1ddd0 6c 6c 79 2c 20 77 65 20 63 72 65 61 74 65 64 20  lly, we created 
1dde0 74 68 65 20 6c 6f 67 20 66 69 6c 65 2e 0d 0a 20  the log file... 
1ddf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1de00 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
1de10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1de20 20 20 20 20 20 20 20 20 20 20 20 66 69 6c 65 73             files
1de30 43 72 65 61 74 65 64 2b 2b 3b 0d 0a 20 20 20 20  Created++;..    
1de40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1de50 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
1de60 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
1de70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1de80 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
1de90 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
1dea0 4f 54 45 3a 20 44 75 6d 70 20 74 68 65 20 63 6f  OTE: Dump the co
1deb0 6e 66 69 67 75 72 61 74 69 6f 6e 20 6e 6f 77 20  nfiguration now 
1dec0 69 6e 20 63 61 73 65 20 77 65 20 6e 65 65 64 20  in case we need 
1ded0 74 6f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  to..            
1dee0 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
1def0 20 74 72 6f 75 62 6c 65 73 68 6f 6f 74 20 61 6e   troubleshoot an
1df00 79 20 69 73 73 75 65 73 2e 0d 0a 20 20 20 20 20  y issues...     
1df10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1df20 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
1df30 20 20 20 20 20 20 20 69 66 20 28 63 6f 6e 66 69         if (confi
1df40 67 75 72 61 74 69 6f 6e 2e 64 65 62 75 67 50 72  guration.debugPr
1df50 69 6f 72 69 74 79 20 3c 3d 20 54 72 61 63 65 50  iority <= TraceP
1df60 72 69 6f 72 69 74 79 2e 4d 65 64 69 75 6d 29 0d  riority.Medium).
1df70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1df80 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75           configu
1df90 72 61 74 69 6f 6e 2e 44 75 6d 70 28 64 65 62 75  ration.Dump(debu
1dfa0 67 43 61 6c 6c 62 61 63 6b 29 3b 0d 0a 0d 0a 20  gCallback);.... 
1dfb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dfc0 20 20 20 69 66 20 28 63 6f 6e 66 69 67 75 72 61     if (configura
1dfd0 74 69 6f 6e 2e 74 72 61 63 65 50 72 69 6f 72 69  tion.tracePriori
1dfe0 74 79 20 3c 3d 20 54 72 61 63 65 50 72 69 6f 72  ty <= TracePrior
1dff0 69 74 79 2e 4d 65 64 69 75 6d 29 0d 0a 20 20 20  ity.Medium)..   
1e000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e010 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
1e020 6f 6e 2e 44 75 6d 70 28 74 72 61 63 65 43 61 6c  on.Dump(traceCal
1e030 6c 62 61 63 6b 29 3b 0d 0a 0d 0a 20 20 20 20 20  lback);....     
1e040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1e050 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
1e060 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
1e070 53 68 6f 77 20 77 68 65 72 65 20 77 65 20 61 72  Show where we ar
1e080 65 20 72 75 6e 6e 69 6e 67 20 66 72 6f 6d 20 61  e running from a
1e090 6e 64 20 68 6f 77 20 77 65 20 77 65 72 65 0d 0a  nd how we were..
1e0a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e0b0 20 20 20 20 2f 2f 20 20 20 20 20 20 20 69 6e 76      //       inv
1e0c0 6f 6b 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 20  oked...         
1e0d0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
1e0e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e0f0 20 20 20 73 74 72 69 6e 67 20 6c 6f 63 61 74 69     string locati
1e100 6f 6e 20 3d 20 61 73 73 65 6d 62 6c 79 2e 4c 6f  on = assembly.Lo
1e110 63 61 74 69 6f 6e 3b 0d 0a 0d 0a 20 20 20 20 20  cation;....     
1e120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
1e130 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
1e140 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72  Trace(TracePrior
1e150 69 74 79 2e 4d 65 64 69 75 6d 4c 6f 77 2c 0d 0a  ity.MediumLow,..
1e160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e170 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c          debugCal
1e180 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c  lback, traceCall
1e190 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
1e1a0 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
1e1b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 52                "R
1e1c0 75 6e 6e 69 6e 67 20 65 78 65 63 75 74 61 62 6c  unning executabl
1e1d0 65 20 69 73 3a 20 7b 30 7d 22 2c 20 46 6f 72 44  e is: {0}", ForD
1e1e0 69 73 70 6c 61 79 28 6c 6f 63 61 74 69 6f 6e 29  isplay(location)
1e1f0 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
1e200 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
1e210 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
1e220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e230 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75     TraceOps.Debu
1e240 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50  gAndTrace(TraceP
1e250 72 69 6f 72 69 74 79 2e 4d 65 64 69 75 6d 4c 6f  riority.MediumLo
1e260 77 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  w,..            
1e270 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75              debu
1e280 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65  gCallback, trace
1e290 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67  Callback, String
1e2a0 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
1e2b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e2c0 20 20 22 4f 72 69 67 69 6e 61 6c 20 63 6f 6d 6d    "Original comm
1e2d0 61 6e 64 20 6c 69 6e 65 20 69 73 3a 20 7b 30 7d  and line is: {0}
1e2e0 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
1e2f0 20 20 20 20 20 20 20 20 20 20 20 20 45 6e 76 69              Envi
1e300 72 6f 6e 6d 65 6e 74 2e 43 6f 6d 6d 61 6e 64 4c  ronment.CommandL
1e310 69 6e 65 29 2c 20 74 72 61 63 65 43 61 74 65 67  ine), traceCateg
1e320 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
1e330 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
1e340 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72  ceOps.DebugAndTr
1e350 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74  ace(TracePriorit
1e360 79 2e 4d 65 64 69 75 6d 4c 6f 77 2c 0d 0a 20 20  y.MediumLow,..  
1e370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e380 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62        debugCallb
1e390 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61  ack, traceCallba
1e3a0 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
1e3b0 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
1e3c0 20 20 20 20 20 20 20 20 20 20 20 20 22 52 75 6e              "Run
1e3d0 6e 69 6e 67 20 70 72 6f 63 65 73 73 20 69 73 20  ning process is 
1e3e0 7b 30 7d 2e 22 2c 20 49 73 36 34 42 69 74 50 72  {0}.", Is64BitPr
1e3f0 6f 63 65 73 73 28 29 20 3f 0d 0a 20 20 20 20 20  ocess() ?..     
1e400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e410 20 20 20 20 20 20 20 22 36 34 2d 62 69 74 22 20         "64-bit" 
1e420 3a 20 22 33 32 2d 62 69 74 22 29 2c 20 74 72 61  : "32-bit"), tra
1e430 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
1e440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e450 20 20 20 20 69 66 20 28 21 63 6f 6e 66 69 67 75      if (!configu
1e460 72 61 74 69 6f 6e 2e 77 68 61 74 49 66 29 0d 0a  ration.whatIf)..
1e470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e480 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1e490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1e4a0 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
1e4b0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
1e4c0 54 45 3a 20 49 66 20 74 68 65 20 64 65 62 75 67  TE: If the debug
1e4d0 67 65 72 20 69 73 20 61 74 74 61 63 68 65 64 20  ger is attached 
1e4e0 61 6e 64 20 22 77 68 61 74 2d 69 66 22 0d 0a 20  and "what-if".. 
1e4f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e500 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
1e510 6d 6f 64 65 20 69 73 20 5b 6e 6f 77 5d 20 64 69  mode is [now] di
1e520 73 61 62 6c 65 64 2c 20 69 73 73 75 65 20 61 20  sabled, issue a 
1e530 77 61 72 6e 69 6e 67 2e 0d 0a 20 20 20 20 20 20  warning...      
1e540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e550 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
1e560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
1e570 20 28 44 65 62 75 67 67 65 72 2e 49 73 41 74 74   (Debugger.IsAtt
1e580 61 63 68 65 64 29 0d 0a 20 20 20 20 20 20 20 20  ached)..        
1e590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e5a0 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62      TraceOps.Deb
1e5b0 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65  ugAndTrace(Trace
1e5c0 50 72 69 6f 72 69 74 79 2e 4d 65 64 69 75 6d 48  Priority.MediumH
1e5d0 69 67 68 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  igh,..          
1e5e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e5f0 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62        debugCallb
1e600 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61  ack, traceCallba
1e610 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ck,..           
1e620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e630 20 20 20 20 20 22 46 6f 72 63 65 64 20 74 6f 20       "Forced to 
1e640 64 69 73 61 62 6c 65 20 5c 22 77 68 61 74 2d 69  disable \"what-i
1e650 66 5c 22 20 6d 6f 64 65 20 77 69 74 68 20 22 20  f\" mode with " 
1e660 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  +..             
1e670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e680 20 20 20 22 64 65 62 75 67 67 65 72 20 61 74 74     "debugger att
1e690 61 63 68 65 64 2e 22 2c 20 74 72 61 63 65 43 61  ached.", traceCa
1e6a0 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20  tegory);..      
1e6b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
1e6c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1e6d0 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20       else..     
1e6e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
1e6f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1e700 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
1e710 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
1e720 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4d  (TracePriority.M
1e730 65 64 69 75 6d 48 69 67 68 2c 0d 0a 20 20 20 20  ediumHigh,..    
1e740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e750 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c          debugCal
1e760 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c  lback, traceCall
1e770 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20  back,..         
1e780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e790 20 20 20 22 4e 6f 20 61 63 74 75 61 6c 20 63 68     "No actual ch
1e7a0 61 6e 67 65 73 20 77 69 6c 6c 20 62 65 20 6d 61  anges will be ma
1e7b0 64 65 20 74 6f 20 74 68 69 73 20 22 20 2b 0d 0a  de to this " +..
1e7c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e7d0 20 20 20 20 20 20 20 20 20 20 20 20 22 73 79 73              "sys
1e7e0 74 65 6d 20 62 65 63 61 75 73 65 20 5c 22 77 68  tem because \"wh
1e7f0 61 74 2d 69 66 5c 22 20 6d 6f 64 65 20 69 73 20  at-if\" mode is 
1e800 65 6e 61 62 6c 65 64 2e 22 2c 0d 0a 20 20 20 20  enabled.",..    
1e810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e820 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
1e830 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20 20  egory);..       
1e840 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
1e850 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1e860 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
1e870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1e880 20 4e 4f 54 45 3a 20 49 66 20 74 68 65 20 63 6f   NOTE: If the co
1e890 6d 6d 61 6e 64 20 6c 69 6e 65 20 68 61 73 20 6e  mmand line has n
1e8a0 6f 74 20 62 65 65 6e 20 6d 61 6e 75 61 6c 6c 79  ot been manually
1e8b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1e8c0 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 63        //       c
1e8d0 6f 6e 66 69 72 6d 65 64 20 28 69 2e 65 2e 20 76  onfirmed (i.e. v
1e8e0 69 61 20 74 68 65 20 65 78 70 6c 69 63 69 74 20  ia the explicit 
1e8f0 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 0d 0a 20 20  command line..  
1e900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e910 20 20 2f 2f 20 20 20 20 20 20 20 6f 70 74 69 6f    //       optio
1e920 6e 29 2c 20 74 68 65 6e 20 73 74 6f 70 20 70 72  n), then stop pr
1e930 6f 63 65 73 73 69 6e 67 20 6e 6f 77 2e 20 20 57  ocessing now.  W
1e940 65 20 65 6e 66 6f 72 63 65 0d 0a 20 20 20 20 20  e enforce..     
1e950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1e960 2f 20 20 20 20 20 20 20 74 68 69 73 20 72 75 6c  /       this rul
1e970 65 20 73 6f 20 74 68 61 74 20 73 69 6d 70 6c 79  e so that simply
1e980 20 64 6f 75 62 6c 65 2d 63 6c 69 63 6b 69 6e 67   double-clicking
1e990 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 20 20   the..          
1e9a0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
1e9b0 20 20 20 65 78 65 63 75 74 61 62 6c 65 20 77 69     executable wi
1e9c0 6c 6c 20 6e 6f 74 20 72 65 73 75 6c 74 20 69 6e  ll not result in
1e9d0 20 61 6e 79 20 63 68 61 6e 67 65 73 20 62 65 69   any changes bei
1e9e0 6e 67 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ng..            
1e9f0 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
1ea00 20 6d 61 64 65 20 74 6f 20 74 68 65 20 73 79 73   made to the sys
1ea10 74 65 6d 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  tem...          
1ea20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
1ea30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ea40 20 20 69 66 20 28 21 63 6f 6e 66 69 67 75 72 61    if (!configura
1ea50 74 69 6f 6e 2e 63 6f 6e 66 69 72 6d 29 0d 0a 20  tion.confirm).. 
1ea60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ea70 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1ea80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
1ea90 72 6f 72 20 3d 20 22 43 61 6e 6e 6f 74 20 63 6f  ror = "Cannot co
1eaa0 6e 74 69 6e 75 65 2c 20 74 68 65 20 5c 22 63 6f  ntinue, the \"co
1eab0 6e 66 69 72 6d 5c 22 20 6f 70 74 69 6f 6e 20 69  nfirm\" option i
1eac0 73 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20  s " +..         
1ead0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eae0 20 20 20 22 6e 6f 74 20 65 6e 61 62 6c 65 64 2e     "not enabled.
1eaf0 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  ";....          
1eb00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
1eb10 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
1eb20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eb30 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
1eb40 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
1eb50 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
1eb60 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
1eb70 20 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68             catch
1eb80 20 28 45 78 63 65 70 74 69 6f 6e 20 65 29 0d 0a   (Exception e)..
1eb90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eba0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1ebb0 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e         TraceOps.
1ebc0 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72  DebugAndTrace(Tr
1ebd0 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68  acePriority.High
1ebe0 65 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  est,..          
1ebf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
1ec00 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61  bugCallback, tra
1ec10 63 65 43 61 6c 6c 62 61 63 6b 2c 20 65 2c 20 74  ceCallback, e, t
1ec20 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
1ec30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1ec40 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 46        error = "F
1ec50 61 69 6c 65 64 20 74 6f 20 70 72 6f 63 65 73 73  ailed to process
1ec60 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 22   configuration."
1ec70 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
1ec80 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
1ec90 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
1eca0 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
1ecb0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
1ecc0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
1ecd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ece0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ecf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ed00 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
1ed10 20 20 20 20 20 20 20 5b 4d 65 74 68 6f 64 49 6d         [MethodIm
1ed20 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 74  pl(MethodImplOpt
1ed30 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29  ions.NoInlining)
1ed40 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ]..            p
1ed50 75 62 6c 69 63 20 73 74 61 74 69 63 20 62 6f 6f  ublic static boo
1ed60 6c 20 43 68 65 63 6b 52 75 6e 74 69 6d 65 56 65  l CheckRuntimeVe
1ed70 72 73 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20  rsion(..        
1ed80 20 20 20 20 20 20 20 20 43 6f 6e 66 69 67 75 72          Configur
1ed90 61 74 69 6f 6e 20 63 6f 6e 66 69 67 75 72 61 74  ation configurat
1eda0 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ion,..          
1edb0 20 20 20 20 20 20 62 6f 6f 6c 20 73 74 72 69 63        bool stric
1edc0 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
1edd0 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 65      ref string e
1ede0 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20  rror..          
1edf0 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
1ee00 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1ee10 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20          try..   
1ee20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
1ee30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ee40 20 20 20 20 69 66 20 28 63 6f 6e 66 69 67 75 72      if (configur
1ee50 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  ation == null)..
1ee60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ee70 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1ee80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
1ee90 72 72 6f 72 20 3d 20 22 49 6e 76 61 6c 69 64 20  rror = "Invalid 
1eea0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 22 3b  configuration.";
1eeb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1eec0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
1eed0 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
1eee0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
1eef0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1ef00 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
1ef10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1ef20 20 4e 4f 54 45 3a 20 57 68 61 74 20 76 65 72 73   NOTE: What vers
1ef30 69 6f 6e 20 6f 66 20 74 68 65 20 72 75 6e 74 69  ion of the runti
1ef40 6d 65 20 77 61 73 20 74 68 65 20 63 6f 72 65 20  me was the core 
1ef50 28 70 72 69 6d 61 72 79 29 0d 0a 20 20 20 20 20  (primary)..     
1ef60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1ef70 2f 20 20 20 20 20 20 20 61 73 73 65 6d 62 6c 79  /       assembly
1ef80 20 63 6f 6d 70 69 6c 65 64 20 61 67 61 69 6e 73   compiled agains
1ef90 74 20 28 65 2e 67 2e 20 22 76 32 2e 30 2e 35 30  t (e.g. "v2.0.50
1efa0 37 32 37 22 20 6f 72 0d 0a 20 20 20 20 20 20 20  727" or..       
1efb0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
1efc0 20 20 20 20 20 20 22 76 34 2e 30 2e 33 30 33 31        "v4.0.3031
1efd0 39 22 29 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  9")...          
1efe0 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
1eff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f000 20 20 73 74 72 69 6e 67 20 63 6f 72 65 49 6d 61    string coreIma
1f010 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e  geRuntimeVersion
1f020 20 3d 20 47 65 74 49 6d 61 67 65 52 75 6e 74 69   = GetImageRunti
1f030 6d 65 56 65 72 73 69 6f 6e 28 0d 0a 20 20 20 20  meVersion(..    
1f040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f050 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
1f060 6e 2e 63 6f 72 65 46 69 6c 65 4e 61 6d 65 29 3b  n.coreFileName);
1f070 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1f080 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
1f090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f0a0 2f 2f 20 4e 4f 54 45 3a 20 57 65 20 61 6c 6c 6f  // NOTE: We allo
1f0b0 77 20 74 68 65 20 61 63 74 75 61 6c 20 69 6d 61  w the actual ima
1f0c0 67 65 20 72 75 6e 74 69 6d 65 20 63 68 65 63 6b  ge runtime check
1f0d0 69 6e 67 20 74 6f 20 62 65 0d 0a 20 20 20 20 20  ing to be..     
1f0e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1f0f0 2f 20 20 20 20 20 20 20 62 79 70 61 73 73 65 64  /       bypassed
1f100 20 76 69 61 20 74 68 65 20 22 2d 6e 6f 52 75 6e   via the "-noRun
1f110 74 69 6d 65 56 65 72 73 69 6f 6e 22 20 63 6f 6d  timeVersion" com
1f120 6d 61 6e 64 20 6c 69 6e 65 0d 0a 20 20 20 20 20  mand line..     
1f130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1f140 2f 20 20 20 20 20 20 20 6f 70 74 69 6f 6e 2e 20  /       option. 
1f150 20 54 68 65 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e   The command lin
1f160 65 20 6f 70 74 69 6f 6e 20 69 73 20 69 6e 74 65  e option is inte
1f170 6e 64 65 64 20 66 6f 72 0d 0a 20 20 20 20 20 20  nded for..      
1f180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1f190 20 20 20 20 20 20 20 65 78 70 65 72 74 20 75 73         expert us
1f1a0 65 20 6f 6e 6c 79 2e 0d 0a 20 20 20 20 20 20 20  e only...       
1f1b0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
1f1c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1f1d0 20 20 20 20 20 69 66 20 28 63 6f 6e 66 69 67 75       if (configu
1f1e0 72 61 74 69 6f 6e 2e 6e 6f 52 75 6e 74 69 6d 65  ration.noRuntime
1f1f0 56 65 72 73 69 6f 6e 29 0d 0a 20 20 20 20 20 20  Version)..      
1f200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
1f210 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1f220 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70           TraceOp
1f230 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
1f240 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4d 65  TracePriority.Me
1f250 64 69 75 6d 2c 0d 0a 20 20 20 20 20 20 20 20 20  dium,..         
1f260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f270 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b     debugCallback
1f280 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c  , traceCallback,
1f290 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
1f2a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1f2b0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 41 73               "As
1f2c0 73 65 6d 62 6c 79 20 69 73 20 63 6f 6d 70 69 6c  sembly is compil
1f2d0 65 64 20 66 6f 72 20 74 68 65 20 2e 4e 45 54 20  ed for the .NET 
1f2e0 46 72 61 6d 65 77 6f 72 6b 20 7b 30 7d 3b 20 22  Framework {0}; "
1f2f0 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   +..            
1f300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f310 22 68 6f 77 65 76 65 72 2c 20 69 6e 73 74 61 6c  "however, instal
1f320 6c 61 74 69 6f 6e 20 72 65 73 74 72 69 63 74 69  lation restricti
1f330 6f 6e 73 20 62 61 73 65 64 20 6f 6e 20 74 68 69  ons based on thi
1f340 73 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20  s " +..         
1f350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f360 20 20 20 22 66 61 63 74 20 68 61 76 65 20 62 65     "fact have be
1f370 65 6e 20 64 69 73 61 62 6c 65 64 20 76 69 61 20  en disabled via 
1f380 74 68 65 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65  the command line
1f390 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  .",..           
1f3a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f3b0 20 63 6f 72 65 49 6d 61 67 65 52 75 6e 74 69 6d   coreImageRuntim
1f3c0 65 56 65 72 73 69 6f 6e 29 2c 20 74 72 61 63 65  eVersion), trace
1f3d0 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
1f3e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f3f0 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75        return tru
1f400 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
1f410 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
1f420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f430 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
1f440 20 20 20 20 20 20 20 20 20 2f 2f 20 54 4f 44 4f           // TODO
1f450 3a 20 52 65 73 74 72 69 63 74 20 74 68 65 20 63  : Restrict the c
1f460 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 62 61 73  onfiguration bas
1f470 65 64 20 6f 6e 20 77 68 69 63 68 20 69 6d 61 67  ed on which imag
1f480 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
1f490 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
1f4a0 72 75 6e 74 69 6d 65 20 76 65 72 73 69 6f 6e 73  runtime versions
1f4b0 20 28 77 68 69 63 68 20 6d 6f 72 65 2d 6f 72 2d   (which more-or-
1f4c0 6c 65 73 73 20 63 6f 72 72 65 73 70 6f 6e 64 0d  less correspond.
1f4d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1f4e0 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74 6f       //       to
1f4f0 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 20   .NET Framework 
1f500 76 65 72 73 69 6f 6e 73 29 20 61 72 65 20 73 75  versions) are su
1f510 70 70 6f 72 74 65 64 20 62 79 20 74 68 65 0d 0a  pported by the..
1f520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f530 20 20 20 20 2f 2f 20 20 20 20 20 20 20 76 65 72      //       ver
1f540 73 69 6f 6e 73 20 6f 66 20 56 69 73 75 61 6c 20  sions of Visual 
1f550 53 74 75 64 69 6f 20 74 68 61 74 20 61 72 65 20  Studio that are 
1f560 69 6e 73 74 61 6c 6c 65 64 2e 0d 0a 20 20 20 20  installed...    
1f570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f580 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
1f590 20 20 20 20 20 20 20 20 69 66 20 28 53 74 72 69          if (Stri
1f5a0 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79  ng.IsNullOrEmpty
1f5b0 28 63 6f 72 65 49 6d 61 67 65 52 75 6e 74 69 6d  (coreImageRuntim
1f5c0 65 56 65 72 73 69 6f 6e 29 29 0d 0a 20 20 20 20  eVersion))..    
1f5d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f5e0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1f5f0 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
1f600 20 3d 20 22 69 6e 76 61 6c 69 64 20 63 6f 72 65   = "invalid core
1f610 20 66 69 6c 65 20 69 6d 61 67 65 20 72 75 6e 74   file image runt
1f620 69 6d 65 20 76 65 72 73 69 6f 6e 22 3b 0d 0a 20  ime version";.. 
1f630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f640 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
1f650 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
1f660 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
1f670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f680 20 65 6c 73 65 20 69 66 20 28 53 74 72 69 6e 67   else if (String
1f690 2e 45 71 75 61 6c 73 28 0d 0a 20 20 20 20 20 20  .Equals(..      
1f6a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f6b0 20 20 20 20 20 20 63 6f 72 65 49 6d 61 67 65 52        coreImageR
1f6c0 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 2c 20 43  untimeVersion, C
1f6d0 4c 52 76 32 49 6d 61 67 65 52 75 6e 74 69 6d 65  LRv2ImageRuntime
1f6e0 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20  Version,..      
1f6f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f700 20 20 20 20 20 20 53 74 72 69 6e 67 43 6f 6d 70        StringComp
1f710 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 29 29  arison.Ordinal))
1f720 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1f730 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1f740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f750 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
1f760 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
1f770 4e 4f 54 45 3a 20 46 6f 72 20 74 68 65 20 43 4c  NOTE: For the CL
1f780 52 20 76 32 2e 30 20 72 75 6e 74 69 6d 65 2c 20  R v2.0 runtime, 
1f790 6d 61 6b 65 20 73 75 72 65 20 77 65 20 64 69 73  make sure we dis
1f7a0 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 20 20  able..          
1f7b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1f7c0 20 20 20 20 20 20 20 61 6e 79 20 61 74 74 65 6d         any attem
1f7d0 70 74 20 74 6f 20 75 73 65 20 69 74 20 66 6f 72  pt to use it for
1f7e0 20 74 68 69 6e 67 73 20 74 68 61 74 20 72 65 71   things that req
1f7f0 75 69 72 65 0d 0a 20 20 20 20 20 20 20 20 20 20  uire..          
1f800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1f810 20 20 20 20 20 20 20 61 6e 20 61 73 73 65 6d 62         an assemb
1f820 6c 79 20 63 6f 6d 70 69 6c 65 64 20 66 6f 72 20  ly compiled for 
1f830 74 68 65 20 43 4c 52 20 76 34 2e 30 2e 20 20 49  the CLR v4.0.  I
1f840 74 20 69 73 0d 0a 20 20 20 20 20 20 20 20 20 20  t is..          
1f850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1f860 20 20 20 20 20 20 20 75 6e 63 65 72 74 61 69 6e         uncertain
1f870 20 69 66 20 74 68 69 73 20 69 73 20 61 63 74 75   if this is actu
1f880 61 6c 6c 79 20 61 20 70 72 6f 62 6c 65 6d 20 69  ally a problem i
1f890 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  n..             
1f8a0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
1f8b0 20 20 20 20 70 72 61 63 74 69 63 65 20 61 73 20      practice as 
1f8c0 74 68 65 20 43 4c 52 20 76 34 2e 30 20 63 61 6e  the CLR v4.0 can
1f8d0 20 6c 6f 61 64 20 61 6e 64 20 75 73 65 20 61 6e   load and use an
1f8e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1f8f0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
1f900 20 20 20 61 73 73 65 6d 62 6c 79 20 63 6f 6d 70     assembly comp
1f910 69 6c 65 64 20 77 69 74 68 20 74 68 65 20 43 4c  iled with the CL
1f920 52 20 76 32 2e 30 3b 20 68 6f 77 65 76 65 72 2c  R v2.0; however,
1f930 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1f940 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
1f950 20 20 20 73 69 6e 63 65 20 74 68 69 73 20 70 72     since this pr
1f960 6f 6a 65 63 74 20 6f 66 66 65 72 73 20 62 6f 74  oject offers bot
1f970 68 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 73  h configurations
1f980 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1f990 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
1f9a0 20 20 20 20 77 65 20 63 75 72 72 65 6e 74 6c 79      we currently
1f9b0 20 64 69 73 61 6c 6c 6f 77 20 74 68 69 73 20 6d   disallow this m
1f9c0 69 73 6d 61 74 63 68 2e 0d 0a 20 20 20 20 20 20  ismatch...      
1f9d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f9e0 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
1f9f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
1fa00 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 4e 65  nfiguration.noNe
1fa10 74 46 78 34 30 20 3d 20 74 72 75 65 3b 0d 0a 20  tFx40 = true;.. 
1fa20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fa30 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
1fa40 74 69 6f 6e 2e 6e 6f 4e 65 74 46 78 34 35 20 3d  tion.noNetFx45 =
1fa50 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
1fa60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fa70 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f  configuration.no
1fa80 4e 65 74 46 78 34 35 31 20 3d 20 74 72 75 65 3b  NetFx451 = true;
1fa90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1faa0 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
1fab0 75 72 61 74 69 6f 6e 2e 6e 6f 4e 65 74 46 78 34  uration.noNetFx4
1fac0 35 32 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20  52 = true;..    
1fad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fae0 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
1faf0 6e 2e 6e 6f 4e 65 74 46 78 34 36 20 3d 20 74 72  n.noNetFx46 = tr
1fb00 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
1fb10 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
1fb20 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 4e 65 74  figuration.noNet
1fb30 46 78 34 36 31 20 3d 20 74 72 75 65 3b 0d 0a 20  Fx461 = true;.. 
1fb40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fb50 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
1fb60 74 69 6f 6e 2e 6e 6f 4e 65 74 46 78 34 36 32 20  tion.noNetFx462 
1fb70 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  = true;..       
1fb80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fb90 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e   configuration.n
1fba0 6f 56 73 32 30 31 30 20 3d 20 74 72 75 65 3b 0d  oVs2010 = true;.
1fbb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1fbc0 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75           configu
1fbd0 72 61 74 69 6f 6e 2e 6e 6f 56 73 32 30 31 32 20  ration.noVs2012 
1fbe0 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  = true;..       
1fbf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fc00 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e   configuration.n
1fc10 6f 56 73 32 30 31 33 20 3d 20 74 72 75 65 3b 0d  oVs2013 = true;.
1fc20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1fc30 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75           configu
1fc40 72 61 74 69 6f 6e 2e 6e 6f 56 73 32 30 31 35 20  ration.noVs2015 
1fc50 3d 20 74 72 75 65 3b 0d 0a 0d 0a 20 20 20 20 20  = true;....     
1fc60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fc70 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75     TraceOps.Debu
1fc80 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50  gAndTrace(TraceP
1fc90 72 69 6f 72 69 74 79 2e 4d 65 64 69 75 6d 2c 0d  riority.Medium,.
1fca0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1fcb0 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62               deb
1fcc0 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63  ugCallback, trac
1fcd0 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
1fce0 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
1fcf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fd00 20 20 20 20 20 20 20 22 41 73 73 65 6d 62 6c 79         "Assembly
1fd10 20 69 73 20 63 6f 6d 70 69 6c 65 64 20 66 6f 72   is compiled for
1fd20 20 74 68 65 20 2e 4e 45 54 20 46 72 61 6d 65 77   the .NET Framew
1fd30 6f 72 6b 20 7b 30 7d 2c 20 22 20 2b 0d 0a 20 20  ork {0}, " +..  
1fd40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fd50 20 20 20 20 20 20 20 20 20 20 22 73 75 70 70 6f            "suppo
1fd60 72 74 20 66 6f 72 20 74 68 65 20 2e 4e 45 54 20  rt for the .NET 
1fd70 46 72 61 6d 65 77 6f 72 6b 20 7b 31 7d 20 69 73  Framework {1} is
1fd80 20 6e 6f 77 20 64 69 73 61 62 6c 65 64 2e 22 2c   now disabled.",
1fd90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1fda0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43 4c                CL
1fdb0 52 76 32 49 6d 61 67 65 52 75 6e 74 69 6d 65 56  Rv2ImageRuntimeV
1fdc0 65 72 73 69 6f 6e 2c 20 43 4c 52 76 34 49 6d 61  ersion, CLRv4Ima
1fdd0 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e  geRuntimeVersion
1fde0 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
1fdf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fe00 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
1fe10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1fe20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
1fe30 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
1fe40 20 69 66 20 28 53 74 72 69 6e 67 2e 45 71 75 61   if (String.Equa
1fe50 6c 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ls(..           
1fe60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fe70 20 63 6f 72 65 49 6d 61 67 65 52 75 6e 74 69 6d   coreImageRuntim
1fe80 65 56 65 72 73 69 6f 6e 2c 20 43 4c 52 76 34 49  eVersion, CLRv4I
1fe90 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69  mageRuntimeVersi
1fea0 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on,..           
1feb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fec0 20 53 74 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f   StringCompariso
1fed0 6e 2e 4f 72 64 69 6e 61 6c 29 29 0d 0a 20 20 20  n.Ordinal))..   
1fee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fef0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1ff00 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
1ff10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ff20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
1ff30 20 46 6f 72 20 74 68 65 20 43 4c 52 20 76 34 2e   For the CLR v4.
1ff40 30 20 72 75 6e 74 69 6d 65 2c 20 6d 61 6b 65 20  0 runtime, make 
1ff50 73 75 72 65 20 77 65 20 64 69 73 61 62 6c 65 0d  sure we disable.
1ff60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1ff70 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
1ff80 20 20 61 6e 79 20 61 74 74 65 6d 70 74 20 74 6f    any attempt to
1ff90 20 75 73 65 20 69 74 20 66 6f 72 20 74 68 69 6e   use it for thin
1ffa0 67 73 20 74 68 61 74 20 72 65 71 75 69 72 65 0d  gs that require.
1ffb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1ffc0 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
1ffd0 20 20 61 6e 20 61 73 73 65 6d 62 6c 79 20 63 6f    an assembly co
1ffe0 6d 70 69 6c 65 64 20 66 6f 72 20 74 68 65 20 43  mpiled for the C
1fff0 4c 52 20 76 32 2e 30 2e 0d 0a 20 20 20 20 20 20  LR v2.0...      
20000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20010 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
20020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
20030 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 4e 65  nfiguration.noNe
20040 74 46 78 32 30 20 3d 20 74 72 75 65 3b 0d 0a 20  tFx20 = true;.. 
20050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20060 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
20070 74 69 6f 6e 2e 6e 6f 4e 65 74 46 78 33 35 20 3d  tion.noNetFx35 =
20080 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
20090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
200a0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f  configuration.no
200b0 56 73 32 30 30 35 20 3d 20 74 72 75 65 3b 0d 0a  Vs2005 = true;..
200c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
200d0 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
200e0 61 74 69 6f 6e 2e 6e 6f 56 73 32 30 30 38 20 3d  ation.noVs2008 =
200f0 20 74 72 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20   true;....      
20100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20110 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67    TraceOps.Debug
20120 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72  AndTrace(TracePr
20130 69 6f 72 69 74 79 2e 4d 65 64 69 75 6d 2c 0d 0a  iority.Medium,..
20140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20150 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75              debu
20160 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65  gCallback, trace
20170 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67  Callback, String
20180 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
20190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
201a0 20 20 20 20 20 20 22 41 73 73 65 6d 62 6c 79 20        "Assembly 
201b0 69 73 20 63 6f 6d 70 69 6c 65 64 20 66 6f 72 20  is compiled for 
201c0 74 68 65 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f  the .NET Framewo
201d0 72 6b 20 7b 30 7d 2c 20 22 20 2b 0d 0a 20 20 20  rk {0}, " +..   
201e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
201f0 20 20 20 20 20 20 20 20 20 22 73 75 70 70 6f 72           "suppor
20200 74 20 66 6f 72 20 74 68 65 20 2e 4e 45 54 20 46  t for the .NET F
20210 72 61 6d 65 77 6f 72 6b 20 7b 31 7d 20 69 73 20  ramework {1} is 
20220 6e 6f 77 20 64 69 73 61 62 6c 65 64 2e 22 2c 0d  now disabled.",.
20230 0a 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 20 20 20 46 6f 72               For
20250 44 69 73 70 6c 61 79 28 43 4c 52 76 34 49 6d 61  Display(CLRv4Ima
20260 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e  geRuntimeVersion
20270 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
20280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20290 46 6f 72 44 69 73 70 6c 61 79 28 43 4c 52 76 32  ForDisplay(CLRv2
202a0 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72 73  ImageRuntimeVers
202b0 69 6f 6e 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ion)),..        
202c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
202d0 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
202e0 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  y);..           
202f0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
20300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20310 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  else..          
20320 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
20330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20340 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72       error = Str
20350 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
20360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20370 20 20 20 20 20 20 20 20 20 22 75 6e 73 75 70 70           "unsupp
20380 6f 72 74 65 64 20 63 6f 72 65 20 66 69 6c 65 20  orted core file 
20390 69 6d 61 67 65 20 72 75 6e 74 69 6d 65 20 76 65  image runtime ve
203a0 72 73 69 6f 6e 20 22 20 2b 0d 0a 20 20 20 20 20  rsion " +..     
203b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
203c0 20 20 20 20 20 20 20 22 7b 30 7d 2c 20 6d 75 73         "{0}, mus
203d0 74 20 62 65 20 7b 31 7d 20 6f 72 20 7b 32 7d 22  t be {1} or {2}"
203e0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
203f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46                 F
20400 6f 72 44 69 73 70 6c 61 79 28 63 6f 72 65 49 6d  orDisplay(coreIm
20410 61 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f  ageRuntimeVersio
20420 6e 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n),..           
20430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20440 20 46 6f 72 44 69 73 70 6c 61 79 28 43 4c 52 76   ForDisplay(CLRv
20450 32 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72  2ImageRuntimeVer
20460 73 69 6f 6e 29 2c 0d 0a 20 20 20 20 20 20 20 20  sion),..        
20470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20480 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 43      ForDisplay(C
20490 4c 52 76 34 49 6d 61 67 65 52 75 6e 74 69 6d 65  LRv4ImageRuntime
204a0 56 65 72 73 69 6f 6e 29 29 3b 0d 0a 0d 0a 20 20  Version));....  
204b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
204c0 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
204d0 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
204e0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
204f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20500 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a    return true;..
20510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20520 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
20530 20 20 20 63 61 74 63 68 20 28 45 78 63 65 70 74     catch (Except
20540 69 6f 6e 20 65 29 0d 0a 20 20 20 20 20 20 20 20  ion e)..        
20550 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
20560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
20570 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
20580 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72  Trace(TracePrior
20590 69 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20  ity.Highest,..  
205a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
205b0 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62        debugCallb
205c0 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61  ack, traceCallba
205d0 63 6b 2c 20 65 2c 20 74 72 61 63 65 43 61 74 65  ck, e, traceCate
205e0 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
205f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
20600 72 6f 72 20 3d 20 22 46 61 69 6c 65 64 20 74 6f  ror = "Failed to
20610 20 63 68 65 63 6b 20 69 6d 61 67 65 20 72 75 6e   check image run
20620 74 69 6d 65 20 76 65 72 73 69 6f 6e 2e 22 3b 0d  time version.";.
20630 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
20640 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
20650 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
20660 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
20670 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
20680 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
20690 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
206a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
206b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
206c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
206d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
206e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65  .            #re
206f0 67 69 6f 6e 20 50 72 69 76 61 74 65 20 4d 65 74  gion Private Met
20700 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 20 20  hods..          
20710 20 20 70 72 69 76 61 74 65 20 73 74 72 69 6e 67    private string
20720 20 47 65 74 49 6e 76 61 72 69 61 6e 74 4e 61 6d   GetInvariantNam
20730 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
20740 20 20 20 20 62 6f 6f 6c 20 74 72 61 63 65 0d 0a      bool trace..
20750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20760 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
20770 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
20780 20 20 72 65 74 75 72 6e 20 55 73 65 45 66 36 50    return UseEf6P
20790 72 6f 76 69 64 65 72 28 74 72 61 63 65 29 20 3f  rovider(trace) ?
207a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
207b0 20 20 20 20 20 20 45 66 36 49 6e 76 61 72 69 61        Ef6Invaria
207c0 6e 74 4e 61 6d 65 20 3a 20 49 6e 76 61 72 69 61  ntName : Invaria
207d0 6e 74 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20  ntName;..       
207e0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
207f0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
20800 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20810 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20820 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20830 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
20840 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
20850 20 62 6f 6f 6c 20 49 73 53 79 73 74 65 6d 45 66   bool IsSystemEf
20860 36 41 73 73 65 6d 62 6c 79 41 76 61 69 6c 61 62  6AssemblyAvailab
20870 6c 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  le(..           
20880 20 20 20 20 20 62 6f 6f 6c 20 74 72 61 63 65 0d       bool trace.
20890 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
208a0 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
208b0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
208c0 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20     try..        
208d0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
208e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
208f0 66 20 28 73 79 73 74 65 6d 45 66 36 41 73 73 65  f (systemEf6Asse
20900 6d 62 6c 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  mbly == null).. 
20910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20920 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
20930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 79                sy
20940 73 74 65 6d 45 66 36 41 73 73 65 6d 62 6c 79 20  stemEf6Assembly 
20950 3d 20 41 73 73 65 6d 62 6c 79 2e 52 65 66 6c 65  = Assembly.Refle
20960 63 74 69 6f 6e 4f 6e 6c 79 4c 6f 61 64 28 0d 0a  ctionOnlyLoad(..
20970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20980 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74              Syst
20990 65 6d 45 66 36 41 73 73 65 6d 62 6c 79 4e 61 6d  emEf6AssemblyNam
209a0 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e);..           
209b0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
209c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
209d0 20 20 69 66 20 28 73 79 73 74 65 6d 45 66 36 41    if (systemEf6A
209e0 73 73 65 6d 62 6c 79 20 21 3d 20 6e 75 6c 6c 29  ssembly != null)
209f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
20a00 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
20a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20a20 20 69 66 20 28 74 72 61 63 65 20 26 26 0d 0a 20   if (trace &&.. 
20a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20a40 20 20 20 20 20 20 20 20 20 20 20 21 48 61 73 46             !HasF
20a50 6c 61 67 73 28 50 72 6f 76 69 64 65 72 46 6c 61  lags(ProviderFla
20a60 67 73 2e 44 69 64 45 66 36 52 65 73 6f 6c 76 65  gs.DidEf6Resolve
20a70 54 72 61 63 65 2c 20 74 72 75 65 29 29 0d 0a 20  Trace, true)).. 
20a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20a90 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
20aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20ab0 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44        TraceOps.D
20ac0 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61  ebugAndTrace(Tra
20ad0 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68 65  cePriority.Highe
20ae0 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  st,..           
20af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20b00 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61       debugCallba
20b10 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63  ck, traceCallbac
20b20 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
20b30 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
20b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20b50 20 20 20 22 45 6e 74 69 74 79 20 46 72 61 6d 65     "Entity Frame
20b60 77 6f 72 6b 20 36 20 61 73 73 65 6d 62 6c 79 20  work 6 assembly 
20b70 77 61 73 20 22 20 2b 0d 0a 20 20 20 20 20 20 20  was " +..       
20b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20b90 20 20 20 20 20 20 20 20 20 22 72 65 73 6f 6c 76           "resolv
20ba0 65 64 20 74 6f 20 7b 30 7d 2e 22 2c 20 46 6f 72  ed to {0}.", For
20bb0 44 69 73 70 6c 61 79 28 0d 0a 20 20 20 20 20 20  Display(..      
20bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20bd0 20 20 20 20 20 20 20 20 20 20 73 79 73 74 65 6d            system
20be0 45 66 36 41 73 73 65 6d 62 6c 79 2e 4c 6f 63 61  Ef6Assembly.Loca
20bf0 74 69 6f 6e 29 29 2c 0d 0a 20 20 20 20 20 20 20  tion)),..       
20c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20c10 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
20c20 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
20c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20c40 20 20 20 20 20 20 20 20 70 72 6f 76 69 64 65 72          provider
20c50 46 6c 61 67 73 20 7c 3d 20 50 72 6f 76 69 64 65  Flags |= Provide
20c60 72 46 6c 61 67 73 2e 44 69 64 45 66 36 52 65 73  rFlags.DidEf6Res
20c70 6f 6c 76 65 54 72 61 63 65 3b 0d 0a 20 20 20 20  olveTrace;..    
20c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20c90 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
20ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20cb0 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20   return true;.. 
20cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20cd0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
20ce0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
20cf0 20 20 20 20 20 20 20 20 20 63 61 74 63 68 0d 0a           catch..
20d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20d10 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
20d20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74         // do not
20d30 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20  hing...         
20d40 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
20d50 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
20d60 74 72 61 63 65 20 26 26 0d 0a 20 20 20 20 20 20  trace &&..      
20d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 21 48                !H
20d80 61 73 46 6c 61 67 73 28 50 72 6f 76 69 64 65 72  asFlags(Provider
20d90 46 6c 61 67 73 2e 44 69 64 45 66 36 52 65 73 6f  Flags.DidEf6Reso
20da0 6c 76 65 54 72 61 63 65 2c 20 74 72 75 65 29 29  lveTrace, true))
20db0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
20dc0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
20dd0 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70           TraceOp
20de0 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
20df0 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69  TracePriority.Hi
20e00 67 68 65 73 74 2c 0d 0a 20 20 20 20 20 20 20 20  ghest,..        
20e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20e20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74  debugCallback, t
20e30 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20  raceCallback,.. 
20e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20e50 20 20 20 20 20 20 20 22 45 6e 74 69 74 79 20 46         "Entity F
20e60 72 61 6d 65 77 6f 72 6b 20 36 20 61 73 73 65 6d  ramework 6 assem
20e70 62 6c 79 20 77 61 73 20 6e 6f 74 20 72 65 73 6f  bly was not reso
20e80 6c 76 65 64 2e 22 2c 0d 0a 20 20 20 20 20 20 20  lved.",..       
20e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20ea0 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
20eb0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
20ec0 20 20 20 20 20 20 20 20 70 72 6f 76 69 64 65 72          provider
20ed0 46 6c 61 67 73 20 7c 3d 20 50 72 6f 76 69 64 65  Flags |= Provide
20ee0 72 46 6c 61 67 73 2e 44 69 64 45 66 36 52 65 73  rFlags.DidEf6Res
20ef0 6f 6c 76 65 54 72 61 63 65 3b 0d 0a 20 20 20 20  olveTrace;..    
20f00 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
20f10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
20f20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
20f30 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
20f40 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72             #endr
20f50 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
20f60 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
20f70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20f80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20f90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20fa0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
20fb0 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
20fc0 50 75 62 6c 69 63 20 4d 65 74 68 6f 64 73 0d 0a  Public Methods..
20fd0 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
20fe0 69 63 20 62 6f 6f 6c 20 48 61 73 46 6c 61 67 73  ic bool HasFlags
20ff0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
21000 20 20 20 49 6e 73 74 61 6c 6c 46 6c 61 67 73 20     InstallFlags 
21010 68 61 73 46 6c 61 67 73 2c 0d 0a 20 20 20 20 20  hasFlags,..     
21020 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
21030 61 6c 6c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  all..           
21040 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
21050 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
21060 20 20 20 20 20 20 20 69 66 20 28 61 6c 6c 29 0d         if (all).
21070 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
21080 20 20 20 20 20 72 65 74 75 72 6e 20 28 28 69 6e       return ((in
21090 73 74 61 6c 6c 46 6c 61 67 73 20 26 20 68 61 73  stallFlags & has
210a0 46 6c 61 67 73 29 20 3d 3d 20 68 61 73 46 6c 61  Flags) == hasFla
210b0 67 73 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  gs);..          
210c0 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20        else..    
210d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
210e0 72 65 74 75 72 6e 20 28 28 69 6e 73 74 61 6c 6c  return ((install
210f0 46 6c 61 67 73 20 26 20 68 61 73 46 6c 61 67 73  Flags & hasFlags
21100 29 20 21 3d 20 49 6e 73 74 61 6c 6c 46 6c 61 67  ) != InstallFlag
21110 73 2e 4e 6f 6e 65 29 3b 0d 0a 20 20 20 20 20 20  s.None);..      
21120 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
21130 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
21140 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21150 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20  //////////....  
21180 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
21190 20 62 6f 6f 6c 20 48 61 73 46 6c 61 67 73 28 0d   bool HasFlags(.
211a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
211b0 20 50 72 6f 76 69 64 65 72 46 6c 61 67 73 20 68   ProviderFlags h
211c0 61 73 46 6c 61 67 73 2c 0d 0a 20 20 20 20 20 20  asFlags,..      
211d0 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 61            bool a
211e0 6c 6c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ll..            
211f0 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20      )..         
21200 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
21210 20 20 20 20 20 20 69 66 20 28 61 6c 6c 29 0d 0a        if (all)..
21220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21230 20 20 20 20 72 65 74 75 72 6e 20 28 28 70 72 6f      return ((pro
21240 76 69 64 65 72 46 6c 61 67 73 20 26 20 68 61 73  viderFlags & has
21250 46 6c 61 67 73 29 20 3d 3d 20 68 61 73 46 6c 61  Flags) == hasFla
21260 67 73 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  gs);..          
21270 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20        else..    
21280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21290 72 65 74 75 72 6e 20 28 28 70 72 6f 76 69 64 65  return ((provide
212a0 72 46 6c 61 67 73 20 26 20 68 61 73 46 6c 61 67  rFlags & hasFlag
212b0 73 29 20 21 3d 20 50 72 6f 76 69 64 65 72 46 6c  s) != ProviderFl
212c0 61 67 73 2e 4e 6f 6e 65 29 3b 0d 0a 20 20 20 20  ags.None);..    
212d0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
212e0 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
212f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21300 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21310 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21320 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
21330 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
21340 69 63 20 62 6f 6f 6c 20 49 73 4c 69 6e 71 53 75  ic bool IsLinqSu
21350 70 70 6f 72 74 65 64 28 0d 0a 20 20 20 20 20 20  pported(..      
21360 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 74            bool t
21370 72 61 63 65 0d 0a 20 20 20 20 20 20 20 20 20 20  race..          
21380 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
21390 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
213a0 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
213b0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
213c0 4f 54 45 3a 20 43 68 65 63 6b 20 74 6f 20 73 65  OTE: Check to se
213d0 65 20 69 66 20 74 68 65 20 63 61 6c 6c 65 72 20  e if the caller 
213e0 68 61 73 20 66 6f 72 63 65 64 20 4c 49 4e 51 20  has forced LINQ 
213f0 73 75 70 70 6f 72 74 20 74 6f 0d 0a 20 20 20 20  support to..    
21400 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
21410 20 20 20 20 20 62 65 20 65 6e 61 62 6c 65 64 20       be enabled 
21420 2d 4f 52 2d 20 64 69 73 61 62 6c 65 64 2c 20 74  -OR- disabled, t
21430 68 65 72 65 62 79 20 62 79 70 61 73 73 69 6e 67  hereby bypassing
21440 20 74 68 65 20 6e 65 65 64 0d 0a 20 20 20 20 20   the need..     
21450 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
21460 20 20 20 20 66 6f 72 20 22 61 75 74 6f 6d 61 74      for "automat
21470 69 63 20 64 65 74 65 63 74 69 6f 6e 22 20 62 79  ic detection" by
21480 20 74 68 69 73 20 6d 65 74 68 6f 64 2e 0d 0a 20   this method... 
21490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
214a0 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
214b0 20 20 20 69 66 20 28 48 61 73 46 6c 61 67 73 28     if (HasFlags(
214c0 50 72 6f 76 69 64 65 72 46 6c 61 67 73 2e 46 6f  ProviderFlags.Fo
214d0 72 63 65 4c 69 6e 71 45 6e 61 62 6c 65 64 2c 20  rceLinqEnabled, 
214e0 74 72 75 65 29 29 0d 0a 20 20 20 20 20 20 20 20  true))..        
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 20 20 20 20 69                 i
21510 66 20 28 74 72 61 63 65 20 26 26 0d 0a 20 20 20  f (trace &&..   
21520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21530 20 20 20 20 20 21 48 61 73 46 6c 61 67 73 28 50       !HasFlags(P
21540 72 6f 76 69 64 65 72 46 6c 61 67 73 2e 44 69 64  roviderFlags.Did
21550 4c 69 6e 71 46 6f 72 63 65 54 72 61 63 65 2c 20  LinqForceTrace, 
21560 74 72 75 65 29 29 0d 0a 20 20 20 20 20 20 20 20  true))..        
21570 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
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 54 72 61 63 65 4f 70 73 2e         TraceOps.
215a0 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72  DebugAndTrace(Tr
215b0 61 63 65 50 72 69 6f 72 69 74 79 2e 4d 65 64 69  acePriority.Medi
215c0 75 6d 48 69 67 68 2c 0d 0a 20 20 20 20 20 20 20  umHigh,..       
215d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
215e0 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61       debugCallba
215f0 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63  ck, traceCallbac
21600 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k,..            
21610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21620 22 46 6f 72 63 65 64 20 74 6f 20 65 6e 61 62 6c  "Forced to enabl
21630 65 20 73 75 70 70 6f 72 74 20 66 6f 72 20 5c 22  e support for \"
21640 4c 69 6e 71 5c 22 2e 22 2c 0d 0a 20 20 20 20 20  Linq\".",..     
21650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21660 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
21670 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
21680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21690 20 20 70 72 6f 76 69 64 65 72 46 6c 61 67 73 20    providerFlags 
216a0 7c 3d 20 50 72 6f 76 69 64 65 72 46 6c 61 67 73  |= ProviderFlags
216b0 2e 44 69 64 4c 69 6e 71 46 6f 72 63 65 54 72 61  .DidLinqForceTra
216c0 63 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce;..           
216d0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
216e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
216f0 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a    return true;..
21700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21710 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
21720 20 20 20 65 6c 73 65 20 69 66 20 28 48 61 73 46     else if (HasF
21730 6c 61 67 73 28 50 72 6f 76 69 64 65 72 46 6c 61  lags(ProviderFla
21740 67 73 2e 46 6f 72 63 65 4c 69 6e 71 44 69 73 61  gs.ForceLinqDisa
21750 62 6c 65 64 2c 20 74 72 75 65 29 29 0d 0a 20 20  bled, true))..  
21760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
21770 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
21780 20 20 20 20 20 69 66 20 28 74 72 61 63 65 20 26       if (trace &
21790 26 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  &..             
217a0 20 20 20 20 20 20 20 20 20 20 20 21 48 61 73 46             !HasF
217b0 6c 61 67 73 28 50 72 6f 76 69 64 65 72 46 6c 61  lags(ProviderFla
217c0 67 73 2e 44 69 64 4c 69 6e 71 46 6f 72 63 65 54  gs.DidLinqForceT
217d0 72 61 63 65 2c 20 74 72 75 65 29 29 0d 0a 20 20  race, true))..  
217e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
217f0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
21800 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
21810 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72  ceOps.DebugAndTr
21820 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74  ace(TracePriorit
21830 79 2e 4d 65 64 69 75 6d 48 69 67 68 2c 0d 0a 20  y.MediumHigh,.. 
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 20 20 20 20 64 65 62 75 67             debug
21860 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43  Callback, traceC
21870 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20  allback,..      
21880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21890 20 20 20 20 20 20 22 46 6f 72 63 65 64 20 74 6f        "Forced to
218a0 20 64 69 73 61 62 6c 65 20 73 75 70 70 6f 72 74   disable support
218b0 20 66 6f 72 20 5c 22 4c 69 6e 71 5c 22 2e 22 2c   for \"Linq\".",
218c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
218d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
218e0 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
218f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
21900 20 20 20 20 20 20 20 20 20 70 72 6f 76 69 64 65           provide
21910 72 46 6c 61 67 73 20 7c 3d 20 50 72 6f 76 69 64  rFlags |= Provid
21920 65 72 46 6c 61 67 73 2e 44 69 64 4c 69 6e 71 46  erFlags.DidLinqF
21930 6f 72 63 65 54 72 61 63 65 3b 0d 0a 20 20 20 20  orceTrace;..    
21940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21950 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
21960 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
21970 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
21980 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
21990 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
219a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
219b0 20 2f 2f 20 4e 4f 54 45 3a 20 52 65 74 75 72 6e   // NOTE: Return
219c0 20 6e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74 68 65   non-zero if the
219d0 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
219e0 69 74 65 2e 4c 69 6e 71 0d 0a 20 20 20 20 20 20  ite.Linq..      
219f0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
21a00 20 20 20 61 73 73 65 6d 62 6c 79 20 73 68 6f 75     assembly shou
21a10 6c 64 20 62 65 20 70 72 6f 63 65 73 73 65 64 20  ld be processed 
21a20 64 75 72 69 6e 67 20 74 68 65 20 69 6e 73 74 61  during the insta
21a30 6c 6c 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll...           
21a40 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 49 66       //       If
21a50 20 74 68 65 20 74 61 72 67 65 74 20 69 73 20 56   the target is V
21a60 69 73 75 61 6c 20 53 74 75 64 69 6f 20 32 30 30  isual Studio 200
21a70 35 2c 20 74 68 69 73 20 6d 75 73 74 0d 0a 20 20  5, this must..  
21a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
21a90 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 7a 65         return ze
21aa0 72 6f 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ro...           
21ab0 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
21ac0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
21ad0 21 6e 6f 4e 65 74 46 78 33 35 20 7c 7c 20 21 6e  !noNetFx35 || !n
21ae0 6f 4e 65 74 46 78 34 30 20 7c 7c 20 21 6e 6f 4e  oNetFx40 || !noN
21af0 65 74 46 78 34 35 20 7c 7c 0d 0a 20 20 20 20 20  etFx45 ||..     
21b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 21                 !
21b10 6e 6f 4e 65 74 46 78 34 35 31 20 7c 7c 20 21 6e  noNetFx451 || !n
21b20 6f 4e 65 74 46 78 34 35 32 20 7c 7c 20 21 6e 6f  oNetFx452 || !no
21b30 4e 65 74 46 78 34 36 20 7c 7c 0d 0a 20 20 20 20  NetFx46 ||..    
21b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21b50 21 6e 6f 4e 65 74 46 78 34 36 31 20 7c 7c 20 21  !noNetFx461 || !
21b60 6e 6f 4e 65 74 46 78 34 36 32 3b 0d 0a 20 20 20  noNetFx462;..   
21b70 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
21b80 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
21b90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21ba0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21bb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21bc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
21bd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
21be0 6c 69 63 20 62 6f 6f 6c 20 49 73 45 66 36 53 75  lic bool IsEf6Su
21bf0 70 70 6f 72 74 65 64 28 0d 0a 20 20 20 20 20 20  pported(..      
21c00 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 74            bool t
21c10 72 61 63 65 0d 0a 20 20 20 20 20 20 20 20 20 20  race..          
21c20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
21c30 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
21c40 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
21c50 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
21c60 4f 54 45 3a 20 43 68 65 63 6b 20 74 6f 20 73 65  OTE: Check to se
21c70 65 20 69 66 20 74 68 65 20 63 61 6c 6c 65 72 20  e if the caller 
21c80 68 61 73 20 66 6f 72 63 65 64 20 45 46 36 20 73  has forced EF6 s
21c90 75 70 70 6f 72 74 20 74 6f 0d 0a 20 20 20 20 20  upport to..     
21ca0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
21cb0 20 20 20 20 62 65 20 65 6e 61 62 6c 65 64 20 2d      be enabled -
21cc0 4f 52 2d 20 64 69 73 61 62 6c 65 64 2c 20 74 68  OR- disabled, th
21cd0 65 72 65 62 79 20 62 79 70 61 73 73 69 6e 67 20  ereby bypassing 
21ce0 74 68 65 20 6e 65 65 64 0d 0a 20 20 20 20 20 20  the need..      
21cf0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
21d00 20 20 20 66 6f 72 20 22 61 75 74 6f 6d 61 74 69     for "automati
21d10 63 20 64 65 74 65 63 74 69 6f 6e 22 20 62 79 20  c detection" by 
21d20 74 68 69 73 20 6d 65 74 68 6f 64 2e 0d 0a 20 20  this method...  
21d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
21d40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
21d50 20 20 69 66 20 28 48 61 73 46 6c 61 67 73 28 50    if (HasFlags(P
21d60 72 6f 76 69 64 65 72 46 6c 61 67 73 2e 46 6f 72  roviderFlags.For
21d70 63 65 45 66 36 45 6e 61 62 6c 65 64 2c 20 74 72  ceEf6Enabled, tr
21d80 75 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ue))..          
21d90 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
21da0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
21db0 28 74 72 61 63 65 20 26 26 0d 0a 20 20 20 20 20  (trace &&..     
21dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21dd0 20 20 20 21 48 61 73 46 6c 61 67 73 28 50 72 6f     !HasFlags(Pro
21de0 76 69 64 65 72 46 6c 61 67 73 2e 44 69 64 45 66  viderFlags.DidEf
21df0 36 46 6f 72 63 65 54 72 61 63 65 2c 20 74 72 75  6ForceTrace, tru
21e00 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
21e10 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
21e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21e30 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62      TraceOps.Deb
21e40 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65  ugAndTrace(Trace
21e50 50 72 69 6f 72 69 74 79 2e 4d 65 64 69 75 6d 48  Priority.MediumH
21e60 69 67 68 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  igh,..          
21e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21e80 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c    debugCallback,
21e90 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 0d   traceCallback,.
21ea0 0a 20 20 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 20 20 22 46 6f               "Fo
21ec0 72 63 65 64 20 74 6f 20 65 6e 61 62 6c 65 20 73  rced to enable s
21ed0 75 70 70 6f 72 74 20 66 6f 72 20 5c 22 45 66 36  upport for \"Ef6
21ee0 5c 22 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  \".",..         
21ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21f00 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
21f10 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
21f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 72                pr
21f30 6f 76 69 64 65 72 46 6c 61 67 73 20 7c 3d 20 50  oviderFlags |= P
21f40 72 6f 76 69 64 65 72 46 6c 61 67 73 2e 44 69 64  roviderFlags.Did
21f50 45 66 36 46 6f 72 63 65 54 72 61 63 65 3b 0d 0a  Ef6ForceTrace;..
21f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21f70 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
21f80 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
21f90 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  urn true;..     
21fa0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
21fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
21fc0 73 65 20 69 66 20 28 48 61 73 46 6c 61 67 73 28  se if (HasFlags(
21fd0 50 72 6f 76 69 64 65 72 46 6c 61 67 73 2e 46 6f  ProviderFlags.Fo
21fe0 72 63 65 45 66 36 44 69 73 61 62 6c 65 64 2c 20  rceEf6Disabled, 
21ff0 74 72 75 65 29 29 0d 0a 20 20 20 20 20 20 20 20  true))..        
22000 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
22010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
22020 66 20 28 74 72 61 63 65 20 26 26 0d 0a 20 20 20  f (trace &&..   
22030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22040 20 20 20 20 20 21 48 61 73 46 6c 61 67 73 28 50       !HasFlags(P
22050 72 6f 76 69 64 65 72 46 6c 61 67 73 2e 44 69 64  roviderFlags.Did
22060 45 66 36 46 6f 72 63 65 54 72 61 63 65 2c 20 74  Ef6ForceTrace, t
22070 72 75 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  rue))..         
22080 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
22090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
220a0 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44        TraceOps.D
220b0 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61  ebugAndTrace(Tra
220c0 63 65 50 72 69 6f 72 69 74 79 2e 4d 65 64 69 75  cePriority.Mediu
220d0 6d 48 69 67 68 2c 0d 0a 20 20 20 20 20 20 20 20  mHigh,..        
220e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
220f0 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63      debugCallbac
22100 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  k, traceCallback
22110 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
22120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
22130 46 6f 72 63 65 64 20 74 6f 20 64 69 73 61 62 6c  Forced to disabl
22140 65 20 73 75 70 70 6f 72 74 20 66 6f 72 20 5c 22  e support for \"
22150 45 66 36 5c 22 2e 22 2c 0d 0a 20 20 20 20 20 20  Ef6\".",..      
22160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22170 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
22180 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
22190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
221a0 20 70 72 6f 76 69 64 65 72 46 6c 61 67 73 20 7c   providerFlags |
221b0 3d 20 50 72 6f 76 69 64 65 72 46 6c 61 67 73 2e  = ProviderFlags.
221c0 44 69 64 45 66 36 46 6f 72 63 65 54 72 61 63 65  DidEf6ForceTrace
221d0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
221e0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
221f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22200 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
22210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
22220 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
22230 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
22240 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
22250 20 52 65 74 75 72 6e 20 6e 6f 6e 2d 7a 65 72 6f   Return non-zero
22260 20 69 66 20 74 68 65 20 53 79 73 74 65 6d 2e 44   if the System.D
22270 61 74 61 2e 53 51 4c 69 74 65 2e 45 46 36 0d 0a  ata.SQLite.EF6..
22280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22290 2f 2f 20 20 20 20 20 20 20 61 73 73 65 6d 62 6c  //       assembl
222a0 79 20 73 68 6f 75 6c 64 20 62 65 20 70 72 6f 63  y should be proc
222b0 65 73 73 65 64 20 64 75 72 69 6e 67 20 74 68 65  essed during the
222c0 20 69 6e 73 74 61 6c 6c 2e 0d 0a 20 20 20 20 20   install...     
222d0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
222e0 20 20 20 20 49 66 20 74 68 65 20 74 61 72 67 65      If the targe
222f0 74 20 69 73 20 56 69 73 75 61 6c 20 53 74 75 64  t is Visual Stud
22300 69 6f 20 32 30 30 35 20 6f 72 20 56 69 73 75 61  io 2005 or Visua
22310 6c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  l..             
22320 20 20 20 2f 2f 20 20 20 20 20 20 20 53 74 75 64     //       Stud
22330 69 6f 20 32 30 30 38 2c 20 74 68 69 73 20 6d 75  io 2008, this mu
22340 73 74 20 72 65 74 75 72 6e 20 7a 65 72 6f 2e 0d  st return zero..
22350 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
22360 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
22370 20 20 20 20 20 69 66 20 28 6e 6f 4e 65 74 46 78       if (noNetFx
22380 34 30 20 26 26 0d 0a 20 20 20 20 20 20 20 20 20  40 &&..         
22390 20 20 20 20 20 20 20 20 20 20 20 6e 6f 4e 65 74             noNet
223a0 46 78 34 35 20 26 26 20 6e 6f 4e 65 74 46 78 34  Fx45 && noNetFx4
223b0 35 31 20 26 26 20 6e 6f 4e 65 74 46 78 34 35 32  51 && noNetFx452
223c0 20 26 26 20 6e 6f 4e 65 74 46 78 34 36 20 26 26   && noNetFx46 &&
223d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
223e0 20 20 20 20 20 20 6e 6f 4e 65 74 46 78 34 36 31        noNetFx461
223f0 20 26 26 20 6e 6f 4e 65 74 46 78 34 36 32 29 0d   && noNetFx462).
22400 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
22410 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
22420 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
22430 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
22440 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
22450 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
22460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22470 2f 2f 20 4e 4f 54 45 3a 20 41 6c 73 6f 2c 20 69  // NOTE: Also, i
22480 66 20 74 68 65 20 45 46 36 20 63 6f 72 65 20 61  f the EF6 core a
22490 73 73 65 6d 62 6c 79 20 69 73 20 75 6e 61 76 61  ssembly is unava
224a0 69 6c 61 62 6c 65 2c 20 74 68 69 73 0d 0a 20 20  ilable, this..  
224b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
224c0 20 20 20 20 20 20 20 6d 75 73 74 20 72 65 74 75         must retu
224d0 72 6e 20 7a 65 72 6f 2e 0d 0a 20 20 20 20 20 20  rn zero...      
224e0 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
224f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
22500 20 28 21 49 73 53 79 73 74 65 6d 45 66 36 41 73   (!IsSystemEf6As
22510 73 65 6d 62 6c 79 41 76 61 69 6c 61 62 6c 65 28  semblyAvailable(
22520 74 72 61 63 65 29 29 0d 0a 20 20 20 20 20 20 20  trace))..       
22530 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
22540 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20  urn false;....  
22550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
22560 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
22570 20 20 2f 2f 20 4e 4f 54 45 3a 20 46 69 6e 61 6c    // NOTE: Final
22580 6c 79 2c 20 69 66 20 74 68 65 20 45 46 36 20 63  ly, if the EF6 c
22590 6f 72 65 20 61 73 73 65 6d 62 6c 79 20 69 73 20  ore assembly is 
225a0 6e 6f 74 20 61 76 61 69 6c 61 62 6c 65 0d 0a 20  not available.. 
225b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
225c0 2f 20 20 20 20 20 20 20 67 6c 6f 62 61 6c 6c 79  /       globally
225d0 20 5b 61 6e 64 20 74 68 69 73 20 69 73 20 61 20   [and this is a 
225e0 72 65 71 75 69 72 65 6d 65 6e 74 20 66 6f 72 20  requirement for 
225f0 74 68 65 20 63 75 72 72 65 6e 74 0d 0a 20 20 20  the current..   
22600 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
22610 20 20 20 20 20 20 69 6e 73 74 61 6c 6c 5d 2c 20        install], 
22620 72 65 74 75 72 6e 20 7a 65 72 6f 2e 0d 0a 20 20  return zero...  
22630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
22640 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
22650 20 20 72 65 74 75 72 6e 20 48 61 73 46 6c 61 67    return HasFlag
22660 73 28 50 72 6f 76 69 64 65 72 46 6c 61 67 73 2e  s(ProviderFlags.
22670 53 79 73 74 65 6d 45 66 36 4d 75 73 74 42 65 47  SystemEf6MustBeG
22680 6c 6f 62 61 6c 2c 20 74 72 75 65 29 20 3f 0d 0a  lobal, true) ?..
22690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
226a0 20 20 20 20 49 73 53 79 73 74 65 6d 45 66 36 41      IsSystemEf6A
226b0 73 73 65 6d 62 6c 79 47 6c 6f 62 61 6c 28 29 20  ssemblyGlobal() 
226c0 3a 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  : true;..       
226d0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
226e0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
226f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22700 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22710 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22720 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
22730 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
22740 20 62 6f 6f 6c 20 49 73 45 66 36 41 73 73 65 6d   bool IsEf6Assem
22750 62 6c 79 47 6c 6f 62 61 6c 28 29 0d 0a 20 20 20  blyGlobal()..   
22760 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
22770 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
22780 65 66 36 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20  ef6AssemblyName 
22790 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
227a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
227b0 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20  turn false;.... 
227c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 41                 A
227d0 73 73 65 6d 62 6c 79 20 61 73 73 65 6d 62 6c 79  ssembly assembly
227e0 20 3d 20 41 73 73 65 6d 62 6c 79 2e 52 65 66 6c   = Assembly.Refl
227f0 65 63 74 69 6f 6e 4f 6e 6c 79 4c 6f 61 64 28 0d  ectionOnlyLoad(.
22800 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
22810 20 20 20 20 20 65 66 36 41 73 73 65 6d 62 6c 79       ef6Assembly
22820 4e 61 6d 65 2e 54 6f 53 74 72 69 6e 67 28 29 29  Name.ToString())
22830 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
22840 20 20 20 20 20 72 65 74 75 72 6e 20 28 61 73 73       return (ass
22850 65 6d 62 6c 79 20 21 3d 20 6e 75 6c 6c 29 20 26  embly != null) &
22860 26 20 61 73 73 65 6d 62 6c 79 2e 47 6c 6f 62 61  & assembly.Globa
22870 6c 41 73 73 65 6d 62 6c 79 43 61 63 68 65 3b 0d  lAssemblyCache;.
22880 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
22890 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
228a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
228b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
228c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
228d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
228e0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
228f0 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 55 73 65   public bool Use
22900 45 66 36 50 72 6f 76 69 64 65 72 28 0d 0a 20 20  Ef6Provider(..  
22910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
22920 6f 6c 20 74 72 61 63 65 0d 0a 20 20 20 20 20 20  ol trace..      
22930 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
22940 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
22950 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
22960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22970 2f 2f 20 4e 4f 54 45 3a 20 57 65 20 63 61 6e 6e  // NOTE: We cann
22980 6f 74 20 75 73 65 20 74 68 65 20 45 46 36 20 61  ot use the EF6 a
22990 73 73 65 6d 62 6c 79 20 61 73 20 74 68 65 20 70  ssembly as the p
229a0 72 6f 76 69 64 65 72 20 69 66 20 69 74 0d 0a 20  rovider if it.. 
229b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
229c0 2f 20 20 20 20 20 20 20 69 73 20 6e 6f 74 20 73  /       is not s
229d0 75 70 70 6f 72 74 65 64 20 62 79 20 74 68 69 73  upported by this
229e0 20 69 6e 73 74 61 6c 6c 61 74 69 6f 6e 2e 0d 0a   installation...
229f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22a00 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
22a10 20 20 20 20 69 66 20 28 21 49 73 45 66 36 53 75      if (!IsEf6Su
22a20 70 70 6f 72 74 65 64 28 74 72 61 63 65 29 29 0d  pported(trace)).
22a30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
22a40 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
22a50 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
22a60 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
22a70 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
22a80 45 3a 20 46 6f 72 20 74 68 65 20 45 46 36 20 61  E: For the EF6 a
22a90 73 73 65 6d 62 6c 79 20 74 6f 20 62 65 20 75 73  ssembly to be us
22aa0 61 62 6c 65 20 61 73 20 61 20 70 72 6f 76 69 64  able as a provid
22ab0 65 72 20 69 6e 0d 0a 20 20 20 20 20 20 20 20 20  er in..         
22ac0 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
22ad0 74 68 65 20 6d 61 63 68 69 6e 65 20 63 6f 6e 66  the machine conf
22ae0 69 67 75 72 61 74 69 6f 6e 20 66 69 6c 65 2c 20  iguration file, 
22af0 69 74 20 6d 75 73 74 20 62 65 20 69 6e 20 74 68  it must be in th
22b00 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
22b10 20 20 20 2f 2f 20 20 20 20 20 20 20 67 6c 6f 62     //       glob
22b20 61 6c 20 61 73 73 65 6d 62 6c 79 20 63 61 63 68  al assembly cach
22b30 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e...            
22b40 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
22b50 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 49          return I
22b60 73 45 66 36 41 73 73 65 6d 62 6c 79 47 6c 6f 62  sEf6AssemblyGlob
22b70 61 6c 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  al();..         
22b80 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
22b90 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
22ba0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22bb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22bc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22bd0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
22be0 20 20 20 20 20 20 20 2f 2a 20 52 45 51 55 49 52         /* REQUIR
22bf0 45 44 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20  ED */..         
22c00 20 20 20 70 75 62 6c 69 63 20 41 73 73 65 6d 62     public Assemb
22c10 6c 79 4e 61 6d 65 20 47 65 74 43 6f 72 65 41 73  lyName GetCoreAs
22c20 73 65 6d 62 6c 79 4e 61 6d 65 28 0d 0a 20 20 20  semblyName(..   
22c30 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
22c40 6c 20 74 72 61 63 65 20 2f 2a 20 4e 4f 54 20 55  l trace /* NOT U
22c50 53 45 44 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20  SED */..        
22c60 20 20 20 20 20 20 20 20 29 20 2f 2a 20 74 68 72          ) /* thr
22c70 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20  ow */..         
22c80 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
22c90 20 20 20 20 20 20 69 66 20 28 63 6f 72 65 41 73        if (coreAs
22ca0 73 65 6d 62 6c 79 4e 61 6d 65 20 3d 3d 20 6e 75  semblyName == nu
22cb0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
22cc0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
22cd0 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 72 65              core
22ce0 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20 3d 20 41  AssemblyName = A
22cf0 73 73 65 6d 62 6c 79 4e 61 6d 65 2e 47 65 74 41  ssemblyName.GetA
22d00 73 73 65 6d 62 6c 79 4e 61 6d 65 28 0d 0a 20 20  ssemblyName(..  
22d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22d20 20 20 20 20 20 20 43 6f 72 65 46 69 6c 65 4e 61        CoreFileNa
22d30 6d 65 29 3b 20 2f 2a 20 74 68 72 6f 77 20 2a 2f  me); /* throw */
22d40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
22d50 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
22d60 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 63 6f         return co
22d70 72 65 41 73 73 65 6d 62 6c 79 4e 61 6d 65 3b 0d  reAssemblyName;.
22d80 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
22d90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
22da0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22db0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22dc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22dd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22de0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
22df0 20 2f 2a 20 4f 50 54 49 4f 4e 41 4c 20 2a 2f 0d   /* OPTIONAL */.
22e00 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
22e10 6c 69 63 20 41 73 73 65 6d 62 6c 79 4e 61 6d 65  lic AssemblyName
22e20 20 47 65 74 4c 69 6e 71 41 73 73 65 6d 62 6c 79   GetLinqAssembly
22e30 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 20  Name(..         
22e40 20 20 20 20 20 20 20 62 6f 6f 6c 20 74 72 61 63         bool trac
22e50 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
22e60 20 20 20 29 20 2f 2a 20 74 68 72 6f 77 20 2a 2f     ) /* throw */
22e70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
22e80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
22e90 20 69 66 20 28 49 73 4c 69 6e 71 53 75 70 70 6f   if (IsLinqSuppo
22ea0 72 74 65 64 28 74 72 61 63 65 29 20 26 26 20 28  rted(trace) && (
22eb0 6c 69 6e 71 41 73 73 65 6d 62 6c 79 4e 61 6d 65  linqAssemblyName
22ec0 20 3d 3d 20 6e 75 6c 6c 29 29 0d 0a 20 20 20 20   == null))..    
22ed0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
22ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22ef0 20 20 20 6c 69 6e 71 41 73 73 65 6d 62 6c 79 4e     linqAssemblyN
22f00 61 6d 65 20 3d 20 41 73 73 65 6d 62 6c 79 4e 61  ame = AssemblyNa
22f10 6d 65 2e 47 65 74 41 73 73 65 6d 62 6c 79 4e 61  me.GetAssemblyNa
22f20 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me(..           
22f30 20 20 20 20 20 20 20 20 20 20 20 20 20 4c 69 6e               Lin
22f40 71 46 69 6c 65 4e 61 6d 65 29 3b 20 2f 2a 20 74  qFileName); /* t
22f50 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20  hrow */..       
22f60 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
22f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
22f80 74 75 72 6e 20 6c 69 6e 71 41 73 73 65 6d 62 6c  turn linqAssembl
22f90 79 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20  yName;..        
22fa0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
22fb0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
22fc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22fd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22fe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22ff0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
23000 20 20 20 20 20 20 20 20 2f 2a 20 4f 50 54 49 4f          /* OPTIO
23010 4e 41 4c 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20  NAL */..        
23020 20 20 20 20 70 75 62 6c 69 63 20 41 73 73 65 6d      public Assem
23030 62 6c 79 4e 61 6d 65 20 47 65 74 45 66 36 41 73  blyName GetEf6As
23040 73 65 6d 62 6c 79 4e 61 6d 65 28 0d 0a 20 20 20  semblyName(..   
23050 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
23060 6c 20 74 72 61 63 65 0d 0a 20 20 20 20 20 20 20  l trace..       
23070 20 20 20 20 20 20 20 20 20 29 20 2f 2a 20 74 68           ) /* th
23080 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20  row */..        
23090 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
230a0 20 20 20 20 20 20 20 69 66 20 28 49 73 45 66 36         if (IsEf6
230b0 53 75 70 70 6f 72 74 65 64 28 74 72 61 63 65 29  Supported(trace)
230c0 20 26 26 20 28 65 66 36 41 73 73 65 6d 62 6c 79   && (ef6Assembly
230d0 4e 61 6d 65 20 3d 3d 20 6e 75 6c 6c 29 29 0d 0a  Name == null))..
230e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
230f0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
23100 20 20 20 20 20 20 20 65 66 36 41 73 73 65 6d 62         ef6Assemb
23110 6c 79 4e 61 6d 65 20 3d 20 41 73 73 65 6d 62 6c  lyName = Assembl
23120 79 4e 61 6d 65 2e 47 65 74 41 73 73 65 6d 62 6c  yName.GetAssembl
23130 79 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20  yName(..        
23140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23150 45 66 36 46 69 6c 65 4e 61 6d 65 29 3b 20 2f 2a  Ef6FileName); /*
23160 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20   throw */..     
23170 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
23180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23190 72 65 74 75 72 6e 20 65 66 36 41 73 73 65 6d 62  return ef6Assemb
231a0 6c 79 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20  lyName;..       
231b0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
231c0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
231d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
231e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
231f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23200 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
23210 20 20 20 20 20 20 20 20 20 2f 2a 20 52 45 51 55           /* REQU
23220 49 52 45 44 20 2a 2f 0d 0a 20 20 20 20 20 20 20  IRED */..       
23230 20 20 20 20 20 70 75 62 6c 69 63 20 41 73 73 65       public Asse
23240 6d 62 6c 79 4e 61 6d 65 20 47 65 74 44 65 73 69  mblyName GetDesi
23250 67 6e 65 72 41 73 73 65 6d 62 6c 79 4e 61 6d 65  gnerAssemblyName
23260 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
23270 20 20 20 62 6f 6f 6c 20 74 72 61 63 65 20 2f 2a     bool trace /*
23280 20 4e 4f 54 20 55 53 45 44 20 2a 2f 0d 0a 20 20   NOT USED */..  
23290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 20                ) 
232a0 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20  /* throw */..   
232b0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
232c0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
232d0 64 65 73 69 67 6e 65 72 41 73 73 65 6d 62 6c 79  designerAssembly
232e0 4e 61 6d 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  Name == null).. 
232f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
23300 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
23310 20 20 20 20 20 20 64 65 73 69 67 6e 65 72 41 73        designerAs
23320 73 65 6d 62 6c 79 4e 61 6d 65 20 3d 20 41 73 73  semblyName = Ass
23330 65 6d 62 6c 79 4e 61 6d 65 2e 47 65 74 41 73 73  emblyName.GetAss
23340 65 6d 62 6c 79 4e 61 6d 65 28 0d 0a 20 20 20 20  emblyName(..    
23350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23360 20 20 20 20 44 65 73 69 67 6e 65 72 46 69 6c 65      DesignerFile
23370 4e 61 6d 65 29 3b 20 2f 2a 20 74 68 72 6f 77 20  Name); /* throw 
23380 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  */..            
23390 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
233a0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
233b0 64 65 73 69 67 6e 65 72 41 73 73 65 6d 62 6c 79  designerAssembly
233c0 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  Name;..         
233d0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
233e0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
233f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23400 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23410 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23420 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
23430 20 20 20 20 20 20 20 2f 2a 20 52 45 51 55 49 52         /* REQUIR
23440 45 44 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20  ED */..         
23450 20 20 20 70 75 62 6c 69 63 20 41 73 73 65 6d 62     public Assemb
23460 6c 79 4e 61 6d 65 20 47 65 74 50 72 6f 76 69 64  lyName GetProvid
23470 65 72 41 73 73 65 6d 62 6c 79 4e 61 6d 65 28 0d  erAssemblyName(.
23480 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23490 20 62 6f 6f 6c 20 74 72 61 63 65 0d 0a 20 20 20   bool trace..   
234a0 20 20 20 20 20 20 20 20 20 20 20 20 20 29 20 2f               ) /
234b0 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20  * throw */..    
234c0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
234d0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
234e0 6e 20 55 73 65 45 66 36 50 72 6f 76 69 64 65 72  n UseEf6Provider
234f0 28 74 72 61 63 65 29 20 3f 0d 0a 20 20 20 20 20  (trace) ?..     
23500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 47                 G
23510 65 74 45 66 36 41 73 73 65 6d 62 6c 79 4e 61 6d  etEf6AssemblyNam
23520 65 28 74 72 61 63 65 29 20 3a 20 47 65 74 43 6f  e(trace) : GetCo
23530 72 65 41 73 73 65 6d 62 6c 79 4e 61 6d 65 28 74  reAssemblyName(t
23540 72 61 63 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  race);..        
23550 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
23560 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
23570 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23580 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20  ////////....    
235b0 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73          public s
235c0 74 72 69 6e 67 20 47 65 74 43 6f 6e 66 69 67 49  tring GetConfigI
235d0 6e 76 61 72 69 61 6e 74 4e 61 6d 65 28 0d 0a 20  nvariantName(.. 
235e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
235f0 6f 6f 6c 20 74 72 61 63 65 0d 0a 20 20 20 20 20  ool trace..     
23600 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
23610 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
23620 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
23630 75 72 6e 20 47 65 74 49 6e 76 61 72 69 61 6e 74  urn GetInvariant
23640 4e 61 6d 65 28 74 72 61 63 65 29 3b 0d 0a 20 20  Name(trace);..  
23650 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
23660 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
23670 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23680 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23690 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
236a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
236b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
236c0 62 6c 69 63 20 73 74 72 69 6e 67 20 47 65 74 50  blic string GetP
236d0 72 6f 76 69 64 65 72 49 6e 76 61 72 69 61 6e 74  roviderInvariant
236e0 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 20  Name(..         
236f0 20 20 20 20 20 20 20 62 6f 6f 6c 20 74 72 61 63         bool trac
23700 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
23710 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20     )..          
23720 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
23730 20 20 20 20 20 72 65 74 75 72 6e 20 47 65 74 49       return GetI
23740 6e 76 61 72 69 61 6e 74 4e 61 6d 65 28 74 72 61  nvariantName(tra
23750 63 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ce);..          
23760 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
23770 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
23780 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23790 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
237a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
237b0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
237c0 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 72        public str
237d0 69 6e 67 20 47 65 74 46 61 63 74 6f 72 79 54 79  ing GetFactoryTy
237e0 70 65 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20  peName(..       
237f0 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 74 72           bool tr
23800 61 63 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ace..           
23810 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
23820 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
23830 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 73         return Us
23840 65 45 66 36 50 72 6f 76 69 64 65 72 28 74 72 61  eEf6Provider(tra
23850 63 65 29 20 3f 0d 0a 20 20 20 20 20 20 20 20 20  ce) ?..         
23860 20 20 20 20 20 20 20 20 20 20 20 45 66 36 46 61             Ef6Fa
23870 63 74 6f 72 79 54 79 70 65 4e 61 6d 65 20 3a 20  ctoryTypeName : 
23880 46 61 63 74 6f 72 79 54 79 70 65 4e 61 6d 65 3b  FactoryTypeName;
23890 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
238a0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
238b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
238c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
238d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
238e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
238f0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
23900 20 20 70 75 62 6c 69 63 20 76 6f 69 64 20 44 75    public void Du
23910 6d 70 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  mp(..           
23920 20 20 20 20 20 54 72 61 63 65 43 61 6c 6c 62 61       TraceCallba
23930 63 6b 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  ck traceCallback
23940 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
23950 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20    )..           
23960 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
23970 20 20 20 20 69 66 20 28 74 72 61 63 65 43 61 6c      if (traceCal
23980 6c 62 61 63 6b 20 21 3d 20 6e 75 6c 6c 29 0d 0a  lback != null)..
23990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
239a0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
239b0 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
239c0 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d  back(String.Form
239d0 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46  at(NameAndValueF
239e0 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20  ormat,..        
239f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23a00 22 41 73 73 65 6d 62 6c 79 22 2c 20 46 6f 72 44  "Assembly", ForD
23a10 69 73 70 6c 61 79 28 61 73 73 65 6d 62 6c 79 29  isplay(assembly)
23a20 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
23a30 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
23a40 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
23a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23a60 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
23a70 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e  (String.Format(N
23a80 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61  ameAndValueForma
23a90 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
23aa0 20 20 20 20 20 20 20 20 20 20 20 20 22 4c 6f 67              "Log
23ab0 46 69 6c 65 4e 61 6d 65 22 2c 20 46 6f 72 44 69  FileName", ForDi
23ac0 73 70 6c 61 79 28 6c 6f 67 46 69 6c 65 4e 61 6d  splay(logFileNam
23ad0 65 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  e)),..          
23ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
23af0 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
23b00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23b10 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
23b20 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  ck(String.Format
23b30 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72  (NameAndValueFor
23b40 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  mat,..          
23b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 44                "D
23b60 69 72 65 63 74 6f 72 79 22 2c 20 46 6f 72 44 69  irectory", ForDi
23b70 73 70 6c 61 79 28 64 69 72 65 63 74 6f 72 79 29  splay(directory)
23b80 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
23b90 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
23ba0 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
23bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23bc0 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
23bd0 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e  (String.Format(N
23be0 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61  ameAndValueForma
23bf0 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
23c00 20 20 20 20 20 20 20 20 20 20 20 20 22 43 6f 72              "Cor
23c10 65 46 69 6c 65 4e 61 6d 65 22 2c 20 46 6f 72 44  eFileName", ForD
23c20 69 73 70 6c 61 79 28 63 6f 72 65 46 69 6c 65 4e  isplay(coreFileN
23c30 61 6d 65 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ame)),..        
23c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23c50 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
23c60 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
23c70 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
23c80 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d  back(String.Form
23c90 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46  at(NameAndValueF
23ca0 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20  ormat,..        
23cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23cc0 22 4c 69 6e 71 46 69 6c 65 4e 61 6d 65 22 2c 20  "LinqFileName", 
23cd0 46 6f 72 44 69 73 70 6c 61 79 28 6c 69 6e 71 46  ForDisplay(linqF
23ce0 69 6c 65 4e 61 6d 65 29 29 2c 0d 0a 20 20 20 20  ileName)),..    
23cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23d00 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
23d10 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
23d20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
23d30 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e  Callback(String.
23d40 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61  Format(NameAndVa
23d50 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20  lueFormat,..    
23d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23d70 20 20 20 20 22 45 66 36 46 69 6c 65 4e 61 6d 65      "Ef6FileName
23d80 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 65 66  ", ForDisplay(ef
23d90 36 46 69 6c 65 4e 61 6d 65 29 29 2c 0d 0a 20 20  6FileName)),..  
23da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23db0 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
23dc0 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
23dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
23de0 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e  ceCallback(Strin
23df0 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64  g.Format(NameAnd
23e00 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20  ValueFormat,..  
23e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23e20 20 20 20 20 20 20 22 44 65 73 69 67 6e 65 72 46        "DesignerF
23e30 69 6c 65 4e 61 6d 65 22 2c 20 46 6f 72 44 69 73  ileName", ForDis
23e40 70 6c 61 79 28 64 65 73 69 67 6e 65 72 46 69 6c  play(designerFil
23e50 65 4e 61 6d 65 29 29 2c 0d 0a 20 20 20 20 20 20  eName)),..      
23e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23e70 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
23e80 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
23e90 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
23ea0 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f  llback(String.Fo
23eb0 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75  rmat(NameAndValu
23ec0 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20  eFormat,..      
23ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23ee0 20 20 22 52 65 67 69 73 74 72 79 56 65 72 73 69    "RegistryVersi
23ef0 6f 6e 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  on", ForDisplay(
23f00 72 65 67 69 73 74 72 79 56 65 72 73 69 6f 6e 29  registryVersion)
23f10 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
23f20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
23f30 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
23f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23f50 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
23f60 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e  (String.Format(N
23f70 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61  ameAndValueForma
23f80 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
23f90 20 20 20 20 20 20 20 20 20 20 20 20 22 43 6f 6e              "Con
23fa0 66 69 67 56 65 72 73 69 6f 6e 22 2c 20 46 6f 72  figVersion", For
23fb0 44 69 73 70 6c 61 79 28 63 6f 6e 66 69 67 56 65  Display(configVe
23fc0 72 73 69 6f 6e 29 29 2c 0d 0a 20 20 20 20 20 20  rsion)),..      
23fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23fe0 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
23ff0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
24000 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
24010 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f  llback(String.Fo
24020 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75  rmat(NameAndValu
24030 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20  eFormat,..      
24040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24050 20 20 22 56 73 56 65 72 73 69 6f 6e 53 75 66 66    "VsVersionSuff
24060 69 78 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  ix", ForDisplay(
24070 76 73 56 65 72 73 69 6f 6e 53 75 66 66 69 78 29  vsVersionSuffix)
24080 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
24090 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
240a0 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
240b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
240c0 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
240d0 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e  (String.Format(N
240e0 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61  ameAndValueForma
240f0 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
24100 20 20 20 20 20 20 20 20 20 20 20 20 22 44 65 62              "Deb
24110 75 67 46 6f 72 6d 61 74 22 2c 20 46 6f 72 44 69  ugFormat", ForDi
24120 73 70 6c 61 79 28 64 65 62 75 67 46 6f 72 6d 61  splay(debugForma
24130 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  t)),..          
24140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
24150 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
24160 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
24170 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
24180 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  ck(String.Format
24190 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72  (NameAndValueFor
241a0 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  mat,..          
241b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 54                "T
241c0 72 61 63 65 46 6f 72 6d 61 74 22 2c 20 46 6f 72  raceFormat", For
241d0 44 69 73 70 6c 61 79 28 74 72 61 63 65 46 6f 72  Display(traceFor
241e0 6d 61 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  mat)),..        
241f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24200 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
24210 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
24220 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
24230 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d  back(String.Form
24240 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46  at(NameAndValueF
24250 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20  ormat,..        
24260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24270 22 49 6e 73 74 61 6c 6c 46 6c 61 67 73 22 2c 20  "InstallFlags", 
24280 46 6f 72 44 69 73 70 6c 61 79 28 69 6e 73 74 61  ForDisplay(insta
24290 6c 6c 46 6c 61 67 73 29 29 2c 0d 0a 20 20 20 20  llFlags)),..    
242a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
242b0 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
242c0 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
242d0 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
242e0 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e  Callback(String.
242f0 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61  Format(NameAndVa
24300 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20  lueFormat,..    
24310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24320 20 20 20 20 22 50 72 6f 76 69 64 65 72 46 6c 61      "ProviderFla
24330 67 73 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  gs", ForDisplay(
24340 70 72 6f 76 69 64 65 72 46 6c 61 67 73 29 29 2c  providerFlags)),
24350 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
24360 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
24370 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
24380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24390 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53   traceCallback(S
243a0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d  tring.Format(Nam
243b0 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c  eAndValueFormat,
243c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
243d0 20 20 20 20 20 20 20 20 20 20 22 44 65 62 75 67            "Debug
243e0 50 72 69 6f 72 69 74 79 22 2c 20 46 6f 72 44 69  Priority", ForDi
243f0 73 70 6c 61 79 28 64 65 62 75 67 50 72 69 6f 72  splay(debugPrior
24400 69 74 79 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ity)),..        
24410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24420 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
24430 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
24440 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
24450 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d  back(String.Form
24460 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46  at(NameAndValueF
24470 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20  ormat,..        
24480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24490 22 54 72 61 63 65 50 72 69 6f 72 69 74 79 22 2c  "TracePriority",
244a0 20 46 6f 72 44 69 73 70 6c 61 79 28 74 72 61 63   ForDisplay(trac
244b0 65 50 72 69 6f 72 69 74 79 29 29 2c 0d 0a 20 20  ePriority)),..  
244c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
244d0 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
244e0 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
244f0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
24500 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e  ceCallback(Strin
24510 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64  g.Format(NameAnd
24520 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20  ValueFormat,..  
24530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24540 20 20 20 20 20 20 22 50 65 72 55 73 65 72 22 2c        "PerUser",
24550 20 46 6f 72 44 69 73 70 6c 61 79 28 70 65 72 55   ForDisplay(perU
24560 73 65 72 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ser)),..        
24570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24580 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
24590 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
245a0 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
245b0 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d  back(String.Form
245c0 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46  at(NameAndValueF
245d0 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20  ormat,..        
245e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
245f0 22 49 6e 73 74 61 6c 6c 22 2c 20 46 6f 72 44 69  "Install", ForDi
24600 73 70 6c 61 79 28 69 6e 73 74 61 6c 6c 29 29 2c  splay(install)),
24610 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
24620 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
24630 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
24640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24650 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53   traceCallback(S
24660 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d  tring.Format(Nam
24670 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c  eAndValueFormat,
24680 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
24690 20 20 20 20 20 20 20 20 20 20 22 57 6f 77 36 34            "Wow64
246a0 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 77 6f  ", ForDisplay(wo
246b0 77 36 34 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  w64)),..        
246c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
246d0 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
246e0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
246f0 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
24700 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d  back(String.Form
24710 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46  at(NameAndValueF
24720 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20  ormat,..        
24730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24740 22 4e 6f 52 75 6e 74 69 6d 65 56 65 72 73 69 6f  "NoRuntimeVersio
24750 6e 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e  n", ForDisplay(n
24760 6f 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 29  oRuntimeVersion)
24770 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
24780 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
24790 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
247a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
247b0 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
247c0 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e  (String.Format(N
247d0 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61  ameAndValueForma
247e0 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
247f0 20 20 20 20 20 20 20 20 20 20 20 20 22 4e 6f 44              "NoD
24800 65 73 6b 74 6f 70 22 2c 20 46 6f 72 44 69 73 70  esktop", ForDisp
24810 6c 61 79 28 6e 6f 44 65 73 6b 74 6f 70 29 29 2c  lay(noDesktop)),
24820 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
24830 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
24840 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
24850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24860 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53   traceCallback(S
24870 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d  tring.Format(Nam
24880 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c  eAndValueFormat,
24890 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
248a0 20 20 20 20 20 20 20 20 20 20 22 4e 6f 43 6f 6d            "NoCom
248b0 70 61 63 74 22 2c 20 46 6f 72 44 69 73 70 6c 61  pact", ForDispla
248c0 79 28 6e 6f 43 6f 6d 70 61 63 74 29 29 2c 0d 0a  y(noCompact)),..
248d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
248e0 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
248f0 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
24900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
24910 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72  raceCallback(Str
24920 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41  ing.Format(NameA
24930 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a  ndValueFormat,..
24940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24950 20 20 20 20 20 20 20 20 22 4e 6f 4e 65 74 46 78          "NoNetFx
24960 32 30 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  20", ForDisplay(
24970 6e 6f 4e 65 74 46 78 32 30 29 29 2c 0d 0a 20 20  noNetFx20)),..  
24980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24990 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
249a0 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
249b0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
249c0 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e  ceCallback(Strin
249d0 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64  g.Format(NameAnd
249e0 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20  ValueFormat,..  
249f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24a00 20 20 20 20 20 20 22 4e 6f 4e 65 74 46 78 33 35        "NoNetFx35
24a10 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f  ", ForDisplay(no
24a20 4e 65 74 46 78 33 35 29 29 2c 0d 0a 20 20 20 20  NetFx35)),..    
24a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24a40 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
24a50 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
24a60 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
24a70 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e  Callback(String.
24a80 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61  Format(NameAndVa
24a90 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20  lueFormat,..    
24aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24ab0 20 20 20 20 22 4e 6f 4e 65 74 46 78 34 30 22 2c      "NoNetFx40",
24ac0 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f 4e 65   ForDisplay(noNe
24ad0 74 46 78 34 30 29 29 2c 0d 0a 20 20 20 20 20 20  tFx40)),..      
24ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24af0 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
24b00 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
24b10 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
24b20 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f  llback(String.Fo
24b30 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75  rmat(NameAndValu
24b40 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20  eFormat,..      
24b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24b60 20 20 22 4e 6f 4e 65 74 46 78 34 35 22 2c 20 46    "NoNetFx45", F
24b70 6f 72 44 69 73 70 6c 61 79 28 6e 6f 4e 65 74 46  orDisplay(noNetF
24b80 78 34 35 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  x45)),..        
24b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24ba0 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
24bb0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
24bc0 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
24bd0 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d  back(String.Form
24be0 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46  at(NameAndValueF
24bf0 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20  ormat,..        
24c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24c10 22 4e 6f 4e 65 74 46 78 34 35 31 22 2c 20 46 6f  "NoNetFx451", Fo
24c20 72 44 69 73 70 6c 61 79 28 6e 6f 4e 65 74 46 78  rDisplay(noNetFx
24c30 34 35 31 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  451)),..        
24c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24c50 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
24c60 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
24c70 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
24c80 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d  back(String.Form
24c90 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46  at(NameAndValueF
24ca0 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20  ormat,..        
24cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24cc0 22 4e 6f 4e 65 74 46 78 34 35 32 22 2c 20 46 6f  "NoNetFx452", Fo
24cd0 72 44 69 73 70 6c 61 79 28 6e 6f 4e 65 74 46 78  rDisplay(noNetFx
24ce0 34 35 32 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  452)),..        
24cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24d00 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
24d10 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
24d20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
24d30 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d  back(String.Form
24d40 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46  at(NameAndValueF
24d50 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20  ormat,..        
24d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24d70 22 4e 6f 4e 65 74 46 78 34 36 22 2c 20 46 6f 72  "NoNetFx46", For
24d80 44 69 73 70 6c 61 79 28 6e 6f 4e 65 74 46 78 34  Display(noNetFx4
24d90 36 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  6)),..          
24da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
24db0 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
24dc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
24dd0 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
24de0 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  ck(String.Format
24df0 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72  (NameAndValueFor
24e00 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  mat,..          
24e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 4e                "N
24e20 6f 4e 65 74 46 78 34 36 31 22 2c 20 46 6f 72 44  oNetFx461", ForD
24e30 69 73 70 6c 61 79 28 6e 6f 4e 65 74 46 78 34 36  isplay(noNetFx46
24e40 31 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  1)),..          
24e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
24e60 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
24e70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
24e80 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
24e90 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  ck(String.Format
24ea0 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72  (NameAndValueFor
24eb0 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  mat,..          
24ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 4e                "N
24ed0 6f 4e 65 74 46 78 34 36 32 22 2c 20 46 6f 72 44  oNetFx462", ForD
24ee0 69 73 70 6c 61 79 28 6e 6f 4e 65 74 46 78 34 36  isplay(noNetFx46
24ef0 32 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  2)),..          
24f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
24f10 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
24f20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
24f30 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
24f40 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  ck(String.Format
24f50 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72  (NameAndValueFor
24f60 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  mat,..          
24f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 4e                "N
24f80 6f 56 73 32 30 30 35 22 2c 20 46 6f 72 44 69 73  oVs2005", ForDis
24f90 70 6c 61 79 28 6e 6f 56 73 32 30 30 35 29 29 2c  play(noVs2005)),
24fa0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
24fb0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
24fc0 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
24fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24fe0 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53   traceCallback(S
24ff0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d  tring.Format(Nam
25000 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c  eAndValueFormat,
25010 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
25020 20 20 20 20 20 20 20 20 20 20 22 4e 6f 56 73 32            "NoVs2
25030 30 30 38 22 2c 20 46 6f 72 44 69 73 70 6c 61 79  008", ForDisplay
25040 28 6e 6f 56 73 32 30 30 38 29 29 2c 0d 0a 20 20  (noVs2008)),..  
25050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25060 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
25070 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
25080 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
25090 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e  ceCallback(Strin
250a0 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64  g.Format(NameAnd
250b0 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20  ValueFormat,..  
250c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
250d0 20 20 20 20 20 20 22 4e 6f 56 73 32 30 31 30 22        "NoVs2010"
250e0 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f 56  , ForDisplay(noV
250f0 73 32 30 31 30 29 29 2c 0d 0a 20 20 20 20 20 20  s2010)),..      
25100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25110 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
25120 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
25130 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
25140 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f  llback(String.Fo
25150 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75  rmat(NameAndValu
25160 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20  eFormat,..      
25170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25180 20 20 22 4e 6f 56 73 32 30 31 32 22 2c 20 46 6f    "NoVs2012", Fo
25190 72 44 69 73 70 6c 61 79 28 6e 6f 56 73 32 30 31  rDisplay(noVs201
251a0 32 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  2)),..          
251b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
251c0 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
251d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
251e0 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
251f0 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  ck(String.Format
25200 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72  (NameAndValueFor
25210 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  mat,..          
25220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 4e                "N
25230 6f 56 73 32 30 31 33 22 2c 20 46 6f 72 44 69 73  oVs2013", ForDis
25240 70 6c 61 79 28 6e 6f 56 73 32 30 31 33 29 29 2c  play(noVs2013)),
25250 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
25260 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
25270 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
25280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25290 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53   traceCallback(S
252a0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d  tring.Format(Nam
252b0 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c  eAndValueFormat,
252c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
252d0 20 20 20 20 20 20 20 20 20 20 22 4e 6f 56 73 32            "NoVs2
252e0 30 31 35 22 2c 20 46 6f 72 44 69 73 70 6c 61 79  015", ForDisplay
252f0 28 6e 6f 56 73 32 30 31 35 29 29 2c 0d 0a 20 20  (noVs2015)),..  
25300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25310 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
25320 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
25330 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
25340 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e  ceCallback(Strin
25350 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64  g.Format(NameAnd
25360 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20  ValueFormat,..  
25370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25380 20 20 20 20 20 20 22 4e 6f 54 72 61 63 65 22 2c        "NoTrace",
25390 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f 54 72   ForDisplay(noTr
253a0 61 63 65 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ace)),..        
253b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
253c0 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
253d0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
253e0 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
253f0 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d  back(String.Form
25400 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46  at(NameAndValueF
25410 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20  ormat,..        
25420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25430 22 4e 6f 43 6f 6e 73 6f 6c 65 22 2c 20 46 6f 72  "NoConsole", For
25440 44 69 73 70 6c 61 79 28 6e 6f 43 6f 6e 73 6f 6c  Display(noConsol
25450 65 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  e)),..          
25460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
25470 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
25480 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
25490 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
254a0 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  ck(String.Format
254b0 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72  (NameAndValueFor
254c0 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  mat,..          
254d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 4e                "N
254e0 6f 4c 6f 67 22 2c 20 46 6f 72 44 69 73 70 6c 61  oLog", ForDispla
254f0 79 28 6e 6f 4c 6f 67 29 29 2c 0d 0a 20 20 20 20  y(noLog)),..    
25500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25510 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
25520 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
25530 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
25540 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e  Callback(String.
25550 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61  Format(NameAndVa
25560 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20  lueFormat,..    
25570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25580 20 20 20 20 22 54 68 72 6f 77 4f 6e 4d 69 73 73      "ThrowOnMiss
25590 69 6e 67 22 2c 20 46 6f 72 44 69 73 70 6c 61 79  ing", ForDisplay
255a0 28 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 29  (throwOnMissing)
255b0 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
255c0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
255d0 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
255e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
255f0 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
25600 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e  (String.Format(N
25610 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61  ameAndValueForma
25620 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
25630 20 20 20 20 20 20 20 20 20 20 20 20 22 57 68 61              "Wha
25640 74 49 66 22 2c 20 46 6f 72 44 69 73 70 6c 61 79  tIf", ForDisplay
25650 28 77 68 61 74 49 66 29 29 2c 0d 0a 20 20 20 20  (whatIf)),..    
25660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25670 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
25680 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
25690 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
256a0 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e  Callback(String.
256b0 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61  Format(NameAndVa
256c0 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20  lueFormat,..    
256d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
256e0 20 20 20 20 22 44 65 62 75 67 22 2c 20 46 6f 72      "Debug", For
256f0 44 69 73 70 6c 61 79 28 64 65 62 75 67 29 29 2c  Display(debug)),
25700 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
25710 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
25720 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
25730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25740 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53   traceCallback(S
25750 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d  tring.Format(Nam
25760 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c  eAndValueFormat,
25770 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
25780 20 20 20 20 20 20 20 20 20 20 22 56 65 72 62 6f            "Verbo
25790 73 65 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  se", ForDisplay(
257a0 76 65 72 62 6f 73 65 29 29 2c 0d 0a 20 20 20 20  verbose)),..    
257b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
257c0 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
257d0 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
257e0 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
257f0 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e  Callback(String.
25800 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61  Format(NameAndVa
25810 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20  lueFormat,..    
25820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25830 20 20 20 20 22 43 6f 6e 66 69 72 6d 22 2c 20 46      "Confirm", F
25840 6f 72 44 69 73 70 6c 61 79 28 63 6f 6e 66 69 72  orDisplay(confir
25850 6d 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  m)),..          
25860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
25870 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
25880 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
25890 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
258a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
258b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
258c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
258d0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
258e0 20 20 20 20 20 20 20 20 69 66 20 28 61 73 73 65          if (asse
258f0 6d 62 6c 79 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20  mbly != null).. 
25900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25910 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
25920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
25930 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69  aceCallback(Stri
25940 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e  ng.Format(NameAn
25950 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20  dValueFormat,.. 
25960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25970 20 20 20 20 20 20 20 20 20 20 20 22 41 73 73 65             "Asse
25980 6d 62 6c 79 54 69 74 6c 65 22 2c 0d 0a 20 20 20  mblyTitle",..   
25990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
259a0 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
259b0 6c 61 79 28 47 65 74 41 73 73 65 6d 62 6c 79 54  lay(GetAssemblyT
259c0 69 74 6c 65 28 61 73 73 65 6d 62 6c 79 29 29 29  itle(assembly)))
259d0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
259e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
259f0 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
25a00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
25a10 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
25a20 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46  allback(String.F
25a30 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c  ormat(NameAndVal
25a40 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20  ueFormat,..     
25a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25a60 20 20 20 20 20 20 20 22 41 73 73 65 6d 62 6c 79         "Assembly
25a70 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 22 2c 0d  Configuration",.
25a80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
25a90 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72               For
25aa0 44 69 73 70 6c 61 79 28 47 65 74 41 73 73 65 6d  Display(GetAssem
25ab0 62 6c 79 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e  blyConfiguration
25ac0 28 61 73 73 65 6d 62 6c 79 29 29 29 2c 0d 0a 20  (assembly))),.. 
25ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25ae0 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
25af0 43 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20  Category);..    
25b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25b10 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
25b20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
25b30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25b40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25b50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25b60 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
25b70 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
25b80 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67  eCallback(String
25b90 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56  .Format(NameAndV
25ba0 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20  alueFormat,..   
25bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25bc0 20 20 20 20 20 22 49 73 53 79 73 74 65 6d 45 66       "IsSystemEf
25bd0 36 41 73 73 65 6d 62 6c 79 41 76 61 69 6c 61 62  6AssemblyAvailab
25be0 6c 65 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  le", ForDisplay(
25bf0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
25c00 20 20 20 20 20 20 20 20 20 20 49 73 53 79 73 74            IsSyst
25c10 65 6d 45 66 36 41 73 73 65 6d 62 6c 79 41 76 61  emEf6AssemblyAva
25c20 69 6c 61 62 6c 65 28 66 61 6c 73 65 29 29 29 2c  ilable(false))),
25c30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
25c40 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
25c50 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
25c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25c70 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53   traceCallback(S
25c80 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d  tring.Format(Nam
25c90 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c  eAndValueFormat,
25ca0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
25cb0 20 20 20 20 20 20 20 20 20 20 22 49 73 53 79 73            "IsSys
25cc0 74 65 6d 45 66 36 41 73 73 65 6d 62 6c 79 47 6c  temEf6AssemblyGl
25cd0 6f 62 61 6c 22 2c 20 46 6f 72 44 69 73 70 6c 61  obal", ForDispla
25ce0 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
25cf0 20 20 20 20 20 20 20 20 20 20 20 20 49 73 53 79              IsSy
25d00 73 74 65 6d 45 66 36 41 73 73 65 6d 62 6c 79 47  stemEf6AssemblyG
25d10 6c 6f 62 61 6c 28 29 29 29 2c 0d 0a 20 20 20 20  lobal())),..    
25d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25d30 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
25d40 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
25d50 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
25d60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25d70 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
25da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
25db0 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69  aceCallback(Stri
25dc0 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e  ng.Format(NameAn
25dd0 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20  dValueFormat,.. 
25de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25df0 20 20 20 20 20 20 20 22 49 73 4c 69 6e 71 53 75         "IsLinqSu
25e00 70 70 6f 72 74 65 64 22 2c 20 46 6f 72 44 69 73  pported", ForDis
25e10 70 6c 61 79 28 49 73 4c 69 6e 71 53 75 70 70 6f  play(IsLinqSuppo
25e20 72 74 65 64 28 66 61 6c 73 65 29 29 29 2c 0d 0a  rted(false))),..
25e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25e40 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
25e50 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
25e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
25e70 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72  raceCallback(Str
25e80 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41  ing.Format(NameA
25e90 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a  ndValueFormat,..
25ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25eb0 20 20 20 20 20 20 20 20 22 49 73 45 66 36 53 75          "IsEf6Su
25ec0 70 70 6f 72 74 65 64 22 2c 20 46 6f 72 44 69 73  pported", ForDis
25ed0 70 6c 61 79 28 49 73 45 66 36 53 75 70 70 6f 72  play(IsEf6Suppor
25ee0 74 65 64 28 66 61 6c 73 65 29 29 29 2c 0d 0a 20  ted(false))),.. 
25ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25f00 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
25f10 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
25f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
25f30 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69  aceCallback(Stri
25f40 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e  ng.Format(NameAn
25f50 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20  dValueFormat,.. 
25f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25f70 20 20 20 20 20 20 20 22 49 73 45 66 36 41 73 73         "IsEf6Ass
25f80 65 6d 62 6c 79 47 6c 6f 62 61 6c 22 2c 20 46 6f  emblyGlobal", Fo
25f90 72 44 69 73 70 6c 61 79 28 0d 0a 20 20 20 20 20  rDisplay(..     
25fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25fb0 20 20 20 49 73 45 66 36 41 73 73 65 6d 62 6c 79     IsEf6Assembly
25fc0 47 6c 6f 62 61 6c 28 29 29 29 2c 0d 0a 20 20 20  Global())),..   
25fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25fe0 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
25ff0 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
26000 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
26010 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67  eCallback(String
26020 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56  .Format(NameAndV
26030 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20  alueFormat,..   
26040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26050 20 20 20 20 20 22 55 73 65 45 66 36 50 72 6f 76       "UseEf6Prov
26060 69 64 65 72 22 2c 20 46 6f 72 44 69 73 70 6c 61  ider", ForDispla
26070 79 28 55 73 65 45 66 36 50 72 6f 76 69 64 65 72  y(UseEf6Provider
26080 28 66 61 6c 73 65 29 29 29 2c 0d 0a 20 20 20 20  (false))),..    
26090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
260a0 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
260b0 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
260c0 20 20 20 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
260f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26100 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
26110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
26120 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  y..             
26130 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
26140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26150 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28    traceCallback(
26160 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61  String.Format(Na
26170 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74  meAndValueFormat
26180 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
26190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
261a0 47 65 74 43 6f 72 65 41 73 73 65 6d 62 6c 79 4e  GetCoreAssemblyN
261b0 61 6d 65 22 2c 20 46 6f 72 44 69 73 70 6c 61 79  ame", ForDisplay
261c0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
261d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 47                 G
261e0 65 74 43 6f 72 65 41 73 73 65 6d 62 6c 79 4e 61  etCoreAssemblyNa
261f0 6d 65 28 66 61 6c 73 65 29 29 29 2c 20 74 72 61  me(false))), tra
26200 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20  ceCategory);..  
26210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26220 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
26230 20 20 20 20 20 20 20 20 20 63 61 74 63 68 20 28           catch (
26240 45 78 63 65 70 74 69 6f 6e 20 65 29 0d 0a 20 20  Exception e)..  
26250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26260 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
26270 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
26280 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e  ceCallback(Strin
26290 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64  g.Format(NameAnd
262a0 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20  ValueFormat,..  
262b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
262c0 20 20 20 20 20 20 20 20 20 20 22 47 65 74 43 6f            "GetCo
262d0 72 65 41 73 73 65 6d 62 6c 79 4e 61 6d 65 22 2c  reAssemblyName",
262e0 20 46 6f 72 44 69 73 70 6c 61 79 28 65 29 29 2c   ForDisplay(e)),
262f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
26300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
26310 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 20  aceCategory);.. 
26320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26330 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
26340 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
26350 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26360 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26370 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26380 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
26390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
263a0 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ry..            
263b0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
263c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
263d0 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
263e0 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e  (String.Format(N
263f0 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61  ameAndValueForma
26400 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
26410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26420 22 47 65 74 4c 69 6e 71 41 73 73 65 6d 62 6c 79  "GetLinqAssembly
26430 4e 61 6d 65 22 2c 20 46 6f 72 44 69 73 70 6c 61  Name", ForDispla
26440 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
26450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26460 47 65 74 4c 69 6e 71 41 73 73 65 6d 62 6c 79 4e  GetLinqAssemblyN
26470 61 6d 65 28 66 61 6c 73 65 29 29 29 2c 20 74 72  ame(false))), tr
26480 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 20  aceCategory);.. 
26490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
264a0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
264b0 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68 20            catch 
264c0 28 45 78 63 65 70 74 69 6f 6e 20 65 29 0d 0a 20  (Exception e).. 
264d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
264e0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
264f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
26500 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69  aceCallback(Stri
26510 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e  ng.Format(NameAn
26520 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20  dValueFormat,.. 
26530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26540 20 20 20 20 20 20 20 20 20 20 20 22 47 65 74 4c             "GetL
26550 69 6e 71 41 73 73 65 6d 62 6c 79 4e 61 6d 65 22  inqAssemblyName"
26560 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 65 29 29  , ForDisplay(e))
26570 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
26580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
26590 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
265a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
265b0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
265c0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f               ///
265d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20  ////////....    
26610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26620 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  try..           
26630 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
26640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26650 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
26660 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  k(String.Format(
26670 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d  NameAndValueForm
26680 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at,..           
26690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
266a0 20 22 47 65 74 45 66 36 41 73 73 65 6d 62 6c 79   "GetEf6Assembly
266b0 4e 61 6d 65 22 2c 20 46 6f 72 44 69 73 70 6c 61  Name", ForDispla
266c0 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
266d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
266e0 47 65 74 45 66 36 41 73 73 65 6d 62 6c 79 4e 61  GetEf6AssemblyNa
266f0 6d 65 28 66 61 6c 73 65 29 29 29 2c 20 74 72 61  me(false))), tra
26700 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20  ceCategory);..  
26710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26720 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
26730 20 20 20 20 20 20 20 20 20 63 61 74 63 68 20 28           catch (
26740 45 78 63 65 70 74 69 6f 6e 20 65 29 0d 0a 20 20  Exception e)..  
26750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26760 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
26770 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
26780 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e  ceCallback(Strin
26790 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64  g.Format(NameAnd
267a0 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20  ValueFormat,..  
267b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
267c0 20 20 20 20 20 20 20 20 20 20 22 47 65 74 45 66            "GetEf
267d0 36 41 73 73 65 6d 62 6c 79 4e 61 6d 65 22 2c 20  6AssemblyName", 
267e0 46 6f 72 44 69 73 70 6c 61 79 28 65 29 29 2c 0d  ForDisplay(e)),.
267f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26800 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
26810 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20  ceCategory);..  
26820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26830 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
26840 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
26850 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26860 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26870 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26880 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
26890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
268a0 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  y..             
268b0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
268c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
268d0 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28    traceCallback(
268e0 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61  String.Format(Na
268f0 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74  meAndValueFormat
26900 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
26910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
26920 47 65 74 44 65 73 69 67 6e 65 72 41 73 73 65 6d  GetDesignerAssem
26930 62 6c 79 4e 61 6d 65 22 2c 20 46 6f 72 44 69 73  blyName", ForDis
26940 70 6c 61 79 28 0d 0a 20 20 20 20 20 20 20 20 20  play(..         
26950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26960 20 20 20 47 65 74 44 65 73 69 67 6e 65 72 41 73     GetDesignerAs
26970 73 65 6d 62 6c 79 4e 61 6d 65 28 66 61 6c 73 65  semblyName(false
26980 29 29 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f  ))), traceCatego
26990 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ry);..          
269a0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
269b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
269c0 20 63 61 74 63 68 20 28 45 78 63 65 70 74 69 6f   catch (Exceptio
269d0 6e 20 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20  n e)..          
269e0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
269f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26a00 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
26a10 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  ck(String.Format
26a20 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72  (NameAndValueFor
26a30 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  mat,..          
26a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26a50 20 20 22 47 65 74 44 65 73 69 67 6e 65 72 41 73    "GetDesignerAs
26a60 73 65 6d 62 6c 79 4e 61 6d 65 22 2c 20 46 6f 72  semblyName", For
26a70 44 69 73 70 6c 61 79 28 65 29 29 2c 0d 0a 20 20  Display(e)),..  
26a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26a90 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
26aa0 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20  ategory);..     
26ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
26ac0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
26ad0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
26ae0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26af0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26b00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26b10 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
26b20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
26b30 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e  Callback(String.
26b40 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61  Format(NameAndVa
26b50 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20  lueFormat,..    
26b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26b70 20 20 20 20 22 47 65 74 49 6e 76 61 72 69 61 6e      "GetInvarian
26b80 74 4e 61 6d 65 22 2c 20 46 6f 72 44 69 73 70 6c  tName", ForDispl
26b90 61 79 28 47 65 74 49 6e 76 61 72 69 61 6e 74 4e  ay(GetInvariantN
26ba0 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ame(..          
26bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 61                fa
26bc0 6c 73 65 29 29 29 2c 20 74 72 61 63 65 43 61 74  lse))), traceCat
26bd0 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
26be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
26bf0 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72  raceCallback(Str
26c00 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41  ing.Format(NameA
26c10 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a  ndValueFormat,..
26c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26c30 20 20 20 20 20 20 20 20 22 47 65 74 43 6f 6e 66          "GetConf
26c40 69 67 49 6e 76 61 72 69 61 6e 74 4e 61 6d 65 22  igInvariantName"
26c50 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 0d 0a 20  , ForDisplay(.. 
26c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26c70 20 20 20 20 20 20 20 47 65 74 43 6f 6e 66 69 67         GetConfig
26c80 49 6e 76 61 72 69 61 6e 74 4e 61 6d 65 28 66 61  InvariantName(fa
26c90 6c 73 65 29 29 29 2c 20 74 72 61 63 65 43 61 74  lse))), traceCat
26ca0 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
26cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
26cc0 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72  raceCallback(Str
26cd0 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41  ing.Format(NameA
26ce0 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a  ndValueFormat,..
26cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26d00 20 20 20 20 20 20 20 20 22 47 65 74 50 72 6f 76          "GetProv
26d10 69 64 65 72 49 6e 76 61 72 69 61 6e 74 4e 61 6d  iderInvariantNam
26d20 65 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 0d  e", ForDisplay(.
26d30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26d40 20 20 20 20 20 20 20 20 20 47 65 74 50 72 6f 76           GetProv
26d50 69 64 65 72 49 6e 76 61 72 69 61 6e 74 4e 61 6d  iderInvariantNam
26d60 65 28 66 61 6c 73 65 29 29 29 2c 20 74 72 61 63  e(false))), trac
26d70 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
26d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26d90 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
26da0 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e  (String.Format(N
26db0 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61  ameAndValueForma
26dc0 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
26dd0 20 20 20 20 20 20 20 20 20 20 20 20 22 47 65 74              "Get
26de0 46 61 63 74 6f 72 79 54 79 70 65 4e 61 6d 65 22  FactoryTypeName"
26df0 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 0d 0a 20  , ForDisplay(.. 
26e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26e10 20 20 20 20 20 20 20 47 65 74 46 61 63 74 6f 72         GetFactor
26e20 79 54 79 70 65 4e 61 6d 65 28 66 61 6c 73 65 29  yTypeName(false)
26e30 29 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72  )), traceCategor
26e40 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
26e50 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
26e60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26e70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26e80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26e90 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
26ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
26eb0 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  y..             
26ec0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
26ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26ee0 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28    traceCallback(
26ef0 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61  String.Format(Na
26f00 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74  meAndValueFormat
26f10 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
26f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
26f30 47 65 74 50 72 6f 76 69 64 65 72 41 73 73 65 6d  GetProviderAssem
26f40 62 6c 79 4e 61 6d 65 22 2c 20 46 6f 72 44 69 73  blyName", ForDis
26f50 70 6c 61 79 28 0d 0a 20 20 20 20 20 20 20 20 20  play(..         
26f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26f70 20 20 20 47 65 74 50 72 6f 76 69 64 65 72 41 73     GetProviderAs
26f80 73 65 6d 62 6c 79 4e 61 6d 65 28 66 61 6c 73 65  semblyName(false
26f90 29 29 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f  ))), traceCatego
26fa0 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ry);..          
26fb0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
26fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26fd0 20 63 61 74 63 68 20 28 45 78 63 65 70 74 69 6f   catch (Exceptio
26fe0 6e 20 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20  n e)..          
26ff0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
27000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27010 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
27020 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  ck(String.Format
27030 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72  (NameAndValueFor
27040 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  mat,..          
27050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27060 20 20 22 47 65 74 50 72 6f 76 69 64 65 72 41 73    "GetProviderAs
27070 73 65 6d 62 6c 79 4e 61 6d 65 22 2c 20 46 6f 72  semblyName", For
27080 44 69 73 70 6c 61 79 28 65 29 29 2c 0d 0a 20 20  Display(e)),..  
27090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
270a0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
270b0 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20  ategory);..     
270c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
270d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
270e0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
270f0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
27100 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
27110 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
27120 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27130 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27140 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27150 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
27160 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65  .            #re
27170 67 69 6f 6e 20 50 75 62 6c 69 63 20 50 72 6f 70  gion Public Prop
27180 65 72 74 69 65 73 0d 0a 20 20 20 20 20 20 20 20  erties..        
27190 20 20 20 20 70 72 69 76 61 74 65 20 41 73 73 65      private Asse
271a0 6d 62 6c 79 20 61 73 73 65 6d 62 6c 79 3b 0d 0a  mbly assembly;..
271b0 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
271c0 69 63 20 41 73 73 65 6d 62 6c 79 20 41 73 73 65  ic Assembly Asse
271d0 6d 62 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20  mbly..          
271e0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
271f0 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
27200 6e 20 61 73 73 65 6d 62 6c 79 3b 20 7d 0d 0a 20  n assembly; }.. 
27210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
27220 65 74 20 7b 20 61 73 73 65 6d 62 6c 79 20 3d 20  et { assembly = 
27230 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
27240 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
27250 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
27260 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27270 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27280 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27290 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
272a0 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
272b0 65 20 73 74 72 69 6e 67 20 6c 6f 67 46 69 6c 65  e string logFile
272c0 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  Name;..         
272d0 20 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67     public string
272e0 20 4c 6f 67 46 69 6c 65 4e 61 6d 65 0d 0a 20 20   LogFileName..  
272f0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
27300 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
27310 20 7b 20 72 65 74 75 72 6e 20 6c 6f 67 46 69 6c   { return logFil
27320 65 4e 61 6d 65 3b 20 7d 0d 0a 20 20 20 20 20 20  eName; }..      
27330 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20            set { 
27340 6c 6f 67 46 69 6c 65 4e 61 6d 65 20 3d 20 76 61  logFileName = va
27350 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  lue; }..        
27360 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
27370 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
27380 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27390 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
273a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
273b0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
273c0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
273d0 73 74 72 69 6e 67 20 64 69 72 65 63 74 6f 72 79  string directory
273e0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
273f0 75 62 6c 69 63 20 73 74 72 69 6e 67 20 44 69 72  ublic string Dir
27400 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 20 20  ectory..        
27410 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
27420 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
27430 75 72 6e 20 64 69 72 65 63 74 6f 72 79 3b 20 7d  urn directory; }
27440 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
27450 20 20 73 65 74 20 7b 20 64 69 72 65 63 74 6f 72    set { director
27460 79 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20  y = value; }..  
27470 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
27480 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
27490 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
274a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
274b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
274c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
274d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
274e0 69 76 61 74 65 20 73 74 72 69 6e 67 20 63 6f 72  ivate string cor
274f0 65 46 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20 20  eFileName;..    
27500 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73          public s
27510 74 72 69 6e 67 20 43 6f 72 65 46 69 6c 65 4e 61  tring CoreFileNa
27520 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  me..            
27530 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
27540 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
27550 63 6f 72 65 46 69 6c 65 4e 61 6d 65 3b 20 7d 0d  coreFileName; }.
27560 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27570 20 73 65 74 20 7b 20 63 6f 72 65 46 69 6c 65 4e   set { coreFileN
27580 61 6d 65 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  ame = value; }..
27590 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
275a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
275b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
275c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
275d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
275e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
275f0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
27600 70 72 69 76 61 74 65 20 73 74 72 69 6e 67 20 6c  private string l
27610 69 6e 71 46 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20  inqFileName;..  
27620 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
27630 20 73 74 72 69 6e 67 20 4c 69 6e 71 46 69 6c 65   string LinqFile
27640 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20  Name..          
27650 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
27660 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
27670 6e 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 3b 20  n linqFileName; 
27680 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
27690 20 20 20 73 65 74 20 7b 20 6c 69 6e 71 46 69 6c     set { linqFil
276a0 65 4e 61 6d 65 20 3d 20 76 61 6c 75 65 3b 20 7d  eName = value; }
276b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
276c0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
276d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
276e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
276f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27700 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27710 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
27720 20 20 70 72 69 76 61 74 65 20 73 74 72 69 6e 67    private string
27730 20 65 66 36 46 69 6c 65 4e 61 6d 65 3b 0d 0a 20   ef6FileName;.. 
27740 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
27750 63 20 73 74 72 69 6e 67 20 45 66 36 46 69 6c 65  c string Ef6File
27760 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20  Name..          
27770 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
27780 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
27790 6e 20 65 66 36 46 69 6c 65 4e 61 6d 65 3b 20 7d  n ef6FileName; }
277a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
277b0 20 20 73 65 74 20 7b 20 65 66 36 46 69 6c 65 4e    set { ef6FileN
277c0 61 6d 65 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  ame = value; }..
277d0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
277e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
277f0 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
27840 70 72 69 76 61 74 65 20 73 74 72 69 6e 67 20 64  private string d
27850 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 3b  esignerFileName;
27860 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
27870 62 6c 69 63 20 73 74 72 69 6e 67 20 44 65 73 69  blic string Desi
27880 67 6e 65 72 46 69 6c 65 4e 61 6d 65 0d 0a 20 20  gnerFileName..  
27890 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
278a0 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
278b0 20 7b 20 72 65 74 75 72 6e 20 64 65 73 69 67 6e   { return design
278c0 65 72 46 69 6c 65 4e 61 6d 65 3b 20 7d 0d 0a 20  erFileName; }.. 
278d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
278e0 65 74 20 7b 20 64 65 73 69 67 6e 65 72 46 69 6c  et { designerFil
278f0 65 4e 61 6d 65 20 3d 20 76 61 6c 75 65 3b 20 7d  eName = value; }
27900 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
27910 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
27920 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27930 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27940 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27950 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27960 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
27970 20 20 70 72 69 76 61 74 65 20 73 74 72 69 6e 67    private string
27980 20 72 65 67 69 73 74 72 79 56 65 72 73 69 6f 6e   registryVersion
27990 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
279a0 75 62 6c 69 63 20 73 74 72 69 6e 67 20 52 65 67  ublic string Reg
279b0 69 73 74 72 79 56 65 72 73 69 6f 6e 0d 0a 20 20  istryVersion..  
279c0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
279d0 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
279e0 20 7b 20 72 65 74 75 72 6e 20 72 65 67 69 73 74   { return regist
279f0 72 79 56 65 72 73 69 6f 6e 3b 20 7d 0d 0a 20 20  ryVersion; }..  
27a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
27a10 74 20 7b 20 72 65 67 69 73 74 72 79 56 65 72 73  t { registryVers
27a20 69 6f 6e 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  ion = value; }..
27a30 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
27a40 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
27a50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27a60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27a70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27a80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27a90 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
27aa0 70 72 69 76 61 74 65 20 73 74 72 69 6e 67 20 63  private string c
27ab0 6f 6e 66 69 67 56 65 72 73 69 6f 6e 3b 0d 0a 20  onfigVersion;.. 
27ac0 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
27ad0 63 20 73 74 72 69 6e 67 20 43 6f 6e 66 69 67 56  c string ConfigV
27ae0 65 72 73 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20  ersion..        
27af0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
27b00 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
27b10 75 72 6e 20 63 6f 6e 66 69 67 56 65 72 73 69 6f  urn configVersio
27b20 6e 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  n; }..          
27b30 20 20 20 20 20 20 73 65 74 20 7b 20 63 6f 6e 66        set { conf
27b40 69 67 56 65 72 73 69 6f 6e 20 3d 20 76 61 6c 75  igVersion = valu
27b50 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
27b60 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
27b70 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27bb0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
27bc0 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
27bd0 72 69 6e 67 20 76 73 56 65 72 73 69 6f 6e 53 75  ring vsVersionSu
27be0 66 66 69 78 3b 0d 0a 20 20 20 20 20 20 20 20 20  ffix;..         
27bf0 20 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67     public string
27c00 20 56 73 56 65 72 73 69 6f 6e 53 75 66 66 69 78   VsVersionSuffix
27c10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
27c20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27c30 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 76 73   get { return vs
27c40 56 65 72 73 69 6f 6e 53 75 66 66 69 78 3b 20 7d  VersionSuffix; }
27c50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
27c60 20 20 73 65 74 20 7b 20 76 73 56 65 72 73 69 6f    set { vsVersio
27c70 6e 53 75 66 66 69 78 20 3d 20 76 61 6c 75 65 3b  nSuffix = value;
27c80 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
27c90 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
27ca0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
27cb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
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 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
27cf0 20 20 20 20 70 72 69 76 61 74 65 20 73 74 72 69      private stri
27d00 6e 67 20 64 65 62 75 67 46 6f 72 6d 61 74 3b 0d  ng debugFormat;.
27d10 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
27d20 6c 69 63 20 73 74 72 69 6e 67 20 44 65 62 75 67  lic string Debug
27d30 46 6f 72 6d 61 74 0d 0a 20 20 20 20 20 20 20 20  Format..        
27d40 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
27d50 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
27d60 75 72 6e 20 64 65 62 75 67 46 6f 72 6d 61 74 3b  urn debugFormat;
27d70 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
27d80 20 20 20 20 73 65 74 20 7b 20 64 65 62 75 67 46      set { debugF
27d90 6f 72 6d 61 74 20 3d 20 76 61 6c 75 65 3b 20 7d  ormat = value; }
27da0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
27db0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 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 2f 2f  ////////////////
27e00 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
27e10 20 20 70 72 69 76 61 74 65 20 73 74 72 69 6e 67    private string
27e20 20 74 72 61 63 65 46 6f 72 6d 61 74 3b 0d 0a 20   traceFormat;.. 
27e30 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
27e40 63 20 73 74 72 69 6e 67 20 54 72 61 63 65 46 6f  c string TraceFo
27e50 72 6d 61 74 0d 0a 20 20 20 20 20 20 20 20 20 20  rmat..          
27e60 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
27e70 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
27e80 6e 20 74 72 61 63 65 46 6f 72 6d 61 74 3b 20 7d  n traceFormat; }
27e90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
27ea0 20 20 73 65 74 20 7b 20 74 72 61 63 65 46 6f 72    set { traceFor
27eb0 6d 61 74 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  mat = value; }..
27ec0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
27ed0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
27ee0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27ef0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27f00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27f10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27f20 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
27f30 70 72 69 76 61 74 65 20 49 6e 73 74 61 6c 6c 46  private InstallF
27f40 6c 61 67 73 20 69 6e 73 74 61 6c 6c 46 6c 61 67  lags installFlag
27f50 73 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s;..            
27f60 70 75 62 6c 69 63 20 49 6e 73 74 61 6c 6c 46 6c  public InstallFl
27f70 61 67 73 20 49 6e 73 74 61 6c 6c 46 6c 61 67 73  ags InstallFlags
27f80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
27f90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27fa0 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 69 6e   get { return in
27fb0 73 74 61 6c 6c 46 6c 61 67 73 3b 20 7d 0d 0a 20  stallFlags; }.. 
27fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
27fd0 65 74 20 7b 20 69 6e 73 74 61 6c 6c 46 6c 61 67  et { installFlag
27fe0 73 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20  s = value; }..  
27ff0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
28000 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
28010 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28020 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28030 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28040 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
28050 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
28060 69 76 61 74 65 20 50 72 6f 76 69 64 65 72 46 6c  ivate ProviderFl
28070 61 67 73 20 70 72 6f 76 69 64 65 72 46 6c 61 67  ags providerFlag
28080 73 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s;..            
28090 70 75 62 6c 69 63 20 50 72 6f 76 69 64 65 72 46  public ProviderF
280a0 6c 61 67 73 20 50 72 6f 76 69 64 65 72 46 6c 61  lags ProviderFla
280b0 67 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  gs..            
280c0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
280d0 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
280e0 70 72 6f 76 69 64 65 72 46 6c 61 67 73 3b 20 7d  providerFlags; }
280f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
28100 20 20 73 65 74 20 7b 20 70 72 6f 76 69 64 65 72    set { provider
28110 46 6c 61 67 73 20 3d 20 76 61 6c 75 65 3b 20 7d  Flags = value; }
28120 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
28130 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
28140 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28150 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28160 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28170 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28180 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
28190 20 20 70 72 69 76 61 74 65 20 54 72 61 63 65 50    private TraceP
281a0 72 69 6f 72 69 74 79 20 64 65 62 75 67 50 72 69  riority debugPri
281b0 6f 72 69 74 79 3b 0d 0a 20 20 20 20 20 20 20 20  ority;..        
281c0 20 20 20 20 70 75 62 6c 69 63 20 54 72 61 63 65      public Trace
281d0 50 72 69 6f 72 69 74 79 20 44 65 62 75 67 50 72  Priority DebugPr
281e0 69 6f 72 69 74 79 0d 0a 20 20 20 20 20 20 20 20  iority..        
281f0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
28200 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
28210 75 72 6e 20 64 65 62 75 67 50 72 69 6f 72 69 74  urn debugPriorit
28220 79 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  y; }..          
28230 20 20 20 20 20 20 73 65 74 20 7b 20 64 65 62 75        set { debu
28240 67 50 72 69 6f 72 69 74 79 20 3d 20 76 61 6c 75  gPriority = valu
28250 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
28260 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
28270 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
28280 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28290 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
282a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
282b0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
282c0 20 20 20 20 20 20 70 72 69 76 61 74 65 20 54 72        private Tr
282d0 61 63 65 50 72 69 6f 72 69 74 79 20 74 72 61 63  acePriority trac
282e0 65 50 72 69 6f 72 69 74 79 3b 0d 0a 20 20 20 20  ePriority;..    
282f0 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 54          public T
28300 72 61 63 65 50 72 69 6f 72 69 74 79 20 54 72 61  racePriority Tra
28310 63 65 50 72 69 6f 72 69 74 79 0d 0a 20 20 20 20  cePriority..    
28320 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
28330 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
28340 20 72 65 74 75 72 6e 20 74 72 61 63 65 50 72 69   return tracePri
28350 6f 72 69 74 79 3b 20 7d 0d 0a 20 20 20 20 20 20  ority; }..      
28360 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20            set { 
28370 74 72 61 63 65 50 72 69 6f 72 69 74 79 20 3d 20  tracePriority = 
28380 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
28390 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
283a0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
283b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
283c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
283d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
283e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
283f0 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
28400 65 20 62 6f 6f 6c 20 70 65 72 55 73 65 72 3b 0d  e bool perUser;.
28410 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
28420 6c 69 63 20 62 6f 6f 6c 20 50 65 72 55 73 65 72  lic bool PerUser
28430 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
28440 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
28450 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 70 65   get { return pe
28460 72 55 73 65 72 3b 20 7d 0d 0a 20 20 20 20 20 20  rUser; }..      
28470 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20            set { 
28480 70 65 72 55 73 65 72 20 3d 20 76 61 6c 75 65 3b  perUser = value;
28490 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
284a0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
284b0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
284c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
284d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
284e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
284f0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
28500 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c      private bool
28510 20 69 6e 73 74 61 6c 6c 3b 0d 0a 20 20 20 20 20   install;..     
28520 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f         public bo
28530 6f 6c 20 49 6e 73 74 61 6c 6c 0d 0a 20 20 20 20  ol Install..    
28540 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
28550 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
28560 20 72 65 74 75 72 6e 20 69 6e 73 74 61 6c 6c 3b   return install;
28570 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
28580 20 20 20 20 73 65 74 20 7b 20 69 6e 73 74 61 6c      set { instal
28590 6c 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20  l = value; }..  
285a0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
285b0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
285c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
285d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
285e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
285f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
28600 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
28610 69 76 61 74 65 20 62 6f 6f 6c 20 77 6f 77 36 34  ivate bool wow64
28620 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
28630 75 62 6c 69 63 20 62 6f 6f 6c 20 57 6f 77 36 34  ublic bool Wow64
28640 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
28650 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
28660 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 77 6f   get { return wo
28670 77 36 34 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  w64; }..        
28680 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 77 6f          set { wo
28690 77 36 34 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  w64 = value; }..
286a0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
286b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f  ////////////////
286e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
286f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28700 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
28710 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 52  private bool noR
28720 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 3b 0d 0a  untimeVersion;..
28730 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
28740 69 63 20 62 6f 6f 6c 20 4e 6f 52 75 6e 74 69 6d  ic bool NoRuntim
28750 65 56 65 72 73 69 6f 6e 0d 0a 20 20 20 20 20 20  eVersion..      
28760 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
28770 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
28780 65 74 75 72 6e 20 6e 6f 52 75 6e 74 69 6d 65 56  eturn noRuntimeV
28790 65 72 73 69 6f 6e 3b 20 7d 0d 0a 20 20 20 20 20  ersion; }..     
287a0 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
287b0 20 6e 6f 52 75 6e 74 69 6d 65 56 65 72 73 69 6f   noRuntimeVersio
287c0 6e 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20  n = value; }..  
287d0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
287e0 20 20 20 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28810 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28820 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
28830 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
28840 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 44 65 73  ivate bool noDes
28850 6b 74 6f 70 3b 0d 0a 20 20 20 20 20 20 20 20 20  ktop;..         
28860 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e     public bool N
28870 6f 44 65 73 6b 74 6f 70 0d 0a 20 20 20 20 20 20  oDesktop..      
28880 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
28890 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
288a0 65 74 75 72 6e 20 6e 6f 44 65 73 6b 74 6f 70 3b  eturn noDesktop;
288b0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
288c0 20 20 20 20 73 65 74 20 7b 20 6e 6f 44 65 73 6b      set { noDesk
288d0 74 6f 70 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  top = value; }..
288e0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
288f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
28900 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28910 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28920 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28930 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28940 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
28950 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 43  private bool noC
28960 6f 6d 70 61 63 74 3b 0d 0a 20 20 20 20 20 20 20  ompact;..       
28970 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c       public bool
28980 20 4e 6f 43 6f 6d 70 61 63 74 0d 0a 20 20 20 20   NoCompact..    
28990 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
289a0 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
289b0 20 72 65 74 75 72 6e 20 6e 6f 43 6f 6d 70 61 63   return noCompac
289c0 74 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  t; }..          
289d0 20 20 20 20 20 20 73 65 74 20 7b 20 6e 6f 43 6f        set { noCo
289e0 6d 70 61 63 74 20 3d 20 76 61 6c 75 65 3b 20 7d  mpact = value; }
289f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
28a00 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
28a10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28a20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28a30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28a40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28a50 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
28a60 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e    private bool n
28a70 6f 4e 65 74 46 78 32 30 3b 0d 0a 20 20 20 20 20  oNetFx20;..     
28a80 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f         public bo
28a90 6f 6c 20 4e 6f 4e 65 74 46 78 32 30 0d 0a 20 20  ol NoNetFx20..  
28aa0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
28ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
28ac0 20 7b 20 72 65 74 75 72 6e 20 6e 6f 4e 65 74 46   { return noNetF
28ad0 78 32 30 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  x20; }..        
28ae0 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 6e 6f          set { no
28af0 4e 65 74 46 78 32 30 20 3d 20 76 61 6c 75 65 3b  NetFx20 = value;
28b00 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
28b10 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
28b20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
28b30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28b40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28b50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28b60 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
28b70 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c      private bool
28b80 20 6e 6f 4e 65 74 46 78 33 35 3b 0d 0a 20 20 20   noNetFx35;..   
28b90 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
28ba0 62 6f 6f 6c 20 4e 6f 4e 65 74 46 78 33 35 0d 0a  bool NoNetFx35..
28bb0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
28bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
28bd0 65 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f 4e 65  et { return noNe
28be0 74 46 78 33 35 3b 20 7d 0d 0a 20 20 20 20 20 20  tFx35; }..      
28bf0 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20            set { 
28c00 6e 6f 4e 65 74 46 78 33 35 20 3d 20 76 61 6c 75  noNetFx35 = valu
28c10 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
28c20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
28c30 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
28c40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28c50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28c60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28c70 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
28c80 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f        private bo
28c90 6f 6c 20 6e 6f 4e 65 74 46 78 34 30 3b 0d 0a 20  ol noNetFx40;.. 
28ca0 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
28cb0 63 20 62 6f 6f 6c 20 4e 6f 4e 65 74 46 78 34 30  c bool NoNetFx40
28cc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
28cd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
28ce0 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f   get { return no
28cf0 4e 65 74 46 78 34 30 3b 20 7d 0d 0a 20 20 20 20  NetFx40; }..    
28d00 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
28d10 7b 20 6e 6f 4e 65 74 46 78 34 30 20 3d 20 76 61  { noNetFx40 = va
28d20 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  lue; }..        
28d30 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
28d40 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
28d50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28d60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28d70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28d80 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
28d90 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
28da0 62 6f 6f 6c 20 6e 6f 4e 65 74 46 78 34 35 3b 0d  bool noNetFx45;.
28db0 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
28dc0 6c 69 63 20 62 6f 6f 6c 20 4e 6f 4e 65 74 46 78  lic bool NoNetFx
28dd0 34 35 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  45..            
28de0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
28df0 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
28e00 6e 6f 4e 65 74 46 78 34 35 3b 20 7d 0d 0a 20 20  noNetFx45; }..  
28e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
28e20 74 20 7b 20 6e 6f 4e 65 74 46 78 34 35 20 3d 20  t { noNetFx45 = 
28e30 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
28e40 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
28e50 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
28e60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28e70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28e80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28e90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
28ea0 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
28eb0 65 20 62 6f 6f 6c 20 6e 6f 4e 65 74 46 78 34 35  e bool noNetFx45
28ec0 31 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  1;..            
28ed0 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 4e 65  public bool NoNe
28ee0 74 46 78 34 35 31 0d 0a 20 20 20 20 20 20 20 20  tFx451..        
28ef0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
28f00 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
28f10 75 72 6e 20 6e 6f 4e 65 74 46 78 34 35 31 3b 20  urn noNetFx451; 
28f20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
28f30 20 20 20 73 65 74 20 7b 20 6e 6f 4e 65 74 46 78     set { noNetFx
28f40 34 35 31 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  451 = value; }..
28f50 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
28f60 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
28f70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28f80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28f90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28fa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28fb0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
28fc0 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 4e  private bool noN
28fd0 65 74 46 78 34 35 32 3b 0d 0a 20 20 20 20 20 20  etFx452;..      
28fe0 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f        public boo
28ff0 6c 20 4e 6f 4e 65 74 46 78 34 35 32 0d 0a 20 20  l NoNetFx452..  
29000 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
29010 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
29020 20 7b 20 72 65 74 75 72 6e 20 6e 6f 4e 65 74 46   { return noNetF
29030 78 34 35 32 3b 20 7d 0d 0a 20 20 20 20 20 20 20  x452; }..       
29040 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 6e           set { n
29050 6f 4e 65 74 46 78 34 35 32 20 3d 20 76 61 6c 75  oNetFx452 = valu
29060 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
29070 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
29080 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
29090 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
290a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
290b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
290c0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
290d0 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f        private bo
290e0 6f 6c 20 6e 6f 4e 65 74 46 78 34 36 3b 0d 0a 20  ol noNetFx46;.. 
290f0 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
29100 63 20 62 6f 6f 6c 20 4e 6f 4e 65 74 46 78 34 36  c bool NoNetFx46
29110 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
29120 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
29130 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f   get { return no
29140 4e 65 74 46 78 34 36 3b 20 7d 0d 0a 20 20 20 20  NetFx46; }..    
29150 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
29160 7b 20 6e 6f 4e 65 74 46 78 34 36 20 3d 20 76 61  { noNetFx46 = va
29170 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  lue; }..        
29180 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
29190 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
291a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
291b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
291c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
291d0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
291e0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
291f0 62 6f 6f 6c 20 6e 6f 4e 65 74 46 78 34 36 31 3b  bool noNetFx461;
29200 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
29210 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 4e 65 74 46  blic bool NoNetF
29220 78 34 36 31 0d 0a 20 20 20 20 20 20 20 20 20 20  x461..          
29230 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
29240 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
29250 6e 20 6e 6f 4e 65 74 46 78 34 36 31 3b 20 7d 0d  n noNetFx461; }.
29260 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
29270 20 73 65 74 20 7b 20 6e 6f 4e 65 74 46 78 34 36   set { noNetFx46
29280 31 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20  1 = value; }..  
29290 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
292a0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
292b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
292c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
292d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
292e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
292f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
29300 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 4e 65 74  ivate bool noNet
29310 46 78 34 36 32 3b 0d 0a 20 20 20 20 20 20 20 20  Fx462;..        
29320 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20      public bool 
29330 4e 6f 4e 65 74 46 78 34 36 32 0d 0a 20 20 20 20  NoNetFx462..    
29340 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
29350 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
29360 20 72 65 74 75 72 6e 20 6e 6f 4e 65 74 46 78 34   return noNetFx4
29370 36 32 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  62; }..         
29380 20 20 20 20 20 20 20 73 65 74 20 7b 20 6e 6f 4e         set { noN
29390 65 74 46 78 34 36 32 20 3d 20 76 61 6c 75 65 3b  etFx462 = value;
293a0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
293b0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
293c0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
293d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
293e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
293f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29400 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
29410 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c      private bool
29420 20 6e 6f 56 73 32 30 30 35 3b 0d 0a 20 20 20 20   noVs2005;..    
29430 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62          public b
29440 6f 6f 6c 20 4e 6f 56 73 32 30 30 35 0d 0a 20 20  ool NoVs2005..  
29450 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
29460 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
29470 20 7b 20 72 65 74 75 72 6e 20 6e 6f 56 73 32 30   { return noVs20
29480 30 35 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  05; }..         
29490 20 20 20 20 20 20 20 73 65 74 20 7b 20 6e 6f 56         set { noV
294a0 73 32 30 30 35 20 3d 20 76 61 6c 75 65 3b 20 7d  s2005 = value; }
294b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
294c0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
294d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
294e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
294f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29500 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29510 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
29520 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e    private bool n
29530 6f 56 73 32 30 30 38 3b 0d 0a 20 20 20 20 20 20  oVs2008;..      
29540 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f        public boo
29550 6c 20 4e 6f 56 73 32 30 30 38 0d 0a 20 20 20 20  l NoVs2008..    
29560 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
29570 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
29580 20 72 65 74 75 72 6e 20 6e 6f 56 73 32 30 30 38   return noVs2008
29590 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
295a0 20 20 20 20 20 73 65 74 20 7b 20 6e 6f 56 73 32       set { noVs2
295b0 30 30 38 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  008 = value; }..
295c0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
295d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
295e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
295f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29600 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29610 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29620 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
29630 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 56  private bool noV
29640 73 32 30 31 30 3b 0d 0a 20 20 20 20 20 20 20 20  s2010;..        
29650 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20      public bool 
29660 4e 6f 56 73 32 30 31 30 0d 0a 20 20 20 20 20 20  NoVs2010..      
29670 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
29680 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
29690 65 74 75 72 6e 20 6e 6f 56 73 32 30 31 30 3b 20  eturn noVs2010; 
296a0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
296b0 20 20 20 73 65 74 20 7b 20 6e 6f 56 73 32 30 31     set { noVs201
296c0 30 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20  0 = value; }..  
296d0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
296e0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
296f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29700 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29710 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29720 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
29730 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
29740 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 56 73 32  ivate bool noVs2
29750 30 31 32 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  012;..          
29760 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f    public bool No
29770 56 73 32 30 31 32 0d 0a 20 20 20 20 20 20 20 20  Vs2012..        
29780 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
29790 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
297a0 75 72 6e 20 6e 6f 56 73 32 30 31 32 3b 20 7d 0d  urn noVs2012; }.
297b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
297c0 20 73 65 74 20 7b 20 6e 6f 56 73 32 30 31 32 20   set { noVs2012 
297d0 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
297e0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
297f0 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
29800 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a  ////////////....
29840 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
29850 61 74 65 20 62 6f 6f 6c 20 6e 6f 56 73 32 30 31  ate bool noVs201
29860 33 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  3;..            
29870 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 56 73  public bool NoVs
29880 32 30 31 33 0d 0a 20 20 20 20 20 20 20 20 20 20  2013..          
29890 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
298a0 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
298b0 6e 20 6e 6f 56 73 32 30 31 33 3b 20 7d 0d 0a 20  n noVs2013; }.. 
298c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
298d0 65 74 20 7b 20 6e 6f 56 73 32 30 31 33 20 3d 20  et { noVs2013 = 
298e0 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
298f0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
29900 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
29910 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29920 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29930 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29940 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
29950 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
29960 65 20 62 6f 6f 6c 20 6e 6f 56 73 32 30 31 35 3b  e bool noVs2015;
29970 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
29980 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 56 73 32 30  blic bool NoVs20
29990 31 35 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  15..            
299a0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
299b0 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
299c0 6e 6f 56 73 32 30 31 35 3b 20 7d 0d 0a 20 20 20  noVs2015; }..   
299d0 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
299e0 20 7b 20 6e 6f 56 73 32 30 31 35 20 3d 20 76 61   { noVs2015 = va
299f0 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  lue; }..        
29a00 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
29a10 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
29a20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29a30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29a40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29a50 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
29a60 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
29a70 62 6f 6f 6c 20 6e 6f 54 72 61 63 65 3b 0d 0a 20  bool noTrace;.. 
29a80 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
29a90 63 20 62 6f 6f 6c 20 4e 6f 54 72 61 63 65 0d 0a  c bool NoTrace..
29aa0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
29ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
29ac0 65 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f 54 72  et { return noTr
29ad0 61 63 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  ace; }..        
29ae0 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 6e 6f          set { no
29af0 54 72 61 63 65 20 3d 20 76 61 6c 75 65 3b 20 7d  Trace = value; }
29b00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
29b10 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
29b20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29b30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29b40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29b50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29b60 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
29b70 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e    private bool n
29b80 6f 43 6f 6e 73 6f 6c 65 3b 0d 0a 20 20 20 20 20  oConsole;..     
29b90 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f         public bo
29ba0 6f 6c 20 4e 6f 43 6f 6e 73 6f 6c 65 0d 0a 20 20  ol NoConsole..  
29bb0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
29bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
29bd0 20 7b 20 72 65 74 75 72 6e 20 6e 6f 43 6f 6e 73   { return noCons
29be0 6f 6c 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  ole; }..        
29bf0 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 6e 6f          set { no
29c00 43 6f 6e 73 6f 6c 65 20 3d 20 76 61 6c 75 65 3b  Console = value;
29c10 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
29c20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
29c30 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
29c40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29c50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29c60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29c70 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
29c80 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c      private bool
29c90 20 6e 6f 4c 6f 67 3b 0d 0a 20 20 20 20 20 20 20   noLog;..       
29ca0 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c       public bool
29cb0 20 4e 6f 4c 6f 67 0d 0a 20 20 20 20 20 20 20 20   NoLog..        
29cc0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
29cd0 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
29ce0 75 72 6e 20 6e 6f 4c 6f 67 3b 20 7d 0d 0a 20 20  urn noLog; }..  
29cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
29d00 74 20 7b 20 6e 6f 4c 6f 67 20 3d 20 76 61 6c 75  t { noLog = valu
29d10 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
29d20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
29d30 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
29d40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29d50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29d60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29d70 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
29d80 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f        private bo
29d90 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e  ol throwOnMissin
29da0 67 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g;..            
29db0 70 75 62 6c 69 63 20 62 6f 6f 6c 20 54 68 72 6f  public bool Thro
29dc0 77 4f 6e 4d 69 73 73 69 6e 67 0d 0a 20 20 20 20  wOnMissing..    
29dd0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
29de0 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
29df0 20 72 65 74 75 72 6e 20 74 68 72 6f 77 4f 6e 4d   return throwOnM
29e00 69 73 73 69 6e 67 3b 20 7d 0d 0a 20 20 20 20 20  issing; }..     
29e10 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
29e20 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 20   throwOnMissing 
29e30 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
29e40 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
29e50 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
29e60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29e70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29e80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29e90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
29ea0 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
29eb0 61 74 65 20 62 6f 6f 6c 20 77 68 61 74 49 66 3b  ate bool whatIf;
29ec0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
29ed0 62 6c 69 63 20 62 6f 6f 6c 20 57 68 61 74 49 66  blic bool WhatIf
29ee0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
29ef0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
29f00 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 77 68   get { return wh
29f10 61 74 49 66 3b 20 7d 0d 0a 20 20 20 20 20 20 20  atIf; }..       
29f20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 77           set { w
29f30 68 61 74 49 66 20 3d 20 76 61 6c 75 65 3b 20 7d  hatIf = value; }
29f40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
29f50 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
29f60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29f70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29f80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29f90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29fa0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
29fb0 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 64    private bool d
29fc0 65 62 75 67 3b 0d 0a 20 20 20 20 20 20 20 20 20  ebug;..         
29fd0 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 44     public bool D
29fe0 65 62 75 67 0d 0a 20 20 20 20 20 20 20 20 20 20  ebug..          
29ff0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2a000 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
2a010 6e 20 64 65 62 75 67 3b 20 7d 0d 0a 20 20 20 20  n debug; }..    
2a020 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
2a030 7b 20 64 65 62 75 67 20 3d 20 76 61 6c 75 65 3b  { debug = value;
2a040 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
2a050 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
2a060 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
2a070 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a080 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a090 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a0a0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
2a0b0 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c      private bool
2a0c0 20 76 65 72 62 6f 73 65 3b 0d 0a 20 20 20 20 20   verbose;..     
2a0d0 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f         public bo
2a0e0 6f 6c 20 56 65 72 62 6f 73 65 0d 0a 20 20 20 20  ol Verbose..    
2a0f0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2a100 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
2a110 20 72 65 74 75 72 6e 20 76 65 72 62 6f 73 65 3b   return verbose;
2a120 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
2a130 20 20 20 20 73 65 74 20 7b 20 76 65 72 62 6f 73      set { verbos
2a140 65 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20  e = value; }..  
2a150 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
2a160 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
2a170 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a180 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a190 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a1a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
2a1b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
2a1c0 69 76 61 74 65 20 62 6f 6f 6c 20 63 6f 6e 66 69  ivate bool confi
2a1d0 72 6d 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  rm;..           
2a1e0 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 43 6f 6e   public bool Con
2a1f0 66 69 72 6d 0d 0a 20 20 20 20 20 20 20 20 20 20  firm..          
2a200 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2a210 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
2a220 6e 20 63 6f 6e 66 69 72 6d 3b 20 7d 0d 0a 20 20  n confirm; }..  
2a230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
2a240 74 20 7b 20 63 6f 6e 66 69 72 6d 20 3d 20 76 61  t { confirm = va
2a250 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  lue; }..        
2a260 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
2a270 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20     #endregion.. 
2a280 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
2a290 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
2a2a0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
2a2b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a2c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a2d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a2e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
2a2f0 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  ...        #regi
2a300 6f 6e 20 46 72 61 6d 65 77 6f 72 6b 4c 69 73 74  on FrameworkList
2a310 20 43 6c 61 73 73 0d 0a 20 20 20 20 20 20 20 20   Class..        
2a320 70 72 69 76 61 74 65 20 73 65 61 6c 65 64 20 63  private sealed c
2a330 6c 61 73 73 20 46 72 61 6d 65 77 6f 72 6b 4c 69  lass FrameworkLi
2a340 73 74 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  st..        {.. 
2a350 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69             #regi
2a360 6f 6e 20 50 75 62 6c 69 63 20 43 6f 6e 73 74 72  on Public Constr
2a370 75 63 74 6f 72 73 0d 0a 20 20 20 20 20 20 20 20  uctors..        
2a380 20 20 20 20 70 75 62 6c 69 63 20 46 72 61 6d 65      public Frame
2a390 77 6f 72 6b 4c 69 73 74 28 29 0d 0a 20 20 20 20  workList()..    
2a3a0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2a3b0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f             // do
2a3c0 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20   nothing...     
2a3d0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
2a3e0 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
2a3f0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2a400 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a410 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a420 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a430 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a440 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
2a450 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69     #region Publi
2a460 63 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20 20  c Methods..     
2a470 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 4d         private M
2a480 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72  ockRegistryKey r
2a490 6f 6f 74 4b 65 79 3b 0d 0a 20 20 20 20 20 20 20  ootKey;..       
2a4a0 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b       public Mock
2a4b0 52 65 67 69 73 74 72 79 4b 65 79 20 52 6f 6f 74  RegistryKey Root
2a4c0 4b 65 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  Key..           
2a4d0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2a4e0 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
2a4f0 20 72 6f 6f 74 4b 65 79 3b 20 7d 0d 0a 20 20 20   rootKey; }..   
2a500 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
2a510 20 7b 20 72 6f 6f 74 4b 65 79 20 3d 20 76 61 6c   { rootKey = val
2a520 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ue; }..         
2a530 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
2a540 20 20 20 20 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 2f  ////////////////
2a570 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a580 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
2a590 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 53         private S
2a5a0 74 72 69 6e 67 4c 69 73 74 20 6e 61 6d 65 73 3b  tringList names;
2a5b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
2a5c0 62 6c 69 63 20 53 74 72 69 6e 67 4c 69 73 74 20  blic StringList 
2a5d0 4e 61 6d 65 73 0d 0a 20 20 20 20 20 20 20 20 20  Names..         
2a5e0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2a5f0 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75        get { retu
2a600 72 6e 20 6e 61 6d 65 73 3b 20 7d 0d 0a 20 20 20  rn names; }..   
2a610 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
2a620 20 7b 20 6e 61 6d 65 73 20 3d 20 76 61 6c 75 65   { names = value
2a630 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
2a640 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
2a650 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
2a660 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a670 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a680 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a690 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
2a6a0 20 20 20 20 20 70 72 69 76 61 74 65 20 56 65 72       private Ver
2a6b0 73 69 6f 6e 4d 61 70 20 76 65 72 73 69 6f 6e 73  sionMap versions
2a6c0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
2a6d0 75 62 6c 69 63 20 56 65 72 73 69 6f 6e 4d 61 70  ublic VersionMap
2a6e0 20 56 65 72 73 69 6f 6e 73 0d 0a 20 20 20 20 20   Versions..     
2a6f0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2a700 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
2a710 72 65 74 75 72 6e 20 76 65 72 73 69 6f 6e 73 3b  return versions;
2a720 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
2a730 20 20 20 20 73 65 74 20 7b 20 76 65 72 73 69 6f      set { versio
2a740 6e 73 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20  ns = value; }.. 
2a750 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
2a760 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
2a770 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a780 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a790 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a7a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
2a7b0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
2a7c0 72 69 76 61 74 65 20 53 74 72 69 6e 67 4c 69 73  rivate StringLis
2a7d0 74 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 3b  t platformNames;
2a7e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
2a7f0 62 6c 69 63 20 53 74 72 69 6e 67 4c 69 73 74 20  blic StringList 
2a800 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 0d 0a 20  PlatformNames.. 
2a810 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2a820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
2a830 74 20 7b 20 72 65 74 75 72 6e 20 70 6c 61 74 66  t { return platf
2a840 6f 72 6d 4e 61 6d 65 73 3b 20 7d 0d 0a 20 20 20  ormNames; }..   
2a850 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
2a860 20 7b 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 73   { platformNames
2a870 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20   = value; }..   
2a880 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
2a890 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
2a8a0 6f 6e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  on..        }.. 
2a8b0 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
2a8c0 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  n....        ///
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 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a910 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
2a920 23 72 65 67 69 6f 6e 20 56 73 4c 69 73 74 20 43  #region VsList C
2a930 6c 61 73 73 0d 0a 20 20 20 20 20 20 20 20 70 72  lass..        pr
2a940 69 76 61 74 65 20 73 65 61 6c 65 64 20 63 6c 61  ivate sealed cla
2a950 73 73 20 56 73 4c 69 73 74 0d 0a 20 20 20 20 20  ss VsList..     
2a960 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2a970 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63    #region Public
2a980 20 43 6f 6e 73 74 72 75 63 74 6f 72 73 0d 0a 20   Constructors.. 
2a990 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
2a9a0 63 20 56 73 4c 69 73 74 28 29 0d 0a 20 20 20 20  c VsList()..    
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 20 20 20 20 2f 2f 20 64 6f             // do
2a9d0 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20   nothing...     
2a9e0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
2a9f0 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
2aa00 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2aa10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2aa20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2aa30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2aa40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2aa50 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
2aa60 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69     #region Publi
2aa70 63 20 50 72 6f 70 65 72 74 69 65 73 0d 0a 20 20  c Properties..  
2aa80 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
2aa90 65 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65  e MockRegistryKe
2aaa0 79 20 72 6f 6f 74 4b 65 79 3b 0d 0a 20 20 20 20  y rootKey;..    
2aab0 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d          public M
2aac0 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 52  ockRegistryKey R
2aad0 6f 6f 74 4b 65 79 0d 0a 20 20 20 20 20 20 20 20  ootKey..        
2aae0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2aaf0 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
2ab00 75 72 6e 20 72 6f 6f 74 4b 65 79 3b 20 7d 0d 0a  urn rootKey; }..
2ab10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ab20 73 65 74 20 7b 20 72 6f 6f 74 4b 65 79 20 3d 20  set { rootKey = 
2ab30 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
2ab40 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
2ab50 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
2ab60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ab70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ab80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ab90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
2aba0 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
2abb0 65 20 56 65 72 73 69 6f 6e 4c 69 73 74 20 76 65  e VersionList ve
2abc0 72 73 69 6f 6e 73 3b 0d 0a 20 20 20 20 20 20 20  rsions;..       
2abd0 20 20 20 20 20 70 75 62 6c 69 63 20 56 65 72 73       public Vers
2abe0 69 6f 6e 4c 69 73 74 20 56 65 72 73 69 6f 6e 73  ionList Versions
2abf0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
2ac00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2ac10 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 76 65   get { return ve
2ac20 72 73 69 6f 6e 73 3b 20 7d 0d 0a 20 20 20 20 20  rsions; }..     
2ac30 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
2ac40 20 76 65 72 73 69 6f 6e 73 20 3d 20 76 61 6c 75   versions = valu
2ac50 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
2ac60 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
2ac70 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20   #endregion..   
2ac80 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
2ac90 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20  #endregion..    
2aca0 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
2acb0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
2acc0 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65  /....        #re
2ad10 67 69 6f 6e 20 50 72 69 76 61 74 65 20 43 6f 6e  gion Private Con
2ad20 73 74 61 6e 74 20 44 61 74 61 0d 0a 20 20 20 20  stant Data..    
2ad30 20 20 20 20 23 72 65 67 69 6f 6e 20 50 61 63 6b      #region Pack
2ad40 61 67 65 20 26 20 50 72 6f 76 69 64 65 72 20 4e  age & Provider N
2ad50 61 6d 65 73 0d 0a 20 20 20 20 20 20 20 20 70 72  ames..        pr
2ad60 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69  ivate const stri
2ad70 6e 67 20 43 6f 72 65 46 69 6c 65 4e 61 6d 65 20  ng CoreFileName 
2ad80 3d 20 22 53 79 73 74 65 6d 2e 44 61 74 61 2e 53  = "System.Data.S
2ad90 51 4c 69 74 65 2e 64 6c 6c 22 3b 0d 0a 20 20 20  QLite.dll";..   
2ada0 20 20 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e       private con
2adb0 73 74 20 73 74 72 69 6e 67 20 4c 69 6e 71 46 69  st string LinqFi
2adc0 6c 65 4e 61 6d 65 20 3d 20 22 53 79 73 74 65 6d  leName = "System
2add0 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 4c 69 6e  .Data.SQLite.Lin
2ade0 71 2e 64 6c 6c 22 3b 0d 0a 20 20 20 20 20 20 20  q.dll";..       
2adf0 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73   private const s
2ae00 74 72 69 6e 67 20 45 66 36 46 69 6c 65 4e 61 6d  tring Ef6FileNam
2ae10 65 20 3d 20 22 53 79 73 74 65 6d 2e 44 61 74 61  e = "System.Data
2ae20 2e 53 51 4c 69 74 65 2e 45 46 36 2e 64 6c 6c 22  .SQLite.EF6.dll"
2ae30 3b 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  ;..        priva
2ae40 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20  te const string 
2ae50 44 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65  DesignerFileName
2ae60 20 3d 20 22 53 51 4c 69 74 65 2e 44 65 73 69 67   = "SQLite.Desig
2ae70 6e 65 72 2e 64 6c 6c 22 3b 0d 0a 20 20 20 20 20  ner.dll";..     
2ae80 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74     private const
2ae90 20 73 74 72 69 6e 67 20 50 72 6f 76 69 64 65 72   string Provider
2aea0 4e 61 6d 65 20 3d 20 22 53 51 4c 69 74 65 20 44  Name = "SQLite D
2aeb0 61 74 61 20 50 72 6f 76 69 64 65 72 22 3b 0d 0a  ata Provider";..
2aec0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
2aed0 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 50 72 6f  const string Pro
2aee0 6a 65 63 74 4e 61 6d 65 20 3d 20 22 53 79 73 74  jectName = "Syst
2aef0 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 22 3b  em.Data.SQLite";
2af00 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
2af10 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 4c  e const string L
2af20 65 67 61 63 79 50 72 6f 6a 65 63 74 4e 61 6d 65  egacyProjectName
2af30 20 3d 20 22 53 51 4c 69 74 65 22 3b 0d 0a 0d 0a   = "SQLite";....
2af40 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
2af50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2af60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2af70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2af80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
2af90 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  ...        priva
2afa0 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20  te const string 
2afb0 44 65 73 63 72 69 70 74 69 6f 6e 20 3d 0d 0a 20  Description =.. 
2afc0 20 20 20 20 20 20 20 20 20 20 20 22 2e 4e 45 54             ".NET
2afd0 20 46 72 61 6d 65 77 6f 72 6b 20 44 61 74 61 20   Framework Data 
2afe0 50 72 6f 76 69 64 65 72 20 66 6f 72 20 53 51 4c  Provider for SQL
2aff0 69 74 65 22 3b 0d 0a 20 20 20 20 20 20 20 20 23  ite";..        #
2b000 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
2b010 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
2b020 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b030 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b040 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b050 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
2b060 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
2b070 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 43 4c 52  const string CLR
2b080 76 32 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65  v2ImageRuntimeVe
2b090 72 73 69 6f 6e 20 3d 20 22 76 32 2e 30 2e 35 30  rsion = "v2.0.50
2b0a0 37 32 37 22 3b 0d 0a 20 20 20 20 20 20 20 20 70  727";..        p
2b0b0 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72  rivate const str
2b0c0 69 6e 67 20 43 4c 52 76 34 49 6d 61 67 65 52 75  ing CLRv4ImageRu
2b0d0 6e 74 69 6d 65 56 65 72 73 69 6f 6e 20 3d 20 22  ntimeVersion = "
2b0e0 76 34 2e 30 2e 33 30 33 31 39 22 3b 0d 0a 0d 0a  v4.0.30319";....
2b0f0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
2b100 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b110 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b120 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b130 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
2b140 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  ...        priva
2b150 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20  te const string 
2b160 53 79 73 74 65 6d 45 66 36 41 73 73 65 6d 62 6c  SystemEf6Assembl
2b170 79 4e 61 6d 65 20 3d 20 22 45 6e 74 69 74 79 46  yName = "EntityF
2b180 72 61 6d 65 77 6f 72 6b 2c 20 22 20 2b 0d 0a 20  ramework, " +.. 
2b190 20 20 20 20 20 20 20 20 20 20 20 22 56 65 72 73             "Vers
2b1a0 69 6f 6e 3d 36 2e 30 2e 30 2e 30 2c 20 43 75 6c  ion=6.0.0.0, Cul
2b1b0 74 75 72 65 3d 6e 65 75 74 72 61 6c 2c 20 50 75  ture=neutral, Pu
2b1c0 62 6c 69 63 4b 65 79 54 6f 6b 65 6e 3d 62 37 37  blicKeyToken=b77
2b1d0 61 35 63 35 36 31 39 33 34 65 30 38 39 22 3b 0d  a5c561934e089";.
2b1e0 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
2b1f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b200 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b210 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b220 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b230 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72  //....        pr
2b240 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69  ivate const stri
2b250 6e 67 20 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46  ng NameAndValueF
2b260 6f 72 6d 61 74 20 3d 20 22 7b 30 7d 3a 20 7b 31  ormat = "{0}: {1
2b270 7d 22 3b 0d 0a 20 20 20 20 20 20 20 20 70 72 69  }";..        pri
2b280 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e  vate const strin
2b290 67 20 4c 6f 67 46 69 6c 65 53 75 66 66 69 78 20  g LogFileSuffix 
2b2a0 3d 20 22 2e 6c 6f 67 22 3b 0d 0a 0d 0a 20 20 20  = ".log";....   
2b2b0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
2b2c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b2d0 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a  ////////////....
2b300 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
2b310 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 56 73 44  const string VsD
2b320 65 76 45 6e 76 53 65 74 75 70 46 6f 72 6d 61 74  evEnvSetupFormat
2b330 20 3d 20 22 7b 30 7d 3a 20 7b 31 7d 22 3b 0d 0a   = "{0}: {1}";..
2b340 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
2b350 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b360 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b370 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b380 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b390 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69  /....        pri
2b3a0 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e  vate const strin
2b3b0 67 20 52 6f 6f 74 4b 65 79 4e 61 6d 65 20 3d 20  g RootKeyName = 
2b3c0 22 53 6f 66 74 77 61 72 65 22 3b 0d 0a 20 20 20  "Software";..   
2b3d0 20 20 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e       private con
2b3e0 73 74 20 73 74 72 69 6e 67 20 57 6f 77 36 34 53  st string Wow64S
2b3f0 75 62 4b 65 79 4e 61 6d 65 20 3d 20 22 57 6f 77  ubKeyName = "Wow
2b400 36 34 33 32 4e 6f 64 65 22 3b 0d 0a 0d 0a 20 20  6432Node";....  
2b410 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
2b420 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b430 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b440 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b450 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
2b460 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20  .        //..   
2b470 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 54 68       // NOTE: Th
2b480 65 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b  e .NET Framework
2b490 20 68 61 73 20 62 6f 74 68 20 33 32 2d 62 69 74   has both 32-bit
2b4a0 20 61 6e 64 20 36 34 2d 62 69 74 20 65 64 69 74   and 64-bit edit
2b4b0 69 6f 6e 73 2e 0d 0a 20 20 20 20 20 20 20 20 2f  ions...        /
2b4c0 2f 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  /..        priva
2b4d0 74 65 20 73 74 61 74 69 63 20 72 65 61 64 6f 6e  te static readon
2b4e0 6c 79 20 62 6f 6f 6c 20 4e 65 74 46 78 49 73 33  ly bool NetFxIs3
2b4f0 32 42 69 74 4f 6e 6c 79 20 3d 20 66 61 6c 73 65  2BitOnly = false
2b500 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b540 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b550 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
2b560 2f 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 4e  //..        // N
2b570 4f 54 45 3a 20 46 6f 72 20 6e 6f 77 2c 20 56 69  OTE: For now, Vi
2b580 73 75 61 6c 20 53 74 75 64 69 6f 20 69 73 20 61  sual Studio is a
2b590 6c 77 61 79 73 20 61 20 33 32 2d 62 69 74 20 61  lways a 32-bit a
2b5a0 70 70 6c 69 63 61 74 69 6f 6e 2e 0d 0a 20 20 20  pplication...   
2b5b0 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
2b5c0 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
2b5d0 72 65 61 64 6f 6e 6c 79 20 62 6f 6f 6c 20 56 73  readonly bool Vs
2b5e0 49 73 33 32 42 69 74 4f 6e 6c 79 20 3d 20 74 72  Is32BitOnly = tr
2b5f0 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ue;....        /
2b600 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b610 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b620 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b630 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b640 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
2b650 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
2b660 20 72 65 61 64 6f 6e 6c 79 20 73 74 72 69 6e 67   readonly string
2b670 20 56 73 49 64 46 6f 72 6d 61 74 20 3d 20 22 42   VsIdFormat = "B
2b680 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ";....        //
2b690 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b6a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b6b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b6c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b6d0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
2b6e0 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
2b6f0 72 65 61 64 6f 6e 6c 79 20 73 74 72 69 6e 67 20  readonly string 
2b700 58 50 61 74 68 46 6f 72 41 64 64 45 6c 65 6d 65  XPathForAddEleme
2b710 6e 74 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20  nt =..          
2b720 20 20 22 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e    "configuration
2b730 2f 73 79 73 74 65 6d 2e 64 61 74 61 2f 44 62 50  /system.data/DbP
2b740 72 6f 76 69 64 65 72 46 61 63 74 6f 72 69 65 73  roviderFactories
2b750 2f 61 64 64 5b 40 69 6e 76 61 72 69 61 6e 74 3d  /add[@invariant=
2b760 5c 22 7b 30 7d 5c 22 5d 22 3b 0d 0a 0d 0a 20 20  \"{0}\"]";....  
2b770 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
2b780 61 74 69 63 20 72 65 61 64 6f 6e 6c 79 20 73 74  atic readonly st
2b790 72 69 6e 67 20 58 50 61 74 68 46 6f 72 52 65 6d  ring XPathForRem
2b7a0 6f 76 65 45 6c 65 6d 65 6e 74 20 3d 0d 0a 20 20  oveElement =..  
2b7b0 20 20 20 20 20 20 20 20 20 20 22 63 6f 6e 66 69            "confi
2b7c0 67 75 72 61 74 69 6f 6e 2f 73 79 73 74 65 6d 2e  guration/system.
2b7d0 64 61 74 61 2f 44 62 50 72 6f 76 69 64 65 72 46  data/DbProviderF
2b7e0 61 63 74 6f 72 69 65 73 2f 72 65 6d 6f 76 65 5b  actories/remove[
2b7f0 40 69 6e 76 61 72 69 61 6e 74 3d 5c 22 7b 30 7d  @invariant=\"{0}
2b800 5c 22 5d 22 3b 0d 0a 20 20 20 20 20 20 20 20 23  \"]";..        #
2b810 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
2b820 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
2b830 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b840 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b850 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b860 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
2b870 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
2b880 50 72 69 76 61 74 65 20 53 74 61 74 69 63 20 44  Private Static D
2b890 61 74 61 0d 0a 20 20 20 20 20 20 20 20 23 72 65  ata..        #re
2b8a0 67 69 6f 6e 20 44 69 61 67 6e 6f 73 74 69 63 73  gion Diagnostics
2b8b0 20 26 20 4c 6f 67 67 69 6e 67 0d 0a 20 20 20 20   & Logging..    
2b8c0 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
2b8d0 2f 2f 20 4e 4f 54 45 3a 20 43 61 63 68 65 20 74  // NOTE: Cache t
2b8e0 68 65 20 63 75 72 72 65 6e 74 20 70 72 6f 63 65  he current proce
2b8f0 73 73 20 61 6e 64 20 61 73 73 65 6d 62 6c 79 20  ss and assembly 
2b900 61 73 20 74 68 65 79 20 64 6f 20 6e 6f 74 20 63  as they do not c
2b910 68 61 6e 67 65 0d 0a 20 20 20 20 20 20 20 20 2f  hange..        /
2b920 2f 20 20 20 20 20 20 20 61 6e 64 20 6d 61 79 20  /       and may 
2b930 62 65 20 6e 65 65 64 65 64 20 69 6e 20 71 75 69  be needed in qui
2b940 74 65 20 61 20 66 65 77 20 64 69 66 66 65 72 65  te a few differe
2b950 6e 74 20 70 6c 61 63 65 73 2e 0d 0a 20 20 20 20  nt places...    
2b960 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
2b970 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 50  private static P
2b980 72 6f 63 65 73 73 20 74 68 69 73 50 72 6f 63 65  rocess thisProce
2b990 73 73 20 3d 20 50 72 6f 63 65 73 73 2e 47 65 74  ss = Process.Get
2b9a0 43 75 72 72 65 6e 74 50 72 6f 63 65 73 73 28 29  CurrentProcess()
2b9b0 3b 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  ;..        priva
2b9c0 74 65 20 73 74 61 74 69 63 20 41 73 73 65 6d 62  te static Assemb
2b9d0 6c 79 20 74 68 69 73 41 73 73 65 6d 62 6c 79 20  ly thisAssembly 
2b9e0 3d 20 41 73 73 65 6d 62 6c 79 2e 47 65 74 45 78  = Assembly.GetEx
2b9f0 65 63 75 74 69 6e 67 41 73 73 65 6d 62 6c 79 28  ecutingAssembly(
2ba00 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  );....        //
2ba10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ba20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ba30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ba40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ba50 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
2ba60 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20   //..        // 
2ba70 4e 4f 54 45 3a 20 54 68 65 20 74 72 61 63 65 20  NOTE: The trace 
2ba80 63 61 74 65 67 6f 72 79 20 69 73 20 74 68 65 20  category is the 
2ba90 73 61 6d 65 20 66 6f 72 20 62 6f 74 68 20 74 68  same for both th
2baa0 65 20 64 65 62 75 67 20 61 6e 64 20 74 72 61 63  e debug and trac
2bab0 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 20  e..        //   
2bac0 20 20 20 20 63 61 6c 6c 62 61 63 6b 73 2e 0d 0a      callbacks...
2bad0 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
2bae0 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
2baf0 69 63 20 73 74 72 69 6e 67 20 74 72 61 63 65 43  ic string traceC
2bb00 61 74 65 67 6f 72 79 20 3d 20 28 74 68 69 73 41  ategory = (thisA
2bb10 73 73 65 6d 62 6c 79 20 21 3d 20 6e 75 6c 6c 29  ssembly != null)
2bb20 20 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   ?..            
2bb30 50 61 74 68 2e 47 65 74 46 69 6c 65 4e 61 6d 65  Path.GetFileName
2bb40 28 74 68 69 73 41 73 73 65 6d 62 6c 79 2e 4c 6f  (thisAssembly.Lo
2bb50 63 61 74 69 6f 6e 29 20 3a 20 6e 75 6c 6c 3b 0d  cation) : null;.
2bb60 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
2bb70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bb80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bb90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bba0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bbb0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  //....        //
2bbc0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54  ..        // NOT
2bbd0 45 3a 20 53 65 74 20 74 68 65 20 64 65 62 75 67  E: Set the debug
2bbe0 20 61 6e 64 20 74 72 61 63 65 20 6c 6f 67 67 69   and trace loggi
2bbf0 6e 67 20 63 61 6c 6c 62 61 63 6b 73 20 75 73 65  ng callbacks use
2bc00 64 20 62 79 20 74 68 65 0d 0a 20 20 20 20 20 20  d by the..      
2bc10 20 20 2f 2f 20 20 20 20 20 20 20 61 70 70 6c 69    //       appli
2bc20 63 61 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20  cation...       
2bc30 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 70 72 69   //..        pri
2bc40 76 61 74 65 20 73 74 61 74 69 63 20 54 72 61 63  vate static Trac
2bc50 65 43 61 6c 6c 62 61 63 6b 20 64 65 62 75 67 43  eCallback debugC
2bc60 61 6c 6c 62 61 63 6b 20 3d 20 41 70 70 44 65 62  allback = AppDeb
2bc70 75 67 3b 0d 0a 20 20 20 20 20 20 20 20 70 72 69  ug;..        pri
2bc80 76 61 74 65 20 73 74 61 74 69 63 20 54 72 61 63  vate static Trac
2bc90 65 43 61 6c 6c 62 61 63 6b 20 74 72 61 63 65 43  eCallback traceC
2bca0 61 6c 6c 62 61 63 6b 20 3d 20 41 70 70 54 72 61  allback = AppTra
2bcb0 63 65 3b 0d 0a 20 20 20 20 20 20 20 20 23 65 6e  ce;..        #en
2bcc0 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
2bcd0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
2bce0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bcf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bd00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bd10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
2bd20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 53 79        #region Sy
2bd30 73 74 65 6d 20 44 69 72 65 63 74 6f 72 79 0d 0a  stem Directory..
2bd40 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
2bd50 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 73 79  static string sy
2bd60 73 74 65 6d 44 69 72 65 63 74 6f 72 79 20 3d 20  stemDirectory = 
2bd70 6e 75 6c 6c 3b 0d 0a 0d 0a 23 69 66 20 57 49 4e  null;....#if WIN
2bd80 44 4f 57 53 0d 0a 20 20 20 20 20 20 20 20 70 72  DOWS..        pr
2bd90 69 76 61 74 65 20 73 74 61 74 69 63 20 73 74 72  ivate static str
2bda0 69 6e 67 20 73 79 73 74 65 6d 44 69 72 65 63 74  ing systemDirect
2bdb0 6f 72 79 57 6f 77 36 34 20 3d 20 6e 75 6c 6c 3b  oryWow64 = null;
2bdc0 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20  ..#endif..      
2bdd0 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
2bde0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
2bdf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2be00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2be10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2be20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
2be30 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  ...        #regi
2be40 6f 6e 20 52 65 67 69 73 74 72 79 20 53 74 61 74  on Registry Stat
2be50 69 73 74 69 63 73 0d 0a 20 20 20 20 20 20 20 20  istics..        
2be60 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 69  private static i
2be70 6e 74 20 66 69 6c 65 73 43 72 65 61 74 65 64 20  nt filesCreated 
2be80 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20 20 70 72  = 0;..        pr
2be90 69 76 61 74 65 20 73 74 61 74 69 63 20 69 6e 74  ivate static int
2bea0 20 66 69 6c 65 73 4d 6f 64 69 66 69 65 64 20 3d   filesModified =
2beb0 20 30 3b 0d 0a 20 20 20 20 20 20 20 20 70 72 69   0;..        pri
2bec0 76 61 74 65 20 73 74 61 74 69 63 20 69 6e 74 20  vate static int 
2bed0 66 69 6c 65 73 44 65 6c 65 74 65 64 20 3d 20 30  filesDeleted = 0
2bee0 3b 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  ;..        #endr
2bef0 65 67 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 23  egion..        #
2bf00 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
2bf10 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
2bf20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bf30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bf40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bf50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
2bf60 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
2bf70 54 72 61 63 65 20 48 61 6e 64 6c 69 6e 67 0d 0a  Trace Handling..
2bf80 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
2bf90 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 47 65  static string Ge
2bfa0 74 4c 6f 67 46 69 6c 65 4e 61 6d 65 28 0d 0a 20  tLogFileName(.. 
2bfb0 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
2bfc0 67 20 74 79 70 65 4e 61 6d 65 0d 0a 20 20 20 20  g typeName..    
2bfd0 20 20 20 20 20 20 20 20 29 20 2f 2a 20 74 68 72          ) /* thr
2bfe0 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 7b  ow */..        {
2bff0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
2c000 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65 20 3d 20  ring fileName = 
2c010 50 61 74 68 2e 47 65 74 54 65 6d 70 46 69 6c 65  Path.GetTempFile
2c020 4e 61 6d 65 28 29 3b 0d 0a 20 20 20 20 20 20 20  Name();..       
2c030 20 20 20 20 20 73 74 72 69 6e 67 20 64 69 72 65       string dire
2c040 63 74 6f 72 79 20 3d 20 50 61 74 68 2e 47 65 74  ctory = Path.Get
2c050 44 69 72 65 63 74 6f 72 79 4e 61 6d 65 28 66 69  DirectoryName(fi
2c060 6c 65 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20  leName);..      
2c070 20 20 20 20 20 20 73 74 72 69 6e 67 20 66 69 6c        string fil
2c080 65 4e 61 6d 65 4f 6e 6c 79 20 3d 20 50 61 74 68  eNameOnly = Path
2c090 2e 47 65 74 46 69 6c 65 4e 61 6d 65 57 69 74 68  .GetFileNameWith
2c0a0 6f 75 74 45 78 74 65 6e 73 69 6f 6e 28 66 69 6c  outExtension(fil
2c0b0 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  eName);....     
2c0c0 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6e 65         string ne
2c0d0 77 46 69 6c 65 4e 61 6d 65 20 3d 20 50 61 74 68  wFileName = Path
2c0e0 2e 43 6f 6d 62 69 6e 65 28 64 69 72 65 63 74 6f  .Combine(directo
2c0f0 72 79 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ry, String.Forma
2c100 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
2c110 20 20 20 20 22 7b 30 7d 7b 31 7d 7b 32 7d 22 2c      "{0}{1}{2}",
2c120 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 2c 20   traceCategory, 
2c130 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72  !String.IsNullOr
2c140 45 6d 70 74 79 28 74 79 70 65 4e 61 6d 65 29 20  Empty(typeName) 
2c150 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ?..             
2c160 20 20 20 20 20 20 20 22 2e 22 20 2b 20 74 79 70         "." + typ
2c170 65 4e 61 6d 65 20 3a 20 53 74 72 69 6e 67 2e 45  eName : String.E
2c180 6d 70 74 79 2c 20 22 2e 22 20 2b 20 66 69 6c 65  mpty, "." + file
2c190 4e 61 6d 65 4f 6e 6c 79 20 2b 0d 0a 20 20 20 20  NameOnly +..    
2c1a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c1b0 4c 6f 67 46 69 6c 65 53 75 66 66 69 78 29 29 3b  LogFileSuffix));
2c1c0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2c1d0 46 69 6c 65 2e 4d 6f 76 65 28 66 69 6c 65 4e 61  File.Move(fileNa
2c1e0 6d 65 2c 20 6e 65 77 46 69 6c 65 4e 61 6d 65 29  me, newFileName)
2c1f0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2c200 20 72 65 74 75 72 6e 20 6e 65 77 46 69 6c 65 4e   return newFileN
2c210 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ame;..        }.
2c220 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
2c230 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c240 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c250 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c260 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c270 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72  //....        pr
2c280 69 76 61 74 65 20 73 74 61 74 69 63 20 76 6f 69  ivate static voi
2c290 64 20 41 70 70 44 65 62 75 67 28 0d 0a 20 20 20  d AppDebug(..   
2c2a0 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
2c2b0 6d 65 73 73 61 67 65 2c 0d 0a 20 20 20 20 20 20  message,..      
2c2c0 20 20 20 20 20 20 73 74 72 69 6e 67 20 63 61 74        string cat
2c2d0 65 67 6f 72 79 0d 0a 20 20 20 20 20 20 20 20 20  egory..         
2c2e0 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
2c2f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61  .            Tra
2c300 63 65 4f 70 73 2e 44 65 62 75 67 43 6f 72 65 28  ceOps.DebugCore(
2c310 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
2c320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c330 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 46 6f  TraceOps.DebugFo
2c340 72 6d 61 74 2c 20 54 72 61 63 65 4f 70 73 2e 4e  rmat, TraceOps.N
2c350 65 78 74 44 65 62 75 67 49 64 28 29 2c 0d 0a 20  extDebugId(),.. 
2c360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
2c370 72 61 63 65 4f 70 73 2e 54 69 6d 65 53 74 61 6d  raceOps.TimeStam
2c380 70 28 44 61 74 65 54 69 6d 65 2e 55 74 63 4e 6f  p(DateTime.UtcNo
2c390 77 29 2c 20 6d 65 73 73 61 67 65 29 2c 20 63 61  w), message), ca
2c3a0 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20  tegory);..      
2c3b0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f    }....        /
2c3c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c3d0 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
2c410 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
2c420 20 76 6f 69 64 20 41 70 70 54 72 61 63 65 28 0d   void AppTrace(.
2c430 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
2c440 69 6e 67 20 6d 65 73 73 61 67 65 2c 0d 0a 20 20  ing message,..  
2c450 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
2c460 20 63 61 74 65 67 6f 72 79 0d 0a 20 20 20 20 20   category..     
2c470 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
2c480 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2c490 20 54 72 61 63 65 4f 70 73 2e 54 72 61 63 65 43   TraceOps.TraceC
2c4a0 6f 72 65 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ore(String.Forma
2c4b0 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
2c4c0 20 20 20 20 54 72 61 63 65 4f 70 73 2e 54 72 61      TraceOps.Tra
2c4d0 63 65 46 6f 72 6d 61 74 2c 20 54 72 61 63 65 4f  ceFormat, TraceO
2c4e0 70 73 2e 4e 65 78 74 54 72 61 63 65 49 64 28 29  ps.NextTraceId()
2c4f0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2c500 20 20 20 54 72 61 63 65 4f 70 73 2e 54 69 6d 65     TraceOps.Time
2c510 53 74 61 6d 70 28 44 61 74 65 54 69 6d 65 2e 55  Stamp(DateTime.U
2c520 74 63 4e 6f 77 29 2c 20 6d 65 73 73 61 67 65 29  tcNow), message)
2c530 2c 20 63 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20  , category);..  
2c540 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
2c550 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
2c560 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
2c570 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c580 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c590 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c5a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
2c5b0 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
2c5c0 6e 20 47 65 6e 65 72 69 63 20 50 6c 61 74 66 6f  n Generic Platfo
2c5d0 72 6d 20 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20  rm Handling..   
2c5e0 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
2c5f0 74 69 63 20 62 6f 6f 6c 20 49 73 36 34 42 69 74  tic bool Is64Bit
2c600 50 72 6f 63 65 73 73 28 29 0d 0a 20 20 20 20 20  Process()..     
2c610 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2c620 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
2c630 20 20 2f 2f 20 4e 4f 54 45 3a 20 52 65 74 75 72    // NOTE: Retur
2c640 6e 73 20 74 72 75 65 20 69 66 20 74 68 65 20 63  ns true if the c
2c650 75 72 72 65 6e 74 20 70 72 6f 63 65 73 73 20 69  urrent process i
2c660 73 20 36 34 2d 62 69 74 2e 20 20 49 66 20 74 68  s 64-bit.  If th
2c670 69 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  is..            
2c680 2f 2f 20 20 20 20 20 20 20 69 73 20 74 72 75 65  //       is true
2c690 2c 20 77 65 20 2a 6b 6e 6f 77 2a 20 74 68 61 74  , we *know* that
2c6a0 20 77 65 20 6d 75 73 74 20 62 65 20 72 75 6e 6e   we must be runn
2c6b0 69 6e 67 20 6f 6e 20 61 20 36 34 2d 62 69 74 0d  ing on a 64-bit.
2c6c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20  .            // 
2c6d0 20 20 20 20 20 20 6f 70 65 72 61 74 69 6e 67 20        operating 
2c6e0 73 79 73 74 65 6d 20 61 73 20 77 65 6c 6c 2e 20  system as well. 
2c6f0 20 48 6f 77 65 76 65 72 2c 20 69 66 20 74 68 69   However, if thi
2c700 73 20 69 73 20 66 61 6c 73 65 2c 20 77 65 0d 0a  s is false, we..
2c710 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
2c720 20 20 20 20 20 64 6f 20 6e 6f 74 20 6e 65 63 65       do not nece
2c730 73 73 61 72 69 6c 79 20 6b 6e 6f 77 20 74 68 61  ssarily know tha
2c740 74 20 77 65 20 61 72 65 20 72 75 6e 6e 69 6e 67  t we are running
2c750 20 6f 6e 20 61 20 33 32 2d 62 69 74 0d 0a 20 20   on a 32-bit..  
2c760 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
2c770 20 20 20 6f 70 65 72 61 74 69 6e 67 20 73 79 73     operating sys
2c780 74 65 6d 2c 20 64 75 65 20 74 6f 20 57 6f 57 36  tem, due to WoW6
2c790 34 20 28 57 69 6e 33 32 2d 6f 6e 2d 57 69 6e 36  4 (Win32-on-Win6
2c7a0 34 29 2c 20 65 74 63 2e 0d 0a 20 20 20 20 20 20  4), etc...      
2c7b0 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
2c7c0 20 20 20 20 20 20 72 65 74 75 72 6e 20 28 49 6e        return (In
2c7d0 74 50 74 72 2e 53 69 7a 65 20 3d 3d 20 73 69 7a  tPtr.Size == siz
2c7e0 65 6f 66 28 6c 6f 6e 67 29 29 3b 20 2f 2f 20 4e  eof(long)); // N
2c7f0 4f 54 45 3a 20 50 6f 69 6e 74 65 72 20 69 73 20  OTE: Pointer is 
2c800 36 34 2d 62 69 74 73 3f 0d 0a 20 20 20 20 20 20  64-bits?..      
2c810 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f    }....        /
2c820 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c830 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c840 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c850 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c860 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
2c870 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
2c880 20 62 6f 6f 6c 20 49 73 53 75 70 70 6f 72 74 65   bool IsSupporte
2c890 64 52 6f 6f 74 4b 65 79 28 0d 0a 20 20 20 20 20  dRootKey(..     
2c8a0 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73         MockRegis
2c8b0 74 72 79 20 72 65 67 69 73 74 72 79 2c 0d 0a 20  try registry,.. 
2c8c0 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52             MockR
2c8d0 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b  egistryKey rootK
2c8e0 65 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ey..            
2c8f0 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
2c900 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
2c910 20 4f 62 6a 65 63 74 2e 52 65 66 65 72 65 6e 63   Object.Referenc
2c920 65 45 71 75 61 6c 73 28 72 6f 6f 74 4b 65 79 2c  eEquals(rootKey,
2c930 20 72 65 67 69 73 74 72 79 2e 43 75 72 72 65 6e   registry.Curren
2c940 74 55 73 65 72 29 20 7c 7c 0d 0a 20 20 20 20 20  tUser) ||..     
2c950 20 20 20 20 20 20 20 20 20 20 20 4f 62 6a 65 63             Objec
2c960 74 2e 52 65 66 65 72 65 6e 63 65 45 71 75 61 6c  t.ReferenceEqual
2c970 73 28 72 6f 6f 74 4b 65 79 2c 20 72 65 67 69 73  s(rootKey, regis
2c980 74 72 79 2e 4c 6f 63 61 6c 4d 61 63 68 69 6e 65  try.LocalMachine
2c990 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  );..        }...
2c9a0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
2c9b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c9c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c9d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c9e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c9f0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ....        priv
2ca00 61 74 65 20 73 74 61 74 69 63 20 73 74 72 69 6e  ate static strin
2ca10 67 20 47 65 74 52 6f 6f 74 4b 65 79 4e 61 6d 65  g GetRootKeyName
2ca20 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  (..            b
2ca30 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d 0a 20 20  ool perUser,..  
2ca40 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77            bool w
2ca50 6f 77 36 34 0d 0a 20 20 20 20 20 20 20 20 20 20  ow64..          
2ca60 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
2ca70 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
2ca80 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 42              // B
2ca90 55 47 46 49 58 3a 20 41 70 70 61 72 65 6e 74 6c  UGFIX: Apparentl
2caa0 79 2c 20 74 68 65 20 70 65 72 2d 75 73 65 72 20  y, the per-user 
2cab0 72 65 67 69 73 74 72 79 20 68 69 76 65 20 64 6f  registry hive do
2cac0 65 73 20 6e 6f 74 20 75 73 65 0d 0a 20 20 20 20  es not use..    
2cad0 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
2cae0 20 20 20 74 68 65 20 22 57 6f 77 36 34 33 32 4e     the "Wow6432N
2caf0 6f 64 65 22 20 6e 6f 64 65 20 74 6f 20 73 74 6f  ode" node to sto
2cb00 72 65 20 73 65 74 74 69 6e 67 73 20 66 6f 72 20  re settings for 
2cb10 33 32 2d 62 69 74 0d 0a 20 20 20 20 20 20 20 20  32-bit..        
2cb20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 20 20 61      //         a
2cb30 70 70 6c 69 63 61 74 69 6f 6e 73 20 72 75 6e 6e  pplications runn
2cb40 69 6e 67 20 6f 6e 20 61 20 36 34 2d 62 69 74 20  ing on a 64-bit 
2cb50 6f 70 65 72 61 74 69 6e 67 20 73 79 73 74 65 6d  operating system
2cb60 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
2cb70 2f 20 20 20 20 20 20 20 20 20 54 69 63 6b 65 74  /         Ticket
2cb80 20 5b 61 30 36 37 37 33 30 39 66 30 5d 20 68 61   [a0677309f0] ha
2cb90 73 20 66 75 72 74 68 65 72 20 64 65 74 61 69 6c  s further detail
2cba0 73 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s...            
2cbb0 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
2cbc0 72 65 74 75 72 6e 20 53 74 72 69 6e 67 2e 46 6f  return String.Fo
2cbd0 72 6d 61 74 28 22 7b 30 7d 7b 31 7d 22 2c 20 52  rmat("{0}{1}", R
2cbe0 6f 6f 74 4b 65 79 4e 61 6d 65 2c 0d 0a 20 20 20  ootKeyName,..   
2cbf0 20 20 20 20 20 20 20 20 20 20 20 20 20 21 70 65               !pe
2cc00 72 55 73 65 72 20 26 26 20 77 6f 77 36 34 20 26  rUser && wow64 &
2cc10 26 20 49 73 36 34 42 69 74 50 72 6f 63 65 73 73  & Is64BitProcess
2cc20 28 29 20 3f 0d 0a 20 20 20 20 20 20 20 20 20 20  () ?..          
2cc30 20 20 20 20 20 20 20 20 20 20 22 5c 5c 22 20 2b            "\\" +
2cc40 20 57 6f 77 36 34 53 75 62 4b 65 79 4e 61 6d 65   Wow64SubKeyName
2cc50 20 3a 20 53 74 72 69 6e 67 2e 45 6d 70 74 79 29   : String.Empty)
2cc60 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
2cc70 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
2cc80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cc90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cca0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ccb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
2ccc0 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  ...        priva
2ccd0 74 65 20 73 74 61 74 69 63 20 73 74 72 69 6e 67  te static string
2cce0 20 47 65 74 53 79 73 74 65 6d 44 69 72 65 63 74   GetSystemDirect
2ccf0 6f 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ory(..          
2cd00 20 20 62 6f 6f 6c 20 77 6f 77 36 34 0d 0a 20 20    bool wow64..  
2cd10 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
2cd20 20 20 20 20 20 7b 0d 0a 23 69 66 20 57 49 4e 44       {..#if WIND
2cd30 4f 57 53 0d 0a 20 20 20 20 20 20 20 20 20 20 20  OWS..           
2cd40 20 69 66 20 28 77 6f 77 36 34 29 0d 0a 20 20 20   if (wow64)..   
2cd50 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2cd60 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2cd70 73 79 73 74 65 6d 44 69 72 65 63 74 6f 72 79 57  systemDirectoryW
2cd80 6f 77 36 34 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  ow64 == null).. 
2cd90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
2cda0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2cdb0 20 20 20 20 20 20 73 79 73 74 65 6d 44 69 72 65        systemDire
2cdc0 63 74 6f 72 79 57 6f 77 36 34 20 3d 0d 0a 20 20  ctoryWow64 =..  
2cdd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cde0 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69        UnsafeNati
2cdf0 76 65 4d 65 74 68 6f 64 73 2e 47 65 74 53 79 73  veMethods.GetSys
2ce00 74 65 6d 44 69 72 65 63 74 6f 72 79 28 29 3b 0d  temDirectory();.
2ce10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2ce20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
2ce30 20 20 20 20 20 20 72 65 74 75 72 6e 20 73 79 73        return sys
2ce40 74 65 6d 44 69 72 65 63 74 6f 72 79 57 6f 77 36  temDirectoryWow6
2ce50 34 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  4;..            
2ce60 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 65  }..            e
2ce70 6c 73 65 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  lse..#endif..   
2ce80 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2ce90 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2cea0 73 79 73 74 65 6d 44 69 72 65 63 74 6f 72 79 20  systemDirectory 
2ceb0 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
2cec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 79                sy
2ced0 73 74 65 6d 44 69 72 65 63 74 6f 72 79 20 3d 20  stemDirectory = 
2cee0 45 6e 76 69 72 6f 6e 6d 65 6e 74 2e 53 79 73 74  Environment.Syst
2cef0 65 6d 44 69 72 65 63 74 6f 72 79 3b 0d 0a 0d 0a  emDirectory;....
2cf00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cf10 72 65 74 75 72 6e 20 73 79 73 74 65 6d 44 69 72  return systemDir
2cf20 65 63 74 6f 72 79 3b 0d 0a 20 20 20 20 20 20 20  ectory;..       
2cf30 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
2cf40 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  }..        #endr
2cf50 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
2cf60 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cfa0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
2cfb0 20 20 20 20 23 72 65 67 69 6f 6e 20 47 65 6e 65      #region Gene
2cfc0 72 69 63 20 53 74 72 69 6e 67 20 48 61 6e 64 6c  ric String Handl
2cfd0 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 70 72 69  ing..        pri
2cfe0 76 61 74 65 20 73 74 61 74 69 63 20 73 74 72 69  vate static stri
2cff0 6e 67 20 46 6f 72 44 69 73 70 6c 61 79 28 0d 0a  ng ForDisplay(..
2d000 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65              obje
2d010 63 74 20 76 61 6c 75 65 0d 0a 20 20 20 20 20 20  ct value..      
2d020 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
2d030 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2d040 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c  if (value == nul
2d050 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
2d060 20 20 20 20 72 65 74 75 72 6e 20 22 3c 6e 75 6c      return "<nul
2d070 6c 3e 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  l>";....        
2d080 20 20 20 20 73 74 72 69 6e 67 20 72 65 73 75 6c      string resul
2d090 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t;..            
2d0a0 54 79 70 65 20 74 79 70 65 20 3d 20 76 61 6c 75  Type type = valu
2d0b0 65 2e 47 65 74 54 79 70 65 28 29 3b 0d 0a 0d 0a  e.GetType();....
2d0c0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2d0d0 74 79 70 65 20 3d 3d 20 74 79 70 65 6f 66 28 58  type == typeof(X
2d0e0 6d 6c 45 6c 65 6d 65 6e 74 29 29 0d 0a 20 20 20  mlElement))..   
2d0f0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2d100 20 20 20 20 20 20 20 20 20 20 20 20 58 6d 6c 45              XmlE
2d110 6c 65 6d 65 6e 74 20 65 6c 65 6d 65 6e 74 20 3d  lement element =
2d120 20 28 58 6d 6c 45 6c 65 6d 65 6e 74 29 76 61 6c   (XmlElement)val
2d130 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ue;....         
2d140 20 20 20 20 20 20 20 72 65 73 75 6c 74 20 3d 20         result = 
2d150 65 6c 65 6d 65 6e 74 2e 4f 75 74 65 72 58 6d 6c  element.OuterXml
2d160 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
2d170 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 6c  ..            el
2d180 73 65 20 69 66 20 28 74 79 70 65 20 3d 3d 20 74  se if (type == t
2d190 79 70 65 6f 66 28 56 65 72 73 69 6f 6e 29 29 0d  ypeof(Version)).
2d1a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
2d1b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d1c0 56 65 72 73 69 6f 6e 20 76 65 72 73 69 6f 6e 20  Version version 
2d1d0 3d 20 28 56 65 72 73 69 6f 6e 29 76 61 6c 75 65  = (Version)value
2d1e0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2d1f0 20 20 20 20 20 72 65 73 75 6c 74 20 3d 20 53 74       result = St
2d200 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 76 7b 30  ring.Format("v{0
2d210 7d 22 2c 20 76 65 72 73 69 6f 6e 29 3b 0d 0a 20  }", version);.. 
2d220 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
2d230 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69            else i
2d240 66 20 28 74 79 70 65 20 3d 3d 20 74 79 70 65 6f  f (type == typeo
2d250 66 28 50 72 6f 63 65 73 73 53 74 61 72 74 49 6e  f(ProcessStartIn
2d260 66 6f 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  fo))..          
2d270 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2d280 20 20 20 20 20 50 72 6f 63 65 73 73 53 74 61 72       ProcessStar
2d290 74 49 6e 66 6f 20 73 74 61 72 74 49 6e 66 6f 20  tInfo startInfo 
2d2a0 3d 20 28 50 72 6f 63 65 73 73 53 74 61 72 74 49  = (ProcessStartI
2d2b0 6e 66 6f 29 76 61 6c 75 65 3b 0d 0a 0d 0a 20 20  nfo)value;....  
2d2c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
2d2d0 73 75 6c 74 20 3d 20 53 74 72 69 6e 67 2e 46 6f  sult = String.Fo
2d2e0 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
2d2f0 20 20 20 20 20 20 20 20 20 20 20 22 66 69 6c 65             "file
2d300 4e 61 6d 65 20 3d 20 7b 30 7d 2c 20 61 72 67 75  Name = {0}, argu
2d310 6d 65 6e 74 73 20 3d 20 7b 31 7d 2c 20 77 6f 72  ments = {1}, wor
2d320 6b 69 6e 67 44 69 72 65 63 74 6f 72 79 20 3d 20  kingDirectory = 
2d330 7b 32 7d 2c 20 22 20 2b 0d 0a 20 20 20 20 20 20  {2}, " +..      
2d340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 75                "u
2d350 73 65 53 68 65 6c 6c 45 78 65 63 75 74 65 20 3d  seShellExecute =
2d360 20 7b 33 7d 2c 20 72 65 64 69 72 65 63 74 53 74   {3}, redirectSt
2d370 61 6e 64 61 72 64 4f 75 74 70 75 74 20 3d 20 7b  andardOutput = {
2d380 34 7d 2c 20 22 20 2b 0d 0a 20 20 20 20 20 20 20  4}, " +..       
2d390 20 20 20 20 20 20 20 20 20 20 20 20 20 22 72 65               "re
2d3a0 64 69 72 65 63 74 53 74 61 6e 64 61 72 64 45 72  directStandardEr
2d3b0 72 6f 72 20 3d 20 7b 35 7d 22 2c 20 46 6f 72 44  ror = {5}", ForD
2d3c0 69 73 70 6c 61 79 28 0d 0a 20 20 20 20 20 20 20  isplay(..       
2d3d0 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 61               sta
2d3e0 72 74 49 6e 66 6f 2e 46 69 6c 65 4e 61 6d 65 29  rtInfo.FileName)
2d3f0 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 73 74 61  , ForDisplay(sta
2d400 72 74 49 6e 66 6f 2e 41 72 67 75 6d 65 6e 74 73  rtInfo.Arguments
2d410 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
2d420 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
2d430 61 79 28 73 74 61 72 74 49 6e 66 6f 2e 57 6f 72  ay(startInfo.Wor
2d440 6b 69 6e 67 44 69 72 65 63 74 6f 72 79 29 2c 20  kingDirectory), 
2d450 46 6f 72 44 69 73 70 6c 61 79 28 0d 0a 20 20 20  ForDisplay(..   
2d460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d470 20 73 74 61 72 74 49 6e 66 6f 2e 55 73 65 53 68   startInfo.UseSh
2d480 65 6c 6c 45 78 65 63 75 74 65 29 2c 20 46 6f 72  ellExecute), For
2d490 44 69 73 70 6c 61 79 28 0d 0a 20 20 20 20 20 20  Display(..      
2d4a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
2d4b0 61 72 74 49 6e 66 6f 2e 52 65 64 69 72 65 63 74  artInfo.Redirect
2d4c0 53 74 61 6e 64 61 72 64 4f 75 74 70 75 74 29 2c  StandardOutput),
2d4d0 20 46 6f 72 44 69 73 70 6c 61 79 28 0d 0a 20 20   ForDisplay(..  
2d4e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d4f0 20 20 73 74 61 72 74 49 6e 66 6f 2e 52 65 64 69    startInfo.Redi
2d500 72 65 63 74 53 74 61 6e 64 61 72 64 45 72 72 6f  rectStandardErro
2d510 72 29 29 3b 20 2f 2a 20 52 45 43 55 52 53 49 56  r)); /* RECURSIV
2d520 45 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20  E */..          
2d530 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
2d540 20 65 6c 73 65 20 69 66 20 28 74 79 70 65 20 3d   else if (type =
2d550 3d 20 74 79 70 65 6f 66 28 50 72 6f 63 65 73 73  = typeof(Process
2d560 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
2d570 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2d580 20 20 20 50 72 6f 63 65 73 73 20 70 72 6f 63 65     Process proce
2d590 73 73 20 3d 20 28 50 72 6f 63 65 73 73 29 76 61  ss = (Process)va
2d5a0 6c 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lue;....        
2d5b0 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 20 3d          result =
2d5c0 20 70 72 6f 63 65 73 73 2e 49 64 2e 54 6f 53 74   process.Id.ToSt
2d5d0 72 69 6e 67 28 29 3b 0d 0a 20 20 20 20 20 20 20  ring();..       
2d5e0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
2d5f0 20 20 20 20 65 6c 73 65 20 69 66 20 28 74 79 70      else if (typ
2d600 65 20 3d 3d 20 74 79 70 65 6f 66 28 44 61 74 61  e == typeof(Data
2d610 52 65 63 65 69 76 65 64 45 76 65 6e 74 41 72 67  ReceivedEventArg
2d620 73 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s))..           
2d630 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2d640 20 20 20 20 44 61 74 61 52 65 63 65 69 76 65 64      DataReceived
2d650 45 76 65 6e 74 41 72 67 73 20 65 76 65 6e 74 41  EventArgs eventA
2d660 72 67 73 20 3d 20 28 44 61 74 61 52 65 63 65 69  rgs = (DataRecei
2d670 76 65 64 45 76 65 6e 74 41 72 67 73 29 76 61 6c  vedEventArgs)val
2d680 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ue;....         
2d690 20 20 20 20 20 20 20 72 65 73 75 6c 74 20 3d 20         result = 
2d6a0 46 6f 72 44 69 73 70 6c 61 79 28 65 76 65 6e 74  ForDisplay(event
2d6b0 41 72 67 73 2e 44 61 74 61 29 3b 20 2f 2a 20 52  Args.Data); /* R
2d6c0 45 43 55 52 53 49 56 45 20 2a 2f 0d 0a 20 20 20  ECURSIVE */..   
2d6d0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
2d6e0 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20          else..  
2d6f0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2d700 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73               res
2d710 75 6c 74 20 3d 20 76 61 6c 75 65 2e 54 6f 53 74  ult = value.ToSt
2d720 72 69 6e 67 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  ring();....     
2d730 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 72             if (r
2d740 65 73 75 6c 74 2e 4c 65 6e 67 74 68 20 3d 3d 20  esult.Length == 
2d750 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  0)..            
2d760 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 22          return "
2d770 3c 65 6d 70 74 79 3e 22 3b 0d 0a 0d 0a 20 20 20  <empty>";....   
2d780 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
2d790 28 74 79 70 65 2e 49 73 53 75 62 63 6c 61 73 73  (type.IsSubclass
2d7a0 4f 66 28 74 79 70 65 6f 66 28 45 78 63 65 70 74  Of(typeof(Except
2d7b0 69 6f 6e 29 29 29 0d 0a 20 20 20 20 20 20 20 20  ion)))..        
2d7c0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2d7d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
2d7e0 65 73 75 6c 74 20 3d 20 53 74 72 69 6e 67 2e 46  esult = String.F
2d7f0 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
2d800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d810 22 7b 30 7d 7b 31 7d 7b 30 7d 22 2c 20 45 6e 76  "{0}{1}{0}", Env
2d820 69 72 6f 6e 6d 65 6e 74 2e 4e 65 77 4c 69 6e 65  ironment.NewLine
2d830 2c 20 72 65 73 75 6c 74 29 3b 0d 0a 20 20 20 20  , result);..    
2d840 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
2d850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
2d860 6c 73 65 20 69 66 20 28 21 74 79 70 65 2e 49 73  lse if (!type.Is
2d870 53 75 62 63 6c 61 73 73 4f 66 28 74 79 70 65 6f  SubclassOf(typeo
2d880 66 28 56 61 6c 75 65 54 79 70 65 29 29 29 0d 0a  f(ValueType)))..
2d890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d8a0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2d8b0 20 20 20 20 20 20 20 72 65 73 75 6c 74 20 3d 20         result = 
2d8c0 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 5c  String.Format("\
2d8d0 22 7b 30 7d 5c 22 22 2c 20 72 65 73 75 6c 74 29  "{0}\"", result)
2d8e0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
2d8f0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
2d900 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
2d910 20 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74     return result
2d920 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ;..        }..  
2d930 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
2d940 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
2d950 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d960 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d970 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d980 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d990 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ///....        #
2d9a0 72 65 67 69 6f 6e 20 41 73 73 65 6d 62 6c 79 20  region Assembly 
2d9b0 41 74 74 72 69 62 75 74 65 20 48 61 6e 64 6c 69  Attribute Handli
2d9c0 6e 67 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c  ng..        publ
2d9d0 69 63 20 73 74 61 74 69 63 20 73 74 72 69 6e 67  ic static string
2d9e0 20 47 65 74 41 73 73 65 6d 62 6c 79 43 6f 6e 66   GetAssemblyConf
2d9f0 69 67 75 72 61 74 69 6f 6e 28 0d 0a 20 20 20 20  iguration(..    
2da00 20 20 20 20 20 20 20 20 41 73 73 65 6d 62 6c 79          Assembly
2da10 20 61 73 73 65 6d 62 6c 79 0d 0a 20 20 20 20 20   assembly..     
2da20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
2da30 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2da40 20 69 66 20 28 61 73 73 65 6d 62 6c 79 20 21 3d   if (assembly !=
2da50 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
2da60 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2da70 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20         try..    
2da80 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2da90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2daa0 20 20 20 69 66 20 28 61 73 73 65 6d 62 6c 79 2e     if (assembly.
2dab0 49 73 44 65 66 69 6e 65 64 28 0d 0a 20 20 20 20  IsDefined(..    
2dac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dad0 20 20 20 20 20 20 20 20 74 79 70 65 6f 66 28 41          typeof(A
2dae0 73 73 65 6d 62 6c 79 43 6f 6e 66 69 67 75 72 61  ssemblyConfigura
2daf0 74 69 6f 6e 41 74 74 72 69 62 75 74 65 29 2c 20  tionAttribute), 
2db00 66 61 6c 73 65 29 29 0d 0a 20 20 20 20 20 20 20  false))..       
2db10 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
2db20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2db30 20 20 20 20 20 20 20 20 41 73 73 65 6d 62 6c 79          Assembly
2db40 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 41 74 74  ConfigurationAtt
2db50 72 69 62 75 74 65 20 63 6f 6e 66 69 67 75 72 61  ribute configura
2db60 74 69 6f 6e 20 3d 0d 0a 20 20 20 20 20 20 20 20  tion =..        
2db70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2db80 20 20 20 20 28 41 73 73 65 6d 62 6c 79 43 6f 6e      (AssemblyCon
2db90 66 69 67 75 72 61 74 69 6f 6e 41 74 74 72 69 62  figurationAttrib
2dba0 75 74 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ute)..          
2dbb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dbc0 20 20 61 73 73 65 6d 62 6c 79 2e 47 65 74 43 75    assembly.GetCu
2dbd0 73 74 6f 6d 41 74 74 72 69 62 75 74 65 73 28 0d  stomAttributes(.
2dbe0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2dbf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dc00 20 74 79 70 65 6f 66 28 41 73 73 65 6d 62 6c 79   typeof(Assembly
2dc10 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 41 74 74  ConfigurationAtt
2dc20 72 69 62 75 74 65 29 2c 0d 0a 20 20 20 20 20 20  ribute),..      
2dc30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dc40 20 20 20 20 20 20 20 20 20 20 66 61 6c 73 65 29            false)
2dc50 5b 30 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  [0];....        
2dc60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dc70 72 65 74 75 72 6e 20 63 6f 6e 66 69 67 75 72 61  return configura
2dc80 74 69 6f 6e 2e 43 6f 6e 66 69 67 75 72 61 74 69  tion.Configurati
2dc90 6f 6e 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on;..           
2dca0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
2dcb0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
2dcc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
2dcd0 61 74 63 68 0d 0a 20 20 20 20 20 20 20 20 20 20  atch..          
2dce0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2dcf0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
2dd00 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20  do nothing...   
2dd10 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
2dd20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
2dd30 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
2dd40 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20  urn null;..     
2dd50 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
2dd60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2dd70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2dd80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2dd90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2dda0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
2ddb0 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
2ddc0 20 73 74 72 69 6e 67 20 47 65 74 41 73 73 65 6d   string GetAssem
2ddd0 62 6c 79 54 69 74 6c 65 28 0d 0a 20 20 20 20 20  blyTitle(..     
2dde0 20 20 20 20 20 20 20 41 73 73 65 6d 62 6c 79 20         Assembly 
2ddf0 61 73 73 65 6d 62 6c 79 0d 0a 20 20 20 20 20 20  assembly..      
2de00 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
2de10 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2de20 69 66 20 28 61 73 73 65 6d 62 6c 79 20 21 3d 20  if (assembly != 
2de30 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
2de40 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2de50 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20        try..     
2de60 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2de70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2de80 20 20 69 66 20 28 61 73 73 65 6d 62 6c 79 2e 49    if (assembly.I
2de90 73 44 65 66 69 6e 65 64 28 0d 0a 20 20 20 20 20  sDefined(..     
2dea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2deb0 20 20 20 20 20 20 20 74 79 70 65 6f 66 28 41 73         typeof(As
2dec0 73 65 6d 62 6c 79 54 69 74 6c 65 41 74 74 72 69  semblyTitleAttri
2ded0 62 75 74 65 29 2c 20 66 61 6c 73 65 29 29 0d 0a  bute), false))..
2dee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2def0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2df00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 41                 A
2df10 73 73 65 6d 62 6c 79 54 69 74 6c 65 41 74 74 72  ssemblyTitleAttr
2df20 69 62 75 74 65 20 74 69 74 6c 65 20 3d 0d 0a 20  ibute title =.. 
2df30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2df40 20 20 20 20 20 20 20 20 20 20 20 28 41 73 73 65             (Asse
2df50 6d 62 6c 79 54 69 74 6c 65 41 74 74 72 69 62 75  mblyTitleAttribu
2df60 74 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  te)..           
2df70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2df80 20 61 73 73 65 6d 62 6c 79 2e 47 65 74 43 75 73   assembly.GetCus
2df90 74 6f 6d 41 74 74 72 69 62 75 74 65 73 28 0d 0a  tomAttributes(..
2dfa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dfb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dfc0 74 79 70 65 6f 66 28 41 73 73 65 6d 62 6c 79 54  typeof(AssemblyT
2dfd0 69 74 6c 65 41 74 74 72 69 62 75 74 65 29 2c 20  itleAttribute), 
2dfe0 66 61 6c 73 65 29 5b 30 5d 3b 0d 0a 0d 0a 20 20  false)[0];....  
2dff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e000 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 69 74        return tit
2e010 6c 65 2e 54 69 74 6c 65 3b 0d 0a 20 20 20 20 20  le.Title;..     
2e020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
2e030 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2e040 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
2e050 20 20 20 20 20 63 61 74 63 68 0d 0a 20 20 20 20       catch..    
2e060 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2e070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e080 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67     // do nothing
2e090 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2e0a0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
2e0b0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
2e0c0 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d     return null;.
2e0d0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
2e0e0 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
2e0f0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
2e100 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e110 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e120 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e130 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e140 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65  /....        #re
2e150 67 69 6f 6e 20 2e 4e 45 54 20 46 72 61 6d 65 77  gion .NET Framew
2e160 6f 72 6b 20 48 61 6e 64 6c 69 6e 67 0d 0a 20 20  ork Handling..  
2e170 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
2e180 61 74 69 63 20 73 74 72 69 6e 67 20 47 65 74 46  atic string GetF
2e190 72 61 6d 65 77 6f 72 6b 52 6f 6f 74 4b 65 79 4e  rameworkRootKeyN
2e1a0 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ame(..          
2e1b0 20 20 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d    bool perUser,.
2e1c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
2e1d0 6c 20 77 6f 77 36 34 0d 0a 20 20 20 20 20 20 20  l wow64..       
2e1e0 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
2e1f0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  {..            r
2e200 65 74 75 72 6e 20 53 74 72 69 6e 67 2e 46 6f 72  eturn String.For
2e210 6d 61 74 28 22 7b 30 7d 5c 5c 4d 69 63 72 6f 73  mat("{0}\\Micros
2e220 6f 66 74 5c 5c 2e 4e 45 54 46 72 61 6d 65 77 6f  oft\\.NETFramewo
2e230 72 6b 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  rk",..          
2e240 20 20 20 20 20 20 47 65 74 52 6f 6f 74 4b 65 79        GetRootKey
2e250 4e 61 6d 65 28 70 65 72 55 73 65 72 2c 20 77 6f  Name(perUser, wo
2e260 77 36 34 29 29 3b 0d 0a 20 20 20 20 20 20 20 20  w64));..        
2e270 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  }....        ///
2e280 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e290 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e2a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e2b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e2c0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
2e2d0 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 73  private static s
2e2e0 74 72 69 6e 67 20 47 65 74 46 72 61 6d 65 77 6f  tring GetFramewo
2e2f0 72 6b 4b 65 79 4e 61 6d 65 28 0d 0a 20 20 20 20  rkKeyName(..    
2e300 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 66          string f
2e310 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 0d 0a 20  rameworkName,.. 
2e320 20 20 20 20 20 20 20 20 20 20 20 56 65 72 73 69             Versi
2e330 6f 6e 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73  on frameworkVers
2e340 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ion,..          
2e350 20 20 73 74 72 69 6e 67 20 70 6c 61 74 66 6f 72    string platfor
2e360 6d 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  mName,..        
2e370 20 20 20 20 62 6f 6f 6c 20 70 65 72 55 73 65 72      bool perUser
2e380 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
2e390 6f 6f 6c 20 77 6f 77 36 34 0d 0a 20 20 20 20 20  ool wow64..     
2e3a0 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
2e3b0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2e3c0 20 73 74 72 69 6e 67 20 66 6f 72 6d 61 74 20 3d   string format =
2e3d0 20 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f   !String.IsNullO
2e3e0 72 45 6d 70 74 79 28 70 6c 61 74 66 6f 72 6d 4e  rEmpty(platformN
2e3f0 61 6d 65 29 20 3f 0d 0a 20 20 20 20 20 20 20 20  ame) ?..        
2e400 20 20 20 20 20 20 20 20 22 7b 30 7d 5c 5c 4d 69          "{0}\\Mi
2e410 63 72 6f 73 6f 66 74 5c 5c 7b 31 7d 5c 5c 76 7b  crosoft\\{1}\\v{
2e420 32 7d 5c 5c 7b 33 7d 22 20 3a 0d 0a 20 20 20 20  2}\\{3}" :..    
2e430 20 20 20 20 20 20 20 20 20 20 20 20 22 7b 30 7d              "{0}
2e440 5c 5c 4d 69 63 72 6f 73 6f 66 74 5c 5c 7b 31 7d  \\Microsoft\\{1}
2e450 5c 5c 76 7b 32 7d 22 3b 0d 0a 0d 0a 20 20 20 20  \\v{2}";....    
2e460 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53          return S
2e470 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 66 6f 72  tring.Format(for
2e480 6d 61 74 2c 20 47 65 74 52 6f 6f 74 4b 65 79 4e  mat, GetRootKeyN
2e490 61 6d 65 28 70 65 72 55 73 65 72 2c 20 77 6f 77  ame(perUser, wow
2e4a0 36 34 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  64),..          
2e4b0 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4e        frameworkN
2e4c0 61 6d 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65  ame, frameworkVe
2e4d0 72 73 69 6f 6e 2c 20 70 6c 61 74 66 6f 72 6d 4e  rsion, platformN
2e4e0 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d  ame);..        }
2e4f0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
2e500 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e510 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e520 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e530 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e540 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
2e550 72 69 76 61 74 65 20 73 74 61 74 69 63 20 73 74  rivate static st
2e560 72 69 6e 67 20 47 65 74 49 6d 61 67 65 52 75 6e  ring GetImageRun
2e570 74 69 6d 65 56 65 72 73 69 6f 6e 28 0d 0a 20 20  timeVersion(..  
2e580 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
2e590 20 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20   fileName..     
2e5a0 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
2e5b0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2e5c0 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20   try..          
2e5d0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2e5e0 20 20 20 20 20 41 73 73 65 6d 62 6c 79 20 61 73       Assembly as
2e5f0 73 65 6d 62 6c 79 20 3d 20 41 73 73 65 6d 62 6c  sembly = Assembl
2e600 79 2e 52 65 66 6c 65 63 74 69 6f 6e 4f 6e 6c 79  y.ReflectionOnly
2e610 4c 6f 61 64 46 72 6f 6d 28 0d 0a 20 20 20 20 20  LoadFrom(..     
2e620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
2e630 69 6c 65 4e 61 6d 65 29 3b 20 2f 2a 20 74 68 72  ileName); /* thr
2e640 6f 77 20 2a 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  ow */....       
2e650 20 20 20 20 20 20 20 20 20 69 66 20 28 61 73 73           if (ass
2e660 65 6d 62 6c 79 20 21 3d 20 6e 75 6c 6c 29 0d 0a  embly != null)..
2e670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e680 20 20 20 20 72 65 74 75 72 6e 20 61 73 73 65 6d      return assem
2e690 62 6c 79 2e 49 6d 61 67 65 52 75 6e 74 69 6d 65  bly.ImageRuntime
2e6a0 56 65 72 73 69 6f 6e 3b 0d 0a 20 20 20 20 20 20  Version;..      
2e6b0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
2e6c0 20 20 20 20 20 63 61 74 63 68 0d 0a 20 20 20 20       catch..    
2e6d0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2e6e0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f             // do
2e6f0 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20   nothing...     
2e700 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
2e710 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e          return n
2e720 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ull;..        }.
2e730 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
2e740 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e750 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e760 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e770 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e780 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72  //....        pr
2e790 69 76 61 74 65 20 73 74 61 74 69 63 20 73 74 72  ivate static str
2e7a0 69 6e 67 20 47 65 74 46 72 61 6d 65 77 6f 72 6b  ing GetFramework
2e7b0 44 69 72 65 63 74 6f 72 79 28 0d 0a 20 20 20 20  Directory(..    
2e7c0 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69          MockRegi
2e7d0 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c  stryKey rootKey,
2e7e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 56 65  ..            Ve
2e7f0 72 73 69 6f 6e 20 66 72 61 6d 65 77 6f 72 6b 56  rsion frameworkV
2e800 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20  ersion,..       
2e810 20 20 20 20 20 62 6f 6f 6c 20 70 65 72 55 73 65       bool perUse
2e820 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r,..            
2e830 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20  bool wow64,..   
2e840 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68           bool wh
2e850 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20  atIf,..         
2e860 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 0d     bool verbose.
2e870 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a  .            )..
2e880 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2e890 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f         using (Mo
2e8a0 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65  ckRegistryKey ke
2e8b0 79 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70  y = RegistryHelp
2e8c0 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a  er.OpenSubKey(..
2e8d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e8e0 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 47 65 74      rootKey, Get
2e8f0 46 72 61 6d 65 77 6f 72 6b 52 6f 6f 74 4b 65 79  FrameworkRootKey
2e900 4e 61 6d 65 28 70 65 72 55 73 65 72 2c 20 77 6f  Name(perUser, wo
2e910 77 36 34 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  w64),..         
2e920 20 20 20 20 20 20 20 20 20 20 20 66 61 6c 73 65             false
2e930 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73  , whatIf, verbos
2e940 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
2e950 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2e960 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e      if (key == n
2e970 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
2e980 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
2e990 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20   null;....      
2e9a0 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74            object
2e9b0 20 76 61 6c 75 65 20 3d 20 52 65 67 69 73 74 72   value = Registr
2e9c0 79 48 65 6c 70 65 72 2e 47 65 74 56 61 6c 75 65  yHelper.GetValue
2e9d0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
2e9e0 20 20 20 20 20 20 20 6b 65 79 2c 20 22 49 6e 73         key, "Ins
2e9f0 74 61 6c 6c 52 6f 6f 74 22 2c 20 6e 75 6c 6c 2c  tallRoot", null,
2ea00 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
2ea10 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
2ea20 20 20 20 20 20 20 69 66 20 28 21 28 76 61 6c 75        if (!(valu
2ea30 65 20 69 73 20 73 74 72 69 6e 67 29 29 0d 0a 20  e is string)).. 
2ea40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ea50 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d     return null;.
2ea60 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2ea70 20 20 20 72 65 74 75 72 6e 20 50 61 74 68 2e 43     return Path.C
2ea80 6f 6d 62 69 6e 65 28 0d 0a 20 20 20 20 20 20 20  ombine(..       
2ea90 20 20 20 20 20 20 20 20 20 20 20 20 20 28 73 74               (st
2eaa0 72 69 6e 67 29 76 61 6c 75 65 2c 20 53 74 72 69  ring)value, Stri
2eab0 6e 67 2e 46 6f 72 6d 61 74 28 22 76 7b 30 7d 22  ng.Format("v{0}"
2eac0 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69  , frameworkVersi
2ead0 6f 6e 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  on));..         
2eae0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
2eaf0 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67  .        #endreg
2eb00 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ion....        /
2eb10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2eb20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2eb30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2eb40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2eb50 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
2eb60 20 20 23 72 65 67 69 6f 6e 20 50 65 72 2d 46 72    #region Per-Fr
2eb70 61 6d 65 77 6f 72 6b 2f 50 6c 61 74 66 6f 72 6d  amework/Platform
2eb80 20 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20   Handling..     
2eb90 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
2eba0 63 20 76 6f 69 64 20 49 6e 69 74 69 61 6c 69 7a  c void Initializ
2ebb0 65 46 72 61 6d 65 77 6f 72 6b 4c 69 73 74 28 0d  eFrameworkList(.
2ebc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63  .            Moc
2ebd0 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f  kRegistryKey roo
2ebe0 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20  tKey,..         
2ebf0 20 20 20 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e     Configuration
2ec00 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2c 0d   configuration,.
2ec10 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66  .            ref
2ec20 20 46 72 61 6d 65 77 6f 72 6b 4c 69 73 74 20 66   FrameworkList f
2ec30 72 61 6d 65 77 6f 72 6b 4c 69 73 74 0d 0a 20 20  rameworkList..  
2ec40 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
2ec50 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2ec60 20 20 20 20 69 66 20 28 66 72 61 6d 65 77 6f 72      if (framewor
2ec70 6b 4c 69 73 74 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  kList == null)..
2ec80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ec90 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 20 3d 20  frameworkList = 
2eca0 6e 65 77 20 46 72 61 6d 65 77 6f 72 6b 4c 69 73  new FrameworkLis
2ecb0 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  t();....        
2ecc0 20 20 20 20 69 66 20 28 66 72 61 6d 65 77 6f 72      if (framewor
2ecd0 6b 4c 69 73 74 2e 52 6f 6f 74 4b 65 79 20 3d 3d  kList.RootKey ==
2ece0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
2ecf0 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72          framewor
2ed00 6b 4c 69 73 74 2e 52 6f 6f 74 4b 65 79 20 3d 20  kList.RootKey = 
2ed10 72 6f 6f 74 4b 65 79 3b 0d 0a 0d 0a 20 20 20 20  rootKey;....    
2ed20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
2ed30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ed40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ed50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ed60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
2ed70 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 66             if (f
2ed80 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d  rameworkList.Nam
2ed90 65 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  es == null)..   
2eda0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2edb0 20 20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d              fram
2edc0 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 20  eworkList.Names 
2edd0 3d 20 6e 65 77 20 53 74 72 69 6e 67 4c 69 73 74  = new StringList
2ede0 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
2edf0 20 20 20 20 20 20 20 69 66 20 28 28 63 6f 6e 66         if ((conf
2ee00 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c  iguration == nul
2ee10 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61  l) || !configura
2ee20 74 69 6f 6e 2e 4e 6f 44 65 73 6b 74 6f 70 29 0d  tion.NoDesktop).
2ee30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2ee40 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69       frameworkLi
2ee50 73 74 2e 4e 61 6d 65 73 2e 41 64 64 28 22 2e 4e  st.Names.Add(".N
2ee60 45 54 46 72 61 6d 65 77 6f 72 6b 22 29 3b 0d 0a  ETFramework");..
2ee70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2ee80 20 20 69 66 20 28 28 63 6f 6e 66 69 67 75 72 61    if ((configura
2ee90 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c  tion == null) ||
2eea0 20 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e   !configuration.
2eeb0 4e 6f 43 6f 6d 70 61 63 74 29 0d 0a 20 20 20 20  NoCompact)..    
2eec0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2eed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2eee0 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74     frameworkList
2eef0 2e 4e 61 6d 65 73 2e 41 64 64 28 22 2e 4e 45 54  .Names.Add(".NET
2ef00 43 6f 6d 70 61 63 74 46 72 61 6d 65 77 6f 72 6b  CompactFramework
2ef10 22 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ");..           
2ef20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f           framewo
2ef30 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 2e 41 64 64  rkList.Names.Add
2ef40 28 22 2e 4e 45 54 43 6f 6d 70 61 63 74 46 72 61  (".NETCompactFra
2ef50 6d 65 77 6f 72 6b 22 29 3b 0d 0a 20 20 20 20 20  mework");..     
2ef60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
2ef70 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d  rameworkList.Nam
2ef80 65 73 2e 41 64 64 28 22 2e 4e 45 54 43 6f 6d 70  es.Add(".NETComp
2ef90 61 63 74 46 72 61 6d 65 77 6f 72 6b 22 29 3b 0d  actFramework");.
2efa0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2efb0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
2efc0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
2efd0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
2efe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2eff0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f000 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f010 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
2f020 20 20 20 20 69 66 20 28 66 72 61 6d 65 77 6f 72      if (framewor
2f030 6b 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 20 3d  kList.Versions =
2f040 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
2f050 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2f060 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72          framewor
2f070 6b 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 20 3d  kList.Versions =
2f080 20 6e 65 77 20 56 65 72 73 69 6f 6e 4d 61 70 28   new VersionMap(
2f090 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
2f0a0 20 20 20 20 20 20 69 66 20 28 28 63 6f 6e 66 69        if ((confi
2f0b0 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c  guration == null
2f0c0 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61 74  ) || !configurat
2f0d0 69 6f 6e 2e 4e 6f 44 65 73 6b 74 6f 70 29 0d 0a  ion.NoDesktop)..
2f0e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f0f0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2f100 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e 4c 69         VersionLi
2f110 73 74 20 64 65 73 6b 74 6f 70 56 65 72 73 69 6f  st desktopVersio
2f120 6e 4c 69 73 74 20 3d 20 6e 65 77 20 56 65 72 73  nList = new Vers
2f130 69 6f 6e 4c 69 73 74 28 29 3b 0d 0a 0d 0a 20 20  ionList();....  
2f140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f150 20 20 69 66 20 28 28 63 6f 6e 66 69 67 75 72 61    if ((configura
2f160 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c  tion == null) ||
2f170 20 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e   !configuration.
2f180 4e 6f 4e 65 74 46 78 32 30 29 0d 0a 20 20 20 20  NoNetFx20)..    
2f190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f1a0 20 20 20 20 64 65 73 6b 74 6f 70 56 65 72 73 69      desktopVersi
2f1b0 6f 6e 4c 69 73 74 2e 41 64 64 28 6e 65 77 20 56  onList.Add(new V
2f1c0 65 72 73 69 6f 6e 28 32 2c 20 30 2c 20 35 30 37  ersion(2, 0, 507
2f1d0 32 37 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  27));....       
2f1e0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
2f1f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2f200 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 54 68       // NOTE: Th
2f210 65 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b  e .NET Framework
2f220 20 33 2e 35 20 64 6f 65 73 20 6e 6f 74 20 68 61   3.5 does not ha
2f230 76 65 20 69 74 73 20 6f 77 6e 0d 0a 20 20 20 20  ve its own..    
2f240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f250 2f 2f 20 20 20 20 20 20 20 64 69 72 65 63 74 6f  //       directo
2f260 72 79 3b 20 68 6f 77 65 76 65 72 2c 20 69 74 20  ry; however, it 
2f270 73 74 69 6c 6c 20 6d 61 79 20 68 61 76 65 20 61  still may have a
2f280 73 73 65 6d 62 6c 79 0d 0a 20 20 20 20 20 20 20  ssembly..       
2f290 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
2f2a0 20 20 20 20 20 20 66 6f 6c 64 65 72 73 20 66 6f        folders fo
2f2b0 72 20 75 73 65 20 69 6e 20 56 69 73 75 61 6c 20  r use in Visual 
2f2c0 53 74 75 64 69 6f 2c 20 65 74 63 2e 0d 0a 20 20  Studio, etc...  
2f2d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f2e0 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
2f2f0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28 63            if ((c
2f300 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20  onfiguration == 
2f310 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67  null) || !config
2f320 75 72 61 74 69 6f 6e 2e 4e 6f 4e 65 74 46 78 33  uration.NoNetFx3
2f330 35 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  5)..            
2f340 20 20 20 20 20 20 20 20 20 20 20 20 64 65 73 6b              desk
2f350 74 6f 70 56 65 72 73 69 6f 6e 4c 69 73 74 2e 41  topVersionList.A
2f360 64 64 28 6e 65 77 20 56 65 72 73 69 6f 6e 28 33  dd(new Version(3
2f370 2c 20 35 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  , 5));....      
2f380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
2f390 20 28 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e   ((configuration
2f3a0 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f   == null) || !co
2f3b0 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e 6f 4e 65  nfiguration.NoNe
2f3c0 74 46 78 34 30 29 0d 0a 20 20 20 20 20 20 20 20  tFx40)..        
2f3d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f3e0 64 65 73 6b 74 6f 70 56 65 72 73 69 6f 6e 4c 69  desktopVersionLi
2f3f0 73 74 2e 41 64 64 28 6e 65 77 20 56 65 72 73 69  st.Add(new Versi
2f400 6f 6e 28 34 2c 20 30 2c 20 33 30 33 31 39 29 29  on(4, 0, 30319))
2f410 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2f420 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
2f430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f440 20 2f 2f 20 4e 4f 54 45 3a 20 54 68 65 20 2e 4e   // NOTE: The .N
2f450 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 34 2e 35  ET Framework 4.5
2f460 20 64 6f 65 73 20 6e 6f 74 20 68 61 76 65 20 69   does not have i
2f470 74 73 20 6f 77 6e 0d 0a 20 20 20 20 20 20 20 20  ts own..        
2f480 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
2f490 20 20 20 20 20 64 69 72 65 63 74 6f 72 79 3b 20       directory; 
2f4a0 68 6f 77 65 76 65 72 2c 20 69 74 20 73 74 69 6c  however, it stil
2f4b0 6c 20 6d 61 79 20 68 61 76 65 20 61 73 73 65 6d  l may have assem
2f4c0 62 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  bly..           
2f4d0 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
2f4e0 20 20 66 6f 6c 64 65 72 73 20 66 6f 72 20 75 73    folders for us
2f4f0 65 20 69 6e 20 56 69 73 75 61 6c 20 53 74 75 64  e in Visual Stud
2f500 69 6f 2c 20 65 74 63 2e 0d 0a 20 20 20 20 20 20  io, etc...      
2f510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
2f520 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2f530 20 20 20 20 20 20 69 66 20 28 28 63 6f 6e 66 69        if ((confi
2f540 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c  guration == null
2f550 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61 74  ) || !configurat
2f560 69 6f 6e 2e 4e 6f 4e 65 74 46 78 34 35 29 0d 0a  ion.NoNetFx45)..
2f570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f580 20 20 20 20 20 20 20 20 64 65 73 6b 74 6f 70 56          desktopV
2f590 65 72 73 69 6f 6e 4c 69 73 74 2e 41 64 64 28 6e  ersionList.Add(n
2f5a0 65 77 20 56 65 72 73 69 6f 6e 28 34 2c 20 35 2c  ew Version(4, 5,
2f5b0 20 35 30 37 30 39 29 29 3b 0d 0a 0d 0a 20 20 20   50709));....   
2f5c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f5d0 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
2f5e0 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
2f5f0 3a 20 54 68 65 20 2e 4e 45 54 20 46 72 61 6d 65  : The .NET Frame
2f600 77 6f 72 6b 20 34 2e 35 2e 31 20 64 6f 65 73 20  work 4.5.1 does 
2f610 6e 6f 74 20 68 61 76 65 20 69 74 73 20 6f 77 6e  not have its own
2f620 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2f630 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 64        //       d
2f640 69 72 65 63 74 6f 72 79 3b 20 68 6f 77 65 76 65  irectory; howeve
2f650 72 2c 20 69 74 20 73 74 69 6c 6c 20 6d 61 79 20  r, it still may 
2f660 68 61 76 65 20 61 73 73 65 6d 62 6c 79 0d 0a 20  have assembly.. 
2f670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f680 20 20 20 2f 2f 20 20 20 20 20 20 20 66 6f 6c 64     //       fold
2f690 65 72 73 20 66 6f 72 20 75 73 65 20 69 6e 20 56  ers for use in V
2f6a0 69 73 75 61 6c 20 53 74 75 64 69 6f 2c 20 65 74  isual Studio, et
2f6b0 63 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  c...            
2f6c0 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
2f6d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f6e0 69 66 20 28 28 63 6f 6e 66 69 67 75 72 61 74 69  if ((configurati
2f6f0 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21  on == null) || !
2f700 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e 6f  configuration.No
2f710 4e 65 74 46 78 34 35 31 29 0d 0a 20 20 20 20 20  NetFx451)..     
2f720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f730 20 20 20 64 65 73 6b 74 6f 70 56 65 72 73 69 6f     desktopVersio
2f740 6e 4c 69 73 74 2e 41 64 64 28 6e 65 77 20 56 65  nList.Add(new Ve
2f750 72 73 69 6f 6e 28 34 2c 20 35 2c 20 31 29 29 3b  rsion(4, 5, 1));
2f760 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2f770 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
2f780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f790 2f 2f 20 4e 4f 54 45 3a 20 54 68 65 20 2e 4e 45  // NOTE: The .NE
2f7a0 54 20 46 72 61 6d 65 77 6f 72 6b 20 34 2e 35 2e  T Framework 4.5.
2f7b0 32 20 64 6f 65 73 20 6e 6f 74 20 68 61 76 65 20  2 does not have 
2f7c0 69 74 73 20 6f 77 6e 0d 0a 20 20 20 20 20 20 20  its own..       
2f7d0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
2f7e0 20 20 20 20 20 20 64 69 72 65 63 74 6f 72 79 3b        directory;
2f7f0 20 68 6f 77 65 76 65 72 2c 20 69 74 20 73 74 69   however, it sti
2f800 6c 6c 20 6d 61 79 20 68 61 76 65 20 61 73 73 65  ll may have asse
2f810 6d 62 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20  mbly..          
2f820 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
2f830 20 20 20 66 6f 6c 64 65 72 73 20 66 6f 72 20 75     folders for u
2f840 73 65 20 69 6e 20 56 69 73 75 61 6c 20 53 74 75  se in Visual Stu
2f850 64 69 6f 2c 20 65 74 63 2e 0d 0a 20 20 20 20 20  dio, etc...     
2f860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
2f870 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
2f880 20 20 20 20 20 20 20 69 66 20 28 28 63 6f 6e 66         if ((conf
2f890 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c  iguration == nul
2f8a0 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61  l) || !configura
2f8b0 74 69 6f 6e 2e 4e 6f 4e 65 74 46 78 34 35 32 29  tion.NoNetFx452)
2f8c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2f8d0 20 20 20 20 20 20 20 20 20 20 64 65 73 6b 74 6f            deskto
2f8e0 70 56 65 72 73 69 6f 6e 4c 69 73 74 2e 41 64 64  pVersionList.Add
2f8f0 28 6e 65 77 20 56 65 72 73 69 6f 6e 28 34 2c 20  (new Version(4, 
2f900 35 2c 20 32 29 29 3b 0d 0a 0d 0a 20 20 20 20 20  5, 2));....     
2f910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
2f920 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
2f930 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
2f940 54 68 65 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f  The .NET Framewo
2f950 72 6b 20 34 2e 36 20 64 6f 65 73 20 6e 6f 74 20  rk 4.6 does not 
2f960 68 61 76 65 20 69 74 73 20 6f 77 6e 0d 0a 20 20  have its own..  
2f970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f980 20 20 2f 2f 20 20 20 20 20 20 20 64 69 72 65 63    //       direc
2f990 74 6f 72 79 3b 20 68 6f 77 65 76 65 72 2c 20 69  tory; however, i
2f9a0 74 20 73 74 69 6c 6c 20 6d 61 79 20 68 61 76 65  t still may have
2f9b0 20 61 73 73 65 6d 62 6c 79 0d 0a 20 20 20 20 20   assembly..     
2f9c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
2f9d0 2f 20 20 20 20 20 20 20 66 6f 6c 64 65 72 73 20  /       folders 
2f9e0 66 6f 72 20 75 73 65 20 69 6e 20 56 69 73 75 61  for use in Visua
2f9f0 6c 20 53 74 75 64 69 6f 2c 20 65 74 63 2e 0d 0a  l Studio, etc...
2fa00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fa10 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
2fa20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2fa30 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d  (configuration =
2fa40 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66  = null) || !conf
2fa50 69 67 75 72 61 74 69 6f 6e 2e 4e 6f 4e 65 74 46  iguration.NoNetF
2fa60 78 34 36 29 0d 0a 20 20 20 20 20 20 20 20 20 20  x46)..          
2fa70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
2fa80 73 6b 74 6f 70 56 65 72 73 69 6f 6e 4c 69 73 74  sktopVersionList
2fa90 2e 41 64 64 28 6e 65 77 20 56 65 72 73 69 6f 6e  .Add(new Version
2faa0 28 34 2c 20 36 29 29 3b 0d 0a 0d 0a 20 20 20 20  (4, 6));....    
2fab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fac0 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
2fad0 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
2fae0 20 54 68 65 20 2e 4e 45 54 20 46 72 61 6d 65 77   The .NET Framew
2faf0 6f 72 6b 20 34 2e 36 2e 31 20 64 6f 65 73 20 6e  ork 4.6.1 does n
2fb00 6f 74 20 68 61 76 65 20 69 74 73 20 6f 77 6e 0d  ot have its own.
2fb10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2fb20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 64 69       //       di
2fb30 72 65 63 74 6f 72 79 3b 20 68 6f 77 65 76 65 72  rectory; however
2fb40 2c 20 69 74 20 73 74 69 6c 6c 20 6d 61 79 20 68  , it still may h
2fb50 61 76 65 20 61 73 73 65 6d 62 6c 79 0d 0a 20 20  ave assembly..  
2fb60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fb70 20 20 2f 2f 20 20 20 20 20 20 20 66 6f 6c 64 65    //       folde
2fb80 72 73 20 66 6f 72 20 75 73 65 20 69 6e 20 56 69  rs for use in Vi
2fb90 73 75 61 6c 20 53 74 75 64 69 6f 2c 20 65 74 63  sual Studio, etc
2fba0 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2fbb0 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
2fbc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
2fbd0 66 20 28 28 63 6f 6e 66 69 67 75 72 61 74 69 6f  f ((configuratio
2fbe0 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 63  n == null) || !c
2fbf0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e 6f 4e  onfiguration.NoN
2fc00 65 74 46 78 34 36 31 29 0d 0a 20 20 20 20 20 20  etFx461)..      
2fc10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fc20 20 20 64 65 73 6b 74 6f 70 56 65 72 73 69 6f 6e    desktopVersion
2fc30 4c 69 73 74 2e 41 64 64 28 6e 65 77 20 56 65 72  List.Add(new Ver
2fc40 73 69 6f 6e 28 34 2c 20 36 2c 20 31 29 29 3b 0d  sion(4, 6, 1));.
2fc50 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2fc60 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
2fc70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
2fc80 2f 20 4e 4f 54 45 3a 20 54 68 65 20 2e 4e 45 54  / NOTE: The .NET
2fc90 20 46 72 61 6d 65 77 6f 72 6b 20 34 2e 36 2e 32   Framework 4.6.2
2fca0 20 64 6f 65 73 20 6e 6f 74 20 68 61 76 65 20 69   does not have i
2fcb0 74 73 20 6f 77 6e 0d 0a 20 20 20 20 20 20 20 20  ts own..        
2fcc0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
2fcd0 20 20 20 20 20 64 69 72 65 63 74 6f 72 79 3b 20       directory; 
2fce0 68 6f 77 65 76 65 72 2c 20 69 74 20 73 74 69 6c  however, it stil
2fcf0 6c 20 6d 61 79 20 68 61 76 65 20 61 73 73 65 6d  l may have assem
2fd00 62 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  bly..           
2fd10 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
2fd20 20 20 66 6f 6c 64 65 72 73 20 66 6f 72 20 75 73    folders for us
2fd30 65 20 69 6e 20 56 69 73 75 61 6c 20 53 74 75 64  e in Visual Stud
2fd40 69 6f 2c 20 65 74 63 2e 0d 0a 20 20 20 20 20 20  io, etc...      
2fd50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
2fd60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2fd70 20 20 20 20 20 20 69 66 20 28 28 63 6f 6e 66 69        if ((confi
2fd80 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c  guration == null
2fd90 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61 74  ) || !configurat
2fda0 69 6f 6e 2e 4e 6f 4e 65 74 46 78 34 36 32 29 0d  ion.NoNetFx462).
2fdb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2fdc0 20 20 20 20 20 20 20 20 20 64 65 73 6b 74 6f 70           desktop
2fdd0 56 65 72 73 69 6f 6e 4c 69 73 74 2e 41 64 64 28  VersionList.Add(
2fde0 6e 65 77 20 56 65 72 73 69 6f 6e 28 34 2c 20 36  new Version(4, 6
2fdf0 2c 20 32 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  , 2));....      
2fe00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72                fr
2fe10 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 56 65 72 73  ameworkList.Vers
2fe20 69 6f 6e 73 2e 41 64 64 28 22 2e 4e 45 54 46 72  ions.Add(".NETFr
2fe30 61 6d 65 77 6f 72 6b 22 2c 0d 0a 20 20 20 20 20  amework",..     
2fe40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fe50 20 20 20 64 65 73 6b 74 6f 70 56 65 72 73 69 6f     desktopVersio
2fe60 6e 4c 69 73 74 29 3b 0d 0a 20 20 20 20 20 20 20  nList);..       
2fe70 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
2fe80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
2fe90 20 28 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e   ((configuration
2fea0 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f   == null) || !co
2feb0 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e 6f 43 6f  nfiguration.NoCo
2fec0 6d 70 61 63 74 29 0d 0a 20 20 20 20 20 20 20 20  mpact)..        
2fed0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2fee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
2fef0 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 56 65 72  rameworkList.Ver
2ff00 73 69 6f 6e 73 2e 41 64 64 28 22 2e 4e 45 54 43  sions.Add(".NETC
2ff10 6f 6d 70 61 63 74 46 72 61 6d 65 77 6f 72 6b 22  ompactFramework"
2ff20 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2ff30 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 20 56             new V
2ff40 65 72 73 69 6f 6e 4c 69 73 74 28 6e 65 77 20 56  ersionList(new V
2ff50 65 72 73 69 6f 6e 5b 5d 20 7b 0d 0a 20 20 20 20  ersion[] {..    
2ff60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ff70 20 20 20 20 6e 65 77 20 56 65 72 73 69 6f 6e 28      new Version(
2ff80 32 2c 20 30 2c 20 30 2c 20 30 29 2c 20 6e 65 77  2, 0, 0, 0), new
2ff90 20 56 65 72 73 69 6f 6e 28 33 2c 20 35 2c 20 30   Version(3, 5, 0
2ffa0 2c 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20  , 0)..          
2ffb0 20 20 20 20 20 20 20 20 20 20 7d 29 29 3b 0d 0a            }));..
2ffc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ffd0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
2ffe0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2fff0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30000 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30010 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30020 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30030 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
30040 20 20 20 69 66 20 28 66 72 61 6d 65 77 6f 72 6b     if (framework
30050 4c 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d  List.PlatformNam
30060 65 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  es == null)..   
30070 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
30080 20 20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d              fram
30090 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61 74 66 6f  eworkList.Platfo
300a0 72 6d 4e 61 6d 65 73 20 3d 20 6e 65 77 20 53 74  rmNames = new St
300b0 72 69 6e 67 4c 69 73 74 28 29 3b 0d 0a 0d 0a 20  ringList();.... 
300c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
300d0 66 20 28 28 63 6f 6e 66 69 67 75 72 61 74 69 6f  f ((configuratio
300e0 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 63  n == null) || !c
300f0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e 6f 44  onfiguration.NoD
30100 65 73 6b 74 6f 70 29 0d 0a 20 20 20 20 20 20 20  esktop)..       
30110 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72 61               fra
30120 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61 74 66  meworkList.Platf
30130 6f 72 6d 4e 61 6d 65 73 2e 41 64 64 28 6e 75 6c  ormNames.Add(nul
30140 6c 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  l);....         
30150 20 20 20 20 20 20 20 69 66 20 28 28 63 6f 6e 66         if ((conf
30160 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c  iguration == nul
30170 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61  l) || !configura
30180 74 69 6f 6e 2e 4e 6f 43 6f 6d 70 61 63 74 29 0d  tion.NoCompact).
30190 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
301a0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
301b0 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72          framewor
301c0 6b 4c 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61  kList.PlatformNa
301d0 6d 65 73 2e 41 64 64 28 22 50 6f 63 6b 65 74 50  mes.Add("PocketP
301e0 43 22 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  C");..          
301f0 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 77            framew
30200 6f 72 6b 4c 69 73 74 2e 50 6c 61 74 66 6f 72 6d  orkList.Platform
30210 4e 61 6d 65 73 2e 41 64 64 28 22 53 6d 61 72 74  Names.Add("Smart
30220 70 68 6f 6e 65 22 29 3b 0d 0a 20 20 20 20 20 20  phone");..      
30230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72                fr
30240 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61 74  ameworkList.Plat
30250 66 6f 72 6d 4e 61 6d 65 73 2e 41 64 64 28 22 57  formNames.Add("W
30260 69 6e 64 6f 77 73 43 45 22 29 3b 0d 0a 20 20 20  indowsCE");..   
30270 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
30280 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
30290 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
302a0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
302b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
302c0 2f 2f 2f 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 0d 0a 0d 0a 20  ///////////.... 
302f0 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
30300 74 61 74 69 63 20 62 6f 6f 6c 20 48 61 76 65 46  tatic bool HaveF
30310 72 61 6d 65 77 6f 72 6b 44 69 72 65 63 74 6f 72  rameworkDirector
30320 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
30330 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
30340 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20  rootKey,..      
30350 20 20 20 20 20 20 73 74 72 69 6e 67 20 66 72 61        string fra
30360 6d 65 77 6f 72 6b 4e 61 6d 65 2c 0d 0a 20 20 20  meworkName,..   
30370 20 20 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e           Version
30380 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f   frameworkVersio
30390 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n,..            
303a0 73 74 72 69 6e 67 20 70 6c 61 74 66 6f 72 6d 4e  string platformN
303b0 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
303c0 20 20 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d    bool perUser,.
303d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
303e0 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20  l wow64,..      
303f0 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49        bool whatI
30400 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
30410 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20  bool verbose,.. 
30420 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73             ref s
30430 74 72 69 6e 67 20 69 6e 73 74 61 6c 6c 44 69 72  tring installDir
30440 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 20 20  ectory..        
30450 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b      )..        {
30460 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
30470 72 69 6e 67 20 6b 65 79 4e 61 6d 65 20 3d 20 47  ring keyName = G
30480 65 74 46 72 61 6d 65 77 6f 72 6b 4b 65 79 4e 61  etFrameworkKeyNa
30490 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me(..           
304a0 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4e 61       frameworkNa
304b0 6d 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72  me, frameworkVer
304c0 73 69 6f 6e 2c 20 70 6c 61 74 66 6f 72 6d 4e 61  sion, platformNa
304d0 6d 65 2c 20 70 65 72 55 73 65 72 2c 0d 0a 20 20  me, perUser,..  
304e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77 6f                wo
304f0 77 36 34 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  w64);....       
30500 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b       using (Mock
30510 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 20  RegistryKey key 
30520 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72  = RegistryHelper
30530 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20  .OpenSubKey(..  
30540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30550 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61    rootKey, keyNa
30560 6d 65 2c 20 66 61 6c 73 65 2c 20 77 68 61 74 49  me, false, whatI
30570 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20  f, verbose))..  
30580 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
30590 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
305a0 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  (key == null).. 
305b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
305c0 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
305d0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
305e0 20 20 20 20 69 66 20 28 70 6c 61 74 66 6f 72 6d      if (platform
305f0 4e 61 6d 65 20 21 3d 20 6e 75 6c 6c 29 20 2f 2f  Name != null) //
30600 20 4e 4f 54 45 3a 20 53 6b 69 70 20 6e 6f 6e 2d   NOTE: Skip non-
30610 64 65 73 6b 74 6f 70 2e 0d 0a 20 20 20 20 20 20  desktop...      
30620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
30630 74 75 72 6e 20 74 72 75 65 3b 0d 0a 0d 0a 20 20  turn true;....  
30640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
30650 72 69 6e 67 20 64 69 72 65 63 74 6f 72 79 20 3d  ring directory =
30660 20 47 65 74 46 72 61 6d 65 77 6f 72 6b 44 69 72   GetFrameworkDir
30670 65 63 74 6f 72 79 28 0d 0a 20 20 20 20 20 20 20  ectory(..       
30680 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f               roo
30690 74 4b 65 79 2c 20 66 72 61 6d 65 77 6f 72 6b 56  tKey, frameworkV
306a0 65 72 73 69 6f 6e 2c 20 70 65 72 55 73 65 72 2c  ersion, perUser,
306b0 20 77 6f 77 36 34 2c 20 77 68 61 74 49 66 2c 0d   wow64, whatIf,.
306c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
306d0 20 20 20 20 20 76 65 72 62 6f 73 65 29 3b 0d 0a       verbose);..
306e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
306f0 20 20 69 66 20 28 53 74 72 69 6e 67 2e 49 73 4e    if (String.IsN
30700 75 6c 6c 4f 72 45 6d 70 74 79 28 64 69 72 65 63  ullOrEmpty(direc
30710 74 6f 72 79 29 29 0d 0a 20 20 20 20 20 20 20 20  tory))..        
30720 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
30730 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20  rn false;....   
30740 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
30750 28 21 44 69 72 65 63 74 6f 72 79 2e 45 78 69 73  (!Directory.Exis
30760 74 73 28 64 69 72 65 63 74 6f 72 79 29 29 0d 0a  ts(directory))..
30770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30780 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
30790 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
307a0 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65       TraceOps.De
307b0 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63  bugAndTrace(Trac
307c0 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 72 2c  ePriority.Lower,
307d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
307e0 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62        debugCallb
307f0 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61  ack, traceCallba
30800 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
30810 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
30820 20 20 20 20 20 20 20 20 22 2e 4e 45 54 20 46 72          ".NET Fr
30830 61 6d 65 77 6f 72 6b 20 7b 30 7d 20 66 6f 75 6e  amework {0} foun
30840 64 20 76 69 61 20 64 69 72 65 63 74 6f 72 79 20  d via directory 
30850 7b 31 7d 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20  {1}.",..        
30860 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44              ForD
30870 69 73 70 6c 61 79 28 66 72 61 6d 65 77 6f 72 6b  isplay(framework
30880 56 65 72 73 69 6f 6e 29 2c 20 46 6f 72 44 69 73  Version), ForDis
30890 70 6c 61 79 28 64 69 72 65 63 74 6f 72 79 29 29  play(directory))
308a0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
308b0 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
308c0 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
308d0 20 20 20 20 20 20 20 20 20 20 69 6e 73 74 61 6c            instal
308e0 6c 44 69 72 65 63 74 6f 72 79 20 3d 20 64 69 72  lDirectory = dir
308f0 65 63 74 6f 72 79 3b 0d 0a 20 20 20 20 20 20 20  ectory;..       
30900 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
30910 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  true;..         
30920 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
30930 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
30940 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30950 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30960 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30970 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30980 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72  //....        pr
30990 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f  ivate static boo
309a0 6c 20 48 61 76 65 46 72 61 6d 65 77 6f 72 6b 52  l HaveFrameworkR
309b0 65 67 69 73 74 72 79 28 0d 0a 20 20 20 20 20 20  egistry(..      
309c0 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74        MockRegist
309d0 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a  ryKey rootKey,..
309e0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
309f0 6e 67 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65  ng frameworkName
30a00 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 56  ,..            V
30a10 65 72 73 69 6f 6e 20 66 72 61 6d 65 77 6f 72 6b  ersion framework
30a20 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20  Version,..      
30a30 20 20 20 20 20 20 73 74 72 69 6e 67 20 70 6c 61        string pla
30a40 74 66 6f 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20 20  tformName,..    
30a50 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 70 65 72          bool per
30a60 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20  User,..         
30a70 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a     bool wow64,..
30a80 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
30a90 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20   whatIf,..      
30aa0 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f        bool verbo
30ab0 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
30ac0 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
30ad0 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
30ae0 20 6b 65 79 4e 61 6d 65 20 3d 20 47 65 74 46 72   keyName = GetFr
30af0 61 6d 65 77 6f 72 6b 4b 65 79 4e 61 6d 65 28 0d  ameworkKeyName(.
30b00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
30b10 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20   frameworkName, 
30b20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e  frameworkVersion
30b30 2c 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 20  , platformName, 
30b40 70 65 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 20  perUser,..      
30b50 20 20 20 20 20 20 20 20 20 20 77 6f 77 36 34 29            wow64)
30b60 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
30b70 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69   using (MockRegi
30b80 73 74 72 79 4b 65 79 20 6b 65 79 20 3d 20 52 65  stryKey key = Re
30b90 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65  gistryHelper.Ope
30ba0 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20  nSubKey(..      
30bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
30bc0 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 2c 20  otKey, keyName, 
30bd0 66 61 6c 73 65 2c 20 77 68 61 74 49 66 2c 20 76  false, whatIf, v
30be0 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20  erbose))..      
30bf0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
30c00 20 20 20 20 20 20 20 20 20 69 66 20 28 6b 65 79           if (key
30c10 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
30c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
30c30 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a  eturn false;....
30c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30c50 69 66 20 28 70 6c 61 74 66 6f 72 6d 4e 61 6d 65  if (platformName
30c60 20 21 3d 20 6e 75 6c 6c 29 20 2f 2f 20 4e 4f 54   != null) // NOT
30c70 45 3a 20 53 6b 69 70 20 6e 6f 6e 2d 64 65 73 6b  E: Skip non-desk
30c80 74 6f 70 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  top...          
30c90 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
30ca0 20 74 72 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20   true;....      
30cb0 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
30cc0 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
30cd0 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c  (TracePriority.L
30ce0 6f 77 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20  ower,..         
30cf0 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67             debug
30d00 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43  Callback, traceC
30d10 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e  allback, String.
30d20 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
30d30 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2e 4e               ".N
30d40 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 7b 30 7d  ET Framework {0}
30d50 20 66 6f 75 6e 64 20 76 69 61 20 72 65 67 69 73   found via regis
30d60 74 72 79 20 7b 31 7d 2e 22 2c 0d 0a 20 20 20 20  try {1}.",..    
30d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30d80 46 6f 72 44 69 73 70 6c 61 79 28 66 72 61 6d 65  ForDisplay(frame
30d90 77 6f 72 6b 56 65 72 73 69 6f 6e 29 2c 20 46 6f  workVersion), Fo
30da0 72 44 69 73 70 6c 61 79 28 6b 65 79 4e 61 6d 65  rDisplay(keyName
30db0 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
30dc0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
30dd0 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
30de0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
30df0 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20  rn true;..      
30e00 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
30e10 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f   }....        //
30e20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30e30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30e40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
30e70 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74   [MethodImpl(Met
30e80 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e  hodImplOptions.N
30e90 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20  oInlining)]..   
30ea0 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
30eb0 74 69 63 20 62 6f 6f 6c 20 46 6f 72 45 61 63 68  tic bool ForEach
30ec0 46 72 61 6d 65 77 6f 72 6b 43 6f 6e 66 69 67 28  FrameworkConfig(
30ed0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f  ..            Mo
30ee0 63 6b 52 65 67 69 73 74 72 79 20 72 65 67 69 73  ckRegistry regis
30ef0 74 72 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  try,..          
30f00 20 20 46 72 61 6d 65 77 6f 72 6b 4c 69 73 74 20    FrameworkList 
30f10 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2c 0d 0a  frameworkList,..
30f20 20 20 20 20 20 20 20 20 20 20 20 20 46 72 61 6d              Fram
30f30 65 77 6f 72 6b 43 6f 6e 66 69 67 43 61 6c 6c 62  eworkConfigCallb
30f40 61 63 6b 20 63 61 6c 6c 62 61 63 6b 2c 0d 0a 20  ack callback,.. 
30f50 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
30f60 67 20 76 65 72 73 69 6f 6e 2c 20 2f 2a 20 4e 4f  g version, /* NO
30f70 54 45 3a 20 4f 70 74 69 6f 6e 61 6c 2e 20 2a 2f  TE: Optional. */
30f80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
30f90 72 69 6e 67 20 69 6e 76 61 72 69 61 6e 74 4e 61  ring invariantNa
30fa0 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
30fb0 20 73 74 72 69 6e 67 20 6e 61 6d 65 2c 0d 0a 20   string name,.. 
30fc0 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
30fd0 67 20 64 65 73 63 72 69 70 74 69 6f 6e 2c 0d 0a  g description,..
30fe0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
30ff0 6e 67 20 74 79 70 65 4e 61 6d 65 2c 0d 0a 20 20  ng typeName,..  
31000 20 20 20 20 20 20 20 20 20 20 41 73 73 65 6d 62            Assemb
31010 6c 79 4e 61 6d 65 20 61 73 73 65 6d 62 6c 79 4e  lyName assemblyN
31020 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
31030 20 20 6f 62 6a 65 63 74 20 63 6c 69 65 6e 74 44    object clientD
31040 61 74 61 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ata,..          
31050 20 20 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d    bool perUser,.
31060 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
31070 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20  l wow64,..      
31080 20 20 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77        bool throw
31090 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20  OnMissing,..    
310a0 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61          bool wha
310b0 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf,..          
310c0 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d    bool verbose,.
310d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66  .            ref
310e0 20 62 6f 6f 6c 20 73 61 76 65 64 2c 0d 0a 20 20   bool saved,..  
310f0 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74            ref st
31100 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20  ring error..    
31110 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
31120 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
31130 20 20 69 66 20 28 72 65 67 69 73 74 72 79 20 3d    if (registry =
31140 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
31150 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
31160 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
31170 22 69 6e 76 61 6c 69 64 20 72 65 67 69 73 74 72  "invalid registr
31180 79 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  y";..           
31190 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
311a0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
311b0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
311c0 20 69 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69   if (frameworkLi
311d0 73 74 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  st == null)..   
311e0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
311f0 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
31200 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 66 72 61  r = "invalid fra
31210 6d 65 77 6f 72 6b 20 6c 69 73 74 22 3b 0d 0a 20  mework list";.. 
31220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
31230 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
31240 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
31250 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52             MockR
31260 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b  egistryKey rootK
31270 65 79 20 3d 20 66 72 61 6d 65 77 6f 72 6b 4c 69  ey = frameworkLi
31280 73 74 2e 52 6f 6f 74 4b 65 79 3b 0d 0a 0d 0a 20  st.RootKey;.... 
31290 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 72             if (r
312a0 6f 6f 74 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d  ootKey == null).
312b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
312c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
312d0 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64  error = "invalid
312e0 20 72 6f 6f 74 20 6b 65 79 22 3b 0d 0a 20 20 20   root key";..   
312f0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
31300 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
31310 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
31320 20 20 20 20 20 20 20 20 20 69 66 20 28 21 49 73           if (!Is
31330 53 75 70 70 6f 72 74 65 64 52 6f 6f 74 4b 65 79  SupportedRootKey
31340 28 72 65 67 69 73 74 72 79 2c 20 72 6f 6f 74 4b  (registry, rootK
31350 65 79 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ey))..          
31360 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
31370 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 72 6f       error = "ro
31380 6f 74 20 6b 65 79 20 6d 75 73 74 20 62 65 20 70  ot key must be p
31390 65 72 2d 75 73 65 72 20 6f 72 20 70 65 72 2d 6d  er-user or per-m
313a0 61 63 68 69 6e 65 22 3b 0d 0a 20 20 20 20 20 20  achine";..      
313b0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
313c0 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
313d0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
313e0 20 20 20 20 20 20 69 66 20 28 66 72 61 6d 65 77        if (framew
313f0 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 20 3d 3d  orkList.Names ==
31400 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
31410 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
31420 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22         error = "
31430 6e 6f 20 66 72 61 6d 65 77 6f 72 6b 20 6e 61 6d  no framework nam
31440 65 73 20 66 6f 75 6e 64 22 3b 0d 0a 20 20 20 20  es found";..    
31450 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
31460 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
31470 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
31480 20 20 20 20 20 20 20 20 69 66 20 28 66 72 61 6d          if (fram
31490 65 77 6f 72 6b 4c 69 73 74 2e 56 65 72 73 69 6f  eworkList.Versio
314a0 6e 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ns == null)..   
314b0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
314c0 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
314d0 72 20 3d 20 22 6e 6f 20 66 72 61 6d 65 77 6f 72  r = "no framewor
314e0 6b 20 76 65 72 73 69 6f 6e 73 20 66 6f 75 6e 64  k versions found
314f0 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ";..            
31500 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
31510 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
31520 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
31530 69 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73  if (frameworkLis
31540 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 20  t.PlatformNames 
31550 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
31560 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
31570 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
31580 20 22 6e 6f 20 70 6c 61 74 66 6f 72 6d 20 6e 61   "no platform na
31590 6d 65 73 20 66 6f 75 6e 64 22 3b 0d 0a 20 20 20  mes found";..   
315a0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
315b0 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
315c0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
315d0 20 20 20 20 20 20 20 20 20 69 66 20 28 66 72 61           if (fra
315e0 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73  meworkList.Names
315f0 2e 43 6f 75 6e 74 20 21 3d 20 66 72 61 6d 65 77  .Count != framew
31600 6f 72 6b 4c 69 73 74 2e 50 6c 61 74 66 6f 72 6d  orkList.Platform
31610 4e 61 6d 65 73 2e 43 6f 75 6e 74 29 0d 0a 20 20  Names.Count)..  
31620 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
31630 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
31640 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d  or = String.Form
31650 61 74 28 22 66 72 61 6d 65 77 6f 72 6b 20 6e 61  at("framework na
31660 6d 65 20 63 6f 75 6e 74 20 7b 30 7d 20 64 6f 65  me count {0} doe
31670 73 20 6e 6f 74 20 22 20 2b 0d 0a 20 20 20 20 20  s not " +..     
31680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
31690 6d 61 74 63 68 20 70 6c 61 74 66 6f 72 6d 20 6e  match platform n
316a0 61 6d 65 20 63 6f 75 6e 74 20 7b 31 7d 22 2c 20  ame count {1}", 
316b0 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61  frameworkList.Na
316c0 6d 65 73 2e 43 6f 75 6e 74 2c 0d 0a 20 20 20 20  mes.Count,..    
316d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
316e0 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c  frameworkList.Pl
316f0 61 74 66 6f 72 6d 4e 61 6d 65 73 2e 43 6f 75 6e  atformNames.Coun
31700 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  t);....         
31710 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
31720 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
31730 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
31740 20 20 20 66 6f 72 20 28 69 6e 74 20 69 6e 64 65     for (int inde
31750 78 20 3d 20 30 3b 20 69 6e 64 65 78 20 3c 20 66  x = 0; index < f
31760 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d  rameworkList.Nam
31770 65 73 2e 43 6f 75 6e 74 3b 20 69 6e 64 65 78 2b  es.Count; index+
31780 2b 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  +)..            
31790 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
317a0 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
317b0 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
317c0 47 72 61 62 20 74 68 65 20 6e 61 6d 65 20 6f 66  Grab the name of
317d0 20 74 68 65 20 66 72 61 6d 65 77 6f 72 6b 20 28   the framework (
317e0 65 2e 67 2e 20 22 2e 4e 45 54 46 72 61 6d 65 77  e.g. ".NETFramew
317f0 6f 72 6b 22 29 0d 0a 20 20 20 20 20 20 20 20 20  ork")..         
31800 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
31810 61 6e 64 20 74 68 65 20 6e 61 6d 65 20 6f 66 20  and the name of 
31820 74 68 65 20 70 6c 61 74 66 6f 72 6d 20 28 65 2e  the platform (e.
31830 67 2e 20 22 57 69 6e 64 6f 77 73 43 45 22 29 2e  g. "WindowsCE").
31840 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
31850 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
31860 20 20 20 20 20 20 73 74 72 69 6e 67 20 66 72 61        string fra
31870 6d 65 77 6f 72 6b 4e 61 6d 65 20 3d 20 66 72 61  meworkName = fra
31880 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73  meworkList.Names
31890 5b 69 6e 64 65 78 5d 3b 0d 0a 20 20 20 20 20 20  [index];..      
318a0 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
318b0 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 20 3d 20   platformName = 
318c0 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c  frameworkList.Pl
318d0 61 74 66 6f 72 6d 4e 61 6d 65 73 5b 69 6e 64 65  atformNames[inde
318e0 78 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  x];....         
318f0 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
31900 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
31910 54 45 3a 20 53 6b 69 70 20 61 6c 6c 20 6e 6f 6e  TE: Skip all non
31920 2d 64 65 73 6b 74 6f 70 20 66 72 61 6d 65 77 6f  -desktop framewo
31930 72 6b 73 20 28 69 2e 65 2e 20 69 66 20 74 68 65  rks (i.e. if the
31940 20 70 6c 61 74 66 6f 72 6d 0d 0a 20 20 20 20 20   platform..     
31950 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
31960 20 20 20 20 6e 61 6d 65 20 69 73 20 6e 6f 74 20      name is not 
31970 6e 75 6c 6c 29 2e 0d 0a 20 20 20 20 20 20 20 20  null)...        
31980 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
31990 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
319a0 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 20 21 3d 20  platformName != 
319b0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
319c0 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69             conti
319d0 6e 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  nue;....        
319e0 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
319f0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
31a00 4f 54 45 3a 20 47 72 61 62 20 74 68 65 20 73 75  OTE: Grab the su
31a10 70 70 6f 72 74 65 64 20 76 65 72 73 69 6f 6e 73  pported versions
31a20 20 6f 66 20 74 68 69 73 20 70 61 72 74 69 63 75   of this particu
31a30 6c 61 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lar..           
31a40 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 66 72       //       fr
31a50 61 6d 65 77 6f 72 6b 2e 0d 0a 20 20 20 20 20 20  amework...      
31a60 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
31a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 56 65                Ve
31a80 72 73 69 6f 6e 4c 69 73 74 20 66 72 61 6d 65 77  rsionList framew
31a90 6f 72 6b 56 65 72 73 69 6f 6e 4c 69 73 74 3b 0d  orkVersionList;.
31aa0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
31ab0 20 20 20 69 66 20 28 76 65 72 73 69 6f 6e 20 21     if (version !
31ac0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
31ad0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
31ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31af0 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
31b00 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
31b10 20 4d 61 6e 75 61 6c 20 6f 76 65 72 72 69 64 65   Manual override
31b20 20 6f 66 20 74 68 65 20 2a 4f 4e 45 2a 20 66 72   of the *ONE* fr
31b30 61 6d 65 77 6f 72 6b 20 76 65 72 73 69 6f 6e 0d  amework version.
31b40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
31b50 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74 6f       //       to
31b60 20 70 72 6f 63 65 73 73 2e 0d 0a 20 20 20 20 20   process...     
31b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
31b80 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
31b90 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b         framework
31ba0 56 65 72 73 69 6f 6e 4c 69 73 74 20 3d 20 6e 65  VersionList = ne
31bb0 77 20 56 65 72 73 69 6f 6e 4c 69 73 74 28 29 3b  w VersionList();
31bc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
31bd0 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 56        frameworkV
31be0 65 72 73 69 6f 6e 4c 69 73 74 2e 41 64 64 28 6e  ersionList.Add(n
31bf0 65 77 20 56 65 72 73 69 6f 6e 28 76 65 72 73 69  ew Version(versi
31c00 6f 6e 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  on));..         
31c10 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
31c20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a            else..
31c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31c40 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
31c50 20 20 20 20 20 20 20 69 66 20 28 21 66 72 61 6d         if (!fram
31c60 65 77 6f 72 6b 4c 69 73 74 2e 56 65 72 73 69 6f  eworkList.Versio
31c70 6e 73 2e 54 72 79 47 65 74 56 61 6c 75 65 28 0d  ns.TryGetValue(.
31c80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
31c90 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72 61               fra
31ca0 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20 6f 75 74 20  meworkName, out 
31cb0 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e  frameworkVersion
31cc0 4c 69 73 74 29 20 7c 7c 0d 0a 20 20 20 20 20 20  List) ||..      
31cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31ce0 20 20 28 66 72 61 6d 65 77 6f 72 6b 56 65 72 73    (frameworkVers
31cf0 69 6f 6e 4c 69 73 74 20 3d 3d 20 6e 75 6c 6c 29  ionList == null)
31d00 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
31d10 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
31d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31d30 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20    continue;..   
31d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31d50 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
31d60 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
31d70 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68           foreach
31d80 20 28 56 65 72 73 69 6f 6e 20 66 72 61 6d 65 77   (Version framew
31d90 6f 72 6b 56 65 72 73 69 6f 6e 20 69 6e 20 66 72  orkVersion in fr
31da0 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 4c 69  ameworkVersionLi
31db0 73 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  st)..           
31dc0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
31dd0 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
31de0 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
31df0 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79  ce(TracePriority
31e00 2e 4c 6f 77 65 72 2c 0d 0a 20 20 20 20 20 20 20  .Lower,..       
31e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31e20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20   debugCallback, 
31e30 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
31e40 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
31e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31e60 20 20 20 20 20 20 20 22 66 72 61 6d 65 77 6f 72         "framewor
31e70 6b 4e 61 6d 65 20 3d 20 7b 30 7d 2c 20 66 72 61  kName = {0}, fra
31e80 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 20 3d 20  meworkVersion = 
31e90 7b 31 7d 2c 20 22 20 2b 0d 0a 20 20 20 20 20 20  {1}, " +..      
31ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31eb0 20 20 22 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 20    "platformName 
31ec0 3d 20 7b 32 7d 22 2c 20 46 6f 72 44 69 73 70 6c  = {2}", ForDispl
31ed0 61 79 28 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65  ay(frameworkName
31ee0 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
31ef0 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44              ForD
31f00 69 73 70 6c 61 79 28 66 72 61 6d 65 77 6f 72 6b  isplay(framework
31f10 56 65 72 73 69 6f 6e 29 2c 0d 0a 20 20 20 20 20  Version),..     
31f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31f30 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 70 6c     ForDisplay(pl
31f40 61 74 66 6f 72 6d 4e 61 6d 65 29 29 2c 20 74 72  atformName)), tr
31f50 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
31f60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
31f70 20 20 20 20 20 73 74 72 69 6e 67 20 69 6e 73 74       string inst
31f80 61 6c 6c 44 69 72 65 63 74 6f 72 79 20 3d 20 6e  allDirectory = n
31f90 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ull;....        
31fa0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
31fb0 21 48 61 76 65 46 72 61 6d 65 77 6f 72 6b 44 69  !HaveFrameworkDi
31fc0 72 65 63 74 6f 72 79 28 0d 0a 20 20 20 20 20 20  rectory(..      
31fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31fe0 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 66        rootKey, f
31ff0 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20 66 72  rameworkName, fr
32000 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d  ameworkVersion,.
32010 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
32020 20 20 20 20 20 20 20 20 20 20 20 20 20 70 6c 61               pla
32030 74 66 6f 72 6d 4e 61 6d 65 2c 20 70 65 72 55 73  tformName, perUs
32040 65 72 2c 20 77 6f 77 36 34 2c 20 77 68 61 74 49  er, wow64, whatI
32050 66 2c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20  f, verbose,..   
32060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32070 20 20 20 20 20 20 20 20 20 72 65 66 20 69 6e 73           ref ins
32080 74 61 6c 6c 44 69 72 65 63 74 6f 72 79 29 29 0d  tallDirectory)).
32090 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
320a0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
320b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
320c0 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
320d0 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f  dTrace(TracePrio
320e0 72 69 74 79 2e 4c 6f 77 2c 0d 0a 20 20 20 20 20  rity.Low,..     
320f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32100 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c         debugCall
32110 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62  back, traceCallb
32120 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ack, String.Form
32130 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
32140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32150 20 22 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b   ".NET Framework
32160 20 7b 30 7d 20 64 69 72 65 63 74 6f 72 79 20 6e   {0} directory n
32170 6f 74 20 66 6f 75 6e 64 2c 20 22 20 2b 0d 0a 20  ot found, " +.. 
32180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32190 20 20 20 20 20 20 20 20 20 20 20 22 73 6b 69 70             "skip
321a0 70 69 6e 67 2e 2e 2e 22 2c 20 46 6f 72 44 69 73  ping...", ForDis
321b0 70 6c 61 79 28 66 72 61 6d 65 77 6f 72 6b 56 65  play(frameworkVe
321c0 72 73 69 6f 6e 29 29 2c 0d 0a 20 20 20 20 20 20  rsion)),..      
321d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
321e0 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
321f0 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
32200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32210 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20   continue;..    
32220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32230 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
32240 20 20 20 20 20 20 20 20 20 69 66 20 28 63 61 6c           if (cal
32250 6c 62 61 63 6b 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  lback == null)..
32260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32270 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65          continue
32280 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
32290 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
322a0 64 69 72 65 63 74 6f 72 79 20 3d 20 69 6e 73 74  directory = inst
322b0 61 6c 6c 44 69 72 65 63 74 6f 72 79 3b 0d 0a 0d  allDirectory;...
322c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
322d0 20 20 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e       if (String.
322e0 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 64 69  IsNullOrEmpty(di
322f0 72 65 63 74 6f 72 79 29 29 0d 0a 20 20 20 20 20  rectory))..     
32300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
32310 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
32320 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
32330 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
32340 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c  (TracePriority.L
32350 6f 77 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ow,..           
32360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32370 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20   debugCallback, 
32380 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
32390 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
323a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
323b0 20 20 20 20 20 20 20 20 20 20 20 22 2e 4e 45 54             ".NET
323c0 20 46 72 61 6d 65 77 6f 72 6b 20 7b 30 7d 20 64   Framework {0} d
323d0 69 72 65 63 74 6f 72 79 20 69 73 20 69 6e 76 61  irectory is inva
323e0 6c 69 64 2c 20 22 20 2b 0d 0a 20 20 20 20 20 20  lid, " +..      
323f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32400 20 20 20 20 20 20 22 73 6b 69 70 70 69 6e 67 2e        "skipping.
32410 2e 2e 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  ..", ForDisplay(
32420 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e  frameworkVersion
32430 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
32440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32450 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
32460 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
32470 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74              cont
32480 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  inue;..         
32490 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
324a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
324b0 20 20 20 20 64 69 72 65 63 74 6f 72 79 20 3d 20      directory = 
324c0 50 61 74 68 2e 43 6f 6d 62 69 6e 65 28 64 69 72  Path.Combine(dir
324d0 65 63 74 6f 72 79 2c 20 22 43 6f 6e 66 69 67 22  ectory, "Config"
324e0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
324f0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 44            if (!D
32500 69 72 65 63 74 6f 72 79 2e 45 78 69 73 74 73 28  irectory.Exists(
32510 64 69 72 65 63 74 6f 72 79 29 29 0d 0a 20 20 20  directory))..   
32520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32530 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
32540 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
32550 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
32560 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79  ce(TracePriority
32570 2e 4c 6f 77 2c 0d 0a 20 20 20 20 20 20 20 20 20  .Low,..         
32580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32590 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b     debugCallback
325a0 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c  , traceCallback,
325b0 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
325c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
325d0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2e 4e               ".N
325e0 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 7b 30 7d  ET Framework {0}
325f0 20 64 69 72 65 63 74 6f 72 79 20 7b 31 7d 20 64   directory {1} d
32600 6f 65 73 20 6e 6f 74 20 22 20 2b 0d 0a 20 20 20  oes not " +..   
32610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32620 20 20 20 20 20 20 20 20 20 22 65 78 69 73 74 2c           "exist,
32630 20 73 6b 69 70 70 69 6e 67 2e 2e 2e 22 2c 20 46   skipping...", F
32640 6f 72 44 69 73 70 6c 61 79 28 66 72 61 6d 65 77  orDisplay(framew
32650 6f 72 6b 56 65 72 73 69 6f 6e 29 2c 0d 0a 20 20  orkVersion),..  
32660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32670 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
32680 70 6c 61 79 28 64 69 72 65 63 74 6f 72 79 29 29  play(directory))
32690 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29  , traceCategory)
326a0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
326b0 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
326c0 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  tinue;..        
326d0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
326e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
326f0 20 20 20 20 20 73 74 72 69 6e 67 20 66 69 6c 65       string file
32700 4e 61 6d 65 20 3d 20 50 61 74 68 2e 43 6f 6d 62  Name = Path.Comb
32710 69 6e 65 28 64 69 72 65 63 74 6f 72 79 2c 20 22  ine(directory, "
32720 6d 61 63 68 69 6e 65 2e 63 6f 6e 66 69 67 22 29  machine.config")
32730 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
32740 20 20 20 20 20 20 20 20 20 69 66 20 28 21 46 69           if (!Fi
32750 6c 65 2e 45 78 69 73 74 73 28 66 69 6c 65 4e 61  le.Exists(fileNa
32760 6d 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  me))..          
32770 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
32780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32790 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65       TraceOps.De
327a0 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63  bugAndTrace(Trac
327b0 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 2c 0d 0a  ePriority.Low,..
327c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
327d0 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75              debu
327e0 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65  gCallback, trace
327f0 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67  Callback, String
32800 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
32810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32820 20 20 20 20 20 20 22 2e 4e 45 54 20 46 72 61 6d        ".NET Fram
32830 65 77 6f 72 6b 20 7b 30 7d 20 66 69 6c 65 20 7b  ework {0} file {
32840 31 7d 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73  1} does not exis
32850 74 2c 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20  t, " +..        
32860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32870 20 20 20 20 22 73 6b 69 70 70 69 6e 67 2e 2e 2e      "skipping...
32880 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 66 72  ", ForDisplay(fr
32890 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 29 2c  ameworkVersion),
328a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
328b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f                Fo
328c0 72 44 69 73 70 6c 61 79 28 66 69 6c 65 4e 61 6d  rDisplay(fileNam
328d0 65 29 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f  e)), traceCatego
328e0 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
328f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32900 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20  continue;..     
32910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
32920 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
32930 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 6c 6f 63          bool loc
32940 61 6c 53 61 76 65 64 20 3d 20 66 61 6c 73 65 3b  alSaved = false;
32950 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
32960 20 20 20 20 20 20 20 20 69 66 20 28 21 63 61 6c          if (!cal
32970 6c 62 61 63 6b 28 0d 0a 20 20 20 20 20 20 20 20  lback(..        
32980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32990 20 20 20 20 66 69 6c 65 4e 61 6d 65 2c 20 69 6e      fileName, in
329a0 76 61 72 69 61 6e 74 4e 61 6d 65 2c 20 6e 61 6d  variantName, nam
329b0 65 2c 20 64 65 73 63 72 69 70 74 69 6f 6e 2c 0d  e, description,.
329c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
329d0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 79 70               typ
329e0 65 4e 61 6d 65 2c 20 61 73 73 65 6d 62 6c 79 4e  eName, assemblyN
329f0 61 6d 65 2c 20 69 6e 73 74 61 6c 6c 44 69 72 65  ame, installDire
32a00 63 74 6f 72 79 2c 0d 0a 20 20 20 20 20 20 20 20  ctory,..        
32a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32a20 20 20 20 20 63 6c 69 65 6e 74 44 61 74 61 2c 20      clientData, 
32a30 70 65 72 55 73 65 72 2c 20 77 6f 77 36 34 2c 20  perUser, wow64, 
32a40 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d  throwOnMissing,.
32a50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
32a60 20 20 20 20 20 20 20 20 20 20 20 20 20 77 68 61               wha
32a70 74 49 66 2c 20 76 65 72 62 6f 73 65 2c 20 72 65  tIf, verbose, re
32a80 66 20 6c 6f 63 61 6c 53 61 76 65 64 2c 20 72 65  f localSaved, re
32a90 66 20 65 72 72 6f 72 29 29 0d 0a 20 20 20 20 20  f error))..     
32aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
32ab0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
32ac0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
32ad0 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
32ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
32af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32b00 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20      else..      
32b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
32b20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
32b30 20 20 20 20 20 20 20 20 20 69 66 20 28 6c 6f 63           if (loc
32b40 61 6c 53 61 76 65 64 20 26 26 20 21 73 61 76 65  alSaved && !save
32b50 64 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d)..            
32b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32b70 73 61 76 65 64 20 3d 20 74 72 75 65 3b 0d 0a 0d  saved = true;...
32b80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
32b90 20 20 20 20 20 20 20 20 20 69 66 20 28 76 65 72           if (ver
32ba0 62 6f 73 65 29 0d 0a 20 20 20 20 20 20 20 20 20  bose)..         
32bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32bc0 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75     TraceOps.Debu
32bd0 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50  gAndTrace(TraceP
32be0 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 0d  riority.Lowest,.
32bf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
32c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32c10 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20   debugCallback, 
32c20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
32c30 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
32c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
32c60 6c 6f 63 61 6c 53 61 76 65 64 20 3d 20 7b 30 7d  localSaved = {0}
32c70 2c 20 73 61 76 65 64 20 3d 20 7b 31 7d 22 2c 0d  , saved = {1}",.
32c80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
32c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32ca0 20 46 6f 72 44 69 73 70 6c 61 79 28 6c 6f 63 61   ForDisplay(loca
32cb0 6c 53 61 76 65 64 29 2c 20 46 6f 72 44 69 73 70  lSaved), ForDisp
32cc0 6c 61 79 28 73 61 76 65 64 29 29 2c 0d 0a 20 20  lay(saved)),..  
32cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
32cf0 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 20  aceCategory);.. 
32d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32d10 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
32d20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
32d30 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
32d40 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75        return tru
32d50 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  e;..        }...
32d60 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
32d70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32d80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32d90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32da0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32db0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 5b 4d 65 74  ....        [Met
32dc0 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d  hodImpl(MethodIm
32dd0 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69  plOptions.NoInli
32de0 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20  ning)]..        
32df0 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62  private static b
32e00 6f 6f 6c 20 46 6f 72 45 61 63 68 46 72 61 6d 65  ool ForEachFrame
32e10 77 6f 72 6b 52 65 67 69 73 74 72 79 28 0d 0a 20  workRegistry(.. 
32e20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52             MockR
32e30 65 67 69 73 74 72 79 20 72 65 67 69 73 74 72 79  egistry registry
32e40 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 46  ,..            F
32e50 72 61 6d 65 77 6f 72 6b 4c 69 73 74 20 66 72 61  rameworkList fra
32e60 6d 65 77 6f 72 6b 4c 69 73 74 2c 0d 0a 20 20 20  meworkList,..   
32e70 20 20 20 20 20 20 20 20 20 46 72 61 6d 65 77 6f           Framewo
32e80 72 6b 52 65 67 69 73 74 72 79 43 61 6c 6c 62 61  rkRegistryCallba
32e90 63 6b 20 63 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20  ck callback,..  
32ea0 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
32eb0 20 76 65 72 73 69 6f 6e 2c 20 2f 2a 20 4e 4f 54   version, /* NOT
32ec0 45 3a 20 4f 70 74 69 6f 6e 61 6c 2e 20 2a 2f 0d  E: Optional. */.
32ed0 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a  .            obj
32ee0 65 63 74 20 63 6c 69 65 6e 74 44 61 74 61 2c 0d  ect clientData,.
32ef0 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
32f00 6c 20 70 65 72 55 73 65 72 2c 0d 0a 20 20 20 20  l perUser,..    
32f10 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77          bool wow
32f20 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  64,..           
32f30 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73   bool throwOnMis
32f40 73 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20 20  sing,..         
32f50 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d     bool whatIf,.
32f60 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
32f70 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20  l verbose,..    
32f80 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69          ref stri
32f90 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20  ng error..      
32fa0 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
32fb0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
32fc0 69 66 20 28 72 65 67 69 73 74 72 79 20 3d 3d 20  if (registry == 
32fd0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
32fe0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
32ff0 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69        error = "i
33000 6e 76 61 6c 69 64 20 72 65 67 69 73 74 72 79 22  nvalid registry"
33010 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
33020 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
33030 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
33040 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
33050 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74  f (frameworkList
33060 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
33070 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
33080 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
33090 3d 20 22 69 6e 76 61 6c 69 64 20 66 72 61 6d 65  = "invalid frame
330a0 77 6f 72 6b 20 6c 69 73 74 22 3b 0d 0a 20 20 20  work list";..   
330b0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
330c0 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
330d0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
330e0 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67           MockReg
330f0 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79  istryKey rootKey
33100 20 3d 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74   = frameworkList
33110 2e 52 6f 6f 74 4b 65 79 3b 0d 0a 0d 0a 20 20 20  .RootKey;....   
33120 20 20 20 20 20 20 20 20 20 69 66 20 28 72 6f 6f           if (roo
33130 74 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  tKey == null).. 
33140 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
33150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
33160 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 72  ror = "invalid r
33170 6f 6f 74 20 6b 65 79 22 3b 0d 0a 20 20 20 20 20  oot key";..     
33180 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
33190 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
331a0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
331b0 20 20 20 20 20 20 20 69 66 20 28 21 49 73 53 75         if (!IsSu
331c0 70 70 6f 72 74 65 64 52 6f 6f 74 4b 65 79 28 72  pportedRootKey(r
331d0 65 67 69 73 74 72 79 2c 20 72 6f 6f 74 4b 65 79  egistry, rootKey
331e0 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
331f0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
33200 20 20 20 65 72 72 6f 72 20 3d 20 22 72 6f 6f 74     error = "root
33210 20 6b 65 79 20 6d 75 73 74 20 62 65 20 70 65 72   key must be per
33220 2d 75 73 65 72 20 6f 72 20 70 65 72 2d 6d 61 63  -user or per-mac
33230 68 69 6e 65 22 3b 0d 0a 20 20 20 20 20 20 20 20  hine";..        
33240 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
33250 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
33260 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
33270 20 20 20 20 69 66 20 28 66 72 61 6d 65 77 6f 72      if (framewor
33280 6b 4c 69 73 74 2e 4e 61 6d 65 73 20 3d 3d 20 6e  kList.Names == n
33290 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
332a0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
332b0 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 6e 6f       error = "no
332c0 20 66 72 61 6d 65 77 6f 72 6b 20 6e 61 6d 65 73   framework names
332d0 20 66 6f 75 6e 64 22 3b 0d 0a 20 20 20 20 20 20   found";..      
332e0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
332f0 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
33300 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
33310 20 20 20 20 20 20 69 66 20 28 66 72 61 6d 65 77        if (framew
33320 6f 72 6b 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73  orkList.Versions
33330 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
33340 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
33350 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
33360 3d 20 22 6e 6f 20 66 72 61 6d 65 77 6f 72 6b 20  = "no framework 
33370 76 65 72 73 69 6f 6e 73 20 66 6f 75 6e 64 22 3b  versions found";
33380 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
33390 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
333a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
333b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
333c0 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e   (frameworkList.
333d0 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 20 3d 3d  PlatformNames ==
333e0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
333f0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
33400 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22         error = "
33410 6e 6f 20 70 6c 61 74 66 6f 72 6d 20 6e 61 6d 65  no platform name
33420 73 20 66 6f 75 6e 64 22 3b 0d 0a 20 20 20 20 20  s found";..     
33430 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
33440 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
33450 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
33460 20 20 20 20 20 20 20 69 66 20 28 66 72 61 6d 65         if (frame
33470 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 2e 43  workList.Names.C
33480 6f 75 6e 74 20 21 3d 20 66 72 61 6d 65 77 6f 72  ount != framewor
33490 6b 4c 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61  kList.PlatformNa
334a0 6d 65 73 2e 43 6f 75 6e 74 29 0d 0a 20 20 20 20  mes.Count)..    
334b0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
334c0 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
334d0 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74   = String.Format
334e0 28 22 66 72 61 6d 65 77 6f 72 6b 20 6e 61 6d 65  ("framework name
334f0 20 63 6f 75 6e 74 20 7b 30 7d 20 64 6f 65 73 20   count {0} does 
33500 6e 6f 74 20 22 20 2b 0d 0a 20 20 20 20 20 20 20  not " +..       
33510 20 20 20 20 20 20 20 20 20 20 20 20 20 22 6d 61               "ma
33520 74 63 68 20 70 6c 61 74 66 6f 72 6d 20 6e 61 6d  tch platform nam
33530 65 20 63 6f 75 6e 74 20 7b 31 7d 22 2c 20 66 72  e count {1}", fr
33540 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65  ameworkList.Name
33550 73 2e 43 6f 75 6e 74 2c 0d 0a 20 20 20 20 20 20  s.Count,..      
33560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72                fr
33570 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61 74  ameworkList.Plat
33580 66 6f 72 6d 4e 61 6d 65 73 2e 43 6f 75 6e 74 29  formNames.Count)
33590 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
335a0 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
335b0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
335c0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
335d0 20 66 6f 72 20 28 69 6e 74 20 69 6e 64 65 78 20   for (int index 
335e0 3d 20 30 3b 20 69 6e 64 65 78 20 3c 20 66 72 61  = 0; index < fra
335f0 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73  meworkList.Names
33600 2e 43 6f 75 6e 74 3b 20 69 6e 64 65 78 2b 2b 29  .Count; index++)
33610 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
33620 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
33630 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
33640 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 47 72       // NOTE: Gr
33650 61 62 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74  ab the name of t
33660 68 65 20 66 72 61 6d 65 77 6f 72 6b 20 28 65 2e  he framework (e.
33670 67 2e 20 22 2e 4e 45 54 46 72 61 6d 65 77 6f 72  g. ".NETFramewor
33680 6b 22 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  k")..           
33690 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 61 6e       //       an
336a0 64 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68  d the name of th
336b0 65 20 70 6c 61 74 66 6f 72 6d 20 28 65 2e 67 2e  e platform (e.g.
336c0 20 22 57 69 6e 64 6f 77 73 43 45 22 29 2e 0d 0a   "WindowsCE")...
336d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
336e0 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
336f0 20 20 20 20 73 74 72 69 6e 67 20 66 72 61 6d 65      string frame
33700 77 6f 72 6b 4e 61 6d 65 20 3d 20 66 72 61 6d 65  workName = frame
33710 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 5b 69  workList.Names[i
33720 6e 64 65 78 5d 3b 0d 0a 20 20 20 20 20 20 20 20  ndex];..        
33730 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 70          string p
33740 6c 61 74 66 6f 72 6d 4e 61 6d 65 20 3d 20 66 72  latformName = fr
33750 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61 74  ameworkList.Plat
33760 66 6f 72 6d 4e 61 6d 65 73 5b 69 6e 64 65 78 5d  formNames[index]
33770 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
33780 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
33790 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
337a0 3a 20 47 72 61 62 20 74 68 65 20 73 75 70 70 6f  : Grab the suppo
337b0 72 74 65 64 20 76 65 72 73 69 6f 6e 73 20 6f 66  rted versions of
337c0 20 74 68 69 73 20 70 61 72 74 69 63 75 6c 61 72   this particular
337d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
337e0 20 20 2f 2f 20 20 20 20 20 20 20 66 72 61 6d 65    //       frame
337f0 77 6f 72 6b 2e 0d 0a 20 20 20 20 20 20 20 20 20  work...         
33800 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
33810 20 20 20 20 20 20 20 20 20 20 20 56 65 72 73 69             Versi
33820 6f 6e 4c 69 73 74 20 66 72 61 6d 65 77 6f 72 6b  onList framework
33830 56 65 72 73 69 6f 6e 4c 69 73 74 3b 0d 0a 0d 0a  VersionList;....
33840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33850 69 66 20 28 76 65 72 73 69 6f 6e 20 21 3d 20 6e  if (version != n
33860 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
33870 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
33880 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
33890 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
338a0 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 4d 61       // NOTE: Ma
338b0 6e 75 61 6c 20 6f 76 65 72 72 69 64 65 20 6f 66  nual override of
338c0 20 74 68 65 20 2a 4f 4e 45 2a 20 66 72 61 6d 65   the *ONE* frame
338d0 77 6f 72 6b 20 76 65 72 73 69 6f 6e 0d 0a 20 20  work version..  
338e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
338f0 20 20 2f 2f 20 20 20 20 20 20 20 74 6f 20 70 72    //       to pr
33900 6f 63 65 73 73 2e 0d 0a 20 20 20 20 20 20 20 20  ocess...        
33910 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
33920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33930 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 56 65 72      frameworkVer
33940 73 69 6f 6e 4c 69 73 74 20 3d 20 6e 65 77 20 56  sionList = new V
33950 65 72 73 69 6f 6e 4c 69 73 74 28 29 3b 0d 0a 20  ersionList();.. 
33960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33970 20 20 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73     frameworkVers
33980 69 6f 6e 4c 69 73 74 2e 41 64 64 28 6e 65 77 20  ionList.Add(new 
33990 56 65 72 73 69 6f 6e 28 76 65 72 73 69 6f 6e 29  Version(version)
339a0 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
339b0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
339c0 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20         else..   
339d0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
339e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
339f0 20 20 20 20 69 66 20 28 21 66 72 61 6d 65 77 6f      if (!framewo
33a00 72 6b 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 2e  rkList.Versions.
33a10 54 72 79 47 65 74 56 61 6c 75 65 28 0d 0a 20 20  TryGetValue(..  
33a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33a30 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 77            framew
33a40 6f 72 6b 4e 61 6d 65 2c 20 6f 75 74 20 66 72 61  orkName, out fra
33a50 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 4c 69 73  meworkVersionLis
33a60 74 29 20 7c 7c 0d 0a 20 20 20 20 20 20 20 20 20  t) ||..         
33a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28                 (
33a80 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e  frameworkVersion
33a90 4c 69 73 74 20 3d 3d 20 6e 75 6c 6c 29 29 0d 0a  List == null))..
33aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33ab0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
33ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
33ad0 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20  ontinue;..      
33ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
33af0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
33b00 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
33b10 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 28 56        foreach (V
33b20 65 72 73 69 6f 6e 20 66 72 61 6d 65 77 6f 72 6b  ersion framework
33b30 56 65 72 73 69 6f 6e 20 69 6e 20 66 72 61 6d 65  Version in frame
33b40 77 6f 72 6b 56 65 72 73 69 6f 6e 4c 69 73 74 29  workVersionList)
33b50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
33b60 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
33b70 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70           TraceOp
33b80 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
33b90 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f  TracePriority.Lo
33ba0 77 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  wer,..          
33bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
33bc0 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61  bugCallback, tra
33bd0 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69  ceCallback, Stri
33be0 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
33bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33c00 20 20 20 20 22 66 72 61 6d 65 77 6f 72 6b 4e 61      "frameworkNa
33c10 6d 65 20 3d 20 7b 30 7d 2c 20 66 72 61 6d 65 77  me = {0}, framew
33c20 6f 72 6b 56 65 72 73 69 6f 6e 20 3d 20 7b 31 7d  orkVersion = {1}
33c30 2c 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20  , " +..         
33c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
33c50 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 20 3d 20 7b  platformName = {
33c60 32 7d 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  2}", ForDisplay(
33c70 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 29 2c 0d  frameworkName),.
33c80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
33c90 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
33ca0 6c 61 79 28 66 72 61 6d 65 77 6f 72 6b 56 65 72  lay(frameworkVer
33cb0 73 69 6f 6e 29 2c 0d 0a 20 20 20 20 20 20 20 20  sion),..        
33cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33cd0 46 6f 72 44 69 73 70 6c 61 79 28 70 6c 61 74 66  ForDisplay(platf
33ce0 6f 72 6d 4e 61 6d 65 29 29 2c 20 74 72 61 63 65  ormName)), trace
33cf0 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
33d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33d10 20 20 69 66 20 28 21 48 61 76 65 46 72 61 6d 65    if (!HaveFrame
33d20 77 6f 72 6b 52 65 67 69 73 74 72 79 28 0d 0a 20  workRegistry(.. 
33d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33d40 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b             rootK
33d50 65 79 2c 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d  ey, frameworkNam
33d60 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73  e, frameworkVers
33d70 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ion,..          
33d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33d90 20 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 20    platformName, 
33da0 70 65 72 55 73 65 72 2c 20 77 6f 77 36 34 2c 20  perUser, wow64, 
33db0 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29  whatIf, verbose)
33dc0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
33dd0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
33de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33df0 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67    TraceOps.Debug
33e00 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72  AndTrace(TracePr
33e10 69 6f 72 69 74 79 2e 4c 6f 77 2c 0d 0a 20 20 20  iority.Low,..   
33e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33e30 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61           debugCa
33e40 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c  llback, traceCal
33e50 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
33e60 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
33e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33e80 20 20 20 22 2e 4e 45 54 20 46 72 61 6d 65 77 6f     ".NET Framewo
33e90 72 6b 20 7b 30 7d 20 72 65 67 69 73 74 72 79 20  rk {0} registry 
33ea0 6e 6f 74 20 66 6f 75 6e 64 2c 20 22 20 2b 0d 0a  not found, " +..
33eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33ec0 20 20 20 20 20 20 20 20 20 20 20 20 22 73 6b 69              "ski
33ed0 70 70 69 6e 67 2e 2e 2e 22 2c 20 46 6f 72 44 69  pping...", ForDi
33ee0 73 70 6c 61 79 28 66 72 61 6d 65 77 6f 72 6b 56  splay(frameworkV
33ef0 65 72 73 69 6f 6e 29 29 2c 0d 0a 20 20 20 20 20  ersion)),..     
33f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33f10 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
33f20 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
33f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33f40 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20    continue;..   
33f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33f60 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
33f70 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63 61            if (ca
33f80 6c 6c 62 61 63 6b 20 3d 3d 20 6e 75 6c 6c 29 0d  llback == null).
33f90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
33fa0 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75           continu
33fb0 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
33fc0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 63            if (!c
33fd0 61 6c 6c 62 61 63 6b 28 0d 0a 20 20 20 20 20 20  allback(..      
33fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33ff0 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 66        rootKey, f
34000 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20 66 72  rameworkName, fr
34010 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d  ameworkVersion,.
34020 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
34030 20 20 20 20 20 20 20 20 20 20 20 20 20 70 6c 61               pla
34040 74 66 6f 72 6d 4e 61 6d 65 2c 20 6e 75 6c 6c 2c  tformName, null,
34050 20 63 6c 69 65 6e 74 44 61 74 61 2c 20 70 65 72   clientData, per
34060 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20  User,..         
34070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34080 20 20 20 77 6f 77 36 34 2c 20 74 68 72 6f 77 4f     wow64, throwO
34090 6e 4d 69 73 73 69 6e 67 2c 20 77 68 61 74 49 66  nMissing, whatIf
340a0 2c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20  , verbose,..    
340b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
340c0 20 20 20 20 20 20 20 20 72 65 66 20 65 72 72 6f          ref erro
340d0 72 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  r))..           
340e0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
340f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34100 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
34110 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
34120 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
34130 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
34140 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
34150 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
34160 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
34170 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  }..        #endr
34180 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
34190 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
341a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
341b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
341c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
341d0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
341e0 20 20 20 20 23 72 65 67 69 6f 6e 20 50 65 72 2d      #region Per-
341f0 56 69 73 75 61 6c 20 53 74 75 64 69 6f 20 56 65  Visual Studio Ve
34200 72 73 69 6f 6e 20 48 61 6e 64 6c 69 6e 67 0d 0a  rsion Handling..
34210 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
34220 73 74 61 74 69 63 20 76 6f 69 64 20 49 6e 69 74  static void Init
34230 69 61 6c 69 7a 65 56 73 4c 69 73 74 28 0d 0a 20  ializeVsList(.. 
34240 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52             MockR
34250 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b  egistryKey rootK
34260 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey,..           
34270 20 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 63   Configuration c
34280 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2c 0d 0a 20  onfiguration,.. 
34290 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 56             ref V
342a0 73 4c 69 73 74 20 76 73 4c 69 73 74 0d 0a 20 20  sList vsList..  
342b0 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
342c0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
342d0 20 20 20 20 69 66 20 28 76 73 4c 69 73 74 20 3d      if (vsList =
342e0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
342f0 20 20 20 20 20 20 20 20 20 76 73 4c 69 73 74 20           vsList 
34300 3d 20 6e 65 77 20 56 73 4c 69 73 74 28 29 3b 0d  = new VsList();.
34310 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
34320 66 20 28 76 73 4c 69 73 74 2e 52 6f 6f 74 4b 65  f (vsList.RootKe
34330 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y == null)..    
34340 20 20 20 20 20 20 20 20 20 20 20 20 76 73 4c 69              vsLi
34350 73 74 2e 52 6f 6f 74 4b 65 79 20 3d 20 72 6f 6f  st.RootKey = roo
34360 74 4b 65 79 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  tKey;....       
34370 20 20 20 20 20 69 66 20 28 76 73 4c 69 73 74 2e       if (vsList.
34380 56 65 72 73 69 6f 6e 73 20 3d 3d 20 6e 75 6c 6c  Versions == null
34390 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
343a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
343b0 20 20 76 73 4c 69 73 74 2e 56 65 72 73 69 6f 6e    vsList.Version
343c0 73 20 3d 20 6e 65 77 20 56 65 72 73 69 6f 6e 4c  s = new VersionL
343d0 69 73 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ist();....      
343e0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28 63            if ((c
343f0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20  onfiguration == 
34400 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67  null) || !config
34410 75 72 61 74 69 6f 6e 2e 4e 6f 56 73 32 30 30 35  uration.NoVs2005
34420 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
34430 20 20 20 20 20 20 20 76 73 4c 69 73 74 2e 56 65         vsList.Ve
34440 72 73 69 6f 6e 73 2e 41 64 64 28 6e 65 77 20 56  rsions.Add(new V
34450 65 72 73 69 6f 6e 28 38 2c 20 30 29 29 3b 20 2f  ersion(8, 0)); /
34460 2f 20 32 30 30 35 0d 0a 0d 0a 20 20 20 20 20 20  / 2005....      
34470 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28 63            if ((c
34480 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20  onfiguration == 
34490 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67  null) || !config
344a0 75 72 61 74 69 6f 6e 2e 4e 6f 56 73 32 30 30 38  uration.NoVs2008
344b0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
344c0 20 20 20 20 20 20 20 76 73 4c 69 73 74 2e 56 65         vsList.Ve
344d0 72 73 69 6f 6e 73 2e 41 64 64 28 6e 65 77 20 56  rsions.Add(new V
344e0 65 72 73 69 6f 6e 28 39 2c 20 30 29 29 3b 20 2f  ersion(9, 0)); /
344f0 2f 20 32 30 30 38 0d 0a 0d 0a 20 20 20 20 20 20  / 2008....      
34500 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28 63            if ((c
34510 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20  onfiguration == 
34520 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67  null) || !config
34530 75 72 61 74 69 6f 6e 2e 4e 6f 56 73 32 30 31 30  uration.NoVs2010
34540 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
34550 20 20 20 20 20 20 20 76 73 4c 69 73 74 2e 56 65         vsList.Ve
34560 72 73 69 6f 6e 73 2e 41 64 64 28 6e 65 77 20 56  rsions.Add(new V
34570 65 72 73 69 6f 6e 28 31 30 2c 20 30 29 29 3b 2f  ersion(10, 0));/
34580 2f 20 32 30 31 30 0d 0a 0d 0a 20 20 20 20 20 20  / 2010....      
34590 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28 63            if ((c
345a0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20  onfiguration == 
345b0 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67  null) || !config
345c0 75 72 61 74 69 6f 6e 2e 4e 6f 56 73 32 30 31 32  uration.NoVs2012
345d0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
345e0 20 20 20 20 20 20 20 76 73 4c 69 73 74 2e 56 65         vsList.Ve
345f0 72 73 69 6f 6e 73 2e 41 64 64 28 6e 65 77 20 56  rsions.Add(new V
34600 65 72 73 69 6f 6e 28 31 31 2c 20 30 29 29 3b 2f  ersion(11, 0));/
34610 2f 20 32 30 31 32 0d 0a 0d 0a 20 20 20 20 20 20  / 2012....      
34620 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28 63            if ((c
34630 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20  onfiguration == 
34640 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67  null) || !config
34650 75 72 61 74 69 6f 6e 2e 4e 6f 56 73 32 30 31 33  uration.NoVs2013
34660 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
34670 20 20 20 20 20 20 20 76 73 4c 69 73 74 2e 56 65         vsList.Ve
34680 72 73 69 6f 6e 73 2e 41 64 64 28 6e 65 77 20 56  rsions.Add(new V
34690 65 72 73 69 6f 6e 28 31 32 2c 20 30 29 29 3b 2f  ersion(12, 0));/
346a0 2f 20 32 30 31 33 0d 0a 0d 0a 20 20 20 20 20 20  / 2013....      
346b0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28 63            if ((c
346c0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20  onfiguration == 
346d0 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67  null) || !config
346e0 75 72 61 74 69 6f 6e 2e 4e 6f 56 73 32 30 31 35  uration.NoVs2015
346f0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
34700 20 20 20 20 20 20 20 76 73 4c 69 73 74 2e 56 65         vsList.Ve
34710 72 73 69 6f 6e 73 2e 41 64 64 28 6e 65 77 20 56  rsions.Add(new V
34720 65 72 73 69 6f 6e 28 31 34 2c 20 30 29 29 3b 2f  ersion(14, 0));/
34730 2f 20 32 30 31 35 0d 0a 20 20 20 20 20 20 20 20  / 2015..        
34740 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
34750 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
34760 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34770 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34780 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34790 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
347a0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
347b0 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f  rivate static bo
347c0 6f 6c 20 48 61 76 65 56 73 56 65 72 73 69 6f 6e  ol HaveVsVersion
347d0 44 69 72 65 63 74 6f 72 79 28 0d 0a 20 20 20 20  Directory(..    
347e0 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69          MockRegi
347f0 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c  stryKey rootKey,
34800 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 56 65  ..            Ve
34810 72 73 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e 2c  rsion vsVersion,
34820 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
34830 72 69 6e 67 20 73 75 66 66 69 78 2c 0d 0a 20 20  ring suffix,..  
34840 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 70            bool p
34850 65 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 20  erUser,..       
34860 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c       bool wow64,
34870 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
34880 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20  ol whatIf,..    
34890 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72          bool ver
348a0 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  bose,..         
348b0 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 69 6e     ref string in
348c0 73 74 61 6c 6c 44 69 72 65 63 74 6f 72 79 0d 0a  stallDirectory..
348d0 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
348e0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
348f0 20 20 20 20 20 20 69 66 20 28 76 73 56 65 72 73        if (vsVers
34900 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ion == null)..  
34910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
34920 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20  turn false;.... 
34930 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
34940 67 20 6b 65 79 4e 61 6d 65 20 3d 20 47 65 74 56  g keyName = GetV
34950 73 4b 65 79 4e 61 6d 65 28 76 73 56 65 72 73 69  sKeyName(vsVersi
34960 6f 6e 2c 20 73 75 66 66 69 78 2c 20 70 65 72 55  on, suffix, perU
34970 73 65 72 2c 20 77 6f 77 36 34 29 3b 0d 0a 0d 0a  ser, wow64);....
34980 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e              usin
34990 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  g (MockRegistryK
349a0 65 79 20 6b 65 79 20 3d 20 52 65 67 69 73 74 72  ey key = Registr
349b0 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b  yHelper.OpenSubK
349c0 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey(..           
349d0 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79           rootKey
349e0 2c 20 6b 65 79 4e 61 6d 65 2c 20 66 61 6c 73 65  , keyName, false
349f0 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73  , whatIf, verbos
34a00 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
34a10 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
34a20 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e      if (key == n
34a30 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
34a40 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
34a50 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20   false;....     
34a60 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63             objec
34a70 74 20 76 61 6c 75 65 20 3d 20 52 65 67 69 73 74  t value = Regist
34a80 72 79 48 65 6c 70 65 72 2e 47 65 74 56 61 6c 75  ryHelper.GetValu
34a90 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
34aa0 20 20 20 20 20 20 20 20 6b 65 79 2c 20 22 49 6e          key, "In
34ab0 73 74 61 6c 6c 44 69 72 22 2c 20 6e 75 6c 6c 2c  stallDir", null,
34ac0 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
34ad0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
34ae0 20 20 20 20 20 20 69 66 20 28 21 28 76 61 6c 75        if (!(valu
34af0 65 20 69 73 20 73 74 72 69 6e 67 29 29 0d 0a 20  e is string)).. 
34b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34b10 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
34b20 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
34b30 20 20 20 20 73 74 72 69 6e 67 20 64 69 72 65 63      string direc
34b40 74 6f 72 79 20 3d 20 28 73 74 72 69 6e 67 29 76  tory = (string)v
34b50 61 6c 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  alue;....       
34b60 20 20 20 20 20 20 20 20 20 69 66 20 28 53 74 72           if (Str
34b70 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74  ing.IsNullOrEmpt
34b80 79 28 64 69 72 65 63 74 6f 72 79 29 29 0d 0a 20  y(directory)).. 
34b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34ba0 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
34bb0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
34bc0 20 20 20 20 69 66 20 28 21 44 69 72 65 63 74 6f      if (!Directo
34bd0 72 79 2e 45 78 69 73 74 73 28 64 69 72 65 63 74  ry.Exists(direct
34be0 6f 72 79 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ory))..         
34bf0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
34c00 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20  n false;....    
34c10 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
34c20 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
34c30 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79  ce(TracePriority
34c40 2e 4c 6f 77 65 72 2c 0d 0a 20 20 20 20 20 20 20  .Lower,..       
34c50 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62               deb
34c60 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63  ugCallback, trac
34c70 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
34c80 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
34c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
34ca0 56 69 73 75 61 6c 20 53 74 75 64 69 6f 20 7b 30  Visual Studio {0
34cb0 7d 20 66 6f 75 6e 64 20 69 6e 20 64 69 72 65 63  } found in direc
34cc0 74 6f 72 79 20 7b 31 7d 2e 22 2c 0d 0a 20 20 20  tory {1}.",..   
34cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34ce0 20 46 6f 72 44 69 73 70 6c 61 79 28 76 73 56 65   ForDisplay(vsVe
34cf0 72 73 69 6f 6e 29 2c 20 46 6f 72 44 69 73 70 6c  rsion), ForDispl
34d00 61 79 28 64 69 72 65 63 74 6f 72 79 29 29 2c 0d  ay(directory)),.
34d10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
34d20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
34d30 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
34d40 20 20 20 20 20 20 20 20 69 6e 73 74 61 6c 6c 44          installD
34d50 69 72 65 63 74 6f 72 79 20 3d 20 64 69 72 65 63  irectory = direc
34d60 74 6f 72 79 3b 0d 0a 20 20 20 20 20 20 20 20 20  tory;..         
34d70 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72         return tr
34d80 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
34d90 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d   }..        }...
34da0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
34db0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34dc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34dd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34de0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34df0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 5b 4d 65 74  ....        [Met
34e00 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d  hodImpl(MethodIm
34e10 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69  plOptions.NoInli
34e20 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20  ning)]..        
34e30 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62  private static b
34e40 6f 6f 6c 20 46 6f 72 45 61 63 68 56 73 56 65 72  ool ForEachVsVer
34e50 73 69 6f 6e 52 65 67 69 73 74 72 79 28 0d 0a 20  sionRegistry(.. 
34e60 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52             MockR
34e70 65 67 69 73 74 72 79 20 72 65 67 69 73 74 72 79  egistry registry
34e80 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 56  ,..            V
34e90 73 4c 69 73 74 20 76 73 4c 69 73 74 2c 0d 0a 20  sList vsList,.. 
34ea0 20 20 20 20 20 20 20 20 20 20 20 56 69 73 75 61             Visua
34eb0 6c 53 74 75 64 69 6f 52 65 67 69 73 74 72 79 43  lStudioRegistryC
34ec0 61 6c 6c 62 61 63 6b 20 63 61 6c 6c 62 61 63 6b  allback callback
34ed0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ,..            s
34ee0 74 72 69 6e 67 20 73 75 66 66 69 78 2c 0d 0a 20  tring suffix,.. 
34ef0 20 20 20 20 20 20 20 20 20 20 20 50 61 63 6b 61             Packa
34f00 67 65 20 70 61 63 6b 61 67 65 2c 0d 0a 20 20 20  ge package,..   
34f10 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20           object 
34f20 63 6c 69 65 6e 74 44 61 74 61 2c 0d 0a 20 20 20  clientData,..   
34f30 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 70 65           bool pe
34f40 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 20 20  rUser,..        
34f50 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d      bool wow64,.
34f60 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
34f70 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67  l throwOnMissing
34f80 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
34f90 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20  ool whatIf,..   
34fa0 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65           bool ve
34fb0 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20  rbose,..        
34fc0 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 65      ref string e
34fd0 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20  rror..          
34fe0 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
34ff0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
35000 72 65 67 69 73 74 72 79 20 3d 3d 20 6e 75 6c 6c  registry == null
35010 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
35020 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
35030 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c    error = "inval
35040 69 64 20 72 65 67 69 73 74 72 79 22 3b 0d 0a 20  id registry";.. 
35050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
35060 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
35070 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
35080 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76             if (v
35090 73 4c 69 73 74 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  sList == null)..
350a0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
350b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
350c0 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20  rror = "invalid 
350d0 56 53 20 6c 69 73 74 22 3b 0d 0a 20 20 20 20 20  VS list";..     
350e0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
350f0 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
35100 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
35110 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73         MockRegis
35120 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 20 3d  tryKey rootKey =
35130 20 76 73 4c 69 73 74 2e 52 6f 6f 74 4b 65 79 3b   vsList.RootKey;
35140 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
35150 69 66 20 28 72 6f 6f 74 4b 65 79 20 3d 3d 20 6e  if (rootKey == n
35160 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
35170 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
35180 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e       error = "in
35190 76 61 6c 69 64 20 72 6f 6f 74 20 6b 65 79 22 3b  valid root key";
351a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
351b0 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
351c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
351d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
351e0 20 28 21 49 73 53 75 70 70 6f 72 74 65 64 52 6f   (!IsSupportedRo
351f0 6f 74 4b 65 79 28 72 65 67 69 73 74 72 79 2c 20  otKey(registry, 
35200 72 6f 6f 74 4b 65 79 29 29 0d 0a 20 20 20 20 20  rootKey))..     
35210 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
35220 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
35230 3d 20 22 72 6f 6f 74 20 6b 65 79 20 6d 75 73 74  = "root key must
35240 20 62 65 20 70 65 72 2d 75 73 65 72 20 6f 72 20   be per-user or 
35250 70 65 72 2d 6d 61 63 68 69 6e 65 22 3b 0d 0a 20  per-machine";.. 
35260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
35270 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
35280 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
35290 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76             if (v
352a0 73 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 20 3d  sList.Versions =
352b0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
352c0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
352d0 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
352e0 22 6e 6f 20 56 53 20 76 65 72 73 69 6f 6e 73 20  "no VS versions 
352f0 66 6f 75 6e 64 22 3b 0d 0a 20 20 20 20 20 20 20  found";..       
35300 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
35310 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
35320 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
35330 20 20 20 20 20 66 6f 72 65 61 63 68 20 28 56 65       foreach (Ve
35340 72 73 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e 20  rsion vsVersion 
35350 69 6e 20 76 73 4c 69 73 74 2e 56 65 72 73 69 6f  in vsList.Versio
35360 6e 73 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ns)..           
35370 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
35380 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62      TraceOps.Deb
35390 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65  ugAndTrace(Trace
353a0 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 72 2c 0d  Priority.Lower,.
353b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
353c0 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61       debugCallba
353d0 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63  ck, traceCallbac
353e0 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
353f0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
35400 20 20 20 20 20 20 20 22 76 73 56 65 72 73 69 6f         "vsVersio
35410 6e 20 3d 20 7b 30 7d 22 2c 20 46 6f 72 44 69 73  n = {0}", ForDis
35420 70 6c 61 79 28 76 73 56 65 72 73 69 6f 6e 29 29  play(vsVersion))
35430 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
35440 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
35450 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
35460 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
35470 20 69 6e 73 74 61 6c 6c 44 69 72 65 63 74 6f 72   installDirector
35480 79 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20  y = null;....   
35490 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
354a0 28 21 48 61 76 65 56 73 56 65 72 73 69 6f 6e 44  (!HaveVsVersionD
354b0 69 72 65 63 74 6f 72 79 28 0d 0a 20 20 20 20 20  irectory(..     
354c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
354d0 20 20 20 72 6f 6f 74 4b 65 79 2c 20 76 73 56 65     rootKey, vsVe
354e0 72 73 69 6f 6e 2c 20 73 75 66 66 69 78 2c 20 70  rsion, suffix, p
354f0 65 72 55 73 65 72 2c 20 77 6f 77 36 34 2c 20 77  erUser, wow64, w
35500 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20  hatIf,..        
35510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35520 76 65 72 62 6f 73 65 2c 20 72 65 66 20 69 6e 73  verbose, ref ins
35530 74 61 6c 6c 44 69 72 65 63 74 6f 72 79 29 29 0d  tallDirectory)).
35540 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
35550 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
35560 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
35570 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54  .DebugAndTrace(T
35580 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77  racePriority.Low
35590 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
355a0 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67             debug
355b0 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43  Callback, traceC
355c0 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e  allback, String.
355d0 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
355e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
355f0 20 22 56 69 73 75 61 6c 20 53 74 75 64 69 6f 20   "Visual Studio 
35600 7b 30 7d 20 6e 6f 74 20 66 6f 75 6e 64 2c 20 73  {0} not found, s
35610 6b 69 70 70 69 6e 67 2e 2e 2e 22 2c 0d 0a 20 20  kipping...",..  
35620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35630 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
35640 28 76 73 56 65 72 73 69 6f 6e 29 29 2c 20 74 72  (vsVersion)), tr
35650 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
35660 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
35670 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a       continue;..
35680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35690 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
356a0 20 20 20 20 20 69 66 20 28 63 61 6c 6c 62 61 63       if (callbac
356b0 6b 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  k == null)..    
356c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
356d0 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a 20 20 20  continue;....   
356e0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
356f0 28 21 63 61 6c 6c 62 61 63 6b 28 0d 0a 20 20 20  (!callback(..   
35700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35710 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 76 73       rootKey, vs
35720 56 65 72 73 69 6f 6e 2c 20 73 75 66 66 69 78 2c  Version, suffix,
35730 20 70 61 63 6b 61 67 65 2c 20 69 6e 73 74 61 6c   package, instal
35740 6c 44 69 72 65 63 74 6f 72 79 2c 0d 0a 20 20 20  lDirectory,..   
35750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35760 20 20 20 20 20 63 6c 69 65 6e 74 44 61 74 61 2c       clientData,
35770 20 70 65 72 55 73 65 72 2c 20 77 6f 77 36 34 2c   perUser, wow64,
35780 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c   throwOnMissing,
35790 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20   whatIf,..      
357a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
357b0 20 20 76 65 72 62 6f 73 65 2c 20 72 65 66 20 65    verbose, ref e
357c0 72 72 6f 72 29 29 0d 0a 20 20 20 20 20 20 20 20  rror))..        
357d0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
357e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
357f0 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
35800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
35810 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
35820 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
35830 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20  turn true;..    
35840 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23      }..        #
35850 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
35860 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
35870 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35880 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35890 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
358a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
358b0 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
358c0 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 46 69  Configuration Fi
358d0 6c 65 20 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20  le Handling..   
358e0 20 20 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c       [MethodImpl
358f0 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f  (MethodImplOptio
35900 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d  ns.NoInlining)].
35910 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
35920 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 41 64 64   static bool Add
35930 44 62 50 72 6f 76 69 64 65 72 46 61 63 74 6f 72  DbProviderFactor
35940 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
35950 73 74 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65 2c  string fileName,
35960 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
35970 72 69 6e 67 20 69 6e 76 61 72 69 61 6e 74 4e 61  ring invariantNa
35980 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
35990 20 73 74 72 69 6e 67 20 6e 61 6d 65 2c 0d 0a 20   string name,.. 
359a0 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
359b0 67 20 64 65 73 63 72 69 70 74 69 6f 6e 2c 0d 0a  g description,..
359c0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
359d0 6e 67 20 74 79 70 65 4e 61 6d 65 2c 0d 0a 20 20  ng typeName,..  
359e0 20 20 20 20 20 20 20 20 20 20 41 73 73 65 6d 62            Assemb
359f0 6c 79 4e 61 6d 65 20 61 73 73 65 6d 62 6c 79 4e  lyName assemblyN
35a00 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
35a10 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a    bool whatIf,..
35a20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
35a30 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20   verbose,..     
35a40 20 20 20 20 20 20 20 72 65 66 20 62 6f 6f 6c 20         ref bool 
35a50 73 61 76 65 64 2c 0d 0a 20 20 20 20 20 20 20 20  saved,..        
35a60 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 65      ref string e
35a70 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20  rror..          
35a80 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
35a90 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
35aa0 20 64 69 72 74 79 20 3d 20 66 61 6c 73 65 3b 0d   dirty = false;.
35ab0 0a 20 20 20 20 20 20 20 20 20 20 20 20 58 6d 6c  .            Xml
35ac0 44 6f 63 75 6d 65 6e 74 20 64 6f 63 75 6d 65 6e  Document documen
35ad0 74 20 3d 20 6e 65 77 20 58 6d 6c 44 6f 63 75 6d  t = new XmlDocum
35ae0 65 6e 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ent();....      
35af0 20 20 20 20 20 20 64 6f 63 75 6d 65 6e 74 2e 50        document.P
35b00 72 65 73 65 72 76 65 57 68 69 74 65 73 70 61 63  reserveWhitespac
35b10 65 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  e = true;..     
35b20 20 20 20 20 20 20 20 64 6f 63 75 6d 65 6e 74 2e         document.
35b30 4c 6f 61 64 28 66 69 6c 65 4e 61 6d 65 29 3b 0d  Load(fileName);.
35b40 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 58  ...            X
35b50 6d 6c 45 6c 65 6d 65 6e 74 20 61 64 64 45 6c 65  mlElement addEle
35b60 6d 65 6e 74 20 3d 20 64 6f 63 75 6d 65 6e 74 2e  ment = document.
35b70 53 65 6c 65 63 74 53 69 6e 67 6c 65 4e 6f 64 65  SelectSingleNode
35b80 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
35b90 20 20 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74     String.Format
35ba0 28 58 50 61 74 68 46 6f 72 41 64 64 45 6c 65 6d  (XPathForAddElem
35bb0 65 6e 74 2c 20 69 6e 76 61 72 69 61 6e 74 4e 61  ent, invariantNa
35bc0 6d 65 29 29 20 61 73 20 58 6d 6c 45 6c 65 6d 65  me)) as XmlEleme
35bd0 6e 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  nt;....         
35be0 20 20 20 69 66 20 28 61 64 64 45 6c 65 6d 65 6e     if (addElemen
35bf0 74 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  t == null)..    
35c00 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
35c10 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
35c20 67 5b 5d 20 65 6c 65 6d 65 6e 74 4e 61 6d 65 73  g[] elementNames
35c30 20 3d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20   = {..          
35c40 20 20 20 20 20 20 20 20 20 20 22 73 79 73 74 65            "syste
35c50 6d 2e 64 61 74 61 22 2c 20 22 44 62 50 72 6f 76  m.data", "DbProv
35c60 69 64 65 72 46 61 63 74 6f 72 69 65 73 22 0d 0a  iderFactories"..
35c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35c80 7d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  };....          
35c90 20 20 20 20 20 20 58 6d 6c 45 6c 65 6d 65 6e 74        XmlElement
35ca0 20 70 72 65 76 69 6f 75 73 45 6c 65 6d 65 6e 74   previousElement
35cb0 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   =..            
35cc0 20 20 20 20 20 20 20 20 64 6f 63 75 6d 65 6e 74          document
35cd0 2e 44 6f 63 75 6d 65 6e 74 45 6c 65 6d 65 6e 74  .DocumentElement
35ce0 3b 20 2f 2a 20 63 6f 6e 66 69 67 75 72 61 74 69  ; /* configurati
35cf0 6f 6e 20 2a 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  on */....       
35d00 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68           foreach
35d10 20 28 73 74 72 69 6e 67 20 65 6c 65 6d 65 6e 74   (string element
35d20 4e 61 6d 65 20 69 6e 20 65 6c 65 6d 65 6e 74 4e  Name in elementN
35d30 61 6d 65 73 29 0d 0a 20 20 20 20 20 20 20 20 20  ames)..         
35d40 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
35d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 64                ad
35d60 64 45 6c 65 6d 65 6e 74 20 3d 20 70 72 65 76 69  dElement = previ
35d70 6f 75 73 45 6c 65 6d 65 6e 74 2e 53 65 6c 65 63  ousElement.Selec
35d80 74 53 69 6e 67 6c 65 4e 6f 64 65 28 0d 0a 20 20  tSingleNode(..  
35d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35da0 20 20 20 20 20 20 65 6c 65 6d 65 6e 74 4e 61 6d        elementNam
35db0 65 29 20 61 73 20 58 6d 6c 45 6c 65 6d 65 6e 74  e) as XmlElement
35dc0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
35dd0 20 20 20 20 20 20 20 20 20 69 66 20 28 61 64 64           if (add
35de0 45 6c 65 6d 65 6e 74 20 3d 3d 20 6e 75 6c 6c 29  Element == null)
35df0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
35e00 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
35e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35e20 20 61 64 64 45 6c 65 6d 65 6e 74 20 3d 20 64 6f   addElement = do
35e30 63 75 6d 65 6e 74 2e 43 72 65 61 74 65 45 6c 65  cument.CreateEle
35e40 6d 65 6e 74 28 0d 0a 20 20 20 20 20 20 20 20 20  ment(..         
35e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35e60 20 20 20 65 6c 65 6d 65 6e 74 4e 61 6d 65 2c 20     elementName, 
35e70 53 74 72 69 6e 67 2e 45 6d 70 74 79 29 3b 0d 0a  String.Empty);..
35e80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
35e90 20 20 20 20 20 20 20 20 20 20 70 72 65 76 69 6f            previo
35ea0 75 73 45 6c 65 6d 65 6e 74 2e 41 70 70 65 6e 64  usElement.Append
35eb0 43 68 69 6c 64 28 61 64 64 45 6c 65 6d 65 6e 74  Child(addElement
35ec0 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
35ed0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
35ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35ef0 20 70 72 65 76 69 6f 75 73 45 6c 65 6d 65 6e 74   previousElement
35f00 20 3d 20 61 64 64 45 6c 65 6d 65 6e 74 3b 0d 0a   = addElement;..
35f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35f20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
35f30 20 20 20 20 20 61 64 64 45 6c 65 6d 65 6e 74 20       addElement 
35f40 3d 20 64 6f 63 75 6d 65 6e 74 2e 43 72 65 61 74  = document.Creat
35f50 65 45 6c 65 6d 65 6e 74 28 0d 0a 20 20 20 20 20  eElement(..     
35f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
35f70 61 64 64 22 2c 20 53 74 72 69 6e 67 2e 45 6d 70  add", String.Emp
35f80 74 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ty);....        
35f90 20 20 20 20 20 20 20 20 70 72 65 76 69 6f 75 73          previous
35fa0 45 6c 65 6d 65 6e 74 2e 41 70 70 65 6e 64 43 68  Element.AppendCh
35fb0 69 6c 64 28 61 64 64 45 6c 65 6d 65 6e 74 29 3b  ild(addElement);
35fc0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
35fd0 20 20 20 20 64 69 72 74 79 20 3d 20 74 72 75 65      dirty = true
35fe0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
35ff0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
36000 69 66 20 28 21 53 74 72 69 6e 67 2e 45 71 75 61  if (!String.Equa
36010 6c 73 28 61 64 64 45 6c 65 6d 65 6e 74 2e 47 65  ls(addElement.Ge
36020 74 41 74 74 72 69 62 75 74 65 28 22 6e 61 6d 65  tAttribute("name
36030 22 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  "),..           
36040 20 20 20 20 20 20 20 20 20 6e 61 6d 65 2c 20 53           name, S
36050 74 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e  tringComparison.
36060 4f 72 64 69 6e 61 6c 29 29 0d 0a 20 20 20 20 20  Ordinal))..     
36070 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
36080 20 20 20 20 20 20 20 20 20 20 61 64 64 45 6c 65            addEle
36090 6d 65 6e 74 2e 53 65 74 41 74 74 72 69 62 75 74  ment.SetAttribut
360a0 65 28 22 6e 61 6d 65 22 2c 20 6e 61 6d 65 29 3b  e("name", name);
360b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
360c0 20 20 64 69 72 74 79 20 3d 20 74 72 75 65 3b 0d    dirty = true;.
360d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
360e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
360f0 20 28 21 53 74 72 69 6e 67 2e 45 71 75 61 6c 73   (!String.Equals
36100 28 61 64 64 45 6c 65 6d 65 6e 74 2e 47 65 74 41  (addElement.GetA
36110 74 74 72 69 62 75 74 65 28 22 69 6e 76 61 72 69  ttribute("invari
36120 61 6e 74 22 29 2c 0d 0a 20 20 20 20 20 20 20 20  ant"),..        
36130 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 76 61              inva
36140 72 69 61 6e 74 4e 61 6d 65 2c 20 53 74 72 69 6e  riantName, Strin
36150 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69  gComparison.Ordi
36160 6e 61 6c 29 29 0d 0a 20 20 20 20 20 20 20 20 20  nal))..         
36170 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
36180 20 20 20 20 20 20 61 64 64 45 6c 65 6d 65 6e 74        addElement
36190 2e 53 65 74 41 74 74 72 69 62 75 74 65 28 22 69  .SetAttribute("i
361a0 6e 76 61 72 69 61 6e 74 22 2c 20 69 6e 76 61 72  nvariant", invar
361b0 69 61 6e 74 4e 61 6d 65 29 3b 0d 0a 20 20 20 20  iantName);..    
361c0 20 20 20 20 20 20 20 20 20 20 20 20 64 69 72 74              dirt
361d0 79 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  y = true;..     
361e0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
361f0 20 20 20 20 20 20 20 20 69 66 20 28 21 53 74 72          if (!Str
36200 69 6e 67 2e 45 71 75 61 6c 73 28 61 64 64 45 6c  ing.Equals(addEl
36210 65 6d 65 6e 74 2e 47 65 74 41 74 74 72 69 62 75  ement.GetAttribu
36220 74 65 28 22 64 65 73 63 72 69 70 74 69 6f 6e 22  te("description"
36230 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
36240 20 20 20 20 20 20 20 20 64 65 73 63 72 69 70 74          descript
36250 69 6f 6e 2c 20 53 74 72 69 6e 67 43 6f 6d 70 61  ion, StringCompa
36260 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 29 29 0d  rison.Ordinal)).
36270 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
36280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36290 61 64 64 45 6c 65 6d 65 6e 74 2e 53 65 74 41 74  addElement.SetAt
362a0 74 72 69 62 75 74 65 28 22 64 65 73 63 72 69 70  tribute("descrip
362b0 74 69 6f 6e 22 2c 20 64 65 73 63 72 69 70 74 69  tion", descripti
362c0 6f 6e 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  on);..          
362d0 20 20 20 20 20 20 64 69 72 74 79 20 3d 20 74 72        dirty = tr
362e0 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
362f0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
36300 20 20 73 74 72 69 6e 67 20 66 75 6c 6c 54 79 70    string fullTyp
36310 65 4e 61 6d 65 20 3d 20 53 74 72 69 6e 67 2e 46  eName = String.F
36320 6f 72 6d 61 74 28 22 7b 30 7d 2c 20 7b 31 7d 22  ormat("{0}, {1}"
36330 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
36340 20 20 20 74 79 70 65 4e 61 6d 65 2c 20 61 73 73     typeName, ass
36350 65 6d 62 6c 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20  emblyName);.... 
36360 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
36370 53 74 72 69 6e 67 2e 45 71 75 61 6c 73 28 61 64  String.Equals(ad
36380 64 45 6c 65 6d 65 6e 74 2e 47 65 74 41 74 74 72  dElement.GetAttr
36390 69 62 75 74 65 28 22 74 79 70 65 22 29 2c 0d 0a  ibute("type"),..
363a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
363b0 20 20 20 20 66 75 6c 6c 54 79 70 65 4e 61 6d 65      fullTypeName
363c0 2c 20 53 74 72 69 6e 67 43 6f 6d 70 61 72 69 73  , StringComparis
363d0 6f 6e 2e 4f 72 64 69 6e 61 6c 29 29 0d 0a 20 20  on.Ordinal))..  
363e0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
363f0 20 20 20 20 20 20 20 20 20 20 20 20 20 61 64 64               add
36400 45 6c 65 6d 65 6e 74 2e 53 65 74 41 74 74 72 69  Element.SetAttri
36410 62 75 74 65 28 22 74 79 70 65 22 2c 20 66 75 6c  bute("type", ful
36420 6c 54 79 70 65 4e 61 6d 65 29 3b 0d 0a 20 20 20  lTypeName);..   
36430 20 20 20 20 20 20 20 20 20 20 20 20 20 64 69 72               dir
36440 74 79 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20  ty = true;..    
36450 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
36460 20 20 20 20 20 20 20 20 20 69 66 20 28 64 69 72           if (dir
36470 74 79 20 7c 7c 20 77 68 61 74 49 66 29 0d 0a 20  ty || whatIf).. 
36480 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
36490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
364a0 20 28 76 65 72 62 6f 73 65 29 0d 0a 20 20 20 20   (verbose)..    
364b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
364c0 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
364d0 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f  dTrace(TracePrio
364e0 72 69 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20  rity.Highest,.. 
364f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36500 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c         debugCall
36510 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62  back, traceCallb
36520 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ack, String.Form
36530 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
36540 20 20 20 20 20 20 20 20 20 20 20 20 20 22 61 64               "ad
36550 64 45 6c 65 6d 65 6e 74 20 3d 20 7b 30 7d 22 2c  dElement = {0}",
36560 20 46 6f 72 44 69 73 70 6c 61 79 28 61 64 64 45   ForDisplay(addE
36570 6c 65 6d 65 6e 74 29 29 2c 0d 0a 20 20 20 20 20  lement)),..     
36580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36590 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
365a0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
365b0 20 20 20 20 20 20 69 66 20 28 21 77 68 61 74 49        if (!whatI
365c0 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f)..            
365d0 20 20 20 20 20 20 20 20 64 6f 63 75 6d 65 6e 74          document
365e0 2e 53 61 76 65 28 66 69 6c 65 4e 61 6d 65 29 3b  .Save(fileName);
365f0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
36600 20 20 20 20 66 69 6c 65 73 4d 6f 64 69 66 69 65      filesModifie
36610 64 2b 2b 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  d++;....        
36620 20 20 20 20 20 20 20 20 73 61 76 65 64 20 3d 20          saved = 
36630 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  true;..         
36640 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
36650 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b      return true;
36660 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
36670 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
36680 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36690 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
366a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
366b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
366c0 0d 0a 20 20 20 20 20 20 20 20 5b 4d 65 74 68 6f  ..        [Metho
366d0 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c  dImpl(MethodImpl
366e0 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69  Options.NoInlini
366f0 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20 70 72  ng)]..        pr
36700 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f  ivate static boo
36710 6c 20 52 65 6d 6f 76 65 44 62 50 72 6f 76 69 64  l RemoveDbProvid
36720 65 72 46 61 63 74 6f 72 79 28 0d 0a 20 20 20 20  erFactory(..    
36730 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 66          string f
36740 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  ileName,..      
36750 20 20 20 20 20 20 73 74 72 69 6e 67 20 69 6e 76        string inv
36760 61 72 69 61 6e 74 4e 61 6d 65 2c 0d 0a 20 20 20  ariantName,..   
36770 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68           bool wh
36780 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20  atIf,..         
36790 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c     bool verbose,
367a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
367b0 66 20 62 6f 6f 6c 20 73 61 76 65 64 2c 0d 0a 20  f bool saved,.. 
367c0 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73             ref s
367d0 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20  tring error..   
367e0 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
367f0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
36800 20 20 20 62 6f 6f 6c 20 64 69 72 74 79 20 3d 20     bool dirty = 
36810 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
36820 20 20 20 20 58 6d 6c 44 6f 63 75 6d 65 6e 74 20      XmlDocument 
36830 64 6f 63 75 6d 65 6e 74 20 3d 20 6e 65 77 20 58  document = new X
36840 6d 6c 44 6f 63 75 6d 65 6e 74 28 29 3b 0d 0a 0d  mlDocument();...
36850 0a 20 20 20 20 20 20 20 20 20 20 20 20 64 6f 63  .            doc
36860 75 6d 65 6e 74 2e 50 72 65 73 65 72 76 65 57 68  ument.PreserveWh
36870 69 74 65 73 70 61 63 65 20 3d 20 74 72 75 65 3b  itespace = true;
36880 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 64 6f  ..            do
36890 63 75 6d 65 6e 74 2e 4c 6f 61 64 28 66 69 6c 65  cument.Load(file
368a0 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Name);....      
368b0 20 20 20 20 20 20 58 6d 6c 45 6c 65 6d 65 6e 74        XmlElement
368c0 20 61 64 64 45 6c 65 6d 65 6e 74 20 3d 20 64 6f   addElement = do
368d0 63 75 6d 65 6e 74 2e 53 65 6c 65 63 74 53 69 6e  cument.SelectSin
368e0 67 6c 65 4e 6f 64 65 28 0d 0a 20 20 20 20 20 20  gleNode(..      
368f0 20 20 20 20 20 20 20 20 20 20 53 74 72 69 6e 67            String
36900 2e 46 6f 72 6d 61 74 28 58 50 61 74 68 46 6f 72  .Format(XPathFor
36910 41 64 64 45 6c 65 6d 65 6e 74 2c 20 69 6e 76 61  AddElement, inva
36920 72 69 61 6e 74 4e 61 6d 65 29 29 20 61 73 20 58  riantName)) as X
36930 6d 6c 45 6c 65 6d 65 6e 74 3b 0d 0a 0d 0a 20 20  mlElement;....  
36940 20 20 20 20 20 20 20 20 20 20 69 66 20 28 61 64            if (ad
36950 64 45 6c 65 6d 65 6e 74 20 21 3d 20 6e 75 6c 6c  dElement != 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 61 64 64 45 6c 65 6d 65 6e 74 2e 50 61 72    addElement.Par
36990 65 6e 74 4e 6f 64 65 2e 52 65 6d 6f 76 65 43 68  entNode.RemoveCh
369a0 69 6c 64 28 61 64 64 45 6c 65 6d 65 6e 74 29 3b  ild(addElement);
369b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
369c0 20 20 64 69 72 74 79 20 3d 20 74 72 75 65 3b 0d    dirty = true;.
369d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
369e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 58 6d  ..            Xm
369f0 6c 45 6c 65 6d 65 6e 74 20 72 65 6d 6f 76 65 45  lElement removeE
36a00 6c 65 6d 65 6e 74 20 3d 20 64 6f 63 75 6d 65 6e  lement = documen
36a10 74 2e 53 65 6c 65 63 74 53 69 6e 67 6c 65 4e 6f  t.SelectSingleNo
36a20 64 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  de(..           
36a30 20 20 20 20 20 53 74 72 69 6e 67 2e 46 6f 72 6d       String.Form
36a40 61 74 28 58 50 61 74 68 46 6f 72 52 65 6d 6f 76  at(XPathForRemov
36a50 65 45 6c 65 6d 65 6e 74 2c 20 69 6e 76 61 72 69  eElement, invari
36a60 61 6e 74 4e 61 6d 65 29 29 20 61 73 20 58 6d 6c  antName)) as Xml
36a70 45 6c 65 6d 65 6e 74 3b 0d 0a 0d 0a 20 20 20 20  Element;....    
36a80 20 20 20 20 20 20 20 20 69 66 20 28 72 65 6d 6f          if (remo
36a90 76 65 45 6c 65 6d 65 6e 74 20 21 3d 20 6e 75 6c  veElement != nul
36aa0 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
36ab0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
36ac0 20 20 20 72 65 6d 6f 76 65 45 6c 65 6d 65 6e 74     removeElement
36ad0 2e 50 61 72 65 6e 74 4e 6f 64 65 2e 52 65 6d 6f  .ParentNode.Remo
36ae0 76 65 43 68 69 6c 64 28 72 65 6d 6f 76 65 45 6c  veChild(removeEl
36af0 65 6d 65 6e 74 29 3b 0d 0a 20 20 20 20 20 20 20  ement);..       
36b00 20 20 20 20 20 20 20 20 20 64 69 72 74 79 20 3d           dirty =
36b10 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
36b20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
36b30 20 20 20 20 20 69 66 20 28 64 69 72 74 79 20 7c       if (dirty |
36b40 7c 20 77 68 61 74 49 66 29 0d 0a 20 20 20 20 20  | whatIf)..     
36b50 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
36b60 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 65            if (ve
36b70 72 62 6f 73 65 29 0d 0a 20 20 20 20 20 20 20 20  rbose)..        
36b80 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
36b90 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
36ba0 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79  ce(TracePriority
36bb0 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20 20 20 20  .Highest,..     
36bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36bd0 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b     debugCallback
36be0 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c  , traceCallback,
36bf0 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
36c00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
36c10 20 20 20 20 20 20 20 20 20 22 61 64 64 45 6c 65           "addEle
36c20 6d 65 6e 74 20 3d 20 7b 30 7d 2c 20 72 65 6d 6f  ment = {0}, remo
36c30 76 65 45 6c 65 6d 65 6e 74 20 3d 20 7b 31 7d 22  veElement = {1}"
36c40 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
36c50 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69             ForDi
36c60 73 70 6c 61 79 28 61 64 64 45 6c 65 6d 65 6e 74  splay(addElement
36c70 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 72 65  ), ForDisplay(re
36c80 6d 6f 76 65 45 6c 65 6d 65 6e 74 29 29 2c 0d 0a  moveElement)),..
36c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36ca0 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
36cb0 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
36cc0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
36cd0 77 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20  whatIf)..       
36ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 64 6f 63               doc
36cf0 75 6d 65 6e 74 2e 53 61 76 65 28 66 69 6c 65 4e  ument.Save(fileN
36d00 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ame);....       
36d10 20 20 20 20 20 20 20 20 20 66 69 6c 65 73 4d 6f           filesMo
36d20 64 69 66 69 65 64 2b 2b 3b 0d 0a 0d 0a 20 20 20  dified++;....   
36d30 20 20 20 20 20 20 20 20 20 20 20 20 20 73 61 76               sav
36d40 65 64 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20  ed = true;..    
36d50 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
36d60 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
36d70 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d  true;..        }
36d80 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
36d90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36da0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36db0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36dc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36dd0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
36de0 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f  rivate static bo
36df0 6f 6c 20 50 72 6f 63 65 73 73 44 62 50 72 6f 76  ol ProcessDbProv
36e00 69 64 65 72 46 61 63 74 6f 72 79 28 0d 0a 20 20  iderFactory(..  
36e10 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
36e20 20 66 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20   fileName,..    
36e30 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 69          string i
36e40 6e 76 61 72 69 61 6e 74 4e 61 6d 65 2c 0d 0a 20  nvariantName,.. 
36e50 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
36e60 67 20 6e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  g name,..       
36e70 20 20 20 20 20 73 74 72 69 6e 67 20 64 65 73 63       string desc
36e80 72 69 70 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20  ription,..      
36e90 20 20 20 20 20 20 73 74 72 69 6e 67 20 74 79 70        string typ
36ea0 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  eName,..        
36eb0 20 20 20 20 41 73 73 65 6d 62 6c 79 4e 61 6d 65      AssemblyName
36ec0 20 61 73 73 65 6d 62 6c 79 4e 61 6d 65 2c 0d 0a   assemblyName,..
36ed0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
36ee0 6e 67 20 64 69 72 65 63 74 6f 72 79 2c 0d 0a 20  ng directory,.. 
36ef0 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63             objec
36f00 74 20 63 6c 69 65 6e 74 44 61 74 61 2c 0d 0a 20  t clientData,.. 
36f10 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
36f20 70 65 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 20  perUser,..      
36f30 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34        bool wow64
36f40 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
36f50 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69  ool throwOnMissi
36f60 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ng,..           
36f70 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20   bool whatIf,.. 
36f80 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
36f90 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20  verbose,..      
36fa0 20 20 20 20 20 20 72 65 66 20 62 6f 6f 6c 20 73        ref bool s
36fb0 61 76 65 64 2c 0d 0a 20 20 20 20 20 20 20 20 20  aved,..         
36fc0 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 65 72     ref string er
36fd0 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ror..           
36fe0 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20   )..        {.. 
36ff0 20 20 20 20 20 20 20 20 20 20 20 41 6e 79 50 61             AnyPa
37000 69 72 3c 73 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e  ir<string, bool>
37010 20 70 61 69 72 20 3d 20 63 6c 69 65 6e 74 44 61   pair = clientDa
37020 74 61 20 61 73 20 41 6e 79 50 61 69 72 3c 73 74  ta as AnyPair<st
37030 72 69 6e 67 2c 20 62 6f 6f 6c 3e 3b 0d 0a 0d 0a  ring, bool>;....
37040 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
37050 70 61 69 72 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  pair == null).. 
37060 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
37070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
37080 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 66  ror = "invalid f
37090 72 61 6d 65 77 6f 72 6b 20 63 6f 6e 66 69 67 20  ramework config 
370a0 63 61 6c 6c 62 61 63 6b 20 64 61 74 61 22 3b 0d  callback data";.
370b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
370c0 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
370d0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
370e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
370f0 28 70 61 69 72 2e 59 29 0d 0a 20 20 20 20 20 20  (pair.Y)..      
37100 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
37110 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
37120 52 65 6d 6f 76 65 44 62 50 72 6f 76 69 64 65 72  RemoveDbProvider
37130 46 61 63 74 6f 72 79 28 0d 0a 20 20 20 20 20 20  Factory(..      
37140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 69                fi
37150 6c 65 4e 61 6d 65 2c 20 69 6e 76 61 72 69 61 6e  leName, invarian
37160 74 4e 61 6d 65 2c 20 77 68 61 74 49 66 2c 20 76  tName, whatIf, v
37170 65 72 62 6f 73 65 2c 20 72 65 66 20 73 61 76 65  erbose, ref save
37180 64 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d,..            
37190 20 20 20 20 20 20 20 20 72 65 66 20 65 72 72 6f          ref erro
371a0 72 29 20 26 26 0d 0a 20 20 20 20 20 20 20 20 20  r) &&..         
371b0 20 20 20 20 20 20 20 41 64 64 44 62 50 72 6f 76         AddDbProv
371c0 69 64 65 72 46 61 63 74 6f 72 79 28 0d 0a 20 20  iderFactory(..  
371d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
371e0 20 20 66 69 6c 65 4e 61 6d 65 2c 20 69 6e 76 61    fileName, inva
371f0 72 69 61 6e 74 4e 61 6d 65 2c 20 6e 61 6d 65 2c  riantName, name,
37200 20 64 65 73 63 72 69 70 74 69 6f 6e 2c 20 74 79   description, ty
37210 70 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  peName,..       
37220 20 20 20 20 20 20 20 20 20 20 20 20 20 61 73 73               ass
37230 65 6d 62 6c 79 4e 61 6d 65 2c 20 77 68 61 74 49  emblyName, whatI
37240 66 2c 20 76 65 72 62 6f 73 65 2c 20 72 65 66 20  f, verbose, ref 
37250 73 61 76 65 64 2c 20 72 65 66 20 65 72 72 6f 72  saved, ref error
37260 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
37270 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 65  }..            e
37280 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lse..           
37290 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
372a0 20 20 20 20 72 65 74 75 72 6e 20 52 65 6d 6f 76      return Remov
372b0 65 44 62 50 72 6f 76 69 64 65 72 46 61 63 74 6f  eDbProviderFacto
372c0 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ry(..           
372d0 20 20 20 20 20 20 20 20 20 66 69 6c 65 4e 61 6d           fileNam
372e0 65 2c 20 69 6e 76 61 72 69 61 6e 74 4e 61 6d 65  e, invariantName
372f0 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73  , whatIf, verbos
37300 65 2c 20 72 65 66 20 73 61 76 65 64 2c 0d 0a 20  e, ref saved,.. 
37310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37320 20 20 20 72 65 66 20 65 72 72 6f 72 29 3b 0d 0a     ref error);..
37330 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
37340 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
37350 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
37360 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
37370 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37380 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37390 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
373a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
373b0 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  ...        #regi
373c0 6f 6e 20 41 73 73 65 6d 62 6c 79 20 46 6f 6c 64  on Assembly Fold
373d0 65 72 73 20 48 61 6e 64 6c 69 6e 67 0d 0a 20 20  ers Handling..  
373e0 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
373f0 61 74 69 63 20 73 74 72 69 6e 67 20 47 65 74 41  atic string GetA
37400 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73 4b 65  ssemblyFoldersKe
37410 79 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20  yName(..        
37420 20 20 20 20 73 74 72 69 6e 67 20 66 72 61 6d 65      string frame
37430 77 6f 72 6b 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  workName,..     
37440 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20 66         Version f
37450 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c  rameworkVersion,
37460 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
37470 72 69 6e 67 20 70 6c 61 74 66 6f 72 6d 4e 61 6d  ring platformNam
37480 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
37490 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d 0a 20  bool perUser,.. 
374a0 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
374b0 77 6f 77 36 34 0d 0a 20 20 20 20 20 20 20 20 20  wow64..         
374c0 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
374d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d  .            //.
374e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20  .            // 
374f0 4e 4f 54 45 3a 20 54 68 69 73 20 72 65 67 69 73  NOTE: This regis
37500 74 72 79 20 6b 65 79 20 61 70 70 65 61 72 73 20  try key appears 
37510 74 6f 20 61 6c 77 61 79 73 20 62 65 20 33 32 2d  to always be 32-
37520 62 69 74 20 6f 6e 6c 79 0d 0a 20 20 20 20 20 20  bit only..      
37530 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 28        //       (
37540 69 2e 65 2e 20 70 72 6f 62 61 62 6c 79 20 62 65  i.e. probably be
37550 63 61 75 73 65 20 69 74 20 69 73 20 6f 6e 6c 79  cause it is only
37560 20 75 73 65 64 20 62 79 20 56 69 73 75 61 6c 0d   used by Visual.
37570 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20  .            // 
37580 20 20 20 20 20 20 53 74 75 64 69 6f 2c 20 77 68        Studio, wh
37590 69 63 68 20 69 73 20 63 75 72 72 65 6e 74 6c 79  ich is currently
375a0 20 61 6c 77 61 79 73 20 33 32 2d 62 69 74 20 6f   always 32-bit o
375b0 6e 6c 79 29 2e 0d 0a 20 20 20 20 20 20 20 20 20  nly)...         
375c0 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
375d0 20 20 20 73 74 72 69 6e 67 20 66 6f 72 6d 61 74     string format
375e0 20 3d 20 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c   = !String.IsNul
375f0 6c 4f 72 45 6d 70 74 79 28 70 6c 61 74 66 6f 72  lOrEmpty(platfor
37600 6d 4e 61 6d 65 29 20 3f 0d 0a 20 20 20 20 20 20  mName) ?..      
37610 20 20 20 20 20 20 20 20 20 20 22 7b 30 7d 5c 5c            "{0}\\
37620 4d 69 63 72 6f 73 6f 66 74 5c 5c 7b 31 7d 5c 5c  Microsoft\\{1}\\
37630 76 7b 32 7d 5c 5c 7b 33 7d 5c 5c 41 73 73 65 6d  v{2}\\{3}\\Assem
37640 62 6c 79 46 6f 6c 64 65 72 73 45 78 22 20 3a 0d  blyFoldersEx" :.
37650 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
37660 20 22 7b 30 7d 5c 5c 4d 69 63 72 6f 73 6f 66 74   "{0}\\Microsoft
37670 5c 5c 7b 31 7d 5c 5c 76 7b 32 7d 5c 5c 41 73 73  \\{1}\\v{2}\\Ass
37680 65 6d 62 6c 79 46 6f 6c 64 65 72 73 45 78 22 3b  emblyFoldersEx";
37690 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
376a0 72 65 74 75 72 6e 20 53 74 72 69 6e 67 2e 46 6f  return String.Fo
376b0 72 6d 61 74 28 66 6f 72 6d 61 74 2c 20 47 65 74  rmat(format, Get
376c0 52 6f 6f 74 4b 65 79 4e 61 6d 65 28 70 65 72 55  RootKeyName(perU
376d0 73 65 72 2c 20 77 6f 77 36 34 29 2c 0d 0a 20 20  ser, wow64),..  
376e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72                fr
376f0 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20 66 72 61  ameworkName, fra
37700 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 20 70  meworkVersion, p
37710 6c 61 74 66 6f 72 6d 4e 61 6d 65 29 3b 0d 0a 20  latformName);.. 
37720 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
37730 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
37740 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37750 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37760 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37770 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
37780 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
37790 74 61 74 69 63 20 62 6f 6f 6c 20 41 64 64 54 6f  tatic bool AddTo
377a0 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73 28  AssemblyFolders(
377b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f  ..            Mo
377c0 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f  ckRegistryKey ro
377d0 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20  otKey,..        
377e0 20 20 20 20 73 74 72 69 6e 67 20 66 72 61 6d 65      string frame
377f0 77 6f 72 6b 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  workName,..     
37800 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20 66         Version f
37810 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c  rameworkVersion,
37820 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
37830 72 69 6e 67 20 70 6c 61 74 66 6f 72 6d 4e 61 6d  ring platformNam
37840 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
37850 73 74 72 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d  string subKeyNam
37860 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
37870 73 74 72 69 6e 67 20 64 69 72 65 63 74 6f 72 79  string directory
37880 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
37890 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d 0a 20 20  ool perUser,..  
378a0 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77            bool w
378b0 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 20  ow64,..         
378c0 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d     bool whatIf,.
378d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
378e0 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20  l verbose,..    
378f0 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69          ref stri
37900 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20  ng error..      
37910 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
37920 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
37930 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d 65 20 3d  string keyName =
37940 20 47 65 74 41 73 73 65 6d 62 6c 79 46 6f 6c 64   GetAssemblyFold
37950 65 72 73 4b 65 79 4e 61 6d 65 28 0d 0a 20 20 20  ersKeyName(..   
37960 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72 61               fra
37970 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20 66 72 61 6d  meworkName, fram
37980 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 20 70 6c  eworkVersion, pl
37990 61 74 66 6f 72 6d 4e 61 6d 65 2c 20 70 65 72 55  atformName, perU
379a0 73 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ser,..          
379b0 20 20 20 20 20 20 77 6f 77 36 34 29 3b 0d 0a 0d        wow64);...
379c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69  .            usi
379d0 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79  ng (MockRegistry
379e0 4b 65 79 20 6b 65 79 20 3d 20 52 65 67 69 73 74  Key key = Regist
379f0 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62  ryHelper.OpenSub
37a00 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Key(..          
37a10 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65            rootKe
37a20 79 2c 20 6b 65 79 4e 61 6d 65 2c 20 74 72 75 65  y, keyName, true
37a30 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73  , whatIf, verbos
37a40 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
37a50 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
37a60 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e      if (key == n
37a70 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
37a80 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
37a90 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
37aa0 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d  or = String.Form
37ab0 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
37ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63 6f               "co
37ad0 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67  uld not open reg
37ae0 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c  istry key: {0}\\
37af0 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  {1}",..         
37b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
37b10 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 29  ootKey, keyName)
37b20 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
37b30 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
37b40 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
37b50 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
37b60 20 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69               usi
37b70 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79  ng (MockRegistry
37b80 4b 65 79 20 73 75 62 4b 65 79 20 3d 20 52 65 67  Key subKey = Reg
37b90 69 73 74 72 79 48 65 6c 70 65 72 2e 43 72 65 61  istryHelper.Crea
37ba0 74 65 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20  teSubKey(..     
37bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37bc0 20 20 20 6b 65 79 2c 20 73 75 62 4b 65 79 4e 61     key, subKeyNa
37bd0 6d 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62  me, whatIf, verb
37be0 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ose))..         
37bf0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
37c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
37c10 20 28 73 75 62 4b 65 79 20 3d 3d 20 6e 75 6c 6c   (subKey == null
37c20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
37c30 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
37c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37c50 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67    error = String
37c60 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
37c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37c80 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74        "could not
37c90 20 63 72 65 61 74 65 20 72 65 67 69 73 74 72 79   create registry
37ca0 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c   key: {0}\\{1}",
37cb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
37cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65                ke
37cd0 79 2c 20 73 75 62 4b 65 79 4e 61 6d 65 29 3b 0d  y, subKeyName);.
37ce0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
37cf0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
37d00 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
37d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
37d20 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
37d30 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48         RegistryH
37d40 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65 28 0d  elper.SetValue(.
37d50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
37d60 20 20 20 20 20 20 20 20 20 73 75 62 4b 65 79 2c           subKey,
37d70 20 6e 75 6c 6c 2c 20 64 69 72 65 63 74 6f 72 79   null, directory
37d80 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73  , whatIf, verbos
37d90 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e);..           
37da0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
37db0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
37dc0 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65       return true
37dd0 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
37de0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
37df0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37e00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37e10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37e20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
37e30 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  ...        priva
37e40 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 52  te static bool R
37e50 65 6d 6f 76 65 46 72 6f 6d 41 73 73 65 6d 62 6c  emoveFromAssembl
37e60 79 46 6f 6c 64 65 72 73 28 0d 0a 20 20 20 20 20  yFolders(..     
37e70 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73         MockRegis
37e80 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d  tryKey rootKey,.
37e90 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
37ea0 69 6e 67 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d  ing frameworkNam
37eb0 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
37ec0 56 65 72 73 69 6f 6e 20 66 72 61 6d 65 77 6f 72  Version framewor
37ed0 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20  kVersion,..     
37ee0 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 70 6c         string pl
37ef0 61 74 66 6f 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20  atformName,..   
37f00 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
37f10 73 75 62 4b 65 79 4e 61 6d 65 2c 0d 0a 20 20 20  subKeyName,..   
37f20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 70 65           bool pe
37f30 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 20 20  rUser,..        
37f40 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d      bool wow64,.
37f50 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
37f60 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67  l throwOnMissing
37f70 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
37f80 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20  ool whatIf,..   
37f90 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65           bool ve
37fa0 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20  rbose,..        
37fb0 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 65      ref string e
37fc0 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20  rror..          
37fd0 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
37fe0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
37ff0 6e 67 20 6b 65 79 4e 61 6d 65 20 3d 20 47 65 74  ng keyName = Get
38000 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73 4b  AssemblyFoldersK
38010 65 79 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20  eyName(..       
38020 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f           framewo
38030 72 6b 4e 61 6d 65 2c 20 66 72 61 6d 65 77 6f 72  rkName, framewor
38040 6b 56 65 72 73 69 6f 6e 2c 20 70 6c 61 74 66 6f  kVersion, platfo
38050 72 6d 4e 61 6d 65 2c 20 70 65 72 55 73 65 72 2c  rmName, perUser,
38060 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
38070 20 20 77 6f 77 36 34 29 3b 0d 0a 0d 0a 20 20 20    wow64);....   
38080 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28           using (
38090 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
380a0 6b 65 79 20 3d 20 52 65 67 69 73 74 72 79 48 65  key = RegistryHe
380b0 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28  lper.OpenSubKey(
380c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
380d0 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b        rootKey, k
380e0 65 79 4e 61 6d 65 2c 20 74 72 75 65 2c 20 77 68  eyName, true, wh
380f0 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d  atIf, verbose)).
38100 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
38110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38120 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29  if (key == null)
38130 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
38140 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
38150 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
38160 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
38170 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
38180 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20           "could 
38190 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69 73 74 72  not open registr
381a0 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22  y key: {0}\\{1}"
381b0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
381c0 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b             rootK
381d0 65 79 2c 20 6b 65 79 4e 61 6d 65 29 3b 0d 0a 0d  ey, keyName);...
381e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
381f0 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
38200 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
38210 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
38220 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72           Registr
38230 79 48 65 6c 70 65 72 2e 44 65 6c 65 74 65 53 75  yHelper.DeleteSu
38240 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20  bKey(..         
38250 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 2c 20             key, 
38260 73 75 62 4b 65 79 4e 61 6d 65 2c 20 74 68 72 6f  subKeyName, thro
38270 77 4f 6e 4d 69 73 73 69 6e 67 2c 20 77 68 61 74  wOnMissing, what
38280 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 20  If, verbose);.. 
38290 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
382a0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
382b0 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20  rn true;..      
382c0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f    }....        /
382d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
382e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
382f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38300 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38310 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
38320 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
38330 20 62 6f 6f 6c 20 50 72 6f 63 65 73 73 41 73 73   bool ProcessAss
38340 65 6d 62 6c 79 46 6f 6c 64 65 72 73 28 0d 0a 20  emblyFolders(.. 
38350 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52             MockR
38360 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b  egistryKey rootK
38370 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey,..           
38380 20 73 74 72 69 6e 67 20 66 72 61 6d 65 77 6f 72   string framewor
38390 6b 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  kName,..        
383a0 20 20 20 20 56 65 72 73 69 6f 6e 20 66 72 61 6d      Version fram
383b0 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20  eworkVersion,.. 
383c0 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
383d0 67 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 0d  g platformName,.
383e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
383f0 69 6e 67 20 64 69 72 65 63 74 6f 72 79 2c 0d 0a  ing directory,..
38400 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65              obje
38410 63 74 20 63 6c 69 65 6e 74 44 61 74 61 2c 0d 0a  ct clientData,..
38420 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
38430 20 70 65 72 55 73 65 72 2c 0d 0a 20 20 20 20 20   perUser,..     
38440 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36         bool wow6
38450 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  4,..            
38460 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73  bool throwOnMiss
38470 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ing,..          
38480 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a    bool whatIf,..
38490 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
384a0 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20   verbose,..     
384b0 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e         ref strin
384c0 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20  g error..       
384d0 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
384e0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 41  {..            A
384f0 6e 79 50 61 69 72 3c 73 74 72 69 6e 67 2c 20 62  nyPair<string, b
38500 6f 6f 6c 3e 20 70 61 69 72 20 3d 20 63 6c 69 65  ool> pair = clie
38510 6e 74 44 61 74 61 20 61 73 20 41 6e 79 50 61 69  ntData as AnyPai
38520 72 3c 73 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e 3b  r<string, bool>;
38530 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
38540 69 66 20 28 70 61 69 72 20 3d 3d 20 6e 75 6c 6c  if (pair == null
38550 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
38560 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
38570 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c    error = "inval
38580 69 64 20 66 72 61 6d 65 77 6f 72 6b 20 63 61 6c  id framework cal
38590 6c 62 61 63 6b 20 64 61 74 61 22 3b 0d 0a 20 20  lback data";..  
385a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
385b0 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
385c0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
385d0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70 61            if (pa
385e0 69 72 2e 59 29 0d 0a 20 20 20 20 20 20 20 20 20  ir.Y)..         
385f0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
38600 20 20 20 20 20 20 72 65 74 75 72 6e 20 52 65 6d        return Rem
38610 6f 76 65 46 72 6f 6d 41 73 73 65 6d 62 6c 79 46  oveFromAssemblyF
38620 6f 6c 64 65 72 73 28 0d 0a 20 20 20 20 20 20 20  olders(..       
38630 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f               roo
38640 74 4b 65 79 2c 20 66 72 61 6d 65 77 6f 72 6b 4e  tKey, frameworkN
38650 61 6d 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65  ame, frameworkVe
38660 72 73 69 6f 6e 2c 20 70 6c 61 74 66 6f 72 6d 4e  rsion, platformN
38670 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
38680 20 20 20 20 20 20 20 20 20 20 4c 65 67 61 63 79            Legacy
38690 50 72 6f 6a 65 63 74 4e 61 6d 65 2c 20 70 65 72  ProjectName, per
386a0 55 73 65 72 2c 20 77 6f 77 36 34 2c 20 66 61 6c  User, wow64, fal
386b0 73 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62  se, whatIf, verb
386c0 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ose,..          
386d0 20 20 20 20 20 20 20 20 20 20 72 65 66 20 65 72            ref er
386e0 72 6f 72 29 20 26 26 0d 0a 20 20 20 20 20 20 20  ror) &&..       
386f0 20 20 20 20 20 20 20 20 20 41 64 64 54 6f 41 73           AddToAs
38700 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73 28 0d 0a  semblyFolders(..
38710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38720 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 66 72 61      rootKey, fra
38730 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20 66 72 61 6d  meworkName, fram
38740 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 20 70 6c  eworkVersion, pl
38750 61 74 66 6f 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20  atformName,..   
38760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38770 20 50 72 6f 6a 65 63 74 4e 61 6d 65 2c 20 70 61   ProjectName, pa
38780 69 72 2e 58 2c 20 70 65 72 55 73 65 72 2c 20 77  ir.X, perUser, w
38790 6f 77 36 34 2c 20 77 68 61 74 49 66 2c 20 76 65  ow64, whatIf, ve
387a0 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20  rbose,..        
387b0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
387c0 65 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20  error);..       
387d0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
387e0 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20      else..      
387f0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
38800 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
38810 52 65 6d 6f 76 65 46 72 6f 6d 41 73 73 65 6d 62  RemoveFromAssemb
38820 6c 79 46 6f 6c 64 65 72 73 28 0d 0a 20 20 20 20  lyFolders(..    
38830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38840 72 6f 6f 74 4b 65 79 2c 20 66 72 61 6d