| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168 | 
							- # Copyright (c) Microsoft Corporation.  All rights reserved.
 
- $InitialDatabase = '0'
 
- $knownExceptions = @(
 
-     'System.Data.Entity.Migrations.Infrastructure.MigrationsException',
 
-     'System.Data.Entity.Migrations.Infrastructure.AutomaticMigrationsDisabledException',
 
-     'System.Data.Entity.Migrations.Infrastructure.AutomaticDataLossException',
 
-     'System.Data.Entity.Migrations.Infrastructure.MigrationsPendingException',
 
-     'System.Data.Entity.Migrations.ProjectTypeNotSupportedException'
 
- )
 
- <#
 
- .SYNOPSIS
 
-     Adds or updates an Entity Framework provider entry in the project config
 
-     file.
 
- .DESCRIPTION
 
-     Adds an entry into the 'entityFramework' section of the project config
 
-     file for the specified provider invariant name and provider type. If an
 
-     entry for the given invariant name already exists, then that entry is
 
-     updated with the given type name, unless the given type name already
 
-     matches, in which case no action is taken. The 'entityFramework'
 
-     section is added if it does not exist. The config file is automatically
 
-     saved if and only if a change was made.
 
-     
 
-     This command is typically used only by Entity Framework provider NuGet
 
-     packages and is run from the 'install.ps1' script.
 
- .PARAMETER Project
 
-     The Visual Studio project to update. When running in the NuGet install.ps1
 
-     script the '$project' variable provided as part of that script should be
 
-     used.
 
- .PARAMETER InvariantName
 
-     The provider invariant name that uniquely identifies this provider. For
 
-     example, the Microsoft SQL Server provider is registered with the invariant
 
-     name 'System.Data.SqlClient'.
 
- .PARAMETER TypeName
 
-     The assembly-qualified type name of the provider-specific type that
 
-     inherits from 'System.Data.Entity.Core.Common.DbProviderServices'. For
 
-     example, for the Microsoft SQL Server provider, this type is 
 
-     'System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer'.
 
- #>
 
- function Add-EFProvider
 
- {
 
-     param (
 
-         [parameter(Position = 0,
 
-             Mandatory = $true)]
 
-         $Project,
 
-         [parameter(Position = 1,
 
-             Mandatory = $true)]
 
-         [string] $InvariantName,
 
-         [parameter(Position = 2,
 
-             Mandatory = $true)]
 
-         [string] $TypeName
 
-     )
 
- 	if (!(Check-Project $project))
 
- 	{
 
- 	    return
 
- 	}
 
-     $runner = New-EFConfigRunner $Project
 
-     try
 
-     {
 
-         Invoke-RunnerCommand $runner System.Data.Entity.ConnectionFactoryConfig.AddProviderCommand @( $InvariantName, $TypeName )
 
-         $error = Get-RunnerError $runner
 
-         if ($error)
 
-         {
 
-             if ($knownExceptions -notcontains $error.TypeName)
 
-             {
 
-                 Write-Host $error.StackTrace
 
-             }
 
-             else
 
-             {
 
-                 Write-Verbose $error.StackTrace
 
-             }
 
-             throw $error.Message
 
-         }
 
-     }
 
-     finally
 
-     {				
 
-         Remove-Runner $runner
 
-     }
 
- }
 
- <#
 
- .SYNOPSIS
 
-     Adds or updates an Entity Framework default connection factory in the
 
-     project config file.
 
- .DESCRIPTION
 
-     Adds an entry into the 'entityFramework' section of the project config
 
-     file for the connection factory that Entity Framework will use by default
 
-     when creating new connections by convention. Any existing entry will be
 
-     overridden if it does not match. The 'entityFramework' section is added if
 
-     it does not exist. The config file is automatically saved if and only if
 
-     a change was made.
 
-     
 
-     This command is typically used only by Entity Framework provider NuGet
 
-     packages and is run from the 'install.ps1' script.
 
- .PARAMETER Project
 
-     The Visual Studio project to update. When running in the NuGet install.ps1
 
-     script the '$project' variable provided as part of that script should be
 
-     used.
 
- .PARAMETER TypeName
 
-     The assembly-qualified type name of the connection factory type that
 
-     implements the 'System.Data.Entity.Infrastructure.IDbConnectionFactory'
 
-     interface.  For example, for the Microsoft SQL Server Express provider
 
-     connection factory, this type is
 
-     'System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework'.
 
- .PARAMETER ConstructorArguments
 
-     An optional array of strings that will be passed as arguments to the
 
-     connection factory type constructor.
 
- #>
 
- function Add-EFDefaultConnectionFactory
 
- {
 
-     param (
 
-         [parameter(Position = 0,
 
-             Mandatory = $true)]
 
-         $Project,
 
-         [parameter(Position = 1,
 
-             Mandatory = $true)]
 
-         [string] $TypeName,
 
-         [string[]] $ConstructorArguments
 
-     )
 
- 	if (!(Check-Project $project))
 
- 	{
 
- 	    return
 
- 	}
 
-     $runner = New-EFConfigRunner $Project
 
-     try
 
-     {
 
-         Invoke-RunnerCommand $runner System.Data.Entity.ConnectionFactoryConfig.AddDefaultConnectionFactoryCommand @( $TypeName, $ConstructorArguments )
 
-         $error = Get-RunnerError $runner
 
-         if ($error)
 
-         {
 
-             if ($knownExceptions -notcontains $error.TypeName)
 
-             {
 
-                 Write-Host $error.StackTrace
 
-             }
 
-             else
 
-             {
 
-                 Write-Verbose $error.StackTrace
 
-             }
 
-             throw $error.Message
 
-         }
 
-     }
 
-     finally
 
-     {				
 
-         Remove-Runner $runner
 
-     }
 
- }
 
- <#
 
- .SYNOPSIS
 
-     Initializes the Entity Framework section in the project config file
 
-     and sets defaults.
 
- .DESCRIPTION
 
-     Creates the 'entityFramework' section of the project config file and sets
 
-     the default connection factory to use SQL Express if it is running on the
 
-     machine, or LocalDb otherwise. Note that installing a different provider
 
-     may change the default connection factory.  The config file is
 
-     automatically saved if and only if a change was made.
 
-     In addition, any reference to 'System.Data.Entity.dll' in the project is
 
-     removed.
 
-     
 
-     This command is typically used only by Entity Framework provider NuGet
 
-     packages and is run from the 'install.ps1' script.
 
- .PARAMETER Project
 
-     The Visual Studio project to update. When running in the NuGet install.ps1
 
-     script the '$project' variable provided as part of that script should be
 
-     used.
 
- #>
 
- function Initialize-EFConfiguration
 
- {
 
-     param (
 
-         [parameter(Position = 0,
 
-             Mandatory = $true)]
 
-         $Project
 
-     )
 
- 	if (!(Check-Project $project))
 
- 	{
 
- 	    return
 
- 	}
 
-     $runner = New-EFConfigRunner $Project
 
-     try
 
-     {
 
-         Invoke-RunnerCommand $runner System.Data.Entity.ConnectionFactoryConfig.InitializeEntityFrameworkCommand
 
-         $error = Get-RunnerError $runner
 
-         if ($error)
 
-         {
 
-             if ($knownExceptions -notcontains $error.TypeName)
 
-             {
 
-                 Write-Host $error.StackTrace
 
-             }
 
-             else
 
-             {
 
-                 Write-Verbose $error.StackTrace
 
-             }
 
-             throw $error.Message
 
-         }
 
-     }
 
-     finally
 
-     {				
 
-         Remove-Runner $runner
 
-     }
 
- }
 
- <#
 
- .SYNOPSIS
 
-     Enables Code First Migrations in a project.
 
- .DESCRIPTION
 
-     Enables Migrations by scaffolding a migrations configuration class in the project. If the
 
-     target database was created by an initializer, an initial migration will be created (unless
 
-     automatic migrations are enabled via the EnableAutomaticMigrations parameter).
 
- .PARAMETER ContextTypeName
 
-     Specifies the context to use. If omitted, migrations will attempt to locate a
 
-     single context type in the target project.
 
- .PARAMETER EnableAutomaticMigrations
 
-     Specifies whether automatic migrations will be enabled in the scaffolded migrations configuration.
 
-     If omitted, automatic migrations will be disabled.
 
- .PARAMETER MigrationsDirectory
 
-     Specifies the name of the directory that will contain migrations code files.
 
-     If omitted, the directory will be named "Migrations". 
 
- .PARAMETER ProjectName
 
-     Specifies the project that the scaffolded migrations configuration class will
 
-     be added to. If omitted, the default project selected in package manager
 
-     console is used.
 
- .PARAMETER StartUpProjectName
 
-     Specifies the configuration file to use for named connection strings. If
 
-     omitted, the specified project's configuration file is used.
 
- .PARAMETER ContextProjectName
 
-     Specifies the project which contains the DbContext class to use. If omitted,
 
-     the context is assumed to be in the same project used for migrations.
 
- .PARAMETER ConnectionStringName
 
-     Specifies the name of a connection string to use from the application's
 
-     configuration file.
 
- .PARAMETER ConnectionString
 
-     Specifies the the connection string to use. If omitted, the context's
 
-     default connection will be used.
 
- .PARAMETER ConnectionProviderName
 
-     Specifies the provider invariant name of the connection string.
 
- .PARAMETER Force
 
-     Specifies that the migrations configuration be overwritten when running more
 
-     than once for a given project.
 
- 	
 
- .PARAMETER ContextAssemblyName
 
-     Specifies the name of the assembly which contains the DbContext class to use. Use this
 
-     parameter instead of ContextProjectName when the context is contained in a referenced
 
-     assembly rather than in a project of the solution.
 
- .PARAMETER AppDomainBaseDirectory
 
-     Specifies the directory to use for the app-domain that is used for running Migrations
 
-     code such that the app-domain is able to find all required assemblies. This is an
 
-     advanced option that should only be needed if the solution contains	several projects 
 
-     such that the assemblies needed for the context and configuration are not all
 
-     referenced from either the project containing the context or the project containing
 
-     the migrations.
 
- .EXAMPLE 
 
- 	Enable-Migrations
 
- 	# Scaffold a migrations configuration in a project with only one context
 
- 	
 
- .EXAMPLE 
 
- 	Enable-Migrations -Auto
 
- 	# Scaffold a migrations configuration with automatic migrations enabled for a project
 
- 	# with only one context
 
- 	
 
- .EXAMPLE 
 
- 	Enable-Migrations -ContextTypeName MyContext -MigrationsDirectory DirectoryName
 
- 	# Scaffold a migrations configuration for a project with multiple contexts
 
- 	# This scaffolds a migrations configuration for MyContext and will put the configuration
 
- 	# and subsequent configurations in a new directory called "DirectoryName"
 
- #>
 
- function Enable-Migrations
 
- {
 
-     [CmdletBinding(DefaultParameterSetName = 'ConnectionStringName')] 
 
-     param (
 
-         [string] $ContextTypeName,
 
-         [alias('Auto')]
 
-         [switch] $EnableAutomaticMigrations,
 
-         [string] $MigrationsDirectory,
 
-         [string] $ProjectName,
 
-         [string] $StartUpProjectName,
 
-         [string] $ContextProjectName,
 
-         [parameter(ParameterSetName = 'ConnectionStringName')]
 
-         [string] $ConnectionStringName,
 
-         [parameter(ParameterSetName = 'ConnectionStringAndProviderName',
 
-             Mandatory = $true)]
 
-         [string] $ConnectionString,
 
-         [parameter(ParameterSetName = 'ConnectionStringAndProviderName',
 
-             Mandatory = $true)]
 
-         [string] $ConnectionProviderName,
 
-         [switch] $Force,
 
-         [string] $ContextAssemblyName,
 
- 		[string] $AppDomainBaseDirectory
 
-     )
 
-     $runner = New-MigrationsRunner $ProjectName $StartUpProjectName $ContextProjectName $null $ConnectionStringName $ConnectionString $ConnectionProviderName $ContextAssemblyName $AppDomainBaseDirectory
 
-     try
 
-     {
 
-         Invoke-RunnerCommand $runner System.Data.Entity.Migrations.EnableMigrationsCommand @( $EnableAutomaticMigrations.IsPresent, $Force.IsPresent ) @{ 'ContextTypeName' = $ContextTypeName; 'MigrationsDirectory' = $MigrationsDirectory }        		
 
-         $error = Get-RunnerError $runner					
 
-         if ($error)
 
-         {
 
-             if ($knownExceptions -notcontains $error.TypeName)
 
-             {
 
-                 Write-Host $error.StackTrace
 
-             }
 
-             else
 
-             {
 
-                 Write-Verbose $error.StackTrace
 
-             }
 
-             throw $error.Message
 
-         }
 
-         $(Get-VSComponentModel).GetService([NuGetConsole.IPowerConsoleWindow]).Show()	        
 
-     }
 
-     finally
 
-     {				
 
-         Remove-Runner $runner		
 
-     }
 
- }
 
- <#
 
- .SYNOPSIS
 
-     Scaffolds a migration script for any pending model changes.
 
- .DESCRIPTION
 
-     Scaffolds a new migration script and adds it to the project.
 
- .PARAMETER Name
 
-     Specifies the name of the custom script.
 
- .PARAMETER Force
 
-     Specifies that the migration user code be overwritten when re-scaffolding an
 
-     existing migration.
 
- .PARAMETER ProjectName
 
-     Specifies the project that contains the migration configuration type to be
 
-     used. If omitted, the default project selected in package manager console
 
-     is used.
 
- .PARAMETER StartUpProjectName
 
-     Specifies the configuration file to use for named connection strings. If
 
-     omitted, the specified project's configuration file is used.
 
- .PARAMETER ConfigurationTypeName
 
-     Specifies the migrations configuration to use. If omitted, migrations will
 
-     attempt to locate a single migrations configuration type in the target
 
-     project.
 
- .PARAMETER ConnectionStringName
 
-     Specifies the name of a connection string to use from the application's
 
-     configuration file.
 
- .PARAMETER ConnectionString
 
-     Specifies the the connection string to use. If omitted, the context's
 
-     default connection will be used.
 
- .PARAMETER ConnectionProviderName
 
-     Specifies the provider invariant name of the connection string.
 
- .PARAMETER IgnoreChanges
 
-     Scaffolds an empty migration ignoring any pending changes detected in the current model.
 
-     This can be used to create an initial, empty migration to enable Migrations for an existing
 
-     database. N.B. Doing this assumes that the target database schema is compatible with the
 
-     current model.
 
- .PARAMETER AppDomainBaseDirectory
 
-     Specifies the directory to use for the app-domain that is used for running Migrations
 
-     code such that the app-domain is able to find all required assemblies. This is an
 
-     advanced option that should only be needed if the solution contains	several projects 
 
-     such that the assemblies needed for the context and configuration are not all
 
-     referenced from either the project containing the context or the project containing
 
-     the migrations.
 
- 	
 
- .EXAMPLE
 
- 	Add-Migration First
 
- 	# Scaffold a new migration named "First"
 
- 	
 
- .EXAMPLE
 
- 	Add-Migration First -IgnoreChanges
 
- 	# Scaffold an empty migration ignoring any pending changes detected in the current model.
 
- 	# This can be used to create an initial, empty migration to enable Migrations for an existing
 
- 	# database. N.B. Doing this assumes that the target database schema is compatible with the
 
- 	# current model.
 
- #>
 
- function Add-Migration
 
- {
 
-     [CmdletBinding(DefaultParameterSetName = 'ConnectionStringName')]
 
-     param (
 
-         [parameter(Position = 0,
 
-             Mandatory = $true)]
 
-         [string] $Name,
 
-         [switch] $Force,
 
-         [string] $ProjectName,
 
-         [string] $StartUpProjectName,
 
-         [string] $ConfigurationTypeName,
 
-         [parameter(ParameterSetName = 'ConnectionStringName')]
 
-         [string] $ConnectionStringName,
 
-         [parameter(ParameterSetName = 'ConnectionStringAndProviderName',
 
-             Mandatory = $true)]
 
-         [string] $ConnectionString,
 
-         [parameter(ParameterSetName = 'ConnectionStringAndProviderName',
 
-             Mandatory = $true)]
 
-         [string] $ConnectionProviderName,
 
-         [switch] $IgnoreChanges,
 
- 		[string] $AppDomainBaseDirectory)
 
-     $runner = New-MigrationsRunner $ProjectName $StartUpProjectName $null $ConfigurationTypeName $ConnectionStringName $ConnectionString $ConnectionProviderName $null $AppDomainBaseDirectory
 
-     try
 
-     {
 
-         Invoke-RunnerCommand $runner System.Data.Entity.Migrations.AddMigrationCommand @( $Name, $Force.IsPresent, $IgnoreChanges.IsPresent )
 
-         $error = Get-RunnerError $runner       		
 
-         if ($error)
 
-         {
 
-             if ($knownExceptions -notcontains $error.TypeName)
 
-             {
 
-                 Write-Host $error.StackTrace
 
-             }
 
-             else
 
-             {
 
-                 Write-Verbose $error.StackTrace
 
-             }
 
-             throw $error.Message
 
-         }		
 
-         $(Get-VSComponentModel).GetService([NuGetConsole.IPowerConsoleWindow]).Show()	        
 
-     }
 
-     finally
 
-     {			
 
-         Remove-Runner $runner		
 
-     }	
 
- }
 
- <#
 
- .SYNOPSIS
 
-     Applies any pending migrations to the database.
 
- .DESCRIPTION
 
-     Updates the database to the current model by applying pending migrations.
 
- .PARAMETER SourceMigration
 
-     Only valid with -Script. Specifies the name of a particular migration to use
 
-     as the update's starting point. If omitted, the last applied migration in
 
-     the database will be used.
 
- .PARAMETER TargetMigration
 
-     Specifies the name of a particular migration to update the database to. If
 
-     omitted, the current model will be used.
 
- .PARAMETER Script
 
-     Generate a SQL script rather than executing the pending changes directly.
 
- .PARAMETER Force
 
-     Specifies that data loss is acceptable during automatic migration of the
 
-     database.
 
- .PARAMETER ProjectName
 
-     Specifies the project that contains the migration configuration type to be
 
-     used. If omitted, the default project selected in package manager console
 
-     is used.
 
- .PARAMETER StartUpProjectName
 
-     Specifies the configuration file to use for named connection strings. If
 
-     omitted, the specified project's configuration file is used.
 
- .PARAMETER ConfigurationTypeName
 
-     Specifies the migrations configuration to use. If omitted, migrations will
 
-     attempt to locate a single migrations configuration type in the target
 
-     project.
 
- .PARAMETER ConnectionStringName
 
-     Specifies the name of a connection string to use from the application's
 
-     configuration file.
 
- .PARAMETER ConnectionString
 
-     Specifies the the connection string to use. If omitted, the context's
 
-     default connection will be used.
 
- .PARAMETER ConnectionProviderName
 
-     Specifies the provider invariant name of the connection string.
 
- 	
 
- .PARAMETER AppDomainBaseDirectory
 
-     Specifies the directory to use for the app-domain that is used for running Migrations
 
-     code such that the app-domain is able to find all required assemblies. This is an
 
-     advanced option that should only be needed if the solution contains	several projects 
 
-     such that the assemblies needed for the context and configuration are not all
 
-     referenced from either the project containing the context or the project containing
 
-     the migrations.
 
- .EXAMPLE
 
- 	Update-Database
 
- 	# Update the database to the latest migration
 
- 	
 
- .EXAMPLE
 
- 	Update-Database -TargetMigration Second
 
- 	# Update database to a migration named "Second"
 
- 	# This will apply migrations if the target hasn't been applied or roll back migrations
 
- 	# if it has
 
- 	
 
- .EXAMPLE
 
- 	Update-Database -Script
 
- 	# Generate a script to update the database from it's current state  to the latest migration
 
- 	
 
- .EXAMPLE
 
- 	Update-Database -Script -SourceMigration Second -TargetMigration First
 
- 	# Generate a script to migrate the database from a specified start migration
 
- 	# named "Second" to a specified target migration named "First"	
 
- 	
 
- .EXAMPLE
 
- 	Update-Database -Script -SourceMigration $InitialDatabase
 
- 	# Generate a script that can upgrade a database currently at any version to the latest version. 
 
- 	# The generated script includes logic to check the __MigrationsHistory table and only apply changes 
 
- 	# that haven't been previously applied.	
 
- 	
 
- .EXAMPLE 
 
- 	Update-Database -TargetMigration $InitialDatabase
 
- 	# Runs the Down method to roll-back any migrations that have been applied to the database
 
- 	
 
- 	
 
- #>
 
- function Update-Database
 
- {
 
-     [CmdletBinding(DefaultParameterSetName = 'ConnectionStringName')]
 
-     param (
 
-         [string] $SourceMigration,
 
-         [string] $TargetMigration,
 
-         [switch] $Script,
 
-         [switch] $Force,
 
-         [string] $ProjectName,
 
-         [string] $StartUpProjectName,
 
-         [string] $ConfigurationTypeName,
 
-         [parameter(ParameterSetName = 'ConnectionStringName')]
 
-         [string] $ConnectionStringName,
 
-         [parameter(ParameterSetName = 'ConnectionStringAndProviderName',
 
-             Mandatory = $true)]
 
-         [string] $ConnectionString,
 
-         [parameter(ParameterSetName = 'ConnectionStringAndProviderName',
 
-             Mandatory = $true)]
 
-         [string] $ConnectionProviderName,
 
- 		[string] $AppDomainBaseDirectory)
 
-     $runner = New-MigrationsRunner $ProjectName $StartUpProjectName $null $ConfigurationTypeName $ConnectionStringName $ConnectionString $ConnectionProviderName $null $AppDomainBaseDirectory
 
-     try
 
-     {
 
-         Invoke-RunnerCommand $runner System.Data.Entity.Migrations.UpdateDatabaseCommand @( $SourceMigration, $TargetMigration, $Script.IsPresent, $Force.IsPresent, $Verbose.IsPresent )
 
-         $error = Get-RunnerError $runner
 
-         
 
-         if ($error)
 
-         {
 
-             if ($knownExceptions -notcontains $error.TypeName)
 
-             {
 
-                 Write-Host $error.StackTrace
 
-             }
 
-             else
 
-             {
 
-                 Write-Verbose $error.StackTrace
 
-             }
 
-             throw $error.Message
 
-         }		
 
-         $(Get-VSComponentModel).GetService([NuGetConsole.IPowerConsoleWindow]).Show()	        
 
-     }
 
-     finally
 
-     {		     
 
-         Remove-Runner $runner
 
-     }
 
- }
 
- <#
 
- .SYNOPSIS
 
-     Displays the migrations that have been applied to the target database.
 
- .DESCRIPTION
 
-     Displays the migrations that have been applied to the target database.
 
- .PARAMETER ProjectName
 
-     Specifies the project that contains the migration configuration type to be
 
-     used. If omitted, the default project selected in package manager console
 
-     is used.
 
- .PARAMETER StartUpProjectName
 
-     Specifies the configuration file to use for named connection strings. If
 
-     omitted, the specified project's configuration file is used.
 
- .PARAMETER ConfigurationTypeName
 
-     Specifies the migrations configuration to use. If omitted, migrations will
 
-     attempt to locate a single migrations configuration type in the target
 
-     project.
 
- .PARAMETER ConnectionStringName
 
-     Specifies the name of a connection string to use from the application's
 
-     configuration file.
 
- .PARAMETER ConnectionString
 
-     Specifies the the connection string to use. If omitted, the context's
 
-     default connection will be used.
 
- .PARAMETER ConnectionProviderName
 
-     Specifies the provider invariant name of the connection string.
 
- .PARAMETER AppDomainBaseDirectory
 
-     Specifies the directory to use for the app-domain that is used for running Migrations
 
-     code such that the app-domain is able to find all required assemblies. This is an
 
-     advanced option that should only be needed if the solution contains	several projects 
 
-     such that the assemblies needed for the context and configuration are not all
 
-     referenced from either the project containing the context or the project containing
 
-     the migrations.
 
- #>
 
- function Get-Migrations
 
- {
 
-     [CmdletBinding(DefaultParameterSetName = 'ConnectionStringName')]
 
-     param (
 
-         [string] $ProjectName,
 
-         [string] $StartUpProjectName,
 
-         [string] $ConfigurationTypeName,
 
-         [parameter(ParameterSetName = 'ConnectionStringName')]
 
-         [string] $ConnectionStringName,
 
-         [parameter(ParameterSetName = 'ConnectionStringAndProviderName',
 
-             Mandatory = $true)]
 
-         [string] $ConnectionString,
 
-         [parameter(ParameterSetName = 'ConnectionStringAndProviderName',
 
-             Mandatory = $true)]
 
-         [string] $ConnectionProviderName,
 
- 		[string] $AppDomainBaseDirectory)
 
-     $runner = New-MigrationsRunner $ProjectName $StartUpProjectName $null $ConfigurationTypeName $ConnectionStringName $ConnectionString $ConnectionProviderName $null $AppDomainBaseDirectory
 
-     try
 
-     {
 
-         Invoke-RunnerCommand $runner System.Data.Entity.Migrations.GetMigrationsCommand
 
-         $error = Get-RunnerError $runner
 
-         
 
-         if ($error)
 
-         {
 
-             if ($knownExceptions -notcontains $error.TypeName)
 
-             {
 
-                 Write-Host $error.StackTrace
 
-             }
 
-             else
 
-             {
 
-                 Write-Verbose $error.StackTrace
 
-             }
 
-             throw $error.Message
 
-         }
 
-     }
 
-     finally
 
-     {
 
-         Remove-Runner $runner
 
-     }
 
- }
 
- function New-MigrationsRunner($ProjectName, $StartUpProjectName, $ContextProjectName, $ConfigurationTypeName, $ConnectionStringName, $ConnectionString, $ConnectionProviderName, $ContextAssemblyName, $AppDomainBaseDirectory)
 
- {
 
-     $startUpProject = Get-MigrationsStartUpProject $StartUpProjectName $ProjectName
 
-     Build-Project $startUpProject
 
-     $project = Get-MigrationsProject $ProjectName
 
-     Build-Project $project
 
-     $contextProject = $project
 
-     if ($ContextProjectName)
 
-     {
 
-         $contextProject = Get-SingleProject $ContextProjectName
 
-         Build-Project $contextProject
 
-     }
 
-     $installPath = Get-EntityFrameworkInstallPath $project
 
-     $toolsPath = Join-Path $installPath tools
 
-     $info = New-AppDomainSetup $project $installPath
 
-     $domain = [AppDomain]::CreateDomain('Migrations', $null, $info)
 
-     $domain.SetData('project', $project)
 
-     $domain.SetData('contextProject', $contextProject)
 
-     $domain.SetData('startUpProject', $startUpProject)
 
-     $domain.SetData('configurationTypeName', $ConfigurationTypeName)
 
-     $domain.SetData('connectionStringName', $ConnectionStringName)
 
-     $domain.SetData('connectionString', $ConnectionString)
 
-     $domain.SetData('connectionProviderName', $ConnectionProviderName)
 
-     $domain.SetData('contextAssemblyName', $ContextAssemblyName)
 
-     $domain.SetData('appDomainBaseDirectory', $AppDomainBaseDirectory)
 
-     
 
-     $dispatcher = New-DomainDispatcher $toolsPath
 
-     $domain.SetData('efDispatcher', $dispatcher)
 
-     return @{
 
-         Domain = $domain;
 
-         ToolsPath = $toolsPath
 
-     }
 
- }
 
- function New-EFConfigRunner($Project)
 
- {
 
-     $installPath = Get-EntityFrameworkInstallPath $Project
 
-     $toolsPath = Join-Path $installPath tools
 
-     $info = New-AppDomainSetup $Project $installPath
 
-     $domain = [AppDomain]::CreateDomain('EFConfig', $null, $info)
 
-     $domain.SetData('project', $Project)
 
-     
 
-     $dispatcher = New-DomainDispatcher $toolsPath
 
-     $domain.SetData('efDispatcher', $dispatcher)
 
-     return @{
 
-         Domain = $domain;
 
-         ToolsPath = $toolsPath
 
-     }
 
- }
 
- function New-AppDomainSetup($Project, $InstallPath)
 
- {
 
-     $info = New-Object System.AppDomainSetup -Property @{
 
-             ShadowCopyFiles = 'true';
 
-             ApplicationBase = $InstallPath;
 
-             PrivateBinPath = 'tools';
 
-             ConfigurationFile = ([AppDomain]::CurrentDomain.SetupInformation.ConfigurationFile)
 
-         }
 
-     
 
-     $targetFrameworkVersion = (New-Object System.Runtime.Versioning.FrameworkName ($Project.Properties.Item('TargetFrameworkMoniker').Value)).Version
 
-     if ($targetFrameworkVersion -lt (New-Object Version @( 4, 5 )))
 
-     {
 
-         $info.PrivateBinPath += ';lib\net40'
 
-     }
 
-     else
 
-     {
 
-         $info.PrivateBinPath += ';lib\net45'
 
-     }
 
-     return $info
 
- }
 
- function New-DomainDispatcher($ToolsPath)
 
- {
 
-     $utilityAssembly = [System.Reflection.Assembly]::LoadFrom((Join-Path $ToolsPath EntityFramework.PowerShell.Utility.dll))
 
-     $dispatcher = $utilityAssembly.CreateInstance(
 
-         'System.Data.Entity.Migrations.Utilities.DomainDispatcher',
 
-         $false,
 
-         [System.Reflection.BindingFlags]::Instance -bor [System.Reflection.BindingFlags]::Public,
 
-         $null,
 
-         $PSCmdlet,
 
-         $null,
 
-         $null)
 
-     return $dispatcher
 
- }
 
- function Remove-Runner($runner)
 
- {
 
-     [AppDomain]::Unload($runner.Domain)
 
- }
 
- function Invoke-RunnerCommand($runner, $command, $parameters, $anonymousArguments)
 
- {
 
-     $domain = $runner.Domain
 
-     if ($anonymousArguments)
 
-     {
 
-         $anonymousArguments.GetEnumerator() | %{
 
-             $domain.SetData($_.Name, $_.Value)
 
-         }
 
-     }
 
-     $domain.CreateInstanceFrom(
 
-         (Join-Path $runner.ToolsPath EntityFramework.PowerShell.dll),
 
-         $command,
 
-         $false,
 
-         0,
 
-         $null,
 
-         $parameters,
 
-         $null,
 
-         $null) | Out-Null
 
- }
 
- function Get-RunnerError($runner)
 
- {
 
-     $domain = $runner.Domain
 
-     if (!$domain.GetData('wasError'))
 
-     {
 
-         return $null
 
-     }
 
-     return @{
 
-             Message = $domain.GetData('error.Message');
 
-             TypeName = $domain.GetData('error.TypeName');
 
-             StackTrace = $domain.GetData('error.StackTrace')
 
-     }
 
- }
 
- function Get-MigrationsProject($name, $hideMessage)
 
- {
 
-     if ($name)
 
-     {
 
-         return Get-SingleProject $name
 
-     }
 
-     $project = Get-Project
 
-     $projectName = $project.Name
 
-     if (!$hideMessage)
 
-     {
 
-         Write-Verbose "Using NuGet project '$projectName'."
 
-     }
 
-     return $project
 
- }
 
- function Get-MigrationsStartUpProject($name, $fallbackName)
 
- {    
 
-     $startUpProject = $null
 
-     if ($name)
 
-     {
 
-         $startUpProject = Get-SingleProject $name
 
-     }
 
-     else
 
-     {
 
-         $startupProjectPaths = $DTE.Solution.SolutionBuild.StartupProjects
 
-         if ($startupProjectPaths)
 
-         {
 
-             if ($startupProjectPaths.Length -eq 1)
 
-             {
 
-                 $startupProjectPath = $startupProjectPaths[0]
 
-                 if (!(Split-Path -IsAbsolute $startupProjectPath))
 
-                 {
 
-                     $solutionPath = Split-Path $DTE.Solution.Properties.Item('Path').Value
 
-                     $startupProjectPath = Join-Path $solutionPath $startupProjectPath -Resolve
 
-                 }
 
-                 $startupProject = Get-SolutionProjects | ?{
 
-                     try
 
-                     {
 
-                         $fullName = $_.FullName
 
-                     }
 
-                     catch [NotImplementedException]
 
-                     {
 
-                         return $false
 
-                     }
 
-                     if ($fullName -and $fullName.EndsWith('\'))
 
-                     {
 
-                         $fullName = $fullName.Substring(0, $fullName.Length - 1)
 
-                     }
 
-                     return $fullName -eq $startupProjectPath
 
-                 }
 
-             }
 
-             else
 
-             {
 
-                 Write-Verbose 'More than one start-up project found.'
 
-             }
 
-         }
 
-         else
 
-         {
 
-             Write-Verbose 'No start-up project found.'
 
-         }
 
-     }
 
-     if (!($startUpProject -and (Test-StartUpProject $startUpProject)))
 
-     {
 
-         $startUpProject = Get-MigrationsProject $fallbackName $true
 
-         $startUpProjectName = $startUpProject.Name
 
-         Write-Warning "Cannot determine a valid start-up project. Using project '$startUpProjectName' instead. Your configuration file and working directory may not be set as expected. Use the -StartUpProjectName parameter to set one explicitly. Use the -Verbose switch for more information."
 
-     }
 
-     else
 
-     {
 
-         $startUpProjectName = $startUpProject.Name
 
-         Write-Verbose "Using StartUp project '$startUpProjectName'."
 
-     }
 
-     return $startUpProject
 
- }
 
- function Get-SolutionProjects()
 
- {
 
-     $projects = New-Object System.Collections.Stack
 
-     
 
-     $DTE.Solution.Projects | %{
 
-         $projects.Push($_)
 
-     }
 
-     
 
-     while ($projects.Count -ne 0)
 
-     {
 
-         $project = $projects.Pop();
 
-         
 
-         # NOTE: This line is similar to doing a "yield return" in C#
 
-         $project
 
-         if ($project.ProjectItems)
 
-         {
 
-             $project.ProjectItems | ?{ $_.SubProject } | %{
 
-                 $projects.Push($_.SubProject)
 
-             }
 
-         }
 
-     }
 
- }
 
- function Get-SingleProject($name)
 
- {
 
-     $project = Get-Project $name
 
-     if ($project -is [array])
 
-     {
 
-         throw "More than one project '$name' was found. Specify the full name of the one to use."
 
-     }
 
-     return $project
 
- }
 
- function Test-StartUpProject($project)
 
- {    
 
-     if ($project.Kind -eq '{cc5fd16d-436d-48ad-a40c-5a424c6e3e79}')
 
-     {
 
-         $projectName = $project.Name
 
-         Write-Verbose "Cannot use start-up project '$projectName'. The Windows Azure Project type isn't supported."
 
-         
 
-         return $false
 
-     }
 
-     
 
-     return $true
 
- }
 
- function Build-Project($project)
 
- {
 
-     $configuration = $DTE.Solution.SolutionBuild.ActiveConfiguration.Name
 
-     $DTE.Solution.SolutionBuild.BuildProject($configuration, $project.UniqueName, $true)
 
-     if ($DTE.Solution.SolutionBuild.LastBuildInfo)
 
-     {
 
-         $projectName = $project.Name
 
-         throw "The project '$projectName' failed to build."
 
-     }
 
- }
 
- function Get-EntityFrameworkInstallPath($project)
 
- {
 
-     $package = Get-Package -ProjectName $project.FullName | ?{ $_.Id -eq 'EntityFramework' }
 
-     if (!$package)
 
-     {
 
-         $projectName = $project.Name
 
-         throw "The EntityFramework package is not installed on project '$projectName'."
 
-     }
 
-     
 
-     return Get-PackageInstallPath $package
 
- }
 
-     
 
- function Get-PackageInstallPath($package)
 
- {
 
-     $componentModel = Get-VsComponentModel
 
-     $packageInstallerServices = $componentModel.GetService([NuGet.VisualStudio.IVsPackageInstallerServices])
 
-     $vsPackage = $packageInstallerServices.GetInstalledPackages() | ?{ $_.Id -eq $package.Id -and $_.Version -eq $package.Version }
 
-     
 
-     return $vsPackage.InstallPath
 
- }
 
- function Check-Project($project)
 
- {
 
-     if (!$project.FullName)
 
-     {
 
-         throw "The Project argument must refer to a Visual Studio project. Use the '`$project' variable provided by NuGet when running in install.ps1."
 
-     }
 
- 	return $project.CodeModel
 
- }
 
- Export-ModuleMember @( 'Enable-Migrations', 'Add-Migration', 'Update-Database', 'Get-Migrations', 'Add-EFProvider', 'Add-EFDefaultConnectionFactory', 'Initialize-EFConfiguration') -Variable InitialDatabase
 
- # SIG # Begin signature block
 
- # MIIa2AYJKoZIhvcNAQcCoIIayTCCGsUCAQExCzAJBgUrDgMCGgUAMGkGCisGAQQB
 
- # gjcCAQSgWzBZMDQGCisGAQQBgjcCAR4wJgIDAQAABBAfzDtgWUsITrck0sYpfvNR
 
- # AgEAAgEAAgEAAgEAAgEAMCEwCQYFKw4DAhoFAAQU3poUYDlTlwf2GyqxNJ7CRJO4
 
- # tk2gghV6MIIEuzCCA6OgAwIBAgITMwAAAFrtL/TkIJk/OgAAAAAAWjANBgkqhkiG
 
- # 9w0BAQUFADB3MQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4G
 
- # A1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSEw
 
- # HwYDVQQDExhNaWNyb3NvZnQgVGltZS1TdGFtcCBQQ0EwHhcNMTQwNTIzMTcxMzE1
 
- # WhcNMTUwODIzMTcxMzE1WjCBqzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAldBMRAw
 
- # DgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24x
 
- # DTALBgNVBAsTBE1PUFIxJzAlBgNVBAsTHm5DaXBoZXIgRFNFIEVTTjpCOEVDLTMw
 
- # QTQtNzE0NDElMCMGA1UEAxMcTWljcm9zb2Z0IFRpbWUtU3RhbXAgU2VydmljZTCC
 
- # ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALMhIt9q0L/7KcnVbHqJqY0T
 
- # vJS16X0pZdp/9B+rDHlhZlRhlgfw1GBLMZsJr30obdCle4dfdqHSxinHljqjXxeM
 
- # duC3lgcPx2JhtLaq9kYUKQMuJrAdSgjgfdNcMBKmm/a5Dj1TFmmdu2UnQsHoMjUO
 
- # 9yn/3lsgTLsvaIQkD6uRxPPOKl5YRu2pRbRptlQmkRJi/W8O5M/53D/aKWkfSq7u
 
- # wIJC64Jz6VFTEb/dqx1vsgpQeAuD7xsIsxtnb9MFfaEJn8J3iKCjWMFP/2fz3uzH
 
- # 9TPcikUOlkYUKIccYLf1qlpATHC1acBGyNTo4sWQ3gtlNdRUgNLpnSBWr9TfzbkC
 
- # AwEAAaOCAQkwggEFMB0GA1UdDgQWBBS+Z+AuAhuvCnINOh1/jJ1rImYR9zAfBgNV
 
- # HSMEGDAWgBQjNPjZUkZwCu1A+3b7syuwwzWzDzBUBgNVHR8ETTBLMEmgR6BFhkNo
 
- # dHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpL2NybC9wcm9kdWN0cy9NaWNyb3Nv
 
- # ZnRUaW1lU3RhbXBQQ0EuY3JsMFgGCCsGAQUFBwEBBEwwSjBIBggrBgEFBQcwAoY8
 
- # aHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3BraS9jZXJ0cy9NaWNyb3NvZnRUaW1l
 
- # U3RhbXBQQ0EuY3J0MBMGA1UdJQQMMAoGCCsGAQUFBwMIMA0GCSqGSIb3DQEBBQUA
 
- # A4IBAQAgU4KQrqZNTn4zScizrcTDfhXQEvIPJ4p/W78+VOpB6VQDKym63VSIu7n3
 
- # 2c5T7RAWPclGcLQA0fI0XaejIiyqIuFrob8PDYfQHgIb73i2iSDQLKsLdDguphD/
 
- # 2pGrLEA8JhWqrN7Cz0qTA81r4qSymRpdR0Tx3IIf5ki0pmmZwS7phyPqCNJp5mLf
 
- # cfHrI78hZfmkV8STLdsWeBWqPqLkhfwXvsBPFduq8Ki6ESus+is1Fm5bc/4w0Pur
 
- # k6DezULaNj+R9+A3jNkHrTsnu/9UIHfG/RHpGuZpsjMnqwWuWI+mqX9dEhFoDCyj
 
- # MRYNviGrnPCuGnxA1daDFhXYKPvlMIIE7DCCA9SgAwIBAgITMwAAAMps1TISNcTh
 
- # VQABAAAAyjANBgkqhkiG9w0BAQUFADB5MQswCQYDVQQGEwJVUzETMBEGA1UECBMK
 
- # V2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0
 
- # IENvcnBvcmF0aW9uMSMwIQYDVQQDExpNaWNyb3NvZnQgQ29kZSBTaWduaW5nIFBD
 
- # QTAeFw0xNDA0MjIxNzM5MDBaFw0xNTA3MjIxNzM5MDBaMIGDMQswCQYDVQQGEwJV
 
- # UzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UE
 
- # ChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMQ0wCwYDVQQLEwRNT1BSMR4wHAYDVQQD
 
- # ExVNaWNyb3NvZnQgQ29ycG9yYXRpb24wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
 
- # ggEKAoIBAQCWcV3tBkb6hMudW7dGx7DhtBE5A62xFXNgnOuntm4aPD//ZeM08aal
 
- # IV5WmWxY5JKhClzC09xSLwxlmiBhQFMxnGyPIX26+f4TUFJglTpbuVildGFBqZTg
 
- # rSZOTKGXcEknXnxnyk8ecYRGvB1LtuIPxcYnyQfmegqlFwAZTHBFOC2BtFCqxWfR
 
- # +nm8xcyhcpv0JTSY+FTfEjk4Ei+ka6Wafsdi0dzP7T00+LnfNTC67HkyqeGprFVN
 
- # TH9MVsMTC3bxB/nMR6z7iNVSpR4o+j0tz8+EmIZxZRHPhckJRIbhb+ex/KxARKWp
 
- # iyM/gkmd1ZZZUBNZGHP/QwytK9R/MEBnAgMBAAGjggFgMIIBXDATBgNVHSUEDDAK
 
- # BggrBgEFBQcDAzAdBgNVHQ4EFgQUH17iXVCNVoa+SjzPBOinh7XLv4MwUQYDVR0R
 
- # BEowSKRGMEQxDTALBgNVBAsTBE1PUFIxMzAxBgNVBAUTKjMxNTk1K2I0MjE4ZjEz
 
- # LTZmY2EtNDkwZi05YzQ3LTNmYzU1N2RmYzQ0MDAfBgNVHSMEGDAWgBTLEejK0rQW
 
- # WAHJNy4zFha5TJoKHzBWBgNVHR8ETzBNMEugSaBHhkVodHRwOi8vY3JsLm1pY3Jv
 
- # c29mdC5jb20vcGtpL2NybC9wcm9kdWN0cy9NaWNDb2RTaWdQQ0FfMDgtMzEtMjAx
 
- # MC5jcmwwWgYIKwYBBQUHAQEETjBMMEoGCCsGAQUFBzAChj5odHRwOi8vd3d3Lm1p
 
- # Y3Jvc29mdC5jb20vcGtpL2NlcnRzL01pY0NvZFNpZ1BDQV8wOC0zMS0yMDEwLmNy
 
- # dDANBgkqhkiG9w0BAQUFAAOCAQEAd1zr15E9zb17g9mFqbBDnXN8F8kP7Tbbx7Us
 
- # G177VAU6g3FAgQmit3EmXtZ9tmw7yapfXQMYKh0nfgfpxWUftc8Nt1THKDhaiOd7
 
- # wRm2VjK64szLk9uvbg9dRPXUsO8b1U7Brw7vIJvy4f4nXejF/2H2GdIoCiKd381w
 
- # gp4YctgjzHosQ+7/6sDg5h2qnpczAFJvB7jTiGzepAY1p8JThmURdwmPNVm52Iao
 
- # AP74MX0s9IwFncDB1XdybOlNWSaD8cKyiFeTNQB8UCu8Wfz+HCk4gtPeUpdFKRhO
 
- # lludul8bo/EnUOoHlehtNA04V9w3KDWVOjic1O1qhV0OIhFeezCCBbwwggOkoAMC
 
- # AQICCmEzJhoAAAAAADEwDQYJKoZIhvcNAQEFBQAwXzETMBEGCgmSJomT8ixkARkW
 
- # A2NvbTEZMBcGCgmSJomT8ixkARkWCW1pY3Jvc29mdDEtMCsGA1UEAxMkTWljcm9z
 
- # b2Z0IFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MB4XDTEwMDgzMTIyMTkzMloX
 
- # DTIwMDgzMTIyMjkzMloweTELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0
 
- # b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3Jh
 
- # dGlvbjEjMCEGA1UEAxMaTWljcm9zb2Z0IENvZGUgU2lnbmluZyBQQ0EwggEiMA0G
 
- # CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCycllcGTBkvx2aYCAgQpl2U2w+G9Zv
 
- # zMvx6mv+lxYQ4N86dIMaty+gMuz/3sJCTiPVcgDbNVcKicquIEn08GisTUuNpb15
 
- # S3GbRwfa/SXfnXWIz6pzRH/XgdvzvfI2pMlcRdyvrT3gKGiXGqelcnNW8ReU5P01
 
- # lHKg1nZfHndFg4U4FtBzWwW6Z1KNpbJpL9oZC/6SdCnidi9U3RQwWfjSjWL9y8lf
 
- # RjFQuScT5EAwz3IpECgixzdOPaAyPZDNoTgGhVxOVoIoKgUyt0vXT2Pn0i1i8UU9
 
- # 56wIAPZGoZ7RW4wmU+h6qkryRs83PDietHdcpReejcsRj1Y8wawJXwPTAgMBAAGj
 
- # ggFeMIIBWjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTLEejK0rQWWAHJNy4z
 
- # Fha5TJoKHzALBgNVHQ8EBAMCAYYwEgYJKwYBBAGCNxUBBAUCAwEAATAjBgkrBgEE
 
- # AYI3FQIEFgQU/dExTtMmipXhmGA7qDFvpjy82C0wGQYJKwYBBAGCNxQCBAweCgBT
 
- # AHUAYgBDAEEwHwYDVR0jBBgwFoAUDqyCYEBWJ5flJRP8KuEKU5VZ5KQwUAYDVR0f
 
- # BEkwRzBFoEOgQYY/aHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraS9jcmwvcHJv
 
- # ZHVjdHMvbWljcm9zb2Z0cm9vdGNlcnQuY3JsMFQGCCsGAQUFBwEBBEgwRjBEBggr
 
- # BgEFBQcwAoY4aHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3BraS9jZXJ0cy9NaWNy
 
- # b3NvZnRSb290Q2VydC5jcnQwDQYJKoZIhvcNAQEFBQADggIBAFk5Pn8mRq/rb0Cx
 
- # MrVq6w4vbqhJ9+tfde1MOy3XQ60L/svpLTGjI8x8UJiAIV2sPS9MuqKoVpzjcLu4
 
- # tPh5tUly9z7qQX/K4QwXaculnCAt+gtQxFbNLeNK0rxw56gNogOlVuC4iktX8pVC
 
- # nPHz7+7jhh80PLhWmvBTI4UqpIIck+KUBx3y4k74jKHK6BOlkU7IG9KPcpUqcW2b
 
- # Gvgc8FPWZ8wi/1wdzaKMvSeyeWNWRKJRzfnpo1hW3ZsCRUQvX/TartSCMm78pJUT
 
- # 5Otp56miLL7IKxAOZY6Z2/Wi+hImCWU4lPF6H0q70eFW6NB4lhhcyTUWX92THUmO
 
- # Lb6tNEQc7hAVGgBd3TVbIc6YxwnuhQ6MT20OE049fClInHLR82zKwexwo1eSV32U
 
- # jaAbSANa98+jZwp0pTbtLS8XyOZyNxL0b7E8Z4L5UrKNMxZlHg6K3RDeZPRvzkbU
 
- # 0xfpecQEtNP7LN8fip6sCvsTJ0Ct5PnhqX9GuwdgR2VgQE6wQuxO7bN2edgKNAlt
 
- # HIAxH+IOVN3lofvlRxCtZJj/UBYufL8FIXrilUEnacOTj5XJjdibIa4NXJzwoq6G
 
- # aIMMai27dmsAHZat8hZ79haDJLmIz2qoRzEvmtzjcT3XAH5iR9HOiMm4GPoOco3B
 
- # oz2vAkBq/2mbluIQqBC0N1AI1sM9MIIGBzCCA++gAwIBAgIKYRZoNAAAAAAAHDAN
 
- # BgkqhkiG9w0BAQUFADBfMRMwEQYKCZImiZPyLGQBGRYDY29tMRkwFwYKCZImiZPy
 
- # LGQBGRYJbWljcm9zb2Z0MS0wKwYDVQQDEyRNaWNyb3NvZnQgUm9vdCBDZXJ0aWZp
 
- # Y2F0ZSBBdXRob3JpdHkwHhcNMDcwNDAzMTI1MzA5WhcNMjEwNDAzMTMwMzA5WjB3
 
- # MQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVk
 
- # bW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSEwHwYDVQQDExhN
 
- # aWNyb3NvZnQgVGltZS1TdGFtcCBQQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
 
- # ggEKAoIBAQCfoWyx39tIkip8ay4Z4b3i48WZUSNQrc7dGE4kD+7Rp9FMrXQwIBHr
 
- # B9VUlRVJlBtCkq6YXDAm2gBr6Hu97IkHD/cOBJjwicwfyzMkh53y9GccLPx754gd
 
- # 6udOo6HBI1PKjfpFzwnQXq/QsEIEovmmbJNn1yjcRlOwhtDlKEYuJ6yGT1VSDOQD
 
- # LPtqkJAwbofzWTCd+n7Wl7PoIZd++NIT8wi3U21StEWQn0gASkdmEScpZqiX5NMG
 
- # gUqi+YSnEUcUCYKfhO1VeP4Bmh1QCIUAEDBG7bfeI0a7xC1Un68eeEExd8yb3zuD
 
- # k6FhArUdDbH895uyAc4iS1T/+QXDwiALAgMBAAGjggGrMIIBpzAPBgNVHRMBAf8E
 
- # BTADAQH/MB0GA1UdDgQWBBQjNPjZUkZwCu1A+3b7syuwwzWzDzALBgNVHQ8EBAMC
 
- # AYYwEAYJKwYBBAGCNxUBBAMCAQAwgZgGA1UdIwSBkDCBjYAUDqyCYEBWJ5flJRP8
 
- # KuEKU5VZ5KShY6RhMF8xEzARBgoJkiaJk/IsZAEZFgNjb20xGTAXBgoJkiaJk/Is
 
- # ZAEZFgltaWNyb3NvZnQxLTArBgNVBAMTJE1pY3Jvc29mdCBSb290IENlcnRpZmlj
 
- # YXRlIEF1dGhvcml0eYIQea0WoUqgpa1Mc1j0BxMuZTBQBgNVHR8ESTBHMEWgQ6BB
 
- # hj9odHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpL2NybC9wcm9kdWN0cy9taWNy
 
- # b3NvZnRyb290Y2VydC5jcmwwVAYIKwYBBQUHAQEESDBGMEQGCCsGAQUFBzAChjho
 
- # dHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpL2NlcnRzL01pY3Jvc29mdFJvb3RD
 
- # ZXJ0LmNydDATBgNVHSUEDDAKBggrBgEFBQcDCDANBgkqhkiG9w0BAQUFAAOCAgEA
 
- # EJeKw1wDRDbd6bStd9vOeVFNAbEudHFbbQwTq86+e4+4LtQSooxtYrhXAstOIBNQ
 
- # md16QOJXu69YmhzhHQGGrLt48ovQ7DsB7uK+jwoFyI1I4vBTFd1Pq5Lk541q1YDB
 
- # 5pTyBi+FA+mRKiQicPv2/OR4mS4N9wficLwYTp2OawpylbihOZxnLcVRDupiXD8W
 
- # mIsgP+IHGjL5zDFKdjE9K3ILyOpwPf+FChPfwgphjvDXuBfrTot/xTUrXqO/67x9
 
- # C0J71FNyIe4wyrt4ZVxbARcKFA7S2hSY9Ty5ZlizLS/n+YWGzFFW6J1wlGysOUzU
 
- # 9nm/qhh6YinvopspNAZ3GmLJPR5tH4LwC8csu89Ds+X57H2146SodDW4TsVxIxIm
 
- # dgs8UoxxWkZDFLyzs7BNZ8ifQv+AeSGAnhUwZuhCEl4ayJ4iIdBD6Svpu/RIzCzU
 
- # 2DKATCYqSCRfWupW76bemZ3KOm+9gSd0BhHudiG/m4LBJ1S2sWo9iaF2YbRuoROm
 
- # v6pH8BJv/YoybLL+31HIjCPJZr2dHYcSZAI9La9Zj7jkIeW1sMpjtHhUBdRBLlCs
 
- # lLCleKuzoJZ1GtmShxN1Ii8yqAhuoFuMJb+g74TKIdbrHk/Jmu5J4PcBZW+JC33I
 
- # acjmbuqnl84xKf8OxVtc2E0bodj6L54/LlUWa8kTo/0xggTIMIIExAIBATCBkDB5
 
- # MQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVk
 
- # bW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSMwIQYDVQQDExpN
 
- # aWNyb3NvZnQgQ29kZSBTaWduaW5nIFBDQQITMwAAAMps1TISNcThVQABAAAAyjAJ
 
- # BgUrDgMCGgUAoIHhMBkGCSqGSIb3DQEJAzEMBgorBgEEAYI3AgEEMBwGCisGAQQB
 
- # gjcCAQsxDjAMBgorBgEEAYI3AgEVMCMGCSqGSIb3DQEJBDEWBBRRBMx7lzrmFHTD
 
- # FOnHF79/U4hcUzCBgAYKKwYBBAGCNwIBDDFyMHCgUoBQAEUAbgB0AGkAdAB5ACAA
 
- # RgByAGEAbQBlAHcAbwByAGsAIABUAG8AbwBsAHMAIABmAG8AcgAgAFYAaQBzAHUA
 
- # YQBsACAAUwB0AHUAZABpAG+hGoAYaHR0cDovL21zZG4uY29tL2RhdGEvZWYgMA0G
 
- # CSqGSIb3DQEBAQUABIIBAEd5PEhtVawenxHsuUSbbOUgAVuGOnlVja6G8O5u3I5v
 
- # AcWqJtbqOKUkXc9HxAUMgu5cC/o9n8A7LF7T5xptiXXcxURfe4fmeJK9joz/XPRw
 
- # lYLOevzn9GRfWSbJ/AtSOnjj1PKCtQ8SZq88iKnJ8SrjKF4Nu3TQR/wVR/k3SU0H
 
- # 80Rm4lSJdt9NLxkYljaU8volXVDv9SoxDlplkGdePSbDUx3PWD7y5UVeHb94Z+aQ
 
- # 8p/FuvncjarLeefLhOwEFfJRhCKvofgw2zJqA3q+m42uiuO0ndqbyp8HVc6kcMUu
 
- # jS//9eYvnLP7UY1ApfiBLRPgEgTGSx/soOI2qXDjHiShggIoMIICJAYJKoZIhvcN
 
- # AQkGMYICFTCCAhECAQEwgY4wdzELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hp
 
- # bmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jw
 
- # b3JhdGlvbjEhMB8GA1UEAxMYTWljcm9zb2Z0IFRpbWUtU3RhbXAgUENBAhMzAAAA
 
- # Wu0v9OQgmT86AAAAAABaMAkGBSsOAwIaBQCgXTAYBgkqhkiG9w0BCQMxCwYJKoZI
 
- # hvcNAQcBMBwGCSqGSIb3DQEJBTEPFw0xNTAzMDIxNzI5NThaMCMGCSqGSIb3DQEJ
 
- # BDEWBBQXVgYJisiba3bvHeGxFzocarwSvzANBgkqhkiG9w0BAQUFAASCAQBwjV/u
 
- # vAXQsEgY0oeyfvDyZCXIBSMgSZ4sbxAFu7ZGisn3L51Q/wWulmoPr7YiAmUkxRgU
 
- # WL7hukD/WrR/iNwUToPwz9VTxZbz+i7Cjw5tpG+nL8ByWxyhEiWNDSGHUaU+THMr
 
- # d2Y3mJs9u8E8sjNqHE8Vf7FzmjVn5dMrOASBmqTdXPwJP2Pm2gYta6zkss9j5N3Q
 
- # MLwNDUrZ0FKtGimpe1zoI6Fan4YBKMILOL9xCqMcVMhoITM7s+tnRlngDVFxxKyN
 
- # 1Mnr9ITkdiMIpbWn8s0nr/UsHRltjyPyjtfIvgiFgKLxnw87sHnloEAbksaLqlbX
 
- # 6d/6I/2PpumqJR3c
 
- # SIG # End signature block
 
 
  |