3. EPMO Open Source Coordination Office Redaction File Detail Report

Produced by Araxis Merge on 1/17/2019 1:50:43 PM Central Standard Time. See www.araxis.com for information about Merge. This report uses XHTML and CSS2, and is best viewed with a modern standards-compliant browser. For optimum results when printing this report, use landscape orientation and enable printing of background images and colours in your browser.

3.1 Files compared

# Location File Last Modified
1 C:\AraxisMergeCompare\Pri_un\ccra\ccra_automation\packages\EntityFramework.6.2.0\tools EntityFramework.psm1 Thu Jan 10 13:20:28 2019 UTC
2 C:\AraxisMergeCompare\Pri_re\ccra\ccra_automation\packages\EntityFramework.6.2.0\tools EntityFramework.psm1 Thu Jan 10 17:04:38 2019 UTC

3.2 Comparison summary

Description Between
Files 1 and 2
Text Blocks Lines
Unchanged 3 2348
Changed 2 4
Inserted 0 0
Removed 0 0

3.3 Comparison options

Whitespace
Character case Differences in character case are significant
Line endings Differences in line endings (CR and LF characters) are ignored
CR/LF characters Not shown in the comparison detail

3.4 Active regular expressions

No regular expressions were active.

3.5 Comparison detail

  1    # Copyrigh t (c) Micr osoft Corp oration.   All rights  reserved.
  2   
  3    $InitialDa tabase = ' 0'
  4   
  5    $knownExce ptions = @ (
  6        'Syste m.Data.Ent ity.Migrat ions.Infra structure. Migrations Exception' ,
  7        'Syste m.Data.Ent ity.Migrat ions.Infra structure. AutomaticM igrationsD isabledExc eption',
  8        'Syste m.Data.Ent ity.Migrat ions.Infra structure. AutomaticD ataLossExc eption',
  9        'Syste m.Data.Ent ity.Migrat ions.Infra structure. Migrations PendingExc eption',
  10        'Syste m.Data.Ent ity.Migrat ions.Proje ctTypeNotS upportedEx ception'
  11    )
  12   
  13    <#
  14    .SYNOPSIS
  15        Adds o r updates  an Entity  Framework  provider e ntry in th e project  config
  16        file.
  17   
  18    .DESCRIPTI ON
  19        Adds a n entry in to the 'en tityFramew ork' secti on of the  project co nfig
  20        file f or the spe cified pro vider inva riant name  and provi der type.  If an
  21        entry  for the gi ven invari ant name a lready exi sts, then  that entry  is
  22        update d with the  given typ e name, un less the g iven type  name alrea dy
  23        matche s, in whic h case no  action is  taken. The  'entityFr amework'
  24        sectio n is added  if it doe s not exis t. The con fig file i s automati cally
  25        saved  if and onl y if a cha nge was ma de.
  26        
  27        This c ommand is  typically  used only  by Entity  Framework  provider N uGet
  28        packag es and is  run from t he 'instal l.ps1' scr ipt.
  29   
  30    .PARAMETER  Project
  31        The Vi sual Studi o project  to update.  When runn ing in the  NuGet ins tall.ps1
  32        script  the '$pro ject' vari able provi ded as par t of that  script sho uld be
  33        used.
  34   
  35    .PARAMETER  Invariant Name
  36        The pr ovider inv ariant nam e that uni quely iden tifies thi s provider . For
  37        exampl e, the Mic rosoft SQL  Server pr ovider is  registered  with the  invariant
  38        name ' System.Dat a.SqlClien t'.
  39   
  40    .PARAMETER  TypeName
  41        The as sembly-qua lified typ e name of  the provid er-specifi c type tha t
  42        inheri ts from 'S ystem.Data .Entity.Co re.Common. DbProvider Services'.  For
  43        exampl e, for the  Microsoft  SQL Serve r provider , this typ e is 
  44        'Syste m.Data.Ent ity.SqlSer ver.SqlPro viderServi ces, Entit yFramework .SqlServer '.
  45    #>
  46    function A dd-EFProvi der
  47    {
  48        param  (
  49            [p arameter(P osition =  0,
  50                 Mandator y = $true) ]
  51            $P roject,
  52            [p arameter(P osition =  1,
  53                 Mandator y = $true) ]
  54            [s tring] $In variantNam e,
  55            [p arameter(P osition =  2,
  56                 Mandator y = $true) ]
  57            [s tring] $Ty peName
  58        )
  59   
  60            if  (!(Check- Project $p roject))
  61            {
  62                 return
  63            }
  64   
  65        $runne r = New-EF ConfigRunn er $Projec t
  66   
  67        try
  68        {
  69            In voke-Runne rCommand $ runner Sys tem.Data.E ntity.Conn ectionFact oryConfig. AddProvide rCommand @ ( $Invaria ntName, $T ypeName )
  70            $e rror = Get -RunnerErr or $runner
  71   
  72            if  ($error)
  73            {
  74                 if ($kno wnExceptio ns -notcon tains $err or.TypeNam e)
  75                 {
  76                     Writ e-Host $er ror.StackT race
  77                 }
  78                 else
  79                 {
  80                     Writ e-Verbose  $error.Sta ckTrace
  81                 }
  82   
  83                 throw $e rror.Messa ge
  84            }
  85        }
  86        finall y
  87        {                              
  88            Re move-Runne r $runner
  89        }
  90    }
  91   
  92    <#
  93    .SYNOPSIS
  94        Adds o r updates  an Entity  Framework  default co nnection f actory in  the
  95        projec t config f ile.
  96   
  97    .DESCRIPTI ON
  98        Adds a n entry in to the 'en tityFramew ork' secti on of the  project co nfig
  99        file f or the con nection fa ctory that  Entity Fr amework wi ll use by  default
  100        when c reating ne w connecti ons by con vention. A ny existin g entry wi ll be
  101        overri dden if it  does not  match. The  'entityFr amework' s ection is  added if
  102        it doe s not exis t. The con fig file i s automati cally save d if and o nly if
  103        a chan ge was mad e.
  104        
  105        This c ommand is  typically  used only  by Entity  Framework  provider N uGet
  106        packag es and is  run from t he 'instal l.ps1' scr ipt.
  107   
  108    .PARAMETER  Project
  109        The Vi sual Studi o project  to update.  When runn ing in the  NuGet ins tall.ps1
  110        script  the '$pro ject' vari able provi ded as par t of that  script sho uld be
  111        used.
  112   
  113    .PARAMETER  TypeName
  114        The as sembly-qua lified typ e name of  the connec tion facto ry type th at
  115        implem ents the ' System.Dat a.Entity.I nfrastruct ure.IDbCon nectionFac tory'
  116        interf ace.  For  example, f or the Mic rosoft SQL  Server Ex press prov ider
  117        connec tion facto ry, this t ype is
  118        'Syste m.Data.Ent ity.Infras tructure.S qlConnecti onFactory,  EntityFra mework'.
  119   
  120    .PARAMETER  Construct orArgument s
  121        An opt ional arra y of strin gs that wi ll be pass ed as argu ments to t he
  122        connec tion facto ry type co nstructor.
  123    #>
  124    function A dd-EFDefau ltConnecti onFactory
  125    {
  126        param  (
  127            [p arameter(P osition =  0,
  128                 Mandator y = $true) ]
  129            $P roject,
  130            [p arameter(P osition =  1,
  131                 Mandator y = $true) ]
  132            [s tring] $Ty peName,
  133            [s tring[]] $ Constructo rArguments
  134        )
  135   
  136            if  (!(Check- Project $p roject))
  137            {
  138                 return
  139            }
  140   
  141        $runne r = New-EF ConfigRunn er $Projec t
  142   
  143        try
  144        {
  145            In voke-Runne rCommand $ runner Sys tem.Data.E ntity.Conn ectionFact oryConfig. AddDefault Connection FactoryCom mand @( $T ypeName, $ Constructo rArguments  )
  146            $e rror = Get -RunnerErr or $runner
  147   
  148            if  ($error)
  149            {
  150                 if ($kno wnExceptio ns -notcon tains $err or.TypeNam e)
  151                 {
  152                     Writ e-Host $er ror.StackT race
  153                 }
  154                 else
  155                 {
  156                     Writ e-Verbose  $error.Sta ckTrace
  157                 }
  158   
  159                 throw $e rror.Messa ge
  160            }
  161        }
  162        finall y
  163        {                              
  164            Re move-Runne r $runner
  165        }
  166    }
  167   
  168    <#
  169    .SYNOPSIS
  170        Initia lizes the  Entity Fra mework sec tion in th e project  config fil e
  171        and se ts default s.
  172   
  173    .DESCRIPTI ON
  174        Create s the 'ent ityFramewo rk' sectio n of the p roject con fig file a nd sets
  175        the de fault conn ection fac tory to us e SQL Expr ess if it  is running  on the
  176        machin e, or Loca lDb otherw ise. Note  that insta lling a di fferent pr ovider
  177        may ch ange the d efault con nection fa ctory.  Th e config f ile is
  178        automa tically sa ved if and  only if a  change wa s made.
  179   
  180        In add ition, any  reference  to 'Syste m.Data.Ent ity.dll' i n the proj ect is
  181        remove d.
  182        
  183        This c ommand is  typically  used only  by Entity  Framework  provider N uGet
  184        packag es and is  run from t he 'instal l.ps1' scr ipt.
  185   
  186    .PARAMETER  Project
  187        The Vi sual Studi o project  to update.  When runn ing in the  NuGet ins tall.ps1
  188        script  the '$pro ject' vari able provi ded as par t of that  script sho uld be
  189        used.
  190    #>
  191    function I nitialize- EFConfigur ation
  192    {
  193        param  (
  194            [p arameter(P osition =  0,
  195                 Mandator y = $true) ]
  196            $P roject
  197        )
  198   
  199            if  (!(Check- Project $p roject))
  200            {
  201                 return
  202            }
  203   
  204        $runne r = New-EF ConfigRunn er $Projec t
  205   
  206        try
  207        {
  208            In voke-Runne rCommand $ runner Sys tem.Data.E ntity.Conn ectionFact oryConfig. Initialize EntityFram eworkComma nd
  209            $e rror = Get -RunnerErr or $runner
  210   
  211            if  ($error)
  212            {
  213                 if ($kno wnExceptio ns -notcon tains $err or.TypeNam e)
  214                 {
  215                     Writ e-Host $er ror.StackT race
  216                 }
  217                 else
  218                 {
  219                     Writ e-Verbose  $error.Sta ckTrace
  220                 }
  221   
  222                 throw $e rror.Messa ge
  223            }
  224        }
  225        finall y
  226        {                              
  227            Re move-Runne r $runner
  228        }
  229    }
  230   
  231    <#
  232    .SYNOPSIS
  233        Enable s Code Fir st Migrati ons in a p roject.
  234   
  235    .DESCRIPTI ON
  236        Enable s Migratio ns by scaf folding a  migrations  configura tion class  in the pr oject. If  the
  237        target  database  was create d by an in itializer,  an initia l migratio n will be  created (u nless
  238        automa tic migrat ions are e nabled via  the Enabl eAutomatic Migrations  parameter ).
  239   
  240    .PARAMETER  ContextTy peName
  241        Specif ies the co ntext to u se. If omi tted, migr ations wil l attempt  to locate  a
  242        single  context t ype in the  target pr oject.
  243   
  244    .PARAMETER  EnableAut omaticMigr ations
  245        Specif ies whethe r automati c migratio ns will be  enabled i n the scaf folded mig rations co nfiguratio n.
  246        If omi tted, auto matic migr ations wil l be disab led.
  247   
  248    .PARAMETER  Migration sDirectory
  249        Specif ies the na me of the  directory  that will  contain mi grations c ode files.
  250        If omi tted, the  directory  will be na med "Migra tions". 
  251   
  252    .PARAMETER  ProjectNa me
  253        Specif ies the pr oject that  the scaff olded migr ations con figuration  class wil l
  254        be add ed to. If  omitted, t he default  project s elected in  package m anager
  255        consol e is used.
  256   
  257    .PARAMETER  StartUpPr ojectName
  258        Specif ies the co nfiguratio n file to  use for na med connec tion strin gs. If
  259        omitte d, the spe cified pro ject's con figuration  file is u sed.
  260   
  261    .PARAMETER  ContextPr ojectName
  262        Specif ies the pr oject whic h contains  the DbCon text class  to use. I f omitted,
  263        the co ntext is a ssumed to  be in the  same proje ct used fo r migratio ns.
  264   
  265    .PARAMETER  Connectio nStringNam e
  266        Specif ies the na me of a co nnection s tring to u se from th e applicat ion's
  267        config uration fi le.
  268   
  269    .PARAMETER  Connectio nString
  270        Specif ies the th e connecti on string  to use. If  omitted,  the contex t's
  271        defaul t connecti on will be  used.
  272   
  273    .PARAMETER  Connectio nProviderN ame
  274        Specif ies the pr ovider inv ariant nam e of the c onnection  string.
  275   
  276    .PARAMETER  Force
  277        Specif ies that t he migrati ons config uration be  overwritt en when ru nning more
  278        than o nce for a  given proj ect.
  279            
  280    .PARAMETER  ContextAs semblyName
  281        Specif ies the na me of the  assembly w hich conta ins the Db Context cl ass to use . Use this
  282        parame ter instea d of Conte xtProjectN ame when t he context  is contai ned in a r eferenced
  283        assemb ly rather  than in a  project of  the solut ion.
  284   
  285    .PARAMETER  AppDomain BaseDirect ory
  286        Specif ies the di rectory to  use for t he app-dom ain that i s used for  running M igrations
  287        code s uch that t he app-dom ain is abl e to find  all requir ed assembl ies. This  is an
  288        advanc ed option  that shoul d only be  needed if  the soluti on contain s several  projects 
  289        such t hat the as semblies n eeded for  the contex t and conf iguration  are not al l
  290        refere nced from  either the  project c ontaining  the contex t or the p roject con taining
  291        the mi grations.
  292   
  293    .EXAMPLE 
  294            En able-Migra tions
  295            #  Scaffold a  migration s configur ation in a  project w ith only o ne context
  296            
  297    .EXAMPLE 
  298            En able-Migra tions -Aut o
  299            #  Scaffold a  migration s configur ation with  automatic  migration s enabled  for a proj ect
  300            #  with only  one contex t
  301            
  302    .EXAMPLE 
  303            En able-Migra tions -Con textTypeNa me MyConte xt -Migrat ionsDirect ory Direct oryName
  304            #  Scaffold a  migration s configur ation for  a project  with multi ple contex ts
  305            #  This scaff olds a mig rations co nfiguratio n for MyCo ntext and  will put t he configu ration
  306            #  and subseq uent confi gurations  in a new d irectory c alled "Dir ectoryName "
  307   
  308    #>
  309    function E nable-Migr ations
  310    {
  311        [Cmdle tBinding(D efaultPara meterSetNa me = 'Conn ectionStri ngName')] 
  312        param  (
  313            [s tring] $Co ntextTypeN ame,
  314            [a lias('Auto ')]
  315            [s witch] $En ableAutoma ticMigrati ons,
  316            [s tring] $Mi grationsDi rectory,
  317            [s tring] $Pr ojectName,
  318            [s tring] $St artUpProje ctName,
  319            [s tring] $Co ntextProje ctName,
  320            [p arameter(P arameterSe tName = 'C onnectionS tringName' )]
  321            [s tring] $Co nnectionSt ringName,
  322            [p arameter(P arameterSe tName = 'C onnectionS tringAndPr oviderName ',
  323                 Mandator y = $true) ]
  324            [s tring] $Co nnectionSt ring,
  325            [p arameter(P arameterSe tName = 'C onnectionS tringAndPr oviderName ',
  326                 Mandator y = $true) ]
  327            [s tring] $Co nnectionPr oviderName ,
  328            [s witch] $Fo rce,
  329            [s tring] $Co ntextAssem blyName,
  330                     [str ing] $AppD omainBaseD irectory
  331        )
  332   
  333        $runne r = New-Mi grationsRu nner $Proj ectName $S tartUpProj ectName $C ontextProj ectName $n ull $Conne ctionStrin gName $Con nectionStr ing $Conne ctionProvi derName $C ontextAsse mblyName $ AppDomainB aseDirecto ry
  334   
  335        try
  336        {
  337            In voke-Runne rCommand $ runner Sys tem.Data.E ntity.Migr ations.Ena bleMigrati onsCommand  @( $Enabl eAutomatic Migrations .IsPresent , $Force.I sPresent )  @{ 'Conte xtTypeName ' = $Conte xtTypeName ; 'Migrati onsDirecto ry' = $Mig rationsDir ectory }                    
  338            $e rror = Get -RunnerErr or $runner                                            
  339   
  340            if  ($error)
  341            {
  342                 if ($kno wnExceptio ns -notcon tains $err or.TypeNam e)
  343                 {
  344                     Writ e-Host $er ror.StackT race
  345                 }
  346                 else
  347                 {
  348                     Writ e-Verbose  $error.Sta ckTrace
  349                 }
  350   
  351                 throw $e rror.Messa ge
  352            }
  353   
  354            $( Get-VSComp onentModel ).GetServi ce([NuGetC onsole.IPo werConsole Window]).S how()            
  355        }
  356        finall y
  357        {                              
  358            Re move-Runne r $runner            
  359        }
  360    }
  361   
  362    <#
  363    .SYNOPSIS
  364        Scaffo lds a migr ation scri pt for any  pending m odel chang es.
  365   
  366    .DESCRIPTI ON
  367        Scaffo lds a new  migration  script and  adds it t o the proj ect.
  368   
  369    .PARAMETER  Name
  370        Specif ies the na me of the  custom scr ipt.
  371   
  372    .PARAMETER  Force
  373        Specif ies that t he migrati on user co de be over written wh en re-scaf folding an
  374        existi ng migrati on.
  375   
  376    .PARAMETER  ProjectNa me
  377        Specif ies the pr oject that  contains  the migrat ion config uration ty pe to be
  378        used.  If omitted , the defa ult projec t selected  in packag e manager  console
  379        is use d.
  380   
  381    .PARAMETER  StartUpPr ojectName
  382        Specif ies the co nfiguratio n file to  use for na med connec tion strin gs. If
  383        omitte d, the spe cified pro ject's con figuration  file is u sed.
  384   
  385    .PARAMETER  Configura tionTypeNa me
  386        Specif ies the mi grations c onfigurati on to use.  If omitte d, migrati ons will
  387        attemp t to locat e a single  migration s configur ation type  in the ta rget
  388        projec t.
  389   
  390    .PARAMETER  Connectio nStringNam e
  391        Specif ies the na me of a co nnection s tring to u se from th e applicat ion's
  392        config uration fi le.
  393   
  394    .PARAMETER  Connectio nString
  395        Specif ies the th e connecti on string  to use. If  omitted,  the contex t's
  396        defaul t connecti on will be  used.
  397   
  398    .PARAMETER  Connectio nProviderN ame
  399        Specif ies the pr ovider inv ariant nam e of the c onnection  string.
  400   
  401    .PARAMETER  IgnoreCha nges
  402        Scaffo lds an emp ty migrati on ignorin g any pend ing change s detected  in the cu rrent mode l.
  403        This c an be used  to create  an initia l, empty m igration t o enable M igrations  for an exi sting
  404        databa se. N.B. D oing this  assumes th at the tar get databa se schema  is compati ble with t he
  405        curren t model.
  406   
  407    .PARAMETER  AppDomain BaseDirect ory
  408        Specif ies the di rectory to  use for t he app-dom ain that i s used for  running M igrations
  409        code s uch that t he app-dom ain is abl e to find  all requir ed assembl ies. This  is an
  410        advanc ed option  that shoul d only be  needed if  the soluti on contain s several  projects 
  411        such t hat the as semblies n eeded for  the contex t and conf iguration  are not al l
  412        refere nced from  either the  project c ontaining  the contex t or the p roject con taining
  413        the mi grations.
  414            
  415    .EXAMPLE
  416            Ad d-Migratio n First
  417            #  Scaffold a  new migra tion named  "First"
  418            
  419    .EXAMPLE
  420            Ad d-Migratio n First -I gnoreChang es
  421            #  Scaffold a n empty mi gration ig noring any  pending c hanges det ected in t he current  model.
  422            #  This can b e used to  create an  initial, e mpty migra tion to en able Migra tions for  an existin g
  423            #  database.  N.B. Doing  this assu mes that t he target  database s chema is c ompatible  with the
  424            #  current mo del.
  425   
  426    #>
  427    function A dd-Migrati on
  428    {
  429        [Cmdle tBinding(D efaultPara meterSetNa me = 'Conn ectionStri ngName')]
  430        param  (
  431            [p arameter(P osition =  0,
  432                 Mandator y = $true) ]
  433            [s tring] $Na me,
  434            [s witch] $Fo rce,
  435            [s tring] $Pr ojectName,
  436            [s tring] $St artUpProje ctName,
  437            [s tring] $Co nfiguratio nTypeName,
  438            [p arameter(P arameterSe tName = 'C onnectionS tringName' )]
  439            [s tring] $Co nnectionSt ringName,
  440            [p arameter(P arameterSe tName = 'C onnectionS tringAndPr oviderName ',
  441                 Mandator y = $true) ]
  442            [s tring] $Co nnectionSt ring,
  443            [p arameter(P arameterSe tName = 'C onnectionS tringAndPr oviderName ',
  444                 Mandator y = $true) ]
  445            [s tring] $Co nnectionPr oviderName ,
  446            [s witch] $Ig noreChange s,
  447                     [str ing] $AppD omainBaseD irectory)
  448   
  449        Hint-D owngrade $ MyInvocati on.MyComma nd
  450        $runne r = New-Mi grationsRu nner $Proj ectName $S tartUpProj ectName $n ull $Confi gurationTy peName $Co nnectionSt ringName $ Connection String $Co nnectionPr oviderName  $null $Ap pDomainBas eDirectory
  451   
  452        try
  453        {
  454            In voke-Runne rCommand $ runner Sys tem.Data.E ntity.Migr ations.Add MigrationC ommand @(  $Name, $Fo rce.IsPres ent, $Igno reChanges. IsPresent  )
  455            $e rror = Get -RunnerErr or $runner                  
  456   
  457            if  ($error)
  458            {
  459                 if ($kno wnExceptio ns -notcon tains $err or.TypeNam e)
  460                 {
  461                     Writ e-Host $er ror.StackT race
  462                 }
  463                 else
  464                 {
  465                     Writ e-Verbose  $error.Sta ckTrace
  466                 }
  467   
  468                 throw $e rror.Messa ge
  469            }                 
  470            $( Get-VSComp onentModel ).GetServi ce([NuGetC onsole.IPo werConsole Window]).S how()            
  471        }
  472        finall y
  473        {                     
  474            Re move-Runne r $runner            
  475        }   
  476    }
  477   
  478    <#
  479    .SYNOPSIS
  480        Applie s any pend ing migrat ions to th e database .
  481   
  482    .DESCRIPTI ON
  483        Update s the data base to th e current  model by a pplying pe nding migr ations.
  484   
  485    .PARAMETER  SourceMig ration
  486        Only v alid with  -Script. S pecifies t he name of  a particu lar migrat ion to use
  487        as the  update's  starting p oint. If o mitted, th e last app lied migra tion in
  488        the da tabase wil l be used.
  489   
  490    .PARAMETER  TargetMig ration
  491        Specif ies the na me of a pa rticular m igration t o update t he databas e to. If
  492        omitte d, the cur rent model  will be u sed.
  493   
  494    .PARAMETER  Script
  495        Genera te a SQL s cript rath er than ex ecuting th e pending  changes di rectly.
  496   
  497    .PARAMETER  Force
  498        Specif ies that d ata loss i s acceptab le during  automatic  migration  of the
  499        databa se.
  500   
  501    .PARAMETER  ProjectNa me
  502        Specif ies the pr oject that  contains  the migrat ion config uration ty pe to be
  503        used.  If omitted , the defa ult projec t selected  in packag e manager  console
  504        is use d.
  505   
  506    .PARAMETER  StartUpPr ojectName
  507        Specif ies the co nfiguratio n file to  use for na med connec tion strin gs. If
  508        omitte d, the spe cified pro ject's con figuration  file is u sed.
  509   
  510    .PARAMETER  Configura tionTypeNa me
  511        Specif ies the mi grations c onfigurati on to use.  If omitte d, migrati ons will
  512        attemp t to locat e a single  migration s configur ation type  in the ta rget
  513        projec t.
  514   
  515    .PARAMETER  Connectio nStringNam e
  516        Specif ies the na me of a co nnection s tring to u se from th e applicat ion's
  517        config uration fi le.
  518   
  519    .PARAMETER  Connectio nString
  520        Specif ies the th e connecti on string  to use. If  omitted,  the contex t's
  521        defaul t connecti on will be  used.
  522   
  523    .PARAMETER  Connectio nProviderN ame
  524        Specif ies the pr ovider inv ariant nam e of the c onnection  string.
  525            
  526    .PARAMETER  AppDomain BaseDirect ory
  527        Specif ies the di rectory to  use for t he app-dom ain that i s used for  running M igrations
  528        code s uch that t he app-dom ain is abl e to find  all requir ed assembl ies. This  is an
  529        advanc ed option  that shoul d only be  needed if  the soluti on contain s several  projects 
  530        such t hat the as semblies n eeded for  the contex t and conf iguration  are not al l
  531        refere nced from  either the  project c ontaining  the contex t or the p roject con taining
  532        the mi grations.
  533   
  534    .EXAMPLE
  535            Up date-Datab ase
  536            #  Update the  database  to the lat est migrat ion
  537            
  538    .EXAMPLE
  539            Up date-Datab ase -Targe tMigration  Second
  540            #  Update dat abase to a  migration  named "Se cond"
  541            #  This will  apply migr ations if  the target  hasn't be en applied  or roll b ack migrat ions
  542            #  if it has
  543            
  544    .EXAMPLE
  545            Up date-Datab ase -Scrip t
  546            #  Generate a  script to  update th e database  from it's  current s tate  to t he latest  migration
  547            
  548    .EXAMPLE
  549            Up date-Datab ase -Scrip t -SourceM igration S econd -Tar getMigrati on First
  550            #  Generate a  script to  migrate t he databas e from a s pecified s tart migra tion
  551            #  named "Sec ond" to a  specified  target mig ration nam ed "First"   
  552            
  553    .EXAMPLE
  554            Up date-Datab ase -Scrip t -SourceM igration $ InitialDat abase
  555            #  Generate a  script th at can upg rade a dat abase curr ently at a ny version  to the la test versi on. 
  556            #  The genera ted script  includes  logic to c heck the _ _Migration sHistory t able and o nly apply  changes 
  557            #  that haven 't been pr eviously a pplied. 
  558            
  559    .EXAMPLE 
  560            Up date-Datab ase -Targe tMigration  $InitialD atabase
  561            #  Runs the D own method  to roll-b ack any mi grations t hat have b een applie d to the d atabase
  562            
  563            
  564    #>
  565    function U pdate-Data base
  566    {
  567        [Cmdle tBinding(D efaultPara meterSetNa me = 'Conn ectionStri ngName')]
  568        param  (
  569            [s tring] $So urceMigrat ion,
  570            [s tring] $Ta rgetMigrat ion,
  571            [s witch] $Sc ript,
  572            [s witch] $Fo rce,
  573            [s tring] $Pr ojectName,
  574            [s tring] $St artUpProje ctName,
  575            [s tring] $Co nfiguratio nTypeName,
  576            [p arameter(P arameterSe tName = 'C onnectionS tringName' )]
  577            [s tring] $Co nnectionSt ringName,
  578            [p arameter(P arameterSe tName = 'C onnectionS tringAndPr oviderName ',
  579                 Mandator y = $true) ]
  580            [s tring] $Co nnectionSt ring,
  581            [p arameter(P arameterSe tName = 'C onnectionS tringAndPr oviderName ',
  582                 Mandator y = $true) ]
  583            [s tring] $Co nnectionPr oviderName ,
  584                     [str ing] $AppD omainBaseD irectory)
  585   
  586        Hint-D owngrade $ MyInvocati on.MyComma nd
  587        $runne r = New-Mi grationsRu nner $Proj ectName $S tartUpProj ectName $n ull $Confi gurationTy peName $Co nnectionSt ringName $ Connection String $Co nnectionPr oviderName  $null $Ap pDomainBas eDirectory
  588   
  589        try
  590        {
  591            In voke-Runne rCommand $ runner Sys tem.Data.E ntity.Migr ations.Upd ateDatabas eCommand @ ( $SourceM igration,  $TargetMig ration, $S cript.IsPr esent, $Fo rce.IsPres ent, $Verb ose.IsPres ent )
  592            $e rror = Get -RunnerErr or $runner
  593            
  594            if  ($error)
  595            {
  596                 if ($kno wnExceptio ns -notcon tains $err or.TypeNam e)
  597                 {
  598                     Writ e-Host $er ror.StackT race
  599                 }
  600                 else
  601                 {
  602                     Writ e-Verbose  $error.Sta ckTrace
  603                 }
  604   
  605                 throw $e rror.Messa ge
  606            }                 
  607            $( Get-VSComp onentModel ).GetServi ce([NuGetC onsole.IPo werConsole Window]).S how()            
  608        }
  609        finall y
  610        {                  
  611            Re move-Runne r $runner
  612        }
  613    }
  614   
  615    <#
  616    .SYNOPSIS
  617        Displa ys the mig rations th at have be en applied  to the ta rget datab ase.
  618   
  619    .DESCRIPTI ON
  620        Displa ys the mig rations th at have be en applied  to the ta rget datab ase.
  621   
  622    .PARAMETER  ProjectNa me
  623        Specif ies the pr oject that  contains  the migrat ion config uration ty pe to be
  624        used.  If omitted , the defa ult projec t selected  in packag e manager  console
  625        is use d.
  626   
  627    .PARAMETER  StartUpPr ojectName
  628        Specif ies the co nfiguratio n file to  use for na med connec tion strin gs. If
  629        omitte d, the spe cified pro ject's con figuration  file is u sed.
  630   
  631    .PARAMETER  Configura tionTypeNa me
  632        Specif ies the mi grations c onfigurati on to use.  If omitte d, migrati ons will
  633        attemp t to locat e a single  migration s configur ation type  in the ta rget
  634        projec t.
  635   
  636    .PARAMETER  Connectio nStringNam e
  637        Specif ies the na me of a co nnection s tring to u se from th e applicat ion's
  638        config uration fi le.
  639   
  640    .PARAMETER  Connectio nString
  641        Specif ies the th e connecti on string  to use. If  omitted,  the contex t's
  642        defaul t connecti on will be  used.
  643   
  644    .PARAMETER  Connectio nProviderN ame
  645        Specif ies the pr ovider inv ariant nam e of the c onnection  string.
  646   
  647    .PARAMETER  AppDomain BaseDirect ory
  648        Specif ies the di rectory to  use for t he app-dom ain that i s used for  running M igrations
  649        code s uch that t he app-dom ain is abl e to find  all requir ed assembl ies. This  is an
  650        advanc ed option  that shoul d only be  needed if  the soluti on contain s several  projects 
  651        such t hat the as semblies n eeded for  the contex t and conf iguration  are not al l
  652        refere nced from  either the  project c ontaining  the contex t or the p roject con taining
  653        the mi grations.
  654    #>
  655    function G et-Migrati ons
  656    {
  657        [Cmdle tBinding(D efaultPara meterSetNa me = 'Conn ectionStri ngName')]
  658        param  (
  659            [s tring] $Pr ojectName,
  660            [s tring] $St artUpProje ctName,
  661            [s tring] $Co nfiguratio nTypeName,
  662            [p arameter(P arameterSe tName = 'C onnectionS tringName' )]
  663            [s tring] $Co nnectionSt ringName,
  664            [p arameter(P arameterSe tName = 'C onnectionS tringAndPr oviderName ',
  665                 Mandator y = $true) ]
  666            [s tring] $Co nnectionSt ring,
  667            [p arameter(P arameterSe tName = 'C onnectionS tringAndPr oviderName ',
  668                 Mandator y = $true) ]
  669            [s tring] $Co nnectionPr oviderName ,
  670                     [str ing] $AppD omainBaseD irectory)
  671   
  672        $runne r = New-Mi grationsRu nner $Proj ectName $S tartUpProj ectName $n ull $Confi gurationTy peName $Co nnectionSt ringName $ Connection String $Co nnectionPr oviderName  $null $Ap pDomainBas eDirectory
  673   
  674        try
  675        {
  676            In voke-Runne rCommand $ runner Sys tem.Data.E ntity.Migr ations.Get Migrations Command
  677            $e rror = Get -RunnerErr or $runner
  678            
  679            if  ($error)
  680            {
  681                 if ($kno wnExceptio ns -notcon tains $err or.TypeNam e)
  682                 {
  683                     Writ e-Host $er ror.StackT race
  684                 }
  685                 else
  686                 {
  687                     Writ e-Verbose  $error.Sta ckTrace
  688                 }
  689   
  690                 throw $e rror.Messa ge
  691            }
  692        }
  693        finall y
  694        {
  695            Re move-Runne r $runner
  696        }
  697    }
  698   
  699    function N ew-Migrati onsRunner( $ProjectNa me, $Start UpProjectN ame, $Cont extProject Name, $Con figuration TypeName,  $Connectio nStringNam e, $Connec tionString , $Connect ionProvide rName, $Co ntextAssem blyName, $ AppDomainB aseDirecto ry)
  700    {
  701        $start UpProject  = Get-Migr ationsStar tUpProject  $StartUpP rojectName  $ProjectN ame
  702        Build- Project $s tartUpProj ect
  703   
  704        $proje ct = Get-M igrationsP roject $Pr ojectName
  705        Build- Project $p roject
  706   
  707        $conte xtProject  = $project
  708        if ($C ontextProj ectName)
  709        {
  710            $c ontextProj ect = Get- SingleProj ect $Conte xtProjectN ame
  711            Bu ild-Projec t $context Project
  712        }
  713   
  714        $insta llPath = G et-EntityF rameworkIn stallPath  $project
  715        $tools Path = Joi n-Path $in stallPath  tools
  716   
  717        $info  = New-AppD omainSetup  $project  $installPa th
  718   
  719        $domai n = [AppDo main]::Cre ateDomain( 'Migration s', $null,  $info)
  720        $domai n.SetData( 'project',  $project)
  721        $domai n.SetData( 'contextPr oject', $c ontextProj ect)
  722        $domai n.SetData( 'startUpPr oject', $s tartUpProj ect)
  723        $domai n.SetData( 'configura tionTypeNa me', $Conf igurationT ypeName)
  724        $domai n.SetData( 'connectio nStringNam e', $Conne ctionStrin gName)
  725        $domai n.SetData( 'connectio nString',  $Connectio nString)
  726        $domai n.SetData( 'connectio nProviderN ame', $Con nectionPro viderName)
  727        $domai n.SetData( 'contextAs semblyName ', $Contex tAssemblyN ame)
  728        $domai n.SetData( 'appDomain BaseDirect ory', $App DomainBase Directory)
  729        
  730        $dispa tcher = Ne w-DomainDi spatcher $ toolsPath
  731        $domai n.SetData( 'efDispatc her', $dis patcher)
  732   
  733        return  @{
  734            Do main = $do main;
  735            To olsPath =  $toolsPath
  736        }
  737    }
  738   
  739    function N ew-EFConfi gRunner($P roject)
  740    {
  741        $insta llPath = G et-EntityF rameworkIn stallPath  $Project
  742        $tools Path = Joi n-Path $in stallPath  tools
  743        $info  = New-AppD omainSetup  $Project  $installPa th
  744   
  745        $domai n = [AppDo main]::Cre ateDomain( 'EFConfig' , $null, $ info)
  746        $domai n.SetData( 'project',  $Project)
  747        
  748        $dispa tcher = Ne w-DomainDi spatcher $ toolsPath
  749        $domai n.SetData( 'efDispatc her', $dis patcher)
  750   
  751        return  @{
  752            Do main = $do main;
  753            To olsPath =  $toolsPath
  754        }
  755    }
  756   
  757    function N ew-AppDoma inSetup($P roject, $I nstallPath )
  758    {
  759        $info  = New-Obje ct System. AppDomainS etup -Prop erty @{
  760                 ShadowCo pyFiles =  'true';
  761                 Applicat ionBase =  $InstallPa th;
  762                 PrivateB inPath = ' tools';
  763                 Configur ationFile  = ([AppDom ain]::Curr entDomain. SetupInfor mation.Con figuration File)
  764            }
  765        
  766        $targe tFramework Version =  (New-Objec t System.R untime.Ver sioning.Fr ameworkNam e ($Projec t.Properti es.Item('T argetFrame workMonike r').Value) ).Version
  767   
  768        if ($t argetFrame workVersio n -lt (New -Object Ve rsion @( 4 , 5 )))
  769        {
  770            $i nfo.Privat eBinPath + = ';lib\ne t40'
  771        }
  772        else
  773        {
  774            $i nfo.Privat eBinPath + = ';lib\ne t45'
  775        }
  776   
  777        return  $info
  778    }
  779   
  780    function N ew-DomainD ispatcher( $ToolsPath )
  781    {
  782        $utili tyAssembly  = [System .Reflectio n.Assembly ]::LoadFro m((Join-Pa th $ToolsP ath Entity Framework. PowerShell .Utility.d ll))
  783        $dispa tcher = $u tilityAsse mbly.Creat eInstance(
  784            'S ystem.Data .Entity.Mi grations.U tilities.D omainDispa tcher',
  785            $f alse,
  786            [S ystem.Refl ection.Bin dingFlags] ::Instance  -bor [Sys tem.Reflec tion.Bindi ngFlags]:: Public,
  787            $n ull,
  788            $P SCmdlet,
  789            $n ull,
  790            $n ull)
  791   
  792        return  $dispatch er
  793    }
  794   
  795    function R emove-Runn er($runner )
  796    {
  797        [AppDo main]::Unl oad($runne r.Domain)
  798    }
  799   
  800    function I nvoke-Runn erCommand( $runner, $ command, $ parameters , $anonymo usArgument s)
  801    {
  802        $domai n = $runne r.Domain
  803   
  804        if ($a nonymousAr guments)
  805        {
  806            $a nonymousAr guments.Ge tEnumerato r() | %{
  807                 $domain. SetData($_ .Name, $_. Value)
  808            }
  809        }
  810   
  811        $domai n.CreateIn stanceFrom (
  812            (J oin-Path $ runner.Too lsPath Ent ityFramewo rk.PowerSh ell.dll),
  813            $c ommand,
  814            $f alse,
  815            0,
  816            $n ull,
  817            $p arameters,
  818            $n ull,
  819            $n ull) | Out -Null
  820    }
  821   
  822    function G et-RunnerE rror($runn er)
  823    {
  824        $domai n = $runne r.Domain
  825   
  826        if (!$ domain.Get Data('wasE rror'))
  827        {
  828            re turn $null
  829        }
  830   
  831        return  @{
  832                 Message  = $domain. GetData('e rror.Messa ge');
  833                 TypeName  = $domain .GetData(' error.Type Name');
  834                 StackTra ce = $doma in.GetData ('error.St ackTrace')
  835        }
  836    }
  837   
  838    function G et-Migrati onsProject ($name, $h ideMessage )
  839    {
  840        if ($n ame)
  841        {
  842            re turn Get-S ingleProje ct $name
  843        }
  844   
  845        $proje ct = Get-P roject
  846        $proje ctName = $ project.Na me
  847   
  848        if (!$ hideMessag e)
  849        {
  850            Wr ite-Verbos e "Using N uGet proje ct '$proje ctName'."
  851        }
  852   
  853        return  $project
  854    }
  855   
  856    function G et-Migrati onsStartUp Project($n ame, $fall backName)
  857    {    
  858        $start UpProject  = $null
  859   
  860        if ($n ame)
  861        {
  862            $s tartUpProj ect = Get- SingleProj ect $name
  863        }
  864        else
  865        {
  866            $s tartupProj ectPaths =  $DTE.Solu tion.Solut ionBuild.S tartupProj ects
  867   
  868            if  ($startup ProjectPat hs)
  869            {
  870                 if ($sta rtupProjec tPaths.Len gth -eq 1)
  871                 {
  872                     $sta rtupProjec tPath = $s tartupProj ectPaths[0 ]
  873   
  874                     if ( !(Split-Pa th -IsAbso lute $star tupProject Path))
  875                     {
  876                          $solutionP ath = Spli t-Path $DT E.Solution .Propertie s.Item('Pa th').Value
  877                          $startupPr ojectPath  = Join-Pat h $solutio nPath $sta rtupProjec tPath -Res olve
  878                     }
  879   
  880                     $sta rtupProjec t = Get-So lutionProj ects | ?{
  881                          try
  882                          {
  883                              $fullN ame = $_.F ullName
  884                          }
  885                          catch [Not Implemente dException ]
  886                          {
  887                              return  $false
  888                          }
  889   
  890                          if ($fullN ame -and $ fullName.E ndsWith('\ '))
  891                          {
  892                              $fullN ame = $ful lName.Subs tring(0, $ fullName.L ength - 1)
  893                          }
  894   
  895                          return $fu llName -eq  $startupP rojectPath
  896                     }
  897                 }
  898                 else
  899                 {
  900                     Writ e-Verbose  'More than  one start -up projec t found.'
  901                 }
  902            }
  903            el se
  904            {
  905                 Write-Ve rbose 'No  start-up p roject fou nd.'
  906            }
  907        }
  908   
  909        if (!( $startUpPr oject -and  (Test-Sta rtUpProjec t $startUp Project)))
  910        {
  911            $s tartUpProj ect = Get- Migrations Project $f allbackNam e $true
  912            $s tartUpProj ectName =  $startUpPr oject.Name
  913   
  914            Wr ite-Warnin g "Cannot  determine  a valid st art-up pro ject. Usin g project  '$startUpP rojectName ' instead.  Your conf iguration  file and w orking dir ectory may  not be se t as expec ted. Use t he -StartU pProjectNa me paramet er to set  one explic itly. Use  the -Verbo se switch  for more i nformation ."
  915        }
  916        else
  917        {
  918            $s tartUpProj ectName =  $startUpPr oject.Name
  919   
  920            Wr ite-Verbos e "Using S tartUp pro ject '$sta rtUpProjec tName'."
  921        }
  922   
  923        return  $startUpP roject
  924    }
  925   
  926    function G et-Solutio nProjects( )
  927    {
  928        $proje cts = New- Object Sys tem.Collec tions.Stac k
  929        
  930        $DTE.S olution.Pr ojects | % {
  931            $p rojects.Pu sh($_)
  932        }
  933        
  934        while  ($projects .Count -ne  0)
  935        {
  936            $p roject = $ projects.P op();
  937            
  938            #  NOTE: This  line is s imilar to  doing a "y ield retur n" in C#
  939            $p roject
  940   
  941            if  ($project .ProjectIt ems)
  942            {
  943                 $project .ProjectIt ems | ?{ $ _.SubProje ct } | %{
  944                     $pro jects.Push ($_.SubPro ject)
  945                 }
  946            }
  947        }
  948    }
  949   
  950    function G et-SingleP roject($na me)
  951    {
  952        $proje ct = Get-P roject $na me
  953   
  954        if ($p roject -is  [array])
  955        {
  956            th row "More  than one p roject '$n ame' was f ound. Spec ify the fu ll name of  the one t o use."
  957        }
  958   
  959        return  $project
  960    }
  961   
  962    function T est-StartU pProject($ project)
  963    {    
  964        if ($p roject.Kin d -eq '{cc 5fd16d-436 d-48ad-a40 c-5a424c6e 3e79}')
  965        {
  966            $p rojectName  = $projec t.Name
  967            Wr ite-Verbos e "Cannot  use start- up project  '$project Name'. The  Windows A zure Proje ct type is n't suppor ted."
  968            
  969            re turn $fals e
  970        }
  971        
  972        return  $true
  973    }
  974   
  975    function B uild-Proje ct($projec t)
  976    {
  977        $confi guration =  $DTE.Solu tion.Solut ionBuild.A ctiveConfi guration.N ame
  978   
  979        $DTE.S olution.So lutionBuil d.BuildPro ject($conf iguration,  $project. UniqueName , $true)
  980   
  981        if ($D TE.Solutio n.Solution Build.Last BuildInfo)
  982        {
  983            $p rojectName  = $projec t.Name
  984   
  985            th row "The p roject '$p rojectName ' failed t o build."
  986        }
  987    }
  988   
  989    function G et-EntityF rameworkIn stallPath( $project)
  990    {
  991        $packa ge = Get-P ackage -Pr ojectName  $project.F ullName |  ?{ $_.Id - eq 'Entity Framework'  }
  992   
  993        if (!$ package)
  994        {
  995            $p rojectName  = $projec t.Name
  996   
  997            th row "The E ntityFrame work packa ge is not  installed  on project  '$project Name'."
  998        }
  999        
  1000        return  Get-Packa geInstallP ath $packa ge
  1001    }
  1002        
  1003    function G et-Package InstallPat h($package )
  1004    {
  1005        $compo nentModel  = Get-VsCo mponentMod el
  1006        $packa geInstalle rServices  = $compone ntModel.Ge tService([ NuGet.Visu alStudio.I VsPackageI nstallerSe rvices])
  1007   
  1008        $vsPac kage = $pa ckageInsta llerServic es.GetInst alledPacka ges() | ?{  $_.Id -eq  $package. Id -and $_ .Version - eq $packag e.Version  }
  1009        
  1010        return  $vsPackag e.InstallP ath
  1011    }
  1012   
  1013    function C heck-Proje ct($projec t)
  1014    {
  1015        if (!$ project.Fu llName)
  1016        {
  1017            th row "The P roject arg ument must  refer to  a Visual S tudio proj ect. Use t he '`$proj ect' varia ble provid ed by NuGe t when run ning in in stall.ps1. "
  1018        }
  1019   
  1020            re turn $proj ect.CodeMo del
  1021    }
  1022   
  1023    function H int-Downgr ade ($name ) {
  1024        if (Ge t-Module |  Where { $ _.Name -eq  'EntityFr ameworkCor e' }) {
  1025            Wr ite-Warnin g "Both En tity Frame work 6.x a nd Entity  Framework  Core comma nds are in stalled. T he Entity  Framework  6 version  is executi ng. You ca n fully qu alify the  command to  select wh ich one to  execute,  'EntityFra mework\$na me' for EF 6.x and 'E ntityFrame workCore\$ name' for  EF Core."
  1026        }
  1027    }
  1028   
  1029    Export-Mod uleMember  @( 'Enable -Migration s', 'Add-M igration',  'Update-D atabase',  'Get-Migra tions', 'A dd-EFProvi der', 'Add -EFDefault Connection Factory',  'Initializ e-EFConfig uration')  -Variable  InitialDat abase
  1030   
  1031    # SIG # Be gin signat ure block
  1032    # MIIa3gYJ KoZIhvcNAQ cCoIIazzCC GssCAQExCz AJBgUrDgMC GgUAMGkGCi sGAQQB
  1033    # gjcCAQSg WzBZMDQGCi sGAQQBgjcC AR4wJgIDAQ AABBAfzDtg WUsITrck0s YpfvNR
  1034    # AgEAAgEA AgEAAgEAAg EAMCEwCQYF Kw4DAhoFAA QUMst5oGNh RFW5FyGr05 jAUKeC
  1035    # HF6gghWA MIIEwjCCA6 qgAwIBAgIT MwAAAL+RbP t8GiTgIgAA AAAAvzANBg kqhkiG
  1036    # 9w0BAQUF ADB3MQswCQ YDVQQGEwJV UzETMBEGA1 UECBMKV2Fz aGluZ3Rvbj EQMA4G
  1037    # A1UEBxMH UmVkbW9uZD EeMBwGA1UE ChMVTWljcm 9zb2Z0IENv cnBvcmF0aW 9uMSEw
  1038    # HwYDVQQD ExhNaWNyb3 NvZnQgVGlt ZS1TdGFtcC BQQ0EwHhcN MTYwOTA3MT c1ODQ5
  1039    # WhcNMTgw OTA3MTc1OD Q5WjCBsjEL MAkGA1UEBh MCVVMxEzAR BgNVBAgTCl dhc2hp
  1040    # bmd0b24x EDAOBgNVBA cTB1JlZG1v bmQxHjAcBg NVBAoTFU1p Y3Jvc29mdC BDb3Jw
  1041    # b3JhdGlv bjEMMAoGA1 UECxMDQU9D MScwJQYDVQ QLEx5uQ2lw aGVyIERTRS BFU046
  1042    # NTdDOC0y RDE1LTFDOE IxJTAjBgNV BAMTHE1pY3 Jvc29mdCBU aW1lLVN0YW 1wIFNl
  1043    # cnZpY2Uw ggEiMA0GCS qGSIb3DQEB AQUAA4IBDw AwggEKAoIB AQCt7X+GwP aidVcV
  1044    # TRT2yohV /L1dpTMCvf 4DHlCY0GUm hEzD4Yn22q /qnqZTHDd8 IlI/OHvKhW C9ksKE
  1045    # F+BgBHtU QPSg7s6+ZX y69qX64r6m 7X/NYizeK3 1DsScLsDHn qsbnwJaNZ2 C2u5hh
  1046    # cKsHvc8B aSsv/nKlr6 +eg2iX2y9a i1uB1ySNeu nEtdfchAr1 U6Qb7AJHrX MTdKl8
  1047    # ptLov67a FU0rRRMwQJ OWHR+o/gQa 9v4z/f43RY 2PnMRoF7Dz tn6ditoQ9C gTiMdS
  1048    # MtsqFWMA QNMt5bZ8oY 1hmgkSDN6F wTjVyUEE6t 3KJtgX2hMH jOVqtHXQlu d0GR3Z
  1049    # LtAOMbS7 AgMBAAGjgg EJMIIBBTAd BgNVHQ4EFg QU5GwaORrH k1i0RjZlB8 QAt3kX
  1050    # nBEwHwYD VR0jBBgwFo AUIzT42VJG cArtQPt2+7 MrsMM1sw8w VAYDVR0fBE 0wSzBJ
  1051    # oEegRYZD aHR0cDovL2 NybC5taWNy b3NvZnQuY2 9tL3BraS9j cmwvcHJvZH VjdHMv
  1052    # TWljcm9z b2Z0VGltZV N0YW1wUENB LmNybDBYBg grBgEFBQcB AQRMMEowSA YIKwYB
  1053    # BQUHMAKG PGh0dHA6Ly 93d3cubWlj cm9zb2Z0Lm NvbS9wa2kv Y2VydHMvTW ljcm9z
  1054    # b2Z0VGlt ZVN0YW1wUE NBLmNydDAT BgNVHSUEDD AKBggrBgEF BQ
D
N    BgkqhkiG
  1055    # 9w0BAQUF AAOCAQEAjt 62jcZ+2YBq m7RKit827D RU9OKioi6H EERT0X0bL+ JjUTu3
  1056    # 7k4piPcK 3J/0cfktWu PjrYSuySa/ NbkmlvAhQV 4VpoWxipx3 cZplF9HK9I H4t8AD
  1057    # YDxUI5u1 xb2r24aExG IzWY+1uH92 bzTKbAjuwN zTMQ1z10Kc a4XXPI4HFZ alXxgL
  1058    # fbjCkV3I KNspU1TILV 0Dzk0tdKAw x/MoeZN1HF cB9WjzbpFn CVH+Oy/Nye JOyiNE
  1059    # 4uT/6iyH z1+XCqf2nI rV/DXXsJYK wifVlOvSJ4 ZrV40MYucq 3lWQuKERfX ivLFXl
  1060    # dKyXQrS4 eeToRPSevR isc0GBYuZc zpkdeN5faD CCBOswggPT oAMCAQICEz MAAAF4
  1061    # JVq1zSPG X5UAAQAAAX gwDQYJKoZI hvcNAQEFBQ AweTELMAkG A1UEBhMCVV MxEzAR
  1062    # BgNVBAgT Cldhc2hpbm d0b24xEDAO BgNVBAcTB1 JlZG1vbmQx HjAcBgNVBA oTFU1p
  1063    # Y3Jvc29m dCBDb3Jwb3 JhdGlvbjEj MCEGA1UEAx MaTWljcm9z b2Z0IENvZG UgU2ln
  1064    # bmluZyBQ Q0EwHhcNMT cwODExMjAx MTE1WhcNMT gwODExMjAx MTE1WjCBgj ELMAkG
  1065    # A1UEBhMC VVMxEzARBg NVBAgTCldh c2hpbmd0b2 4xEDAOBgNV BAcTB1JlZG 1vbmQx
  1066    # HjAcBgNV BAoTFU1pY3 Jvc29mdCBD b3Jwb3JhdG lvbjEMMAoG A1UECxMDQU 9DMR4w
  1067    # HAYDVQQD ExVNaWNyb3 NvZnQgQ29y cG9yYXRpb2 4wggEiMA0G CSqGSIb3DQ EBAQUA
  1068    # A4IBDwAw ggEKAoIBAQ CZbh1TVaud srIbXUPPB9 c8S+E+dKSb skHKYlG6SG TH8jhT
  1069    # hpuvGiAO 87F2b9GHVN +DvszaMkGy /xQgHaGEJL fpnb3kpaki c7E0bjDHdG 4KnHRb
  1070    # no/wfUkG LfS79o+cw/ /RY8Ck6yE+ 0czDBcxp0G bw5JyGP+KF qvzRR/3Tv3 nt/5x0
  1071    # 5ZnEOHYP +eDVikDvn/ DH+oxxtiCf X3tkvtm/yX 4eOb47YdmY KQjCgz2+Ni l/lupY
  1072    # vU0QFIjv ke3jshqQIN Dng/vO9ys2 qA0ex/q5hl LKQTST99dG oM86Ge6F72 3ReToq
  1073    # KnGLN8ki CG7uNapOAI QrpCHZq96C VumiaA5Zvx U9AgMBAAGj ggFgMIIBXD ATBgNV
  1074    # HSUEDDAK BggrBgEFBQ cDAzAdBgNV HQ4EFgQUju htD3FD7tk/ RKloJFX05c pgLjcw
  1075    # UQYDVR0R BEowSKRGME QxDDAKBgNV BAsTA0FPQz E0MDIGA1UE BRMrMjI5OD AzKzFh
  1076    # YmY5ZTVm LWNlZDAtND JlNi1hNjVk LWQ5MzUwOT U5ZmUwZTAf BgNVHSMEGD AWgBTL
  1077    # EejK0rQW WAHJNy4zFh a5TJoKHzBW BgNVHR8ETz BNMEugSaBH hkVodHRwOi 8vY3Js
  1078    # Lm1pY3Jv c29mdC5jb2 0vcGtpL2Ny bC9wcm9kdW N0cy9NaWND b2RTaWdQQ0 FfMDgt
  1079    # MzEtMjAx MC5jcmwwWg YIKwYBBQUH AQEETjBMME oGCCsGAQUF BzAChj5odH RwOi8v
  1080    # d3d3Lm1p Y3Jvc29mdC 5jb20vcGtp L2NlcnRzL0 1pY0NvZFNp Z1BDQV8wOC 0zMS0y
  1081    # MDEwLmNy dDANBgkqhk iG9w0BAQUF AAOCAQEAYn G/oHG/xgZY R8NAMHZ/vE 9GM0e4
  1082    # 7YdhuTea 2uY7pSGwM7 07wp8Wan0F a6evK1PWfc d/XNOh2BpE v5o8RmKDoE sG0ECP
  1083    # 13Jug7ck lfKreBVHQ+ Djg43VVFLZ puo7aOAVK6 wjlcnpPUtn +SfH9K0aM2 FjDKVJ
  1084    # FW6XFKXB at5R+Zp6uO xWTxpSeMTe DC5zF6IY6o gR1uzU+9EQ oRlAvkwX6p o+exEL
  1085    # nMLr4++P +fqOxIU+PO DIoB8ijClA qwwKvLlMPa 3qlrNHt+Lw eTMu7lvGC/ RA18wU
  1086    # zzXAeomu Z03blUw+bk OiVgWOk4S0 RN7EnW7zjJ V8gd/+G2db ToUi1cB/fT CCBbww
  1087    # ggOkoAMC AQICCmEzJh oAAAAAADEw DQYJKoZIhv cNAQEFBQAw XzETMBEGCg mSJomT
  1088    # 8ixkARkW A2NvbTEZMB cGCgmSJomT 8ixkARkWCW 1pY3Jvc29m dDEtMCsGA1 UEAxMk
  1089    # TWljcm9z b2Z0IFJvb3 QgQ2VydGlm aWNhdGUgQX V0aG9yaXR5 MB4XDTEwMD gzMTIy
  1090    # MTkzMloX DTIwMDgzMT IyMjkzMlow eTELMAkGA1 UEBhMCVVMx EzARBgNVBA gTCldh
  1091    # c2hpbmd0 b24xEDAOBg NVBAcTB1Jl ZG1vbmQxHj AcBgNVBAoT FU1pY3Jvc2 9mdCBD
  1092    # b3Jwb3Jh dGlvbjEjMC EGA1UEAxMa TWljcm9zb2 Z0IENvZGUg U2lnbmluZy BQQ0Ew
  1093    # ggEiMA0G CSqGSIb3DQ EBAQUAA4IB DwAwggEKAo IBAQCycllc GTBkvx2aYC AgQpl2
  1094    # U2w+G9Zv zMvx6mv+lx YQ4N86dIMa ty+gMuz/3s JCTiPVcgDb NVcKicquIE n08Gis
  1095    # TUuNpb15 S3GbRwfa/S XfnXWIz6pz RH/Xgdvzvf I2pMlcRdyv rT3gKGiXGq elcnNW
  1096    # 8ReU5P01 lHKg1nZfHn dFg4U4FtBz WwW6Z1KNpb JpL9oZC/6S dCnidi9U3R QwWfjS
  1097    # jWL9y8lf RjFQuScT5E Awz3IpECgi xzdOPaAyPZ DNoTgGhVxO VoIoKgUyt0 vXT2Pn
  1098    # 0i1i8UU9 56wIAPZGoZ 7RW4wmU+h6 qkryRs83PD ietHdcpRee jcsRj1Y8wa wJXwPT
  1099    # AgMBAAGj ggFeMIIBWj APBgNVHRMB Af8EBTADAQ H/MB0GA1Ud DgQWBBTLEe jK0rQW
  1100    # WAHJNy4z Fha5TJoKHz ALBgNVHQ8E BAMCAYYwEg YJKwYBBAGC NxUBBAUCAw EAATAj
  1101    # BgkrBgEE AYI3FQIEFg QU/dExTtMm ipXhmGA7qD Fvpjy82C0w GQYJKwYBBA GCNxQC
  1102    # BAweCgBT AHUAYgBDAE EwHwYDVR0j BBgwFoAUDq yCYEBWJ5fl JRP8KuEKU5 VZ5KQw
  1103    # UAYDVR0f BEkwRzBFoE OgQYY/aHR0 cDovL2NybC 5taWNyb3Nv ZnQuY29tL3 BraS9j
  1104    # cmwvcHJv ZHVjdHMvbW ljcm9zb2Z0 cm9vdGNlcn QuY3JsMFQG CCsGAQUFBw EBBEgw
  1105    # RjBEBggr BgEFBQcwAo Y4aHR0cDov L3d3dy5taW Nyb3NvZnQu Y29tL3BraS 9jZXJ0
  1106    # cy9NaWNy b3NvZnRSb2 90Q2VydC5j cnQwDQYJKo ZIhvcNAQEF BQADggIBAF k5Pn8m
  1107    # Rq/rb0Cx MrVq6w4vbq hJ9+tfde1M Oy3XQ60L/s vpLTGjI8x8 UJiAIV2sPS 9MuqKo
  1108    # VpzjcLu4 tPh5tUly9z 7qQX/K4QwX aculnCAt+g tQxFbNLeNK 0rxw56gNog OlVuC4
  1109    # iktX8pVC nPHz7+7jhh 80PLhWmvBT I4UqpIIck+ KUBx3y4k74 jKHK6BOlkU 7IG9KP
  1110    # cpUqcW2b Gvgc8FPWZ8 wi/1wdzaKM vSeyeWNWRK JRzfnpo1hW 3ZsCRUQvX/ TartSC
  1111    # Mm78pJUT 5Otp56miLL 7IKxAOZY6Z 2/Wi+hImCW U4lPF6H0q7 0eFW6NB4lh hcyTUW
  1112    # X92THUmO Lb6tNEQc7h AVGgBd3TVb Ic6YxwnuhQ 6MT20OE049 fClInHLR82 zKwexw
  1113    # o1eSV32U jaAbSANa98 +jZwp0pTbt LS8XyOZyNx L0b7E8Z4L5 UrKNMxZlHg 6K3RDe
  1114    # ZPRvzkbU 0xfpecQEtN P7LN8fip6s CvsTJ0Ct5P nhqX9Guwdg R2VgQE6wQu xO7bN2
  1115    # edgKNAlt HIAxH+IOVN 3lofvlRxCt ZJj/UBYufL 8FIXrilUEn acOTj5XJjd ibIa4N
  1116    # XJzwoq6G aIMMai27dm sAHZat8hZ7 9haDJLmIz2 qoRzEvmtzj cT3XAH5iR9 HOiMm4
  1117    # GPoOco3B oz2vAkBq/2 mbluIQqBC0 N1AI1sM9MI IGBzCCA++g AwIBAgIKYR ZoNAAA
  1118    # AAAAHDAN BgkqhkiG9w 0BAQUFADBf MRMwEQYKCZ ImiZPyLGQB GRYDY29tMR kwFwYK
  1119    # CZImiZPy LGQBGRYJbW ljcm9zb2Z0 MS0wKwYDVQ QDEyRNaWNy b3NvZnQgUm 9vdCBD
  1120    # ZXJ0aWZp Y2F0ZSBBdX Rob3JpdHkw HhcNMDcwND AzMTI1MzA5 WhcNMjEwND AzMTMw
  1121    # MzA5WjB3 MQswCQYDVQ QGEwJVUzET MBEGA1UECB MKV2FzaGlu Z3RvbjEQMA 4GA1UE
  1122    # BxMHUmVk bW9uZDEeMB wGA1UEChMV TWljcm9zb2 Z0IENvcnBv cmF0aW9uMS EwHwYD
  1123    # VQQDExhN aWNyb3NvZn QgVGltZS1T dGFtcCBQQ0 EwggEiMA0G CSqGSIb3DQ EBAQUA
  1124    # A4IBDwAw ggEKAoIBAQ CfoWyx39tI kip8ay4Z4b 3i48WZUSNQ rc7dGE4kD+ 7Rp9FM
  1125    # rXQwIBHr B9VUlRVJlB tCkq6YXDAm 2gBr6Hu97I kHD/cOBJjw icwfyzMkh5 3y9Gcc
  1126    # LPx754gd 6udOo6HBI1 PKjfpFzwnQ Xq/QsEIEov mmbJNn1yjc RlOwhtDlKE YuJ6yG
  1127    # T1VSDOQD LPtqkJAwbo fzWTCd+n7W l7PoIZd++N IT8wi3U21S tEWQn0gASk dmEScp
  1128    # ZqiX5NMG gUqi+YSnEU cUCYKfhO1V eP4Bmh1QCI UAEDBG7bfe I0a7xC1Un6 8eeEEx
  1129    # d8yb3zuD k6FhArUdDb H895uyAc4i S1T/+QXDwi ALAgMBAAGj ggGrMIIBpz APBgNV
  1130    # HRMBAf8E BTADAQH/MB 0GA1UdDgQW BBQjNPjZUk ZwCu1A+3b7 syuwwzWzDz ALBgNV
  1131    # HQ8EBAMC AYYwEAYJKw YBBAGCNxUB BAMCAQAwgZ gGA1UdIwSB kDCBjYAUDq yCYEBW
  1132    # J5flJRP8 KuEKU5VZ5K ShY6RhMF8x EzARBgoJki aJk/IsZAEZ FgNjb20xGT AXBgoJ
  1133    # kiaJk/Is ZAEZFgltaW Nyb3NvZnQx LTArBgNVBA MTJE1pY3Jv c29mdCBSb2 90IENl
  1134    # cnRpZmlj YXRlIEF1dG hvcml0eYIQ ea0WoUqgpa 1Mc1j0BxMu ZTBQBgNVHR 8ESTBH
  1135    # MEWgQ6BB hj9odHRwOi 8vY3JsLm1p Y3Jvc29mdC 5jb20vcGtp L2NybC9wcm 9kdWN0
  1136    # cy9taWNy b3NvZnRyb2 90Y2VydC5j cmwwVAYIKw YBBQUHAQEE SDBGMEQGCC sGAQUF
  1137    # BzAChjho dHRwOi8vd3 d3Lm1pY3Jv c29mdC5jb2 0vcGtpL2Nl cnRzL01pY3 Jvc29m
  1138    # dFJvb3RD ZXJ0LmNydD ATBgNVHSUE DDAKBggrBg EFBQ
D
N    BgkqhkiG9w 0BAQUF
  1139    # AAOCAgEA EJeKw1wDRD bd6bStd9vO eVFNAbEudH FbbQwTq86+ e4+4LtQSoo xtYrhX
  1140    # AstOIBNQ md16QOJXu6 9YmhzhHQGG rLt48ovQ7D sB7uK+jwoF yI1I4vBTFd 1Pq5Lk
  1141    # 541q1YDB 5pTyBi+FA+ mRKiQicPv2 /OR4mS4N9w ficLwYTp2O awpylbihOZ xnLcVR
  1142    # DupiXD8W mIsgP+IHGj L5zDFKdjE9 K3ILyOpwPf +FChPfwgph jvDXuBfrTo t/xTUr
  1143    # XqO/67x9 C0J71FNyIe 4wyrt4ZVxb ARcKFA7S2h SY9Ty5Zliz LS/n+YWGzF FW6J1w
  1144    # lGysOUzU 9nm/qhh6Yi nvopspNAZ3 GmLJPR5tH4 LwC8csu89D s+X57H2146 SodDW4
  1145    # TsVxIxIm dgs8UoxxWk ZDFLyzs7BN Z8ifQv+AeS GAnhUwZuhC El4ayJ4iId BD6Svp
  1146    # u/RIzCzU 2DKATCYqSC RfWupW76be mZ3KOm+9gS d0BhHudiG/ m4LBJ1S2sW o9iaF2
  1147    # YbRuoROm v6pH8BJv/Y oybLL+31HI jCPJZr2dHY cSZAI9La9Z j7jkIeW1sM pjtHhU
  1148    # BdRBLlCs lLCleKuzoJ Z1GtmShxN1 Ii8yqAhuoF uMJb+g74TK IdbrHk/Jmu 5J4PcB
  1149    # ZW+JC33I acjmbuqnl8 4xKf8OxVtc 2E0bodj6L5 4/LlUWa8kT o/0xggTIMI IExAIB
  1150    # ATCBkDB5 MQswCQYDVQ QGEwJVUzET MBEGA1UECB MKV2FzaGlu Z3RvbjEQMA 4GA1UE
  1151    # BxMHUmVk bW9uZDEeMB wGA1UEChMV TWljcm9zb2 Z0IENvcnBv cmF0aW9uMS MwIQYD
  1152    # VQQDExpN aWNyb3NvZn QgQ29kZSBT aWduaW5nIF BDQQITMwAA AXglWrXNI8 ZflQAB
  1153    # AAABeDAJ BgUrDgMCGg UAoIHhMBkG CSqGSIb3DQ EJAzEMBgor BgEEAYI3Ag EEMBwG
  1154    # CisGAQQB gjcCAQsxDj AMBgorBgEE AYI3AgEVMC MGCSqGSIb3 DQEJBDEWBB Tlz9AL
  1155    # f1sBglUb 85Teir2bIY mVvDCBgAYK KwYBBAGCNw IBDDFyMHCg UoBQAEUAbg B0AGkA
  1156    # dAB5ACAA RgByAGEAbQ BlAHcAbwBy AGsAIABUAG 8AbwBsAHMA IABmAG8Acg AgAFYA
  1157    # aQBzAHUA YQBsACAAUw B0AHUAZABp AG+hGoAYaH R0cDovL21z ZG4uY29tL2 RhdGEv
  1158    # ZWYgMA0G CSqGSIb3DQ EBAQUABIIB AGeaKWq3Th dTiw0FniJG aIvelS5Bgh hhNI3x
  1159    # ezUDCIPf p6Glc9zffE Pt3qMdZORj Y3mgsbrRO7 hXNm9GR5cb 68G5C7/Lhr Wfp34J
  1160    # yWQ1dbnA pNi6bp64SE ML52vcDVMM HnbKRM3ns0 /y/qu/XH2G SUUPuEjD7c d5t0NO
  1161    # DUQZ2gHt 4JeqZERgvN QWTxdUn83V 2BwOz1i6Kt HzmGdvEjb8 ZrPQTlu1Uo HHYXsQ
  1162    # jUv8dhEH kaj3o2jLEI hYXp1ait0/ OAk9dA5QdP VCBHy4RkDL WI4v58s0j1 J0Cw0l
  1163    # 2a/7+Agm 1vvVLQZHof llOSIgd5Aj 4Y1NiMYpLo 8Y4z3iBRXg UQKhggIoMI ICJAYJ
  1164    # KoZIhvcN AQkGMYICFT CCAhECAQEw gY4wdzELMA kGA1UEBhMC VVMxEzARBg NVBAgT
  1165    # Cldhc2hp bmd0b24xED AOBgNVBAcT B1JlZG1vbm QxHjAcBgNV BAoTFU1pY3 Jvc29m
  1166    # dCBDb3Jw b3JhdGlvbj EhMB8GA1UE AxMYTWljcm 9zb2Z0IFRp bWUtU3RhbX AgUENB
  1167    # AhMzAAAA v5Fs+3waJO AiAAAAAAC/ MAkGBSsOAw IaBQCgXTAY BgkqhkiG9w 0BCQMx
  1168    # CwYJKoZI hvcNAQcBMB wGCSqGSIb3 DQEJBTEPFw 0xNzEwMjMy MDEzNDhaMC MGCSqG
  1169    # SIb3DQEJ BDEWBBTDiJ Z8a7P4Som1 wzlUt7g8Oi C3qzANBgkq hkiG9w0BAQ UFAASC
  1170    # AQAmJlbq 0GKEk6SUOq A4Ksyj99KU lnPFcFyf1A qvHRdShmQj fEEo/pmR9c WmGNdA
  1171    # 8M7wVFFZ FRlmkF3oCl //ckniUJ/a DYtXCTskDF d2Tc8xJ/ns JOespt0LSp biadxI
  1172    # Goa9nZNX ymAEidosoh 0MmqB25gQf q9X+mMU7rV Up9eBUjAco T3FHv+gkzE 1XjvDE
  1173    # YFGvQ1PR xjiYKlQKIT DhtFhog2MS uGtvWpFV1a eqXDrANONl LyrscHrzKj QkKiwU
  1174    # PPJQ+iyg ds9A3xUri6 Jevj7Yjvr0 hBTFaxL7xm QtgaafY/Tq AtRcbCz2Gu 9hkUay
  1175    # WYGdtIZc 7fAdNGkxqR xddvkD
  1176    # SIG # En d signatur e block