From 63f6899894e94b39422309e8a94a7bf54f5b31d1 Mon Sep 17 00:00:00 2001 From: "kay.one" Date: Tue, 14 Jun 2011 19:31:41 -0700 Subject: [PATCH 1/2] Added PetaPoco --- Libraries/MigSharp.dll | Bin 0 -> 165888 bytes Libraries/MigSharp.xml | 1335 +++++ NzbDrone.Core.Test/App.config | 6 + NzbDrone.Core.Test/Framework/MockLib.cs | 23 +- NzbDrone.Core.Test/NzbDrone.Core.Test.csproj | 9 +- NzbDrone.Core.Test/RepoTest.cs | 1 - NzbDrone.Core.Test/SeriesProviderTest.cs | Bin 6325 -> 6648 bytes NzbDrone.Core.Test/packages.config | 2 + NzbDrone.Core/CentralDispatch.cs | 4 +- NzbDrone.Core/Datastore/Connection.cs | 13 + NzbDrone.Core/Datastore/CustomeMapper.cs | 33 + .../Datastore/Migrations/Legacy/Migration.cs | 69 + .../Datastore/Migrations/MigrationExport.cs | 32 + .../{Migrations.cs => MigrationsHelper.cs} | 73 +- NzbDrone.Core/Models/PetaPoco.cs | 2447 ++++++++ NzbDrone.Core/NzbDrone.Core.csproj | 20 +- NzbDrone.Core/Providers/EpisodeProvider.cs | Bin 11695 -> 11811 bytes NzbDrone.Core/Providers/MediaFileProvider.cs | 12 +- NzbDrone.Core/Providers/SeriesProvider.cs | 23 +- NzbDrone.Core/Repository/Episode.cs | 7 + NzbDrone.Core/Repository/Series.cs | 5 + .../Castle.Core.2.5.2/Castle.Core.2.5.2.nupkg | Bin 0 -> 700119 bytes ...L - Apache Software Foundation License.txt | 57 + .../Castle.Core.2.5.2/lib/BreakingChanges.txt | 55 + packages/Castle.Core.2.5.2/lib/Changes.txt | 145 + packages/Castle.Core.2.5.2/lib/Committers.txt | 80 + .../lib/NET35/Castle.Core.dll | Bin 0 -> 296960 bytes .../lib/NET35/Castle.Core.xml | 4927 +++++++++++++++++ .../lib/NET40ClientProfile/Castle.Core.dll | Bin 0 -> 299008 bytes .../lib/NET40ClientProfile/Castle.Core.xml | 4927 +++++++++++++++++ .../Castle.Core.2.5.2/lib/SL3/Castle.Core.dll | Bin 0 -> 244736 bytes .../Castle.Core.2.5.2/lib/SL3/Castle.Core.xml | 4443 +++++++++++++++ .../Castle.Core.2.5.2/lib/SL4/Castle.Core.dll | Bin 0 -> 244736 bytes .../Castle.Core.2.5.2/lib/SL4/Castle.Core.xml | 4443 +++++++++++++++ .../Castle.Core.2.5.2/lib/releaseNotes.txt | 8 + .../Content/Models/Generated/Database.tt | 32 + .../Models/Generated/PetaPoco.Core.ttinclude | 1615 ++++++ .../Generated/PetaPoco.Generator.ttinclude | 136 + .../PetaPoco.4.0.2/Content/Models/PetaPoco.cs | 2186 ++++++++ packages/PetaPoco.4.0.2/PetaPoco.4.0.2.nupkg | Bin 0 -> 33299 bytes .../Content/Models/PetaPoco.cs | 2186 ++++++++ .../PetaPoco.Core.4.0.2.nupkg | Bin 0 -> 20358 bytes packages/repositories.config | 1 - 43 files changed, 29270 insertions(+), 85 deletions(-) create mode 100644 Libraries/MigSharp.dll create mode 100644 Libraries/MigSharp.xml create mode 100644 NzbDrone.Core/Datastore/CustomeMapper.cs create mode 100644 NzbDrone.Core/Datastore/Migrations/Legacy/Migration.cs create mode 100644 NzbDrone.Core/Datastore/Migrations/MigrationExport.cs rename NzbDrone.Core/Datastore/{Migrations.cs => MigrationsHelper.cs} (63%) create mode 100644 NzbDrone.Core/Models/PetaPoco.cs create mode 100644 packages/Castle.Core.2.5.2/Castle.Core.2.5.2.nupkg create mode 100644 packages/Castle.Core.2.5.2/lib/ASL - Apache Software Foundation License.txt create mode 100644 packages/Castle.Core.2.5.2/lib/BreakingChanges.txt create mode 100644 packages/Castle.Core.2.5.2/lib/Changes.txt create mode 100644 packages/Castle.Core.2.5.2/lib/Committers.txt create mode 100644 packages/Castle.Core.2.5.2/lib/NET35/Castle.Core.dll create mode 100644 packages/Castle.Core.2.5.2/lib/NET35/Castle.Core.xml create mode 100644 packages/Castle.Core.2.5.2/lib/NET40ClientProfile/Castle.Core.dll create mode 100644 packages/Castle.Core.2.5.2/lib/NET40ClientProfile/Castle.Core.xml create mode 100644 packages/Castle.Core.2.5.2/lib/SL3/Castle.Core.dll create mode 100644 packages/Castle.Core.2.5.2/lib/SL3/Castle.Core.xml create mode 100644 packages/Castle.Core.2.5.2/lib/SL4/Castle.Core.dll create mode 100644 packages/Castle.Core.2.5.2/lib/SL4/Castle.Core.xml create mode 100644 packages/Castle.Core.2.5.2/lib/releaseNotes.txt create mode 100644 packages/PetaPoco.4.0.2/Content/Models/Generated/Database.tt create mode 100644 packages/PetaPoco.4.0.2/Content/Models/Generated/PetaPoco.Core.ttinclude create mode 100644 packages/PetaPoco.4.0.2/Content/Models/Generated/PetaPoco.Generator.ttinclude create mode 100644 packages/PetaPoco.4.0.2/Content/Models/PetaPoco.cs create mode 100644 packages/PetaPoco.4.0.2/PetaPoco.4.0.2.nupkg create mode 100644 packages/PetaPoco.Core.4.0.2/Content/Models/PetaPoco.cs create mode 100644 packages/PetaPoco.Core.4.0.2/PetaPoco.Core.4.0.2.nupkg diff --git a/Libraries/MigSharp.dll b/Libraries/MigSharp.dll new file mode 100644 index 0000000000000000000000000000000000000000..d0c2659026fd978dda90f828e63a4ce4be4d0f2f GIT binary patch literal 165888 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 R?mQ!KWl;WF^#3je{x{5f4FUiF literal 0 HcmV?d00001 diff --git a/Libraries/MigSharp.xml b/Libraries/MigSharp.xml new file mode 100644 index 000000000..1dc15a3fc --- /dev/null +++ b/Libraries/MigSharp.xml @@ -0,0 +1,1335 @@ + + + + MigSharp + + + + + Represents a type that knows how to provide database-specific DDL statements. + + + + + Checks whether a user created table exists on the database. The returned SQL command must yield 0 if the table does not exist. + + The database name. + The table name. + The SQL command to be executed. + + + + Converts an object to its SQL representation for scripting. + + + + + Creates a tables with the specified + + The name of the new table. + The columns of the new table. + Empty if there are no primary key columns. + The SQL commands to be executed. + + + + Drops a table. + + The SQL commands to be executed. + + + + Adds columns to an existing table. + + The SQL commands to be executed. + + + + Renames an existing table. + + The SQL commands to be executed. + + + + Renames a column of an existing table. + + The SQL commands to be executed. + + + + Removes a column from an existing table. + + The SQL commands to be executed. + + + + Changes the data type of a column. + + The SQL commands to be executed. + + + + Adds an index to a table. + + The SQL commands to be executed. + + + + Drops an index from a table. + + The SQL commands to be executed. + + + + Adds a foreign key constraint to a table. + + The SQL commands to be executed. + + + + Drops a foreign key constraint from a table. + + The SQL commands to be executed. + + + + Adds a primary key constraint to a table. + + The SQL commands to be executed. + + + + Renames the primary key. + + The SQL commands to be executed. + + + + Drops a primary key constraint from a table. + + The SQL commands to be executed. + + + + Adds an unique constraint to a table. + + The SQL commands to be executed. + + + + Drops a unique constraint from a table. + + The SQL commands to be executed. + + + + Drops the default value (constraint) from a column. + + The SQL commands to be executed. + + + + Represents the main entry point to perform migrations. + + + + + Initializes a new instance of . + + Connection string to the database to be migrated. + The name of the provider that should be used for this migrator (). + Options. + + + + Initializes a new instance of for a specific module. + + Connection string to the database to be migrated. + The name of the provider that should be used for this migrator (). + The name of the module whose migrations should be executed. + + + + Initializes a new instance of with default options. + + Connection string to the database to be migrated. + The name of the provider that should be used for this migrator (). + + + + Executes all pending migrations found in . + + The assembly to search for migrations. + Optional assemblies that hold additional migrations. + + + + Executes all migrations required to reach . + + + + Optional assemblies that hold additional migrations. + + + + Retrieves all pending migrations. + + The assembly that contains the migrations. + Optional assemblies that hold additional migrations. + + + + Retrieves all required migrations to reach . + + The assembly that contains the migrations. + The timestamp to migrate to. + When the migration path would require downgrading a migration which is not reversible. + Optional assemblies that hold additional migrations. + + + + Checks if any migrations are pending to be performed. + + The assembly that contains the migrations. + Optional assemblies that hold additional migrations. + + + + Injects a custom version mechanism. + + + + + Injects a custom bootstrapping mechanism. + + + + + Represents a database. + + + + + Creates a new table on the database. + + The name of the new table. + Optionally, the name of the primary key constraint. + + + + Executes a custom query. + + Custom SQL which must be understood by all providers that should be supported by this migration. + + + + Executes a custom action against the . Use this method if you need to directly access the + underlying or . + + + + + Gets the context of the migration. + + + + + Gets existing tables. + + + + + Contains the extension methods for the interface. + + + + + Creates a new table on the database with a default primary key constraint name. + + + + + Represents the context of a migration. + + + + + Gets the metadata describing the underlying provider. + + + + + Represents an index. + + + + + Drops the index. + + + + + Represents an index which is about to be added to a table. + + + + + Adds the index on the provided column. + + + + + Represents a primary key constraint which is about to be added to a table. + + + + + Adds the index on the provided column. + + + + + Represents a batch of s. + + + + + Performs the migrations contained in this batch. + + + + + Raised before each migration that will be executed. + + + + + Raised after each migration that has been executed. + + + + + Gets the number of migrations in this batch. + + + + + Gets a list of s that were used to create new objects (excluding primary key columns). + + + + + Gets a list of s that were used to create primary key columns. + + + + + Gets a list of names of any created objects. + + + + + Gets a list of method names that were used for the migration. + + + + + Represents a collection of existing indexes of a table. + + + + + Gets an index by name. + + + + + Represents an unique constraint. + + + + + Drops the unique constraint. + + + + + Represents a foreign key constraint. + + + + + Drops the foreign key constraint. + + + + + Executes the migration step and updates the versioning information in one transaction. + + Might be null in the case of a bootstrap step. + + + + Executes the migration step and updates the versioning information in one transaction. + + + + + Represents a pair of column names which is used as an element of a foreign key relationship. + + + + + Gets the name of the referencing column. + + + + + Gets the name of the referenced column. + + + + + Represents the version of a database containing all information about past migrations. + + + + + Verifies if a specific migration was executed. + + It might seems odd that this method does not receive a connection. However, the idea is that the object implementing + this interface initializes itself once upon construction and the answers the calls to this method from a cache. + Thus, it would not need to do any round-trip to the database which is important as this method is called for each migration. + + + + + + Updates the versioning to include or exclude the migration depending on the provided . + + Post-condition: if was , must return true. + Otherwise was and must return false. + + + The metadata of the migration to be included in the versioning table. + An open connection to the database containing the versioning table. + The associated transaction. + The direction of the migration. + Used to execute s. + + + + Represents a created table. + + + + + Represents a created table. + + + + + Adds a non-nullable column which is part of the primary key constraint to the table being created. + + + + + Adds a non-nullable column to the table being created. + + + + + Adds a nullable column to the table being created. + + + + + Gets the name of the table. + + + + + Represents a unique constraint which is about to be added to a table. + + + + + Adds the unique constraint on the provided column. + + + + + Declares the support of a specific data type. + + + + + Initializes a new instance. + + + + + Gets the supported data type. + + + + + Gets or sets the maximum length for character data types or the maximum total number of decimal digits for numeric data types. + + + + + Gets or sets the maximum number of decimal digits that can be stored to the right of the decimal point. Scale is a value from 0 through . + + + + + Indicates if the data type can be used in primary key columns. By default, this is false. + + + + + Gets or sets a warning message if there are any restrictions when using this . + The warning message is logged when executing a migration containing this data type. + + + + + Indicates if the data type can be scripted. + + + + + Represents an added column on an existing table. + + + + + Represents a table that was created before. + + + + + Adds a not-nullable column. + + + + + Adds a nullable column. + + + + + Gets the name of the table. + + + + + Specifies the size and the scale of the data type of the column. + + The length for character data types or the maximum total number of decimal digits for numeric data types. + The maximum number of decimal digits that can be stored to the right of the decimal point. Scale must be a value from 0 through . + + + + Adds a default value to the column. + + + + + Adds a default value to the column. + + + + + Adds a default value to the column which is dropped after adding the column to the table. + Use this method to fill a non-nullable column with default values. + + + + + Adds a default value to the column which is dropped after adding the column to the table. + Use this method to fill a non-nullable column with default values. + + + + + Contains the extensions methods for the interface. + + + + + Specifies the size of the data type of the column. + + + The length for character data types or the maximum total number of decimal digits for numeric data types. + + + + Sets the default of the column to be the current system time of the database server. + + + + + Reperesents metadata about an . + + + + + Gets the unique name of this provider. + + + + + Gets the invariant name of the provider needed for . + + + + + Gets an indication if the underlying provider supports transactions. + + + + + Gets an expression that specifies how s are addressed in command texts. The literal 'p' is replaced by the parameter name. + + + + + Gets the maximum length of object names within the database. 0 meaning that there is non restriction which is the default. + + + + + Represents a column on a newly created table. + + + + + Specifies the size and the scale of the data type of the column. + + The length for character data types or the maximum total number of decimal digits for numeric data types. + The maximum number of decimal digits that can be stored to the right of the decimal point. Scale must be a value from 0 through . + + + + Puts the column under an unique constraint. + + Optionally, specify the name of the unique constraint. If null or empty, a default constraint name will be generated. + + + + Makes the column auto-increment. + + + + + Adds a default value to the column. + + + + + Adds a default value to the column. + + + + + Gets the column name. + + + + + This exception is thrown when a requested downgrade path contains an irreversible migration. + + + + + Contains the names of the supported providers. + + + + + Represents the run-time context of a migration. + + + + + Gets the connection which is used to perform the migration. + + + + + Gets the transaction which is used to perform the migration. + + + + + Gets the that should be used to execute database modifying commands. + This ensures that they are logged and scripted consistently. + + + + + Lists special default values for columns. + + + + + Represents the current date time of the database server. + + + + + Represents a collection of providers that should be supported for all migrations. Validation of migrations is performed + against providers contained within this list. + + + + + Initializes a new instance used for unit testing. + + + + + Initializes a new instance which is ready-to-use with the default providers. + + + + + Adds a provider. + + + + + Removes a provider. + + + + + Removes all ODBC providers. + + + + + Sets the collection to a list of providers. + + + + + Resets the collection to support all providers that are delivered with Mig#. + + + + + Gets the names of the providers. + + + + + Represents a collection of existing unique constraints of a table. + + + + + Gets an unique constraint by name. + + + + + Use this attribute to mark classes as migrations. + + + + + The maximum string length for a module name. + + + + + Initializes a new instance of the attribute. + + + + + Gets the name of the module to which this migration belongs to (see also ). + + + + + Gets the tag associated with this migration. + + + + + Represents a migration that can also be downgraded. + + + + + The interface that needs to be implemented in order to define a migration. + Additionally, the must be applied + to a class implementing this interface in order to be recognized as a migration. + + + + + Applies the required changes to the provided for this migration. + + + + + Undoes all changes from the method. + + + + + Represents a foreign key constraint which is about to be added to a table. + + + + + Specifies the columns on which the foreign key is defined. + + + This method is not called 'On', as 'On' is a reserved language keyword (see FxCop rule "Identifiers should not match keywords"). + + + + + Contains information about used data types, longest name, etc. for a specific migration. + + + + + Gets the full type name of the migration for this report. + + + + + Gets the error message for the migration if there was an . + + + + + Gets a list of s that were used to create new objects (including primary key columns). + + + + + Gets a list of s that were used to create primary key columns. + + + + + Gets the longest name of any created objects. + + + + + Gets a list of used provider method names. + + + + + Marks the class as an provider implementing . + + + + + Initializes a new instance. + + + + + Gets the unique name of this provider. + + + + + Gets the invariant name of the provider needed for . + + + + + Gets or sets an indication if the underlying provider supports transactions. True by default. + + + + + Gets an expression that specifies how s are addressed in command texts. The literal 'p' is replaced by the parameter name. + The default is '@p'. + + + + + Gets or sets the maximum length of object names within the database. 0 meaning that there is non restriction which is the default. + + + + + Represents a collection of existing foreign key constraints of a table. + + + + + Gets an foreign key constraint by name. + + + + + Represents an existing column whose data type is being altered. + + + + + Specifies the size and the scale of the new data type of the column. + + The length for character data types or the maximum total number of decimal digits for numeric data types. + The maximum number of decimal digits that can be stored to the right of the decimal point. Scale must be a value from 0 through . + + + + Adds a default value to the column. + + + + + Adds a default value to the column. + + + + + Contains the extensions methods for the interface. + + + + + Specifies the size of the new data type of the column. + + + The length for character data types or the maximum total number of decimal digits for numeric data types. + + + + Sets the default of the column to be the current system time of the database server. + + + + + MigSharp provider for Microsoft SQL Compact Edition 4.0. + + + + + Represents a collection of existing tables. + + + + + Gets a table by its name. + + + + + Represents a collection of existing columns. + + + + + Gets a column by its name. + + + + + Represents an existing column. + + + + + Renames the column. + + + + + Removes the column from its table. + + + + + Alters the column to be a nullable column. + + A new or the old data type of the column. + + + + Alters the column to be a nullable column. + + A new or the old data type of the column. + + + + Gets the name of the column. + + + + + Gets the name of the table of the column. + + + + + Contains the extensions methods for the interface. + + + + + Specifies the size of the data type of the column. + + + The length for character data types or the maximum total number of decimal digits for numeric data types. + + + + Puts the column under an unique constraint with a default constraint name. + + + + + Sets the default of the column to be the current system time of the database server. + + + + + Visits all commands executed against a and translates them into SQL + using a specific . + + + + + Translates the recorded commands on the to SQL commands. + + + + + Represents a SQL data type. + + + + + Initializes a new instance of . + + + + + Used in validation messages and for debugging. + + + + + Gets the length for character data types or the maximum total number of decimal digits for numeric data types. + + + + + Gets the maximum number of decimal digits that can be stored to the right of the decimal point. Scale is a value from 0 through . + + + + + Use this class to configure the behaviour of the . + + + + + Initializes an instance of default options. + + + + + Initializes options that select migrations for specific module only. + + The name of the selected module. Only migrations for this module will be executed. + + + + Suppresses validation warnings for the provider called and the data type under the . + + + + + Outputs the SQL used for the migrations to external files without affecting the database. + + + + + Outputs the SQL used for the migrations to external files without affecting the database. + + + + + Outputs the SQL used for the migrations to external files while migrating the database. + + + + + Outputs the SQL used for the migrations to external files while migrating the database. + + + + + Sets the level of general information being traced. + + + + + Sets the level of SQL information being traced. + + + + + Sets the level of performance information being traced. + + + + + Gets or sets the table name of the versioning table. + + + + + Gets the providers that should be supported for all migrations. Compatibility validation of migrations is performed + against the providers in this collection. + + + + + Gets or sets a function that selects the module based on its name. Only migrations for this module will be executed. + + + + + Expresses under which circumstances a warning should be expressed for a given and its OfSize parameters. + + + + + Suppresses all warnings for the specified . Use diligently. + + + + + Suppresses warnings for the specified when it is used without a specified size. + + + + + Suppresses warnings for the specified when it is used with a specified size. + + + + + Suppresses warnings for the specified when it is used with a specified size and a specified scale. + + + + + Validates s against the list of supported providers. + + + + + Represents a table that was created before. + + + + + Gets the primary key constraint of the table. + + Optionally, the name of the primary key constraint. If null or empty, the default name will be used. + + + + Renames the table. + + + + + Drops the table. + + + + + Adds a primary key constraint to the table. + + Optionally, the primary key constraint name. If null or empty, a default name will be generated. + + + + Adds an index to the table. + + Optionally, the index name. If null or empty, a default name will be generated. + + + + Adds a foreign key constraint to another table. + + The name of the referenced table. + Optionally, the name of the foreign key constraint. If null or empty, a default name will be generated. + + + + Adds an unique constraint to the table. + + Optionally, the name of the unique constraint. If null or empty, a default name will be generated. + + + + Gets the columns of the table. + + + + + Gets the unique constraints of the table. + + + + + Gets the unique constraints of the table. + + + + + Gets the foreign key constraints of the table. + + + + + Represents a primary key constraint. + + + + + Drops the primary key constraint. + + + + + Renames the primary key constraint and all associated resources (e.g. Oracle maintains an index along with the primary key which is renamed, too). + + + + + + Returns the longer string. + + + + + Returns the longest string. + + + + + Creates a name with the following structure: '_[0]_[1]_..._'. + The contained names are shortened such that the complete generated name fits characters. + + The table name. + The postfix to be appended to the name. The postfix will *not* be shortened in any way. + The maximum length of the generated name. + Additional names that should be included in the result which follow the table name. + + + + Event arguments for migration events. + + + + + Initializes a new instance. + + + + + Gets the associated metadata. + + + + + Gets the direction of the migration step. + + + + + Implements a custom bootstrapping logic which is executed if the versioning table of MigSharp doe not exists yet. + + + + + Triggers whatever actions are needed to prepare the custom bootstrapping. This method is called exactly once, + before is called any times. + + The connection used to update the versioning table. + The transaction used to update the versioning table. + + + + Returns true if the migration should be assumed as already executed when bootstrapping the versioning. + + + + + Triggers whatever actions are needed to finish the custom bootstrapping. This method is called exactly once, + after is called any times. + + The connection used to update the versioning table. + The transaction used to update the versioning table. + + + + Contains extension methods for the interface. + + + + + Gets the primary key constraint of the table with the default name. + + + + + Adds a primary key constraint to the table with the default name. + + + + + Adds an index to the table. + + + + + Adds a foreign key constraint to another table with the default name. + + + The name of the referenced table. + + + + Adds an unique constraint to the table with the default name. + + + + + Gets an unique constraint by the name of its first column. + + + + + Gets an foreign key constraint by the name of its referenced table. + + + + + Implements without creating a versioning table until it is really needed. + + + + diff --git a/NzbDrone.Core.Test/App.config b/NzbDrone.Core.Test/App.config index 6e63be8ce..0d29e6625 100644 --- a/NzbDrone.Core.Test/App.config +++ b/NzbDrone.Core.Test/App.config @@ -19,5 +19,11 @@ + + + + + + \ No newline at end of file diff --git a/NzbDrone.Core.Test/Framework/MockLib.cs b/NzbDrone.Core.Test/Framework/MockLib.cs index 0030f9682..9adc0f271 100644 --- a/NzbDrone.Core.Test/Framework/MockLib.cs +++ b/NzbDrone.Core.Test/Framework/MockLib.cs @@ -10,6 +10,7 @@ using NzbDrone.Core.Providers.Core; using NzbDrone.Core.Repository; using NzbDrone.Core.Repository.Quality; +using PetaPoco; using SubSonic.DataProviders; using SubSonic.Repository; @@ -38,7 +39,7 @@ public static ConfigProvider StandardConfig public static IRepository GetEmptyRepository(bool enableLogging = false, string fileName = "") { - Console.WriteLine("Creating an empty SQLite database"); + Console.WriteLine("Creating an empty Subsonic repository"); if (String.IsNullOrWhiteSpace(fileName)) { @@ -50,7 +51,7 @@ public static IRepository GetEmptyRepository(bool enableLogging = false, string var repo = Connection.CreateSimpleRepository(provider); ForceMigration(repo); - Migrations.Run(Connection.GetConnectionString(fileName), false); + //Migrations.Run(Connection.GetConnectionString(fileName), false); if (enableLogging) { @@ -62,6 +63,24 @@ public static IRepository GetEmptyRepository(bool enableLogging = false, string return repo; } + public static IDatabase GetEmptyDatabase(bool enableLogging = false, string fileName = "") + { + Console.WriteLine("Creating an empty PetaPoco database"); + + if (String.IsNullOrWhiteSpace(fileName)) + { + fileName = Guid.NewGuid() + ".db"; + } + + var connectionString = Connection.GetConnectionString(fileName); + + MigrationsHelper.MigrateDatabase(connectionString); + + var database = Connection.GetPetaPocoDb(connectionString); + + return database; + } + public static DiskProvider GetStandardDisk(int seasons, int episodes) { var mock = new Mock(); diff --git a/NzbDrone.Core.Test/NzbDrone.Core.Test.csproj b/NzbDrone.Core.Test/NzbDrone.Core.Test.csproj index 8776fe479..fbbb24f17 100644 --- a/NzbDrone.Core.Test/NzbDrone.Core.Test.csproj +++ b/NzbDrone.Core.Test/NzbDrone.Core.Test.csproj @@ -36,6 +36,9 @@ True + + ..\packages\Castle.Core.2.5.2\lib\NET35\Castle.Core.dll + ..\packages\NBuilder.2.3.0.0\lib\FizzWare.NBuilder.dll @@ -72,11 +75,9 @@ ..\packages\NUnit.2.5.10.11092\lib\pnunit.framework.dll - - False - ..\Libraries\SubSonic.Core.dll - + + ..\Libraries\System.Data.SQLite.dll diff --git a/NzbDrone.Core.Test/RepoTest.cs b/NzbDrone.Core.Test/RepoTest.cs index 55852a919..c206d4136 100644 --- a/NzbDrone.Core.Test/RepoTest.cs +++ b/NzbDrone.Core.Test/RepoTest.cs @@ -42,7 +42,6 @@ public void to_many__series_to_episode() } [Test] - [Ignore] public void query_scratch_pad() { diff --git a/NzbDrone.Core.Test/SeriesProviderTest.cs b/NzbDrone.Core.Test/SeriesProviderTest.cs index bd5086dd611b37e33b25d5f056ac2bb5f63a3dd9..d8f4a283a58e6138ed1208a421791ffb08e2f20b 100644 GIT binary patch delta 324 zcmdmL_``UE5F=keQGQuwN@`KDo^yUt>SP&4#mzE|-fXJQiN&cJB}JvFnz6iG3Q!Oo zl3H8>mPt#@DNfa#T)-qgxsIJ*Bq={XN1?PhH8?e~I6u!VKL=>yuD#66Kno`u@##&D=X-~+=^(qxHqX4`)S{BjYxy}i0fn(?ssI20 delta 83 zcmexiywz}n5aVWZ#!$A&)_TAK2411f mzqreoC)cyHGx2gwF6P&pyomqp + + \ No newline at end of file diff --git a/NzbDrone.Core/CentralDispatch.cs b/NzbDrone.Core/CentralDispatch.cs index a1e4b894c..8f9e7811f 100644 --- a/NzbDrone.Core/CentralDispatch.cs +++ b/NzbDrone.Core/CentralDispatch.cs @@ -15,6 +15,7 @@ using NzbDrone.Core.Providers.Jobs; using NzbDrone.Core.Repository; using NzbDrone.Core.Repository.Quality; +using PetaPoco; using SubSonic.DataProviders; using SubSonic.Repository; @@ -56,7 +57,7 @@ private static void InitializeApp() LogConfiguration.StartDbLogging(); - Migrations.Run(Connection.MainConnectionString, true); + MigrationsHelper.Run(Connection.MainConnectionString, true); _kernel.Get().SetupDefaultProfiles(); @@ -95,6 +96,7 @@ public static void BindKernel() _kernel.Bind().ToSelf().InSingletonScope(); _kernel.Bind().ToConstant(Connection.CreateSimpleRepository(Connection.MainConnectionString)).InSingletonScope(); + _kernel.Bind().ToConstant(Connection.GetPetaPocoDb(Connection.MainConnectionString)).InRequestScope(); _kernel.Bind().ToConstant(Connection.CreateSimpleRepository(Connection.LogConnectionString)).WhenInjectedInto().InSingletonScope(); _kernel.Bind().ToConstant(Connection.CreateSimpleRepository(Connection.LogConnectionString)).WhenInjectedInto().InSingletonScope(); } diff --git a/NzbDrone.Core/Datastore/Connection.cs b/NzbDrone.Core/Datastore/Connection.cs index 40abbf572..e8eedf736 100644 --- a/NzbDrone.Core/Datastore/Connection.cs +++ b/NzbDrone.Core/Datastore/Connection.cs @@ -1,6 +1,8 @@ using System; +using System.Data.SQLite; using System.IO; using MvcMiniProfiler.Data; +using PetaPoco; using SubSonic.DataProviders; using SubSonic.DataProviders.SQLite; using SubSonic.Repository; @@ -53,6 +55,16 @@ public static IRepository CreateSimpleRepository(string connectionString) return new SimpleRepository(GetDataProvider(connectionString), SimpleRepositoryOptions.RunMigrations); } + public static IDatabase GetPetaPocoDb(string connectionString) + { + var profileConnection = ProfiledDbConnection.Get(new SQLiteConnection(connectionString)); + PetaPoco.Database.Mapper = new CustomeMapper(); + var db = new PetaPoco.Database(profileConnection); + db.OpenSharedConnection(); + + return db; + } + } @@ -67,6 +79,7 @@ public ProfiledSQLiteProvider(string connectionString, string providerName) public override System.Data.Common.DbConnection CreateConnection(string connectionString) { return ProfiledDbConnection.Get(base.CreateConnection(connectionString)); + } } } diff --git a/NzbDrone.Core/Datastore/CustomeMapper.cs b/NzbDrone.Core/Datastore/CustomeMapper.cs new file mode 100644 index 000000000..cb993927a --- /dev/null +++ b/NzbDrone.Core/Datastore/CustomeMapper.cs @@ -0,0 +1,33 @@ +using System; +using PetaPoco; + +namespace NzbDrone.Core.Datastore +{ + public class CustomeMapper : DefaultMapper + { + public override Func GetFromDbConverter(DestinationInfo destinationInfo, Type SourceType) + { + + if ((SourceType == typeof(Int32) || SourceType == typeof(Int64)) && destinationInfo.Type.IsGenericType && destinationInfo.Type.GetGenericTypeDefinition() == typeof(Nullable<>)) + { + // If it is NULLABLE, then get the underlying type. eg if "Nullable" then this will return just "int" + if (destinationInfo.Type.GetGenericArguments()[0].IsEnum) + { + return delegate(object s) + { + int value; + Int32.TryParse(s.ToString(), out value); + if (value == 0) + { + return null; + } + + return (Nullable)value; + }; + } + } + + return base.GetFromDbConverter(destinationInfo, SourceType); + } + } +} \ No newline at end of file diff --git a/NzbDrone.Core/Datastore/Migrations/Legacy/Migration.cs b/NzbDrone.Core/Datastore/Migrations/Legacy/Migration.cs new file mode 100644 index 000000000..2d5f74f2c --- /dev/null +++ b/NzbDrone.Core/Datastore/Migrations/Legacy/Migration.cs @@ -0,0 +1,69 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Migrator.Framework; + +namespace NzbDrone.Core.Datastore.Migrations.Legacy +{ + [Migration(20110523)] + public class Migration20110523 : Migration + { + public override void Up() + { + Database.RemoveTable(RepositoryProvider.JobsSchema.Name); + } + + public override void Down() + { + throw new NotImplementedException(); + } + } + + [Migration(20110603)] + public class Migration20110603 : Migration + { + public override void Up() + { + Database.RemoveTable("Seasons"); + + MigrationsHelper.RemoveDeletedColumns(Database); + MigrationsHelper.AddNewColumns(Database); + } + + public override void Down() + { + throw new NotImplementedException(); + } + } + + [Migration(20110604)] + public class Migration20110604 : Migration + { + public override void Up() + { + MigrationsHelper.ForceSubSonicMigration(Connection.CreateSimpleRepository(Connection.MainConnectionString)); + + var episodesTable = RepositoryProvider.EpisodesSchema; + //Database.AddIndex("idx_episodes_series_season_episode", episodesTable.Name, true, + // episodesTable.GetColumnByPropertyName("SeriesId").Name, + // episodesTable.GetColumnByPropertyName("SeasonNumber").Name, + // episodesTable.GetColumnByPropertyName("EpisodeNumber").Name); + + Database.AddIndex("idx_episodes_series_season", episodesTable.Name, false, + episodesTable.GetColumnByPropertyName("SeriesId").Name, + episodesTable.GetColumnByPropertyName("SeasonNumber").Name); + + Database.AddIndex("idx_episodes_series", episodesTable.Name, false, + episodesTable.GetColumnByPropertyName("SeriesId").Name); + + MigrationsHelper.RemoveDeletedColumns(Database); + MigrationsHelper.AddNewColumns(Database); + } + + public override void Down() + { + throw new NotImplementedException(); + } + } +} diff --git a/NzbDrone.Core/Datastore/Migrations/MigrationExport.cs b/NzbDrone.Core/Datastore/Migrations/MigrationExport.cs new file mode 100644 index 000000000..74fef9048 --- /dev/null +++ b/NzbDrone.Core/Datastore/Migrations/MigrationExport.cs @@ -0,0 +1,32 @@ +using System; +using System.Collections.Generic; +using System.Data; +using System.Linq; +using System.Text; +using MigSharp; + +namespace NzbDrone.Core.Datastore.Migrations +{ + [MigrationExport] + internal class Migration1 : IMigration + { + public void Up(IDatabase db) + { + db.CreateTable("Series") + .WithPrimaryKeyColumn("SeriesId", DbType.Int32).AsIdentity() + .WithNullableColumn("Title", DbType.String) + .WithNullableColumn("CleanTitle", DbType.String) + .WithNullableColumn("Status", DbType.String) + .WithNullableColumn("Overview", DbType.String) + .WithNullableColumn("AirsDayOfWeek", DbType.Int16) + .WithNullableColumn("AirTimes", DbType.String) + .WithNullableColumn("Language", DbType.String) + .WithNotNullableColumn("Path", DbType.String) + .WithNotNullableColumn("Monitored", DbType.Boolean) + .WithNotNullableColumn("QualityProfileId", DbType.Int16) + .WithNotNullableColumn("SeasonFolder", DbType.Boolean) + .WithNullableColumn("LastInfoSync", DbType.DateTime) + .WithNullableColumn("LastDiskSync", DbType.DateTime); + } + } +} diff --git a/NzbDrone.Core/Datastore/Migrations.cs b/NzbDrone.Core/Datastore/MigrationsHelper.cs similarity index 63% rename from NzbDrone.Core/Datastore/Migrations.cs rename to NzbDrone.Core/Datastore/MigrationsHelper.cs index b87f8589f..d73acfbc0 100644 --- a/NzbDrone.Core/Datastore/Migrations.cs +++ b/NzbDrone.Core/Datastore/MigrationsHelper.cs @@ -5,6 +5,7 @@ using System.Reflection; using System.Text; using Migrator.Framework; +using MigSharp; using NLog; using NzbDrone.Core.Repository; using NzbDrone.Core.Repository.Quality; @@ -14,7 +15,7 @@ namespace NzbDrone.Core.Datastore { - public class Migrations + public class MigrationsHelper { private static readonly Logger Logger = LogManager.GetCurrentClassLogger(); @@ -27,11 +28,11 @@ public static void Run(string connetionString, bool trace) Migrator.Migrator migrator; if (trace) { - migrator = new Migrator.Migrator("Sqlite", connetionString, Assembly.GetAssembly(typeof(Migrations)), true, new MigrationLogger()); + migrator = new Migrator.Migrator("Sqlite", connetionString, Assembly.GetAssembly(typeof(MigrationsHelper)), true, new MigrationLogger()); } else { - migrator = new Migrator.Migrator("Sqlite", connetionString, Assembly.GetAssembly(typeof(Migrations))); + migrator = new Migrator.Migrator("Sqlite", connetionString, Assembly.GetAssembly(typeof(MigrationsHelper))); } @@ -50,6 +51,13 @@ public static void Run(string connetionString, bool trace) } } + + public static void MigrateDatabase(string connectionString) + { + var migrator = new MigSharp.Migrator(connectionString, ProviderNames.SQLite); + migrator.MigrateAll(typeof(MigrationsHelper).Assembly); + } + public static void ForceSubSonicMigration(IRepository repository) { repository.Single(1); @@ -113,64 +121,5 @@ public static void AddNewColumns(ITransformationProvider transformationProvider) } - [Migration(20110523)] - public class Migration20110523 : Migration - { - public override void Up() - { - Database.RemoveTable(RepositoryProvider.JobsSchema.Name); - } - public override void Down() - { - throw new NotImplementedException(); - } - } - - [Migration(20110603)] - public class Migration20110603 : Migration - { - public override void Up() - { - Database.RemoveTable("Seasons"); - - Migrations.RemoveDeletedColumns(Database); - Migrations.AddNewColumns(Database); - } - - public override void Down() - { - throw new NotImplementedException(); - } - } - - [Migration(20110604)] - public class Migration20110604 : Migration - { - public override void Up() - { - Migrations.ForceSubSonicMigration(Connection.CreateSimpleRepository(Connection.MainConnectionString)); - - var episodesTable = RepositoryProvider.EpisodesSchema; - //Database.AddIndex("idx_episodes_series_season_episode", episodesTable.Name, true, - // episodesTable.GetColumnByPropertyName("SeriesId").Name, - // episodesTable.GetColumnByPropertyName("SeasonNumber").Name, - // episodesTable.GetColumnByPropertyName("EpisodeNumber").Name); - - Database.AddIndex("idx_episodes_series_season", episodesTable.Name, false, - episodesTable.GetColumnByPropertyName("SeriesId").Name, - episodesTable.GetColumnByPropertyName("SeasonNumber").Name); - - Database.AddIndex("idx_episodes_series", episodesTable.Name, false, - episodesTable.GetColumnByPropertyName("SeriesId").Name); - - Migrations.RemoveDeletedColumns(Database); - Migrations.AddNewColumns(Database); - } - - public override void Down() - { - throw new NotImplementedException(); - } - } } \ No newline at end of file diff --git a/NzbDrone.Core/Models/PetaPoco.cs b/NzbDrone.Core/Models/PetaPoco.cs new file mode 100644 index 000000000..24555a31c --- /dev/null +++ b/NzbDrone.Core/Models/PetaPoco.cs @@ -0,0 +1,2447 @@ +/* PetaPoco v4.0.2 - A Tiny ORMish thing for your POCO's. + * Copyright © 2011 Topten Software. All Rights Reserved. + * + * Apache License 2.0 - http://www.toptensoftware.com/petapoco/license + * + * Special thanks to Rob Conery (@robconery) for original inspiration (ie:Massive) and for + * use of Subsonic's T4 templates, Rob Sullivan (@DataChomp) for hard core DBA advice + * and Adam Schroder (@schotime) for lots of suggestions, improvements and Oracle support + */ + +#define PETAPOCO_NO_DYNAMIC //in your project settings on .NET 3.5 + +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Configuration; +using System.Data.Common; +using System.Data; +using System.Text.RegularExpressions; +using System.Reflection; +using System.Reflection.Emit; +using System.Linq.Expressions; + + +// ReSharper disable +namespace PetaPoco + +{ + // Poco's marked [Explicit] require all column properties to be marked + [AttributeUsage(AttributeTargets.Class)] + public class ExplicitColumnsAttribute : Attribute + { + } + // For non-explicit pocos, causes a property to be ignored + [AttributeUsage(AttributeTargets.Property)] + public class IgnoreAttribute : Attribute + { + } + + // For explicit pocos, marks property as a column + [AttributeUsage(AttributeTargets.Property)] + public class ColumnAttribute : Attribute + { + public ColumnAttribute() { } + public ColumnAttribute(string name) { Name = name; } + public string Name { get; set; } + } + + // For explicit pocos, marks property as a column + [AttributeUsage(AttributeTargets.Property)] + public class ResultColumnAttribute : ColumnAttribute + { + public ResultColumnAttribute() { } + public ResultColumnAttribute(string name) : base(name) { } + } + + // Specify the table name of a poco + [AttributeUsage(AttributeTargets.Class)] + public class TableNameAttribute : Attribute + { + public TableNameAttribute(string tableName) + { + Value = tableName; + } + public string Value { get; private set; } + } + + // Specific the primary key of a poco class (and optional sequence name for Oracle) + [AttributeUsage(AttributeTargets.Class)] + public class PrimaryKeyAttribute : Attribute + { + public PrimaryKeyAttribute(string primaryKey) + { + Value = primaryKey; + autoIncrement = true; + } + + public string Value { get; private set; } + public string sequenceName { get; set; } + public bool autoIncrement { get; set; } + } + + [AttributeUsage(AttributeTargets.Property)] + public class AutoJoinAttribute : Attribute + { + public AutoJoinAttribute() { } + } + + [AttributeUsage(AttributeTargets.Property)] + public class VersionColumnAttribute : ColumnAttribute + { + public VersionColumnAttribute() { } + public VersionColumnAttribute(string name) : base(name) { } + } + + // Results from paged request + public class Page + { + public long CurrentPage { get; set; } + public long TotalPages { get; set; } + public long TotalItems { get; set; } + public long ItemsPerPage { get; set; } + public List Items { get; set; } + public object Context { get; set; } + } + + // Pass as parameter value to force to DBType.AnsiString + public class AnsiString + { + public AnsiString(string str) + { + Value = str; + } + public string Value { get; private set; } + } + + // Used by IMapper to override table bindings for an object + public class TableInfo + { + public string TableName { get; set; } + public string PrimaryKey { get; set; } + public bool AutoIncrement { get; set; } + public string SequenceName { get; set; } + } + + // Optionally provide and implementation of this to Database.Mapper + public interface IMapper + { + void GetTableInfo(Type t, TableInfo ti); + bool MapPropertyToColumn(PropertyInfo pi, ref string columnName, ref bool resultColumn); + Func GetFromDbConverter(DestinationInfo destinationInfo, Type SourceType); + Func GetToDbConverter(Type SourceType); + } + + public class DefaultMapper : IMapper + { + public virtual void GetTableInfo(Type t, TableInfo ti) { } + public virtual bool MapPropertyToColumn(PropertyInfo pi, ref string columnName, ref bool resultColumn) + { + return true; + } + public virtual Func GetFromDbConverter(DestinationInfo destinationInfo, Type SourceType) + { + return null; + } + public virtual Func GetToDbConverter(Type SourceType) + { + return null; + } + } + + public class DestinationInfo + { + public DestinationInfo(Type type) + { + Type = type; + } + + public DestinationInfo(PropertyInfo propertyInfo) + { + PropertyInfo = propertyInfo; + Type = propertyInfo.PropertyType; + } + + public PropertyInfo PropertyInfo { get; private set; } + public Type Type { get; private set; } + } + + public interface IDatabaseQuery + { + void OpenSharedConnection(); + void CloseSharedConnection(); + int Execute(string sql, params object[] args); + int Execute(Sql sql); + T ExecuteScalar(string sql, params object[] args); + T ExecuteScalar(Sql sql); + List Fetch(); + List Fetch(string sql, params object[] args); + List Fetch(Sql sql); + List Fetch(long page, long itemsPerPage, string sql, params object[] args); + List Fetch(long page, long itemsPerPage, Sql sql); + Page Page(long page, long itemsPerPage, string sql, params object[] args); + Page Page(long page, long itemsPerPage, Sql sql); + List Fetch(Func cb, string sql, params object[] args); + List Fetch(Func cb, string sql, params object[] args); + List Fetch(Func cb, string sql, params object[] args); + IEnumerable Query(Func cb, string sql, params object[] args); + IEnumerable Query(Func cb, string sql, params object[] args); + IEnumerable Query(Func cb, string sql, params object[] args); + List Fetch(Func cb, Sql sql); + List Fetch(Func cb, Sql sql); + List Fetch(Func cb, Sql sql); + IEnumerable Query(Func cb, Sql sql); + IEnumerable Query(Func cb, Sql sql); + IEnumerable Query(Func cb, Sql sql); + List Fetch(string sql, params object[] args); + List Fetch(string sql, params object[] args); + List Fetch(string sql, params object[] args); + IEnumerable Query(string sql, params object[] args); + IEnumerable Query(string sql, params object[] args); + IEnumerable Query(string sql, params object[] args); + IEnumerable Query(Type[] types, object cb, string sql, params object[] args); + List Fetch(Sql sql); + List Fetch(Sql sql); + List Fetch(Sql sql); + IEnumerable Query(Sql sql); + IEnumerable Query(Sql sql); + IEnumerable Query(Sql sql); + IEnumerable Query(string sql, params object[] args); + IEnumerable Query(Sql sql); + T Single(object primaryKey); + T SingleOrDefault(object primaryKey); + T Single(string sql, params object[] args); + T SingleOrDefault(string sql, params object[] args); + T First(string sql, params object[] args); + T FirstOrDefault(string sql, params object[] args); + T Single(Sql sql); + T SingleOrDefault(Sql sql); + T First(Sql sql); + T FirstOrDefault(Sql sql); + bool Exists(object primaryKey); + int OneTimeCommandTimeout { get; set; } + } + + public interface IDatabase : IDatabaseQuery + { + void Dispose(); + IDbConnection Connection { get; } + Transaction GetTransaction(); + void BeginTransaction(); + void AbortTransaction(); + void CompleteTransaction(); + object Insert(string tableName, string primaryKeyName, bool autoIncrement, object poco); + object Insert(string tableName, string primaryKeyName, object poco); + object Insert(object poco); + int Update(string tableName, string primaryKeyName, object poco, object primaryKeyValue); + int Update(string tableName, string primaryKeyName, object poco); + int Update(object poco); + int Update(object poco, object primaryKeyValue); + int Update(string sql, params object[] args); + int Update(Sql sql); + int Delete(string tableName, string primaryKeyName, object poco); + int Delete(string tableName, string primaryKeyName, object poco, object primaryKeyValue); + int Delete(object poco); + int Delete(string sql, params object[] args); + int Delete(Sql sql); + int Delete(object pocoOrPrimaryKey); + void Save(string tableName, string primaryKeyName, object poco); + void Save(object poco); + } + + // Database class ... this is where most of the action happens + public class Database : IDisposable, IDatabase + { + public const string MsSqlClientProvider = "System.Data.SqlClient"; + + public Database(IDbConnection connection) + { + _sharedConnection = connection; + _connectionString = connection.ConnectionString; + _sharedConnectionDepth = 2; // Prevent closing external connection + CommonConstruct(); + } + + public Database(string connectionString, string providerName) + { + _connectionString = connectionString; + _providerName = providerName; + CommonConstruct(); + } + + public Database(string connectionString, DbProviderFactory provider) + { + _connectionString = connectionString; + _factory = provider; + CommonConstruct(); + } + + public Database(string connectionStringName) + { + // Use first? + if (connectionStringName == "") + connectionStringName = ConfigurationManager.ConnectionStrings[0].Name; + + // Work out connection string and provider name + var providerName = "System.Data.SqlClient"; + if (ConfigurationManager.ConnectionStrings[connectionStringName] != null) + { + if (!string.IsNullOrEmpty(ConfigurationManager.ConnectionStrings[connectionStringName].ProviderName)) + providerName = ConfigurationManager.ConnectionStrings[connectionStringName].ProviderName; + } + else + { + throw new InvalidOperationException("Can't find a connection string with the name '" + connectionStringName + "'"); + } + + // Store factory and connection string + _connectionString = ConfigurationManager.ConnectionStrings[connectionStringName].ConnectionString; + _providerName = providerName; + CommonConstruct(); + } + + enum DBType + { + SqlServer, + SqlServerCE, + MySql, + PostgreSQL, + Oracle, + SQLite + } + DBType _dbType = DBType.SqlServer; + + // Common initialization + private void CommonConstruct() + { + _transactionDepth = 0; + ForceDateTimesToUtc = true; + EnableAutoSelect = true; + + if (_providerName != null) + _factory = DbProviderFactories.GetFactory(_providerName); + + string dbtype = (_factory == null ? _sharedConnection.GetType() : _factory.GetType()).Name; + if (dbtype.StartsWith("MySql")) _dbType = DBType.MySql; + else if (dbtype.StartsWith("SqlCe")) _dbType = DBType.SqlServerCE; + else if (dbtype.StartsWith("Npgsql")) _dbType = DBType.PostgreSQL; + else if (dbtype.StartsWith("Oracle")) _dbType = DBType.Oracle; + else if (dbtype.StartsWith("SQLite")) _dbType = DBType.SQLite; + + if (_dbType == DBType.MySql && _connectionString != null && _connectionString.IndexOf("Allow User Variables=true") >= 0) + _paramPrefix = "?"; + if (_dbType == DBType.Oracle) + _paramPrefix = ":"; + } + + // Automatically close one open shared connection + public void Dispose() + { + // Automatically close one open connection reference + // (Works with KeepConnectionAlive and manually opening a shared connection) + CloseSharedConnection(); + } + + // Set to true to keep the first opened connection alive until this object is disposed + public bool KeepConnectionAlive { get; set; } + + // Open a connection (can be nested) + public void OpenSharedConnection() + { + if (_sharedConnectionDepth == 0) + { + _sharedConnection = _factory.CreateConnection(); + _sharedConnection.ConnectionString = _connectionString; + _sharedConnection.Open(); + + if (KeepConnectionAlive) + _sharedConnectionDepth++; // Make sure you call Dispose + } + _sharedConnectionDepth++; + } + + // Close a previously opened connection + public void CloseSharedConnection() + { + if (_sharedConnectionDepth > 0) + { + _sharedConnectionDepth--; + if (_sharedConnectionDepth == 0) + { + _sharedConnection.Dispose(); + _sharedConnection = null; + } + } + } + + // Access to our shared connection + public IDbConnection Connection + { + get { return _sharedConnection; } + } + + // Helper to create a transaction scope + public Transaction GetTransaction() + { + return new Transaction(this); + } + + // Use by derived repo generated by T4 templates + public virtual void OnBeginTransaction() { } + public virtual void OnEndTransaction() { } + + // Start a new transaction, can be nested, every call must be + // matched by a call to AbortTransaction or CompleteTransaction + // Use `using (var scope=db.Transaction) { scope.Complete(); }` to ensure correct semantics + public void BeginTransaction() + { + _transactionDepth++; + + if (_transactionDepth == 1) + { + OpenSharedConnection(); + _transaction = _sharedConnection.BeginTransaction(); + _transactionCancelled = false; + OnBeginTransaction(); + } + + } + + // Internal helper to cleanup transaction stuff + void CleanupTransaction() + { + OnEndTransaction(); + + if (_transactionCancelled) + _transaction.Rollback(); + else + _transaction.Commit(); + + _transaction.Dispose(); + _transaction = null; + + CloseSharedConnection(); + } + + // Abort the entire outer most transaction scope + public void AbortTransaction() + { + _transactionCancelled = true; + if ((--_transactionDepth) == 0) + CleanupTransaction(); + } + + // Complete the transaction + public void CompleteTransaction() + { + if ((--_transactionDepth) == 0) + CleanupTransaction(); + } + + // Helper to handle named parameters from object properties + static Regex rxParams = new Regex(@"(? args_dest) + { + return rxParams.Replace(_sql, m => + { + string param = m.Value.Substring(1); + + object arg_val; + + int paramIndex; + if (int.TryParse(param, out paramIndex)) + { + // Numbered parameter + if (paramIndex < 0 || paramIndex >= args_src.Length) + throw new ArgumentOutOfRangeException(string.Format("Parameter '@{0}' specified but only {1} parameters supplied (in `{2}`)", paramIndex, args_src.Length, _sql)); + arg_val = args_src[paramIndex]; + } + else + { + // Look for a property on one of the arguments with this name + bool found = false; + arg_val = null; + foreach (var o in args_src) + { + var pi = o.GetType().GetProperty(param); + if (pi != null) + { + arg_val = pi.GetValue(o, null); + found = true; + break; + } + } + + if (!found) + throw new ArgumentException(string.Format("Parameter '@{0}' specified but none of the passed arguments have a property with this name (in '{1}')", param, _sql)); + } + + // Expand collections to parameter lists + if ((arg_val as System.Collections.IEnumerable) != null && + (arg_val as string) == null && + (arg_val as byte[]) == null) + { + var sb = new StringBuilder(); + foreach (var i in arg_val as System.Collections.IEnumerable) + { + sb.Append((sb.Length == 0 ? "@" : ",@") + args_dest.Count.ToString()); + args_dest.Add(i); + } + return sb.ToString(); + } + else + { + args_dest.Add(arg_val); + return "@" + (args_dest.Count - 1).ToString(); + } + } + ); + } + + // Add a parameter to a DB command + void AddParam(IDbCommand cmd, object item, string ParameterPrefix) + { + // Convert value to from poco type to db type + if (Database.Mapper != null && item != null) + { + var fn = Database.Mapper.GetToDbConverter(item.GetType()); + if (fn != null) + item = fn(item); + } + + // Support passed in parameters + var idbParam = item as IDbDataParameter; + if (idbParam != null) + { + idbParam.ParameterName = string.Format("{0}{1}", ParameterPrefix, cmd.Parameters.Count); + cmd.Parameters.Add(idbParam); + return; + } + var p = cmd.CreateParameter(); + p.ParameterName = string.Format("{0}{1}", ParameterPrefix, cmd.Parameters.Count); + + if (item == null) + { + p.Value = DBNull.Value; + } + else + { + var t = item.GetType(); + if (t.IsEnum) // PostgreSQL .NET driver wont cast enum to int + { + p.Value = (int)item; + } + else if (t == typeof(Guid)) + { + p.Value = item.ToString(); + p.DbType = DbType.String; + p.Size = 40; + } + else if (t == typeof(string)) + { + p.Size = Math.Max((item as string).Length + 1, 4000); // Help query plan caching by using common size + p.Value = item; + } + else if (t == typeof(AnsiString)) + { + // Thanks @DataChomp for pointing out the SQL Server indexing performance hit of using wrong string type on varchar + p.Size = Math.Max((item as AnsiString).Value.Length + 1, 4000); + p.Value = (item as AnsiString).Value; + p.DbType = DbType.AnsiString; + } + else if (t == typeof(bool) && _dbType != DBType.PostgreSQL) + { + p.Value = ((bool)item) ? 1 : 0; + } + else if (item.GetType().Name == "SqlGeography") //SqlGeography is a CLR Type + { + p.GetType().GetProperty("UdtTypeName").SetValue(p, "geography", null); //geography is the equivalent SQL Server Type + p.Value = item; + } + + else if (item.GetType().Name == "SqlGeometry") //SqlGeometry is a CLR Type + { + p.GetType().GetProperty("UdtTypeName").SetValue(p, "geometry", null); //geography is the equivalent SQL Server Type + p.Value = item; + } + else + { + p.Value = item; + } + } + + cmd.Parameters.Add(p); + } + + // Create a command + static Regex rxParamsPrefix = new Regex(@"(? _paramPrefix + m.Value.Substring(1)); + sql = sql.Replace("@@", "@"); // <- double @@ escapes a single @ + + // Create the command and add parameters + IDbCommand cmd = _factory == null ? connection.CreateCommand() : _factory.CreateCommand(); + cmd.Connection = connection; + cmd.CommandText = sql; + cmd.Transaction = _transaction; + + foreach (var item in args) + { + AddParam(cmd, item, _paramPrefix); + } + + if (_dbType == DBType.Oracle) + { + cmd.GetType().GetProperty("BindByName").SetValue(cmd, true, null); + } + + if (!String.IsNullOrEmpty(sql)) + DoPreExecute(cmd); + + return cmd; + } + + // Create a command + IDbCommand CreateCommand(IDbConnection connection, string sql, params object[] args) + { + var sqlStatement = new Sql(sql, args); + return CreateCommand(connection, sqlStatement); + } + + // Override this to log/capture exceptions + public virtual void OnException(Exception x) + { + System.Diagnostics.Debug.WriteLine(x.ToString()); + System.Diagnostics.Debug.WriteLine(LastCommand); + } + + // Override this to log commands, or modify command before execution + public virtual void OnExecutingCommand(IDbCommand cmd) { } + public virtual void OnExecutedCommand(IDbCommand cmd) { } + + // Execute a non-query command + public int Execute(string sql, params object[] args) + { + return Execute(new Sql(sql, args)); + } + + public int Execute(Sql sql) + { + try + { + OpenSharedConnection(); + try + { + using (var cmd = CreateCommand(_sharedConnection, sql)) + { + var result = cmd.ExecuteNonQuery(); + OnExecutedCommand(cmd); + return result; + } + } + finally + { + CloseSharedConnection(); + } + } + catch (Exception x) + { + OnException(x); + throw; + } + } + + // Execute and cast a scalar property + public T ExecuteScalar(string sql, params object[] args) + { + return ExecuteScalar(new Sql(sql, args)); + } + + public T ExecuteScalar(Sql sql) + { + try + { + OpenSharedConnection(); + try + { + using (var cmd = CreateCommand(_sharedConnection, sql)) + { + object val = cmd.ExecuteScalar(); + OnExecutedCommand(cmd); + return (T)Convert.ChangeType(val, typeof(T)); + } + } + finally + { + CloseSharedConnection(); + } + } + catch (Exception x) + { + OnException(x); + throw; + } + } + + Regex rxSelect = new Regex(@"\A\s*(SELECT|EXECUTE|CALL)\s", RegexOptions.Compiled | RegexOptions.Singleline | RegexOptions.IgnoreCase | RegexOptions.Multiline); + Regex rxFrom = new Regex(@"\A\s*FROM\s", RegexOptions.Compiled | RegexOptions.Singleline | RegexOptions.IgnoreCase | RegexOptions.Multiline); + string AddSelectClause(string sql) + { + if (sql.StartsWith(";")) + return sql.Substring(1); + + if (!rxSelect.IsMatch(sql)) + { + var pd = PocoData.ForType(typeof(T)); + var tableName = EscapeTableName(pd.TableInfo.TableName); + string cols = string.Join(", ", (from c in pd.QueryColumns select EscapeSqlIdentifier(c)).ToArray()); + if (!rxFrom.IsMatch(sql)) + sql = string.Format("SELECT {0} FROM {1} {2}", cols, tableName, sql); + else + sql = string.Format("SELECT {0} {1}", cols, sql); + } + return sql; + } + + public bool ForceDateTimesToUtc { get; set; } + public bool EnableAutoSelect { get; set; } + + // Return a typed list of pocos + public List Fetch(string sql, params object[] args) + { + if (EnableAutoSelect) + sql = AddSelectClause(sql); + + return Fetch(new Sql(sql, args)); + } + + public List Fetch(Sql sql) + { + return Query(sql).ToList(); + } + + public List Fetch(long page, long itemsPerPage, string sql, params object[] args) + { + string sqlCount, sqlPage; + BuildPageQueries(page, itemsPerPage, sql, ref args, out sqlCount, out sqlPage); + return Fetch(sqlPage, args); + } + + public List Fetch(long page, long itemsPerPage, Sql sql) + { + return Fetch(page, itemsPerPage, sql.SQL, sql.Arguments); + } + + public List Fetch() + { + return Fetch(AddSelectClause("")); + } + + static Regex rxColumns = new Regex(@"\A\s*SELECT\s+((?:\((?>\((?)|\)(?<-depth>)|.?)*(?(depth)(?!))\)|.)*?)(?\((?)|\)(?<-depth>)|.?)*(?(depth)(?!))\)|[\w\(\)\.])+(?:\s+(?:ASC|DESC))?(?:\s*,\s*(?:\((?>\((?)|\)(?<-depth>)|.?)*(?(depth)(?!))\)|[\w\(\)\.])+(?:\s+(?:ASC|DESC))?)*", RegexOptions.IgnoreCase | RegexOptions.Multiline | RegexOptions.Singleline | RegexOptions.Compiled); + public static bool SplitSqlForPaging(string sql, out string sqlCount, out string sqlSelectRemoved, out string sqlOrderBy) + { + sqlSelectRemoved = null; + sqlCount = null; + sqlOrderBy = null; + + // Extract the columns from "SELECT FROM" + var m = rxColumns.Match(sql); + if (!m.Success) + return false; + + // Save column list and replace with COUNT(*) + Group g = m.Groups[1]; + sqlCount = sql.Substring(0, g.Index) + "COUNT(*) " + sql.Substring(g.Index + g.Length); + sqlSelectRemoved = sql.Substring(g.Index); + + // Look for an "ORDER BY " clause + m = rxOrderBy.Match(sqlCount); + if (!m.Success) + return false; + + g = m.Groups[0]; + sqlOrderBy = g.ToString(); + sqlCount = sqlCount.Substring(0, g.Index) + sqlCount.Substring(g.Index + g.Length); + + return true; + } + + public void BuildPageQueries(long page, long itemsPerPage, string sql, ref object[] args, out string sqlCount, out string sqlPage) + { + // Add auto select clause + sql = AddSelectClause(sql); + + // Split the SQL into the bits we need + string sqlSelectRemoved, sqlOrderBy; + if (!SplitSqlForPaging(sql, out sqlCount, out sqlSelectRemoved, out sqlOrderBy)) + throw new Exception("Unable to parse SQL statement for paged query"); + if (_dbType == DBType.Oracle && sqlSelectRemoved.StartsWith("*")) + throw new Exception("Query must alias '*' when performing a paged query.\neg. select t.* from table t order by t.id"); + + // Build the SQL for the actual final result + if (_dbType == DBType.SqlServer || _dbType == DBType.Oracle) + { + sqlSelectRemoved = rxOrderBy.Replace(sqlSelectRemoved, ""); + sqlPage = string.Format("SELECT * FROM (SELECT ROW_NUMBER() OVER ({0}) peta_rn, {1}) peta_paged WHERE peta_rn>@{2} AND peta_rn<=@{3}", + sqlOrderBy, sqlSelectRemoved, args.Length, args.Length + 1); + args = args.Concat(new object[] { (page - 1) * itemsPerPage, page * itemsPerPage }).ToArray(); + } + else if (_dbType == DBType.SqlServerCE) + { + sqlPage = string.Format("{0}\nOFFSET @{1} ROWS FETCH NEXT @{2} ROWS ONLY", sql, args.Length, args.Length + 1); + args = args.Concat(new object[] { (page - 1) * itemsPerPage, itemsPerPage }).ToArray(); + } + else + { + sqlPage = string.Format("{0}\nLIMIT @{1} OFFSET @{2}", sql, args.Length, args.Length + 1); + args = args.Concat(new object[] { itemsPerPage, (page - 1) * itemsPerPage }).ToArray(); + } + + } + + // Fetch a page + public Page Page(long page, long itemsPerPage, string sql, params object[] args) + { + string sqlCount, sqlPage; + BuildPageQueries(page, itemsPerPage, sql, ref args, out sqlCount, out sqlPage); + + // Save the one-time command time out and use it for both queries + int saveTimeout = OneTimeCommandTimeout; + + // Setup the paged result + var result = new Page(); + result.CurrentPage = page; + result.ItemsPerPage = itemsPerPage; + result.TotalItems = ExecuteScalar(sqlCount, args); + result.TotalPages = result.TotalItems / itemsPerPage; + if ((result.TotalItems % itemsPerPage) != 0) + result.TotalPages++; + + OneTimeCommandTimeout = saveTimeout; + + // Get the records + result.Items = Fetch(sqlPage, args); + + // Done + return result; + } + + public Page Page(long page, long itemsPerPage, Sql sql) + { + return Page(page, itemsPerPage, sql.SQL, sql.Arguments); + } + + // Return an enumerable collection of pocos + public IEnumerable Query(string sql, params object[] args) + { + if (EnableAutoSelect) + sql = AddSelectClause(sql); + + return Query(new Sql(sql, args)); + } + + public IEnumerable Query(Sql sql) + { + OpenSharedConnection(); + try + { + using (var cmd = CreateCommand(_sharedConnection, sql)) + { + IDataReader r; + var pd = PocoData.ForType(typeof(T)); + try + { + if (_sharedConnection.State != ConnectionState.Open) + _sharedConnection.Open(); + + r = cmd.ExecuteReader(); + OnExecutedCommand(cmd); + } + catch (Exception x) + { + OnException(x); + throw; + } + + using (r) + { + var factory = pd.GetFactory(cmd.CommandText, _sharedConnection.ConnectionString, ForceDateTimesToUtc, 0, r.FieldCount, r) as Func; + while (true) + { + T poco; + try + { + if (!r.Read()) + yield break; + poco = factory(r); + } + catch (Exception x) + { + OnException(x); + throw; + } + + yield return poco; + } + } + } + } + finally + { + CloseSharedConnection(); + } + } + + // Multi Fetch + public List Fetch(Func cb, string sql, params object[] args) { return Query(cb, sql, args).ToList(); } + public List Fetch(Func cb, string sql, params object[] args) { return Query(cb, sql, args).ToList(); } + public List Fetch(Func cb, string sql, params object[] args) { return Query(cb, sql, args).ToList(); } + + // Multi Query + public IEnumerable Query(Func cb, string sql, params object[] args) { return Query(new Type[] { typeof(T1), typeof(T2) }, cb, sql, args); } + public IEnumerable Query(Func cb, string sql, params object[] args) { return Query(new Type[] { typeof(T1), typeof(T2), typeof(T3) }, cb, sql, args); } + public IEnumerable Query(Func cb, string sql, params object[] args) { return Query(new Type[] { typeof(T1), typeof(T2), typeof(T3), typeof(T4) }, cb, sql, args); } + + // Multi Fetch (SQL builder) + public List Fetch(Func cb, Sql sql) { return Query(cb, sql.SQL, sql.Arguments).ToList(); } + public List Fetch(Func cb, Sql sql) { return Query(cb, sql.SQL, sql.Arguments).ToList(); } + public List Fetch(Func cb, Sql sql) { return Query(cb, sql.SQL, sql.Arguments).ToList(); } + + // Multi Query (SQL builder) + public IEnumerable Query(Func cb, Sql sql) { return Query(new Type[] { typeof(T1), typeof(T2) }, cb, sql.SQL, sql.Arguments); } + public IEnumerable Query(Func cb, Sql sql) { return Query(new Type[] { typeof(T1), typeof(T2), typeof(T3) }, cb, sql.SQL, sql.Arguments); } + public IEnumerable Query(Func cb, Sql sql) { return Query(new Type[] { typeof(T1), typeof(T2), typeof(T3), typeof(T4) }, cb, sql.SQL, sql.Arguments); } + + // Multi Fetch (Simple) + public List Fetch(string sql, params object[] args) { return Query(sql, args).ToList(); } + public List Fetch(string sql, params object[] args) { return Query(sql, args).ToList(); } + public List Fetch(string sql, params object[] args) { return Query(sql, args).ToList(); } + + // Multi Query (Simple) + public IEnumerable Query(string sql, params object[] args) { return Query(new Type[] { typeof(T1), typeof(T2) }, null, sql, args); } + public IEnumerable Query(string sql, params object[] args) { return Query(new Type[] { typeof(T1), typeof(T2), typeof(T3) }, null, sql, args); } + public IEnumerable Query(string sql, params object[] args) { return Query(new Type[] { typeof(T1), typeof(T2), typeof(T3), typeof(T4) }, null, sql, args); } + + // Multi Fetch (Simple) (SQL builder) + public List Fetch(Sql sql) { return Query(sql.SQL, sql.Arguments).ToList(); } + public List Fetch(Sql sql) { return Query(sql.SQL, sql.Arguments).ToList(); } + public List Fetch(Sql sql) { return Query(sql.SQL, sql.Arguments).ToList(); } + + // Multi Query (Simple) (SQL builder) + public IEnumerable Query(Sql sql) { return Query(new Type[] { typeof(T1), typeof(T2) }, null, sql.SQL, sql.Arguments); } + public IEnumerable Query(Sql sql) { return Query(new Type[] { typeof(T1), typeof(T2), typeof(T3) }, null, sql.SQL, sql.Arguments); } + public IEnumerable Query(Sql sql) { return Query(new Type[] { typeof(T1), typeof(T2), typeof(T3), typeof(T4) }, null, sql.SQL, sql.Arguments); } + + // Automagically guess the property relationships between various POCOs and create a delegate that will set them up + object GetAutoMapper(Type[] types) + { + // Build a key + var kb = new StringBuilder(); + foreach (var t in types) + { + kb.Append(t.ToString()); + kb.Append(":"); + } + var key = kb.ToString(); + + // Check cache + RWLock.EnterReadLock(); + try + { + object mapper; + if (AutoMappers.TryGetValue(key, out mapper)) + return mapper; + } + finally + { + RWLock.ExitReadLock(); + } + + // Create it + RWLock.EnterWriteLock(); + try + { + // Try again + object mapper; + if (AutoMappers.TryGetValue(key, out mapper)) + return mapper; + + // Create a method + var m = new DynamicMethod("petapoco_automapper", types[0], types, true); + var il = m.GetILGenerator(); + + for (int i = 1; i < types.Length; i++) + { + bool handled = false; + for (int j = i - 1; j >= 0; j--) + { + // Find the property + var candidates = from p in types[j].GetProperties() where p.PropertyType == types[i] select p; + if (candidates.Count() == 0) + continue; + if (candidates.Count() > 1) + throw new InvalidOperationException(string.Format("Can't auto join {0} as {1} has more than one property of type {0}", types[i], types[j])); + + // Generate code + il.Emit(OpCodes.Ldarg_S, j); + il.Emit(OpCodes.Ldarg_S, i); + il.Emit(OpCodes.Callvirt, candidates.First().GetSetMethod(true)); + handled = true; + } + + if (!handled) + throw new InvalidOperationException(string.Format("Can't auto join {0}", types[i])); + } + + il.Emit(OpCodes.Ldarg_0); + il.Emit(OpCodes.Ret); + + // Cache it + var del = m.CreateDelegate(Expression.GetFuncType(types.Concat(types.Take(1)).ToArray())); + AutoMappers.Add(key, del); + return del; + } + finally + { + RWLock.ExitWriteLock(); + } + } + + // Find the split point in a result set for two different pocos and return the poco factory for the first + Delegate FindSplitPoint(Type typeThis, Type typeNext, string sql, IDataReader r, ref int pos) + { + // Last? + if (typeNext == null) + return PocoData.ForType(typeThis).GetFactory(sql, _sharedConnection.ConnectionString, ForceDateTimesToUtc, pos, r.FieldCount - pos, r); + + // Get PocoData for the two types + PocoData pdThis = PocoData.ForType(typeThis); + PocoData pdNext = PocoData.ForType(typeNext); + + // Find split point + int firstColumn = pos; + var usedColumns = new Dictionary(); + for (; pos < r.FieldCount; pos++) + { + // Split if field name has already been used, or if the field doesn't exist in current poco but does in the next + string fieldName = r.GetName(pos); + if (usedColumns.ContainsKey(fieldName) || (!pdThis.Columns.ContainsKey(fieldName) && pdNext.Columns.ContainsKey(fieldName))) + { + return pdThis.GetFactory(sql, _sharedConnection.ConnectionString, ForceDateTimesToUtc, firstColumn, pos - firstColumn, r); + } + usedColumns.Add(fieldName, true); + } + + throw new InvalidOperationException(string.Format("Couldn't find split point between {0} and {1}", typeThis, typeNext)); + } + + // Instance data used by the Multipoco factory delegate - essentially a list of the nested poco factories to call + class MultiPocoFactory + { + public List m_Delegates; + public Delegate GetItem(int index) { return m_Delegates[index]; } + } + + // Create a multi-poco factory + Func CreateMultiPocoFactory(Type[] types, string sql, IDataReader r) + { + var m = new DynamicMethod("petapoco_multipoco_factory", typeof(TRet), new Type[] { typeof(MultiPocoFactory), typeof(IDataReader), typeof(object) }, typeof(MultiPocoFactory)); + var il = m.GetILGenerator(); + + // Load the callback + il.Emit(OpCodes.Ldarg_2); + + // Call each delegate + var dels = new List(); + int pos = 0; + for (int i = 0; i < types.Length; i++) + { + // Add to list of delegates to call + var del = FindSplitPoint(types[i], i + 1 < types.Length ? types[i + 1] : null, sql, r, ref pos); + dels.Add(del); + + // Get the delegate + il.Emit(OpCodes.Ldarg_0); // callback,this + il.Emit(OpCodes.Ldc_I4, i); // callback,this,Index + il.Emit(OpCodes.Callvirt, typeof(MultiPocoFactory).GetMethod("GetItem")); // callback,Delegate + il.Emit(OpCodes.Ldarg_1); // callback,delegate, datareader + + // Call Invoke + var tDelInvoke = del.GetType().GetMethod("Invoke"); + il.Emit(OpCodes.Callvirt, tDelInvoke); // Poco left on stack + } + + // By now we should have the callback and the N pocos all on the stack. Call the callback and we're done + il.Emit(OpCodes.Callvirt, Expression.GetFuncType(types.Concat(new Type[] { typeof(TRet) }).ToArray()).GetMethod("Invoke")); + il.Emit(OpCodes.Ret); + + // Finish up + return (Func)m.CreateDelegate(typeof(Func), new MultiPocoFactory() { m_Delegates = dels }); + } + + // Various cached stuff + static Dictionary MultiPocoFactories = new Dictionary(); + static Dictionary AutoMappers = new Dictionary(); + static System.Threading.ReaderWriterLockSlim RWLock = new System.Threading.ReaderWriterLockSlim(); + + // Get (or create) the multi-poco factory for a query + Func GetMultiPocoFactory(Type[] types, string sql, IDataReader r) + { + // Build a key string (this is crap, should address this at some point) + var kb = new StringBuilder(); + kb.Append(typeof(TRet).ToString()); + kb.Append(":"); + foreach (var t in types) + { + kb.Append(":"); + kb.Append(t.ToString()); + } + kb.Append(":"); kb.Append(_sharedConnection.ConnectionString); + kb.Append(":"); kb.Append(ForceDateTimesToUtc); + kb.Append(":"); kb.Append(sql); + string key = kb.ToString(); + + // Check cache + RWLock.EnterReadLock(); + try + { + object oFactory; + if (MultiPocoFactories.TryGetValue(key, out oFactory)) + return (Func)oFactory; + } + finally + { + RWLock.ExitReadLock(); + } + + // Cache it + RWLock.EnterWriteLock(); + try + { + // Check again + object oFactory; + if (MultiPocoFactories.TryGetValue(key, out oFactory)) + return (Func)oFactory; + + // Create the factory + var Factory = CreateMultiPocoFactory(types, sql, r); + + MultiPocoFactories.Add(key, Factory); + return Factory; + } + finally + { + RWLock.ExitWriteLock(); + } + + } + + // Actual implementation of the multi-poco query + public IEnumerable Query(Type[] types, object cb, string sql, params object[] args) + { + OpenSharedConnection(); + try + { + using (var cmd = CreateCommand(_sharedConnection, sql, args)) + { + IDataReader r; + try + { + r = cmd.ExecuteReader(); + OnExecutedCommand(cmd); + } + catch (Exception x) + { + OnException(x); + throw; + } + var factory = GetMultiPocoFactory(types, sql, r); + if (cb == null) + cb = GetAutoMapper(types.ToArray()); + bool bNeedTerminator = false; + using (r) + { + while (true) + { + TRet poco; + try + { + if (!r.Read()) + break; + poco = factory(r, cb); + } + catch (Exception x) + { + OnException(x); + throw; + } + + if (poco != null) + yield return poco; + else + bNeedTerminator = true; + } + if (bNeedTerminator) + { + var poco = (TRet)(cb as Delegate).DynamicInvoke(new object[types.Length]); + if (poco != null) + yield return poco; + else + yield break; + } + } + } + } + finally + { + CloseSharedConnection(); + } + } + + public bool Exists(object primaryKey) + { + var index = 0; + var primaryKeyValuePairs = GetPrimaryKeyValues(PocoData.ForType(typeof(T)).TableInfo.PrimaryKey, primaryKey); + return FirstOrDefault(string.Format("WHERE {0}", BuildPrimaryKeySql(primaryKeyValuePairs, ref index)), primaryKeyValuePairs.Select(x => x.Value).ToArray()) != null; + } + public T Single(object primaryKey) + { + var index = 0; + var primaryKeyValuePairs = GetPrimaryKeyValues(PocoData.ForType(typeof(T)).TableInfo.PrimaryKey, primaryKey); + return Single(string.Format("WHERE {0}", BuildPrimaryKeySql(primaryKeyValuePairs, ref index)), primaryKeyValuePairs.Select(x => x.Value).ToArray()); + } + public T SingleOrDefault(object primaryKey) + { + var index = 0; + var primaryKeyValuePairs = GetPrimaryKeyValues(PocoData.ForType(typeof(T)).TableInfo.PrimaryKey, primaryKey); + return SingleOrDefault(string.Format("WHERE {0}", BuildPrimaryKeySql(primaryKeyValuePairs, ref index)), primaryKeyValuePairs.Select(x => x.Value).ToArray()); + } + public T Single(string sql, params object[] args) + { + return Query(sql, args).Single(); + } + public T SingleOrDefault(string sql, params object[] args) + { + return Query(sql, args).SingleOrDefault(); + } + public T First(string sql, params object[] args) + { + return Query(sql, args).First(); + } + public T FirstOrDefault(string sql, params object[] args) + { + return Query(sql, args).FirstOrDefault(); + } + public T Single(Sql sql) + { + return Query(sql).Single(); + } + public T SingleOrDefault(Sql sql) + { + return Query(sql).SingleOrDefault(); + } + public T First(Sql sql) + { + return Query(sql).First(); + } + public T FirstOrDefault(Sql sql) + { + return Query(sql).FirstOrDefault(); + } + + public string EscapeTableName(string str) + { + // Assume table names with "dot", or opening sq is already escaped + return str.IndexOf('.') >= 0 ? str : EscapeSqlIdentifier(str); + } + + public string EscapeSqlIdentifier(string str) + { + switch (_dbType) + { + case DBType.MySql: + return string.Format("`{0}`", str); + + case DBType.PostgreSQL: + case DBType.Oracle: + return string.Format("\"{0}\"", str); + + default: + return string.Format("[{0}]", str); + } + } + + public object Insert(string tableName, string primaryKeyName, object poco) + { + return Insert(tableName, primaryKeyName, true, poco); + } + + // Insert a poco into a table. If the poco has a property with the same name + // as the primary key the id of the new record is assigned to it. Either way, + // the new id is returned. + public object Insert(string tableName, string primaryKeyName, bool autoIncrement, object poco) + { + try + { + OpenSharedConnection(); + try + { + using (var cmd = CreateCommand(_sharedConnection, "")) + { + if(_sharedConnection.State != ConnectionState.Open) + _sharedConnection.Open(); + + var pd = PocoData.ForObject(poco, primaryKeyName); + var names = new List(); + var values = new List(); + var index = 0; + var versionName = ""; + + foreach (var i in pd.Columns) + { + // Don't insert result columns + if (i.Value.ResultColumn) + continue; + + // Don't insert the primary key (except under oracle where we need bring in the next sequence value) + if (autoIncrement && primaryKeyName != null && string.Compare(i.Key, primaryKeyName, true) == 0) + { + if (_dbType == DBType.Oracle && !string.IsNullOrEmpty(pd.TableInfo.SequenceName)) + { + names.Add(i.Key); + values.Add(string.Format("{0}.nextval", pd.TableInfo.SequenceName)); + } + continue; + } + + names.Add(EscapeSqlIdentifier(i.Key)); + values.Add(string.Format("{0}{1}", _paramPrefix, index++)); + + object val = i.Value.GetValue(poco); + if (i.Value.VersionColumn) + { + val = 1; + versionName = i.Key; + } + + AddParam(cmd, val, _paramPrefix); + } + + cmd.CommandText = string.Format("INSERT INTO {0} ({1}) VALUES ({2})", + EscapeTableName(tableName), + string.Join(",", names.ToArray()), + string.Join(",", values.ToArray()) + ); + + if (!autoIncrement) + { + DoPreExecute(cmd); + cmd.ExecuteNonQuery(); + OnExecutedCommand(cmd); + return true; + } + + object id; + + switch (_dbType) + { + case DBType.SqlServerCE: + DoPreExecute(cmd); + cmd.ExecuteNonQuery(); + OnExecutedCommand(cmd); + id = ExecuteScalar("SELECT @@@IDENTITY AS NewID;"); + break; + case DBType.SqlServer: + cmd.CommandText += ";\nSELECT SCOPE_IDENTITY() AS NewID;"; + DoPreExecute(cmd); + id = cmd.ExecuteScalar(); + OnExecutedCommand(cmd); + break; + case DBType.PostgreSQL: + if (primaryKeyName != null) + { + cmd.CommandText += string.Format("returning {0} as NewID", EscapeSqlIdentifier(primaryKeyName)); + DoPreExecute(cmd); + id = cmd.ExecuteScalar(); + } + else + { + id = -1; + DoPreExecute(cmd); + cmd.ExecuteNonQuery(); + } + OnExecutedCommand(cmd); + break; + case DBType.Oracle: + if (primaryKeyName != null) + { + cmd.CommandText += string.Format(" returning {0} into :newid", EscapeSqlIdentifier(primaryKeyName)); + var param = cmd.CreateParameter(); + param.ParameterName = ":newid"; + param.Value = DBNull.Value; + param.Direction = ParameterDirection.ReturnValue; + param.DbType = DbType.Int64; + cmd.Parameters.Add(param); + DoPreExecute(cmd); + cmd.ExecuteNonQuery(); + id = param.Value; + } + else + { + id = -1; + DoPreExecute(cmd); + cmd.ExecuteNonQuery(); + } + OnExecutedCommand(cmd); + break; + case DBType.SQLite: + if (primaryKeyName != null) + { + cmd.CommandText += ";\nSELECT last_insert_rowid();"; + DoPreExecute(cmd); + id = cmd.ExecuteScalar(); + } + else + { + id = -1; + DoPreExecute(cmd); + cmd.ExecuteNonQuery(); + } + OnExecutedCommand(cmd); + break; + default: + cmd.CommandText += ";\nSELECT @@IDENTITY AS NewID;"; + DoPreExecute(cmd); + id = cmd.ExecuteScalar(); + OnExecutedCommand(cmd); + break; + } + + // Assign the ID back to the primary key property + if (primaryKeyName != null) + { + PocoColumn pc; + if (pd.Columns.TryGetValue(primaryKeyName, out pc)) + { + pc.SetValue(poco, pc.ChangeType(id)); + } + } + + // Assign the Version column + if (!string.IsNullOrEmpty(versionName)) + { + PocoColumn pc; + if (pd.Columns.TryGetValue(versionName, out pc)) + { + pc.SetValue(poco, pc.ChangeType(1)); + } + } + + return id; + } + } + finally + { + CloseSharedConnection(); + } + } + catch (Exception x) + { + OnException(x); + throw; + } + } + + // Insert an annotated poco object + public object Insert(object poco) + { + var pd = PocoData.ForType(poco.GetType()); + return Insert(pd.TableInfo.TableName, pd.TableInfo.PrimaryKey, pd.TableInfo.AutoIncrement, poco); + } + + // Update a record with values from a poco. primary key value can be either supplied or read from the poco + public int Update(string tableName, string primaryKeyName, object poco, object primaryKeyValue) + { + try + { + OpenSharedConnection(); + try + { + using (var cmd = CreateCommand(_sharedConnection, "")) + { + var sb = new StringBuilder(); + var index = 0; + var pd = PocoData.ForObject(poco, primaryKeyName); + string versionName = null; + object versionValue = null; + + var primaryKeyValuePairs = GetPrimaryKeyValues(primaryKeyName, primaryKeyValue); + + foreach (var i in pd.Columns) + { + // Don't update the primary key, but grab the value if we don't have it + if (primaryKeyValue == null && primaryKeyValuePairs.ContainsKey(i.Key)) + { + primaryKeyValuePairs[i.Key] = i.Value.PropertyInfo.GetValue(poco, null); + continue; + } + + // Dont update result only columns + if (i.Value.ResultColumn) + continue; + + object value = i.Value.PropertyInfo.GetValue(poco, null); + + if (i.Value.VersionColumn) + { + versionName = i.Key; + versionValue = value; + value = Convert.ToInt64(value) + 1; + } + + // Build the sql + if (index > 0) + sb.Append(", "); + sb.AppendFormat("{0} = {1}{2}", EscapeSqlIdentifier(i.Key), _paramPrefix, index++); + + // Store the parameter in the command + AddParam(cmd, value, _paramPrefix); + } + + cmd.CommandText = string.Format("UPDATE {0} SET {1} WHERE {2}", + EscapeSqlIdentifier(tableName), sb.ToString(), BuildPrimaryKeySql(primaryKeyValuePairs, ref index)); + + foreach (var keyValue in primaryKeyValuePairs) + { + AddParam(cmd, keyValue.Value, _paramPrefix); + } + + if (!string.IsNullOrEmpty(versionName)) + { + cmd.CommandText += string.Format(" AND {0} = {1}{2}", EscapeSqlIdentifier(versionName), _paramPrefix, index++); + AddParam(cmd, versionValue, _paramPrefix); + } + + DoPreExecute(cmd); + + // Do it + var result = cmd.ExecuteNonQuery(); + OnExecutedCommand(cmd); + + // Set Version + if (!string.IsNullOrEmpty(versionName)) + { + PocoColumn pc; + if (pd.Columns.TryGetValue(versionName, out pc)) + { + pc.PropertyInfo.SetValue(poco, Convert.ChangeType(Convert.ToInt64(versionValue) + 1, pc.PropertyInfo.PropertyType), null); + } + } + + return result; + } + } + finally + { + CloseSharedConnection(); + } + } + catch (Exception x) + { + OnException(x); + throw; + } + } + + private string BuildPrimaryKeySql(Dictionary primaryKeyValuePair, ref int index) + { + var tempIndex = index; + index += primaryKeyValuePair.Count; + return string.Join(" AND ", primaryKeyValuePair.Select((x, i) => string.Format("{0} = {1}{2}", EscapeSqlIdentifier(x.Key), _paramPrefix, tempIndex + i)).ToArray()); + } + + private Dictionary GetPrimaryKeyValues(string primaryKeyName, object primaryKeyValue) + { + Dictionary primaryKeyValues; + + var multiplePrimaryKeysNames = primaryKeyName.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries).Select(x => x.Trim()).ToArray(); + if (primaryKeyValue != null) + { + if (multiplePrimaryKeysNames.Length == 1) + primaryKeyValues = new Dictionary(StringComparer.OrdinalIgnoreCase) { { primaryKeyName, primaryKeyValue } }; + else + primaryKeyValues = multiplePrimaryKeysNames.ToDictionary(x => x, + x => primaryKeyValue.GetType().GetProperties() + .Where(y => string.Equals(x, y.Name, StringComparison.OrdinalIgnoreCase)) + .Single().GetValue(primaryKeyValue, null), StringComparer.OrdinalIgnoreCase); + } + else + { + primaryKeyValues = multiplePrimaryKeysNames.ToDictionary(x => x, x => (object)null, StringComparer.OrdinalIgnoreCase); + } + return primaryKeyValues; + } + + public int Update(string tableName, string primaryKeyName, object poco) + { + return Update(tableName, primaryKeyName, poco, null); + } + + public int Update(object poco) + { + return Update(poco, null); + } + + public int Update(object poco, object primaryKeyValue) + { + var pd = PocoData.ForType(poco.GetType()); + return Update(pd.TableInfo.TableName, pd.TableInfo.PrimaryKey, poco, primaryKeyValue); + } + + public int Update(string sql, params object[] args) + { + var pd = PocoData.ForType(typeof(T)); + return Execute(string.Format("UPDATE {0} {1}", EscapeTableName(pd.TableInfo.TableName), sql), args); + } + + public int Update(Sql sql) + { + var pd = PocoData.ForType(typeof(T)); + return Execute(new Sql(string.Format("UPDATE {0}", EscapeTableName(pd.TableInfo.TableName))).Append(sql)); + } + + public int Delete(string tableName, string primaryKeyName, object poco) + { + return Delete(tableName, primaryKeyName, poco, null); + } + + public int Delete(string tableName, string primaryKeyName, object poco, object primaryKeyValue) + { + var primaryKeyValuePairs = GetPrimaryKeyValues(primaryKeyName, primaryKeyValue); + // If primary key value not specified, pick it up from the object + if (primaryKeyValue == null) + { + var pd = PocoData.ForObject(poco, primaryKeyName); + foreach (var i in pd.Columns) + { + if (primaryKeyValuePairs.ContainsKey(i.Key)) + { + primaryKeyValuePairs[i.Key] = i.Value.PropertyInfo.GetValue(poco, null); + } + } + } + + // Do it + var index = 0; + var sql = string.Format("DELETE FROM {0} WHERE {1}", tableName, BuildPrimaryKeySql(primaryKeyValuePairs, ref index)); + return Execute(sql, primaryKeyValuePairs.Select(x => x.Value).ToArray()); + } + + public int Delete(object poco) + { + var pd = PocoData.ForType(poco.GetType()); + return Delete(pd.TableInfo.TableName, pd.TableInfo.PrimaryKey, poco); + } + + public int Delete(object pocoOrPrimaryKey) + { + if (pocoOrPrimaryKey.GetType() == typeof(T)) + return Delete(pocoOrPrimaryKey); + var pd = PocoData.ForType(typeof(T)); + return Delete(pd.TableInfo.TableName, pd.TableInfo.PrimaryKey, null, pocoOrPrimaryKey); + } + + public int Delete(string sql, params object[] args) + { + var pd = PocoData.ForType(typeof(T)); + return Execute(string.Format("DELETE FROM {0} {1}", EscapeTableName(pd.TableInfo.TableName), sql), args); + } + + public int Delete(Sql sql) + { + var pd = PocoData.ForType(typeof(T)); + return Execute(new Sql(string.Format("DELETE FROM {0}", EscapeTableName(pd.TableInfo.TableName))).Append(sql)); + } + + // Check if a poco represents a new record + public bool IsNew(string primaryKeyName, object poco) + { + var pd = PocoData.ForObject(poco, primaryKeyName); + object pk; + PocoColumn pc; + if (pd.Columns.TryGetValue(primaryKeyName, out pc)) + { + pk = pc.GetValue(poco); + } +#if !PETAPOCO_NO_DYNAMIC + else if (poco.GetType() == typeof(System.Dynamic.ExpandoObject)) + { + return true; + } +#endif + else + { + var pi = poco.GetType().GetProperty(primaryKeyName); + if (pi == null) + throw new ArgumentException(string.Format("The object doesn't have a property matching the primary key column name '{0}'", primaryKeyName)); + pk = pi.GetValue(poco, null); + } + + if (pk == null) + return true; + + var type = pk.GetType(); + + if (type.IsValueType) + { + // Common primary key types + if (type == typeof(long)) + return (long)pk == 0; + else if (type == typeof(ulong)) + return (ulong)pk == 0; + else if (type == typeof(int)) + return (int)pk == 0; + else if (type == typeof(uint)) + return (uint)pk == 0; + + // Create a default instance and compare + return pk == Activator.CreateInstance(pk.GetType()); + } + else + { + return pk == null; + } + } + + public bool IsNew(object poco) + { + var pd = PocoData.ForType(poco.GetType()); + if (!pd.TableInfo.AutoIncrement) + throw new InvalidOperationException("IsNew() and Save() are only supported on tables with auto-increment/identity primary key columns"); + return IsNew(pd.TableInfo.PrimaryKey, poco); + } + + // Insert new record or Update existing record + public void Save(string tableName, string primaryKeyName, object poco) + { + if (IsNew(primaryKeyName, poco)) + { + Insert(tableName, primaryKeyName, true, poco); + } + else + { + Update(tableName, primaryKeyName, poco); + } + } + + public void Save(object poco) + { + var pd = PocoData.ForType(poco.GetType()); + Save(pd.TableInfo.TableName, pd.TableInfo.PrimaryKey, poco); + } + + public int CommandTimeout { get; set; } + public int OneTimeCommandTimeout { get; set; } + + void DoPreExecute(IDbCommand cmd) + { + // Setup command timeout + if (OneTimeCommandTimeout != 0) + { + cmd.CommandTimeout = OneTimeCommandTimeout; + OneTimeCommandTimeout = 0; + } + else if (CommandTimeout != 0) + { + cmd.CommandTimeout = CommandTimeout; + } + + // Call hook + OnExecutingCommand(cmd); + + // Save it + _lastSql = cmd.CommandText; + _lastArgs = (from IDataParameter parameter in cmd.Parameters select parameter.Value).ToArray(); + } + + public string LastSQL { get { return _lastSql; } } + public object[] LastArgs { get { return _lastArgs; } } + public string LastCommand + { + get { return FormatCommand(_lastSql, _lastArgs); } + } + + public string FormatCommand(IDbCommand cmd) + { + return FormatCommand(cmd.CommandText, (from IDataParameter parameter in cmd.Parameters select parameter.Value).ToArray()); + } + + public string FormatCommand(string sql, object[] args) + { + var sb = new StringBuilder(); + if (sql == null) + return ""; + sb.Append(sql); + if (args != null && args.Length > 0) + { + sb.Append("\n"); + for (int i = 0; i < args.Length; i++) + { + sb.AppendFormat("\t -> {0}{1} [{2}] = \"{3}\"\n", _paramPrefix, i, args[i].GetType().Name, args[i]); + } + sb.Remove(sb.Length - 1, 1); + } + return sb.ToString(); + } + + + public static IMapper Mapper + { + get; + set; + } + + public class PocoColumn + { + public string ColumnName; + public PropertyInfo PropertyInfo; + public bool ResultColumn; + public bool VersionColumn; + public virtual void SetValue(object target, object val) { PropertyInfo.SetValue(target, val, null); } + public virtual object GetValue(object target) { return PropertyInfo.GetValue(target, null); } + public virtual object ChangeType(object val) { return Convert.ChangeType(val, PropertyInfo.PropertyType); } + } + internal class ExpandoColumn : PocoColumn + { + public override void SetValue(object target, object val) { (target as IDictionary)[ColumnName] = val; } + public override object GetValue(object target) + { + object val = null; + (target as IDictionary).TryGetValue(ColumnName, out val); + return val; + } + public override object ChangeType(object val) { return val; } + } + internal class PocoData + { + public static PocoData ForObject(object o, string primaryKeyName) + { + var t = o.GetType(); +#if !PETAPOCO_NO_DYNAMIC + if (t == typeof(System.Dynamic.ExpandoObject)) + { + var pd = new PocoData(); + pd.TableInfo = new TableInfo(); + pd.Columns = new Dictionary(StringComparer.OrdinalIgnoreCase); + pd.Columns.Add(primaryKeyName, new ExpandoColumn() { ColumnName = primaryKeyName }); + pd.TableInfo.PrimaryKey = primaryKeyName; + pd.TableInfo.AutoIncrement = true; + foreach (var col in (o as IDictionary).Keys) + { + if (col!=primaryKeyName) + pd.Columns.Add(col, new ExpandoColumn() { ColumnName = col }); + } + return pd; + } + else +#endif + return ForType(t); + } + static System.Threading.ReaderWriterLockSlim RWLock = new System.Threading.ReaderWriterLockSlim(); + public static PocoData ForType(Type t) + { +#if !PETAPOCO_NO_DYNAMIC + if (t == typeof(System.Dynamic.ExpandoObject)) + throw new InvalidOperationException("Can't use dynamic types with this method"); +#endif + // Check cache + RWLock.EnterReadLock(); + PocoData pd; + try + { + if (m_PocoDatas.TryGetValue(t, out pd)) + return pd; + } + finally + { + RWLock.ExitReadLock(); + } + + + // Cache it + RWLock.EnterWriteLock(); + try + { + // Check again + if (m_PocoDatas.TryGetValue(t, out pd)) + return pd; + + // Create it + pd = new PocoData(t); + m_PocoDatas.Add(t, pd); + } + finally + { + RWLock.ExitWriteLock(); + } + + return pd; + } + + public PocoData() + { + } + + public PocoData(Type t) + { + type = t; + TableInfo = new TableInfo(); + + // Get the table name + var a = t.GetCustomAttributes(typeof(TableNameAttribute), true); + TableInfo.TableName = a.Length == 0 ? t.Name : (a[0] as TableNameAttribute).Value; + + // Get the primary key + a = t.GetCustomAttributes(typeof(PrimaryKeyAttribute), true); + TableInfo.PrimaryKey = a.Length == 0 ? "ID" : (a[0] as PrimaryKeyAttribute).Value; + TableInfo.SequenceName = a.Length == 0 ? null : (a[0] as PrimaryKeyAttribute).sequenceName; + TableInfo.AutoIncrement = a.Length == 0 ? false : (a[0] as PrimaryKeyAttribute).autoIncrement; + + // Set autoincrement false if primary key has multiple columns + TableInfo.AutoIncrement = TableInfo.AutoIncrement ? !TableInfo.PrimaryKey.Contains(',') : TableInfo.AutoIncrement; + + // Call column mapper + if (Database.Mapper != null) + Database.Mapper.GetTableInfo(t, TableInfo); + + // Work out bound properties + bool ExplicitColumns = t.GetCustomAttributes(typeof(ExplicitColumnsAttribute), true).Length > 0; + Columns = new Dictionary(StringComparer.OrdinalIgnoreCase); + foreach (var pi in t.GetProperties()) + { + // Work out if properties is to be included + var ColAttrs = pi.GetCustomAttributes(typeof(ColumnAttribute), true); + if (ExplicitColumns) + { + if (ColAttrs.Length == 0) + continue; + } + else + { + if (pi.GetCustomAttributes(typeof(IgnoreAttribute), true).Length != 0) + continue; + } + + var pc = new PocoColumn(); + pc.PropertyInfo = pi; + + // Work out the DB column name + if (ColAttrs.Length > 0) + { + var colattr = (ColumnAttribute)ColAttrs[0]; + pc.ColumnName = colattr.Name; + if ((colattr as ResultColumnAttribute) != null) + pc.ResultColumn = true; + if ((colattr as VersionColumnAttribute) != null) + pc.VersionColumn = true; + } + if (pc.ColumnName == null) + { + pc.ColumnName = pi.Name; + if (Database.Mapper != null && !Database.Mapper.MapPropertyToColumn(pi, ref pc.ColumnName, ref pc.ResultColumn)) + continue; + } + + // Store it + Columns.Add(pc.ColumnName, pc); + } + + // Build column list for automatic select + QueryColumns = (from c in Columns where !c.Value.ResultColumn select c.Key).ToArray(); + + } + + static bool IsIntegralType(Type t) + { + var tc = Type.GetTypeCode(t); + return tc >= TypeCode.SByte && tc <= TypeCode.UInt64; + } + + // Create factory function that can convert a IDataReader record into a POCO + public Delegate GetFactory(string sql, string connString, bool ForceDateTimesToUtc, int firstColumn, int countColumns, IDataReader r) + { + // Check cache + var key = string.Format("{0}:{1}:{2}:{3}:{4}", sql, connString, ForceDateTimesToUtc, firstColumn, countColumns); + RWLock.EnterReadLock(); + try + { + // Have we already created it? + Delegate factory; + if (PocoFactories.TryGetValue(key, out factory)) + return factory; + } + finally + { + RWLock.ExitReadLock(); + } + + // Take the writer lock + RWLock.EnterWriteLock(); + + try + { + + // Check again, just in case + Delegate factory; + if (PocoFactories.TryGetValue(key, out factory)) + return factory; + + // Create the method + var m = new DynamicMethod("petapoco_factory_" + PocoFactories.Count.ToString(), type, new Type[] { typeof(IDataReader) }, true); + var il = m.GetILGenerator(); + +#if !PETAPOCO_NO_DYNAMIC + if (type == typeof(object)) + { + // var poco=new T() + il.Emit(OpCodes.Newobj, typeof(System.Dynamic.ExpandoObject).GetConstructor(Type.EmptyTypes)); // obj + + MethodInfo fnAdd = typeof(IDictionary).GetMethod("Add"); + + // Enumerate all fields generating a set assignment for the column + for (int i = firstColumn; i < firstColumn + countColumns; i++) + { + var srcType = r.GetFieldType(i); + + il.Emit(OpCodes.Dup); // obj, obj + il.Emit(OpCodes.Ldstr, r.GetName(i)); // obj, obj, fieldname + + // Get the converter + Func converter = null; + if (Database.Mapper != null) + converter = Database.Mapper.GetFromDbConverter(null, srcType); + if (ForceDateTimesToUtc && converter == null && srcType == typeof(DateTime)) + converter = delegate(object src) { return new DateTime(((DateTime)src).Ticks, DateTimeKind.Utc); }; + + // Setup stack for call to converter + AddConverterToStack(il, converter); + + // r[i] + il.Emit(OpCodes.Ldarg_0); // obj, obj, fieldname, converter?, rdr + il.Emit(OpCodes.Ldc_I4, i); // obj, obj, fieldname, converter?, rdr,i + il.Emit(OpCodes.Callvirt, fnGetValue); // obj, obj, fieldname, converter?, value + + // Convert DBNull to null + il.Emit(OpCodes.Dup); // obj, obj, fieldname, converter?, value, value + il.Emit(OpCodes.Isinst, typeof(DBNull)); // obj, obj, fieldname, converter?, value, (value or null) + var lblNotNull = il.DefineLabel(); + il.Emit(OpCodes.Brfalse_S, lblNotNull); // obj, obj, fieldname, converter?, value + il.Emit(OpCodes.Pop); // obj, obj, fieldname, converter? + if (converter!=null) + il.Emit(OpCodes.Pop); // obj, obj, fieldname, + il.Emit(OpCodes.Ldnull); // obj, obj, fieldname, null + if (converter != null) + { + var lblReady = il.DefineLabel(); + il.Emit(OpCodes.Br_S, lblReady); + il.MarkLabel(lblNotNull); + il.Emit(OpCodes.Callvirt, fnInvoke); + il.MarkLabel(lblReady); + } + else + { + il.MarkLabel(lblNotNull); + } + + il.Emit(OpCodes.Callvirt, fnAdd); + } + } + else +#endif + if (type.IsValueType || type == typeof(string) || type == typeof(byte[])) + { + // Do we need to install a converter? + var srcType = r.GetFieldType(0); + var converter = GetConverter(ForceDateTimesToUtc, null, srcType, type); + + // "if (!rdr.IsDBNull(i))" + il.Emit(OpCodes.Ldarg_0); // rdr + il.Emit(OpCodes.Ldc_I4_0); // rdr,0 + il.Emit(OpCodes.Callvirt, fnIsDBNull); // bool + var lblCont = il.DefineLabel(); + il.Emit(OpCodes.Brfalse_S, lblCont); + il.Emit(OpCodes.Ldnull); // null + var lblFin = il.DefineLabel(); + il.Emit(OpCodes.Br_S, lblFin); + + il.MarkLabel(lblCont); + + // Setup stack for call to converter + AddConverterToStack(il, converter); + + il.Emit(OpCodes.Ldarg_0); // rdr + il.Emit(OpCodes.Ldc_I4_0); // rdr,0 + il.Emit(OpCodes.Callvirt, fnGetValue); // value + + // Call the converter + if (converter != null) + il.Emit(OpCodes.Callvirt, fnInvoke); + + il.MarkLabel(lblFin); + il.Emit(OpCodes.Unbox_Any, type); // value converted + } + else + { + // var poco=new T() + il.Emit(OpCodes.Newobj, type.GetConstructor(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic, null, new Type[0], null)); + + // Enumerate all fields generating a set assignment for the column + for (int i = firstColumn; i < firstColumn + countColumns; i++) + { + // Get the PocoColumn for this db column, ignore if not known + PocoColumn pc; + if (!Columns.TryGetValue(r.GetName(i), out pc)) + continue; + + // Get the source type for this column + var srcType = r.GetFieldType(i); + var dstType = pc.PropertyInfo.PropertyType; + + // "if (!rdr.IsDBNull(i))" + il.Emit(OpCodes.Ldarg_0); // poco,rdr + il.Emit(OpCodes.Ldc_I4, i); // poco,rdr,i + il.Emit(OpCodes.Callvirt, fnIsDBNull); // poco,bool + var lblNext = il.DefineLabel(); + il.Emit(OpCodes.Brtrue_S, lblNext); // poco + + il.Emit(OpCodes.Dup); // poco,poco + + // Do we need to install a converter? + var converter = GetConverter(ForceDateTimesToUtc, pc, srcType, dstType); + + // Fast + bool Handled = false; + if (converter == null) + { + var valuegetter = typeof(IDataRecord).GetMethod("Get" + srcType.Name, new Type[] { typeof(int) }); + if (valuegetter != null + && valuegetter.ReturnType == srcType + && (valuegetter.ReturnType == dstType || valuegetter.ReturnType == Nullable.GetUnderlyingType(dstType))) + { + il.Emit(OpCodes.Ldarg_0); // *,rdr + il.Emit(OpCodes.Ldc_I4, i); // *,rdr,i + il.Emit(OpCodes.Callvirt, valuegetter); // *,value + + // Convert to Nullable + if (Nullable.GetUnderlyingType(dstType) != null) + { + il.Emit(OpCodes.Newobj, dstType.GetConstructor(new Type[] { Nullable.GetUnderlyingType(dstType) })); + } + + il.Emit(OpCodes.Callvirt, pc.PropertyInfo.GetSetMethod(true)); // poco + Handled = true; + } + } + + // Not so fast + if (!Handled) + { + // Setup stack for call to converter + AddConverterToStack(il, converter); + + // "value = rdr.GetValue(i)" + il.Emit(OpCodes.Ldarg_0); // *,rdr + il.Emit(OpCodes.Ldc_I4, i); // *,rdr,i + il.Emit(OpCodes.Callvirt, fnGetValue); // *,value + + // Call the converter + if (converter != null) + il.Emit(OpCodes.Callvirt, fnInvoke); + + // Assign it + il.Emit(OpCodes.Unbox_Any, pc.PropertyInfo.PropertyType); // poco,poco,value + il.Emit(OpCodes.Callvirt, pc.PropertyInfo.GetSetMethod(true)); // poco + } + + il.MarkLabel(lblNext); + } + } + + il.Emit(OpCodes.Ret); + + // Cache it, return it + var del = m.CreateDelegate(Expression.GetFuncType(typeof(IDataReader), type)); + PocoFactories.Add(key, del); + return del; + } + finally + { + RWLock.ExitWriteLock(); + } + } + + private static void AddConverterToStack(ILGenerator il, Func converter) + { + if (converter != null) + { + // Add the converter + int converterIndex = m_Converters.Count; + m_Converters.Add(converter); + + // Generate IL to push the converter onto the stack + il.Emit(OpCodes.Ldsfld, fldConverters); + il.Emit(OpCodes.Ldc_I4, converterIndex); + il.Emit(OpCodes.Callvirt, fnListGetItem); // Converter + } + } + + private static Func GetConverter(bool forceDateTimesToUtc, PocoColumn pc, Type srcType, Type dstType) + { + Func converter = null; + + // Get converter from the mapper + if (Database.Mapper != null) + { + DestinationInfo destinationInfo = pc != null + ? new DestinationInfo(pc.PropertyInfo) + : new DestinationInfo(dstType); + converter = Database.Mapper.GetFromDbConverter(destinationInfo, srcType); + } + + // Standard DateTime->Utc mapper + if (forceDateTimesToUtc && converter == null && srcType == typeof(DateTime) && (dstType == typeof(DateTime) || dstType == typeof(DateTime?))) + { + converter = delegate(object src) { return new DateTime(((DateTime)src).Ticks, DateTimeKind.Utc); }; + } + + // Forced type conversion including integral types -> enum + if (converter == null) + { + if (dstType.IsEnum && IsIntegralType(srcType)) + { + if (srcType != typeof(int)) + { + converter = delegate(object src) { return Convert.ChangeType(src, typeof(int), null); }; + } + } + else if (!dstType.IsAssignableFrom(srcType)) + { + converter = delegate(object src) { return Convert.ChangeType(src, dstType, null); }; + } + } + return converter; + } + + + static Dictionary m_PocoDatas = new Dictionary(); + static List> m_Converters = new List>(); + static MethodInfo fnGetValue = typeof(IDataRecord).GetMethod("GetValue", new Type[] { typeof(int) }); + static MethodInfo fnIsDBNull = typeof(IDataRecord).GetMethod("IsDBNull"); + static FieldInfo fldConverters = typeof(PocoData).GetField("m_Converters", BindingFlags.Static | BindingFlags.GetField | BindingFlags.NonPublic); + static MethodInfo fnListGetItem = typeof(List>).GetProperty("Item").GetGetMethod(); + static MethodInfo fnInvoke = typeof(Func).GetMethod("Invoke"); + public Type type; + public string[] QueryColumns { get; private set; } + public TableInfo TableInfo { get; private set; } + public Dictionary Columns { get; private set; } + Dictionary PocoFactories = new Dictionary(); + } + + // Member variables + string _connectionString; + string _providerName; + DbProviderFactory _factory; + IDbConnection _sharedConnection; + IDbTransaction _transaction; + int _sharedConnectionDepth; + int _transactionDepth; + bool _transactionCancelled; + string _lastSql; + object[] _lastArgs; + string _paramPrefix = "@"; + } + + // Transaction object helps maintain transaction depth counts + public class Transaction : IDisposable + { + public Transaction(Database db) + { + _db = db; + _db.BeginTransaction(); + } + + public void Complete() + { + _db.CompleteTransaction(); + _db = null; + } + + public void Dispose() + { + if (_db != null) + _db.AbortTransaction(); + } + + Database _db; + } + + // Simple helper class for building SQL statments + public class Sql + { + public Sql() + { + } + + public Sql(string sql, params object[] args) + { + _sql = sql; + _args = args; + } + + public static Sql Builder + { + get { return new Sql(); } + } + + string _sql; + object[] _args; + Sql _rhs; + string _sqlFinal; + object[] _argsFinal; + + private void Build() + { + // already built? + if (_sqlFinal != null) + return; + + // Build it + var sb = new StringBuilder(); + var args = new List(); + Build(sb, args, null); + _sqlFinal = sb.ToString(); + _argsFinal = args.ToArray(); + } + + public string SQL + { + get + { + Build(); + return _sqlFinal; + } + } + + public object[] Arguments + { + get + { + Build(); + return _argsFinal; + } + } + + public Sql Append(Sql sql) + { + if (_rhs != null) + _rhs.Append(sql); + else + _rhs = sql; + + return this; + } + + public Sql Append(string sql, params object[] args) + { + return Append(new Sql(sql, args)); + } + + static bool Is(Sql sql, string sqltype) + { + return sql != null && sql._sql != null && sql._sql.StartsWith(sqltype, StringComparison.InvariantCultureIgnoreCase); + } + + private void Build(StringBuilder sb, List args, Sql lhs) + { + if (!String.IsNullOrEmpty(_sql)) + { + // Add SQL to the string + if (sb.Length > 0) + { + sb.Append("\n"); + } + + var sql = Database.ProcessParams(_sql, _args, args); + + if (Is(lhs, "WHERE ") && Is(this, "WHERE ")) + sql = "AND " + sql.Substring(6); + if (Is(lhs, "ORDER BY ") && Is(this, "ORDER BY ")) + sql = ", " + sql.Substring(9); + + sb.Append(sql); + } + + // Now do rhs + if (_rhs != null) + _rhs.Build(sb, args, this); + } + + public Sql Where(string sql, params object[] args) + { + return Append(new Sql("WHERE (" + sql + ")", args)); + } + + public Sql OrderBy(params object[] columns) + { + return Append(new Sql("ORDER BY " + String.Join(", ", (from x in columns select x.ToString()).ToArray()))); + } + + public Sql Select(params object[] columns) + { + return Append(new Sql("SELECT " + String.Join(", ", (from x in columns select x.ToString()).ToArray()))); + } + + public Sql From(params object[] tables) + { + return Append(new Sql("FROM " + String.Join(", ", (from x in tables select x.ToString()).ToArray()))); + } + + public Sql GroupBy(params object[] columns) + { + return Append(new Sql("GROUP BY " + String.Join(", ", (from x in columns select x.ToString()).ToArray()))); + } + + private SqlJoinClause Join(string JoinType, string table) + { + return new SqlJoinClause(Append(new Sql(JoinType + table))); + } + + public SqlJoinClause InnerJoin(string table) { return Join("INNER JOIN ", table); } + public SqlJoinClause LeftJoin(string table) { return Join("LEFT JOIN ", table); } + + public class SqlJoinClause + { + private readonly Sql _sql; + + public SqlJoinClause(Sql sql) + { + _sql = sql; + } + + public Sql On(string onClause, params object[] args) + { + return _sql.Append("ON " + onClause, args); + } + } + } + +} \ No newline at end of file diff --git a/NzbDrone.Core/NzbDrone.Core.csproj b/NzbDrone.Core/NzbDrone.Core.csproj index 598fdcc7d..7a2918f5d 100644 --- a/NzbDrone.Core/NzbDrone.Core.csproj +++ b/NzbDrone.Core/NzbDrone.Core.csproj @@ -129,6 +129,10 @@ False ..\Libraries\Exceptioneer.WindowsFormsClient.dll + + + ..\Libraries\MigSharp.dll + ..\packages\MiniProfiler.1.2\lib\MvcMiniProfiler.dll @@ -139,10 +143,12 @@ False ..\Libraries\NLog.dll - + + False ..\Libraries\SubSonic.Core.dll + @@ -165,7 +171,10 @@ - + + + + @@ -176,6 +185,7 @@ + @@ -290,6 +300,12 @@ Migrator + + + + + + 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®9F1#V zBqB=NIw+o$1p}Hm`nRI+qS7w-{NC!^{klR;lbWcjMNCL;IQ7n6WT)v3ZXI>*`uuR( zChAF8YU2y4qfc5(9sJ~IJsba-Qnq_8uZswOq5DM3)@L0fSsCJ4Z!r0+Dtu#F**Khz zVAAt!c&BjcSI0rStG8>6g1P6^=l=P|Mk`kg^Q3Vp_?$54OYdyP84=m@7w~_9D{WH* z8?$!gA+fws>aJMfOHY@smpsYW!PEONeV6yt7(+eIyK-{%w1fiwAdXXsc)^O(vN^oiOoz(yQEnu&|o(n?I9BGI~tld0>Wc_kST+X4;Vd znc0N!+3R@mvmcT?^4%PmJi;tAQRHF?$Zh(iU0Q+rs>u92@mKholm++Kexr*}8h%qw>hEb&`-JP?DcH4+0jGAYFqE^dV389+LpG;Kko~4?8ho7>!v?>ESB`J zVP*F@VzsioumnGP>dErIgv!Cp#Yl%#|W`O8f;yio?UKsh8zt{U9nd2wd9*MrN)4a&ST(~hBKIvm0d#$ zbJ?AKb^~jzrUOmveKG(_M!T#im=E>2O_SLj4$TrLXyhZNG1 zf)R~%mubgy?~q5_%`N5{~LQtzG>&TH&SCV zk$JcOkf49_BX*HOr5t58J7v;wS$AF>gqi!4lbye7J8Pq828Rg!pqu=fBnjkyw)qlS zBtctbA3HhoAX$)n&<6Mmv6&dt;=|IVd^URM>kKq&6R;K$W?Ps7!mdOTUwVq5Fbei< zS{P0cY+27EKe!aM?)fY7#2{E^5EdzF{k&y&pM;AYdK>1kN;gURo1(lNjvXO4MJ}1G z_^-v$W$mw&kl(?D_ZBM1u|>-#pOE>Guq}ziBRgo~%3wZB8X{VYu)NJXgpP}nHzTU& zO3;&Mm*d_(kfGfYLE6F}dgC5A_MKRxQ;hwqg4eXbN#g6Ltj1xzXE!uUl`9ZAYB{$wOAImqEG?PhG3Nu#(j9Zq2dclR z9WD#NIX!=$=0{T5un9Yy|7`geY6kXeLj%7y-EZPMpt=bRN<&=ge$mBhf|2>=p*(mQ z{)Rv9u9Uzb>0FI(0al%}CAm=;CkEhVDGOhyzTvWAmxXcg!wjCgx$$rm- zW-b5w?rE1F4!EjQtk8RDWdC-+T%Df6mR|`66LwA;#XjP7|Tn>h_ga8$NmM+q0;PE)dYCawB~7$5hX{7}jskG@~jgQWtzZ)1YjSOYVXjL6UG3Y|<0anGtsq z5!kW!r#W8shBRA_V%x?aGDzFxJku66JBNW|531TyidW#jogl}!vZt%Xp8N4NmbDRa zsdZJms_;5oNq=W@9sWtkgxk5r|hB4Rw`Rx4T+zQpb&qe%G!-9A5t9-z%+xEDegVGxu{t z&+gpYnc$6Z{`i;ao9$0&>bx7?xo5;0j;YMCJ@$sdDQmoMykL0iJ(Hg}o88g(+!N?O}`+EZr<5i1PZ6jqgQ5t%LaVO(at^Jwi-T#8@2 zF7Ifahd_LpwW`RCqJ6S0lF9%8RiXL2{F-IkikqmE%cIgg@W{ls7A#v zSDhU7myF{>4^FCB9pJ~{274{0C=WZm*$+IV@Z1mS545$L@Aachd)tRhF^`3eY!{a0 z6Ep+8eK&Y{@ljYp^Xh#|*M@Ro0uu0Ai|gfkS?knSf{ZnABh=AYLHVF~diT=fIEiDA zbD3$UKRfGex9?n?gp_z}!b&Whr%J{`k@Z`5!2E^Yc--yE7Ml2j;47D%LNDH!wfPbb zB9odOa@AZE`t#qLPl=!Q!pf2wATe|klaiWVWSsMhmGv<3aj0%Z3`-AY96=YE06pTI?@aP zw`-F0TVQ!Qc|rwI&y+kGBz()U5%lss4)d?R`#iy63%^r0Kv?@&&|bkW_*^ zAiKS5$Xv4UZJ6ymW9e>WH-DVWG6CtUIkM<&CGkZIxWlb9IAlI?cMCb`6N@oM&X1%e zlBYviYi8I@T8aVLQS(G@hGP)sv+pIWg-5?gMbK>A=fW9|0^0PFM(O#(yLSktGyd>) zZafhHV2eum!hcnP_8)YC4M=Lue)1}~wihRtzzptT=S0WVMry}913{<8y_g_j2^XIPiJ;RJb_Q0ps=@?E{#z3XRf(B*Ni`8Ph`<|f9tJ}h%p_g@T1 zZ%KeuAGMLEH8Fu2s6!MC!A6HT1dO*tiu})SAWMay3#3jueomth8xNZz|F0sT^nB;6 zA{NZ$B%n+FeF`Nw5VzD{0wcU=5WFX#M-X=2;#A^3)NR`YIT4TBk_us)syr7H(2Fkp zWVa`x=7Mw(orva7B~LTz2|8$A^ZsGtBEXqLv$$MnBBbDt0YE!LWCXbmBL9jJqjaaM z9iYxqbXig{o;+D*f`!i2aCA# z%qhCC1MepL^X8$^iVyP!;ev4&sF^v03sdkp<|r=I$o-E0%3C1gCqVzq+|L2(f-n!S zz&=peiTE5DQ-S#t=@g+fe#@i=VHneR(lFp?Zlaru)ILQXa&gpElB?};Feub!wW;EIU zOAeb;K^{2y_94A=Jm^mqoEttnb=s@3)%$U!-ts>rUr+F13w?{fE|EdbWycM?eXN04 z$jw~}9(9dj=5j=i*x*be7#DImYLGhHhy2*H*q0%fMH|OTu?dQo7Z~Y0$!U}EDI|O2 zquURE*P;TA>++}GwPt|-#2;qh3(&aOOQ!a1H+qa%el#dfq7&@{u;>~jh#)OXroi~R%@Uc_=wDsXzI7-3*to0r&=N7hZPHG6&-y}PGqgvAHn{#b zdEt8*I>oS`n~gqjC}*C?-&s0T-AzteWz%RRJh2Q_WTsV ziI>iN#Ha&B;&n?tzz6A)D8Eg|y3Sx1H42CNCB$`}?;YU%pt~Pg%enu4>O2+XOx%11 ziChAzTw;0{Ufm>`W$f7HArO%Gmh0AnI_~i+FDhs#bDvc%#tU-t67c@*Hk)fXg>g(7 ze85eNChz0?hs}5-F-`|Zln%tB&Q9T5xf(wYUHD6Hd$dSbs$?#LEpQH=yBV_cB`uM8 z)M|`@C4)V{V=Nv2S0ZL&UJn(ihy%2$Qc8+P5HueNYH>f4Ttjm-w*o0cHy9)mzfes- z&lDU$KG+}nXmHCzVIMvf6?!<0*qsY8OU%SAK{SwktpO~R~Z>^<-+W*EM(y;goeOM}#`@J!R zLrpTV_zJ(s8zzPC~bG{LXgg_bYkqLiN-u<_ROI7+R*Q_n6E z+`S@fils}){ zy9mpSCD9P!Sjz|lajnjP(wQR+{OvRwY+0-dl`;rmjF$aprajkciCxUBOQjh& z&)c9))0ul}reUxKN-FY$9mH}NUE1xkNI=ME_xu*fg2oK7{Goc^dNA<$P|WCt2BZ`qThf#e`iGs6>?AUd+M3)*N z8Og>AVCy#{L@tEs%VET(5~vfung53%T)ih5mHP1CtWAWRB)&2K*w15>1o$V8gAYJs z@bkxwRyRon==3~GE z5_W8|KeL#J7TXWfn;-QMkqU9WTn>4HusbaJ?WXN&3XK$#scnDaX8*M1O&huY{6W_D zY0JC)Z44Nq!a5>i;I|}a?L9KzBrpyA;HfQ)fr3_C!7=9cLnadkcQgRsOjxCE|1h(O ziUmeziv|gp2zm~-Q~HVt4*@aa$x3jJEbAX~ZrayF=p6l=jXAxrfvANx5S!AnVVpck z(pD4ZcuwH!3f1uLu9#`YZVUdB_W7NPwmzG@!`cC@z=z9cP1LG&>MAUdDMEza> zlVq&0$96O$Go@5&m`@5YQ!BUd;BKu6XwLHF3<10B3c=+edgNTZ{Z-6=TQ{n4a7PY8 zjvR+w?_!ssh+zRaJTZ)Dx8`voWN>eUc@q~VpWU>>4W~{-aBLc5K<^pDY0q0!Sp7pz zd1YZ#zT%2#&mrbPut8)beQTJb3{qQ`67DVMqEXmLwcpACdm`6jH{JmMYk8`jNf&n< zSgP0!J1kwjX<*eQ;+x31pgVJXR}eho422rd+mnyqkTO(vn*)29-f|wCfhD-U%(v+9 zp}X?Ebsk&z^EV#NkSE}Ie<@taJj17D!UfpEG0+$D@%@R>lx|8Akrg=gI{c2&T-Tfm zs(34F&;%iN-=+D|RzPhORu2Vv{p!%w{u3#AV?E~26GwNlN6XHQ)H<2kFI||zuDN`t zCI&73t5Ozy!QNrU6k7&8m-T#HSQWmIJqel_zQ|r(E=;(f#McbxX$)G93Ygjo%0eTs z?bo8Nu{UXn2kiLCF|fAzB$cC~svwd#v~>QBWOLvS0h9WCA0h?c$L7w>w*=3(P#1&h z+^`|tZp~Hw3c*NwlE%>S4I5G7**&<;a?OJr9mQWhdh3@YW3N0tHt^v8$X}QBu|?Uq zI;>pLa2BsY2-2HCAPjW-q z>ic!0ADTzrMBCD5vf(2oBFYqLum5Zp71$9g4xToWoFTiPUMIeLAW5jY*;JTdt_!@M zSsO>6efRGohi+{fY{QSjTOxL)J4YE@wHa}ER-2ZJwa=IsJ|%NQ1DjC-=1S|Q5FzAU zrmM2?e)3qt>;E+-9fge*_ji&YzFm+S>S;GPl2%=te%n3l&MfoCj-Duli)}ewBo0!= z&V)i zKs)cl^MsELTY@z*ZSTGK^;TQ>|8-9%DZ;(I=X#f*j-imQB8wbyxX+_i_hl$|+!1~H z-db^ynReg@=v6u0%k!E}GcJV+1W{Yk-OpNF@y~m0vXG|`i0oWdh$_Q3xbyUcUSO6Z ztdEHzelEwQroHgc;b$C%?;pL!e~oL+rYGPDP&s1bLd6{*%F}v_?}U|1_MkP_-a0ZyUuZ6-T_1v2=~(J1YRdc2=i`CkiF!(GT5ok*Y|P5ZjnU>NJ4MgP6E z`qcCGId;&)QD#PKH&_XD032vh^uOCtDknlXR zsq8k0&))dl4(_R=<6hl-JixJr`K6mfKyQNa=7AV-;xHJO9d3kmGRJ|_YE0TQ*QAR?@Jjve4ILSEnmT|1(jQe-Lzn|~#_t(#Loa;K5ah-Et_v`g~tmpHI z5}Nn`Im@!Yu-N|^31XSTgNG?RozA#2!KiX182J-uQ7t`yD+~#mGxp4JJMZvYt5+1#d{FJU0Pc`{jv)-)wPSjyDUnMcUootz$kC>AGK| zwbuhS2%z4QzS6^m7HBg3k5Nxnr&=R$&?ByzMZ)NlfAisMcM#H4srD)i!737i zQ9>?Z-r+&9^^@KV`C0@C^CR^?kDbX`zT`43RNzcwqce=WMD37@|z530puX=JRb1>WrcjILy61tgh3s@F&|Bs|B}7Lb%!VevWH`@UM^9@ zHr7e!OK0_H^DbyQJ8d8#GdnWW_mEG8+CrN@q@QZzW4oj;Vs(wuACoj*?88sJHc>+# zu{2|3k$x}Yi?J_IFkF?jA{+G17BK^Z3WWgm?+c&aLY|>|N;(GjR}o|I{XEh+`pXAK z^S@xy@@cEgd@Ip7;}ksek=pFZh}t{E%{v${TRFa`*YooJd$hovzYjYgo^L{CmqLT3@s{MJ8pOdPbeMa4SQ)I9 zPxu4TdaPn1fvj|s`v*-*_-?QKgNc&@!qB&|P%{{Ezh39`ys-q2j|GarONh_d2*ueH zRa8xIg^{Y4o+cq(=YhQaQE2z)Ur27JxR36hdL3ZChELI%Z1bC8+$@)+j11;8<{4t7y`j0c(zz7&Wj104}#klLavztNJ5f5 z>od>>ir57A8}dyW#)lBV0JH&2o|2cpR)MVehxdQh?++X^{uF#OEAK!g)(3ro#xH{g zvD1VAAhsg{a*RIU#p7P^v&aje`K#XhCd?xHP+ilsi3i}~PH1=RID;lsc?>Z8+J(|u zvaKybvq3!-DN03ngrNR&sOnP3MjWXc-g|mCn>fODaj6$BSaTv<6!WNE@YT8g*#X}^ z>f$RK0Cc}x4wx!r4c=Zszw8bEWKo~d7Mc&e0J$**ogB}O^I>)kZ z|9}WndX7WD+}Zb@L83;80OrKxS_NYRd25 zQi1)i^tbuYZc!8~m{rks7)mh-An(1PCPR<*{@WRmAh!+HL6l_mPZCb`mB~U_5WNo# zVDp#}RiFpB>T(2L15z_uptNv!6P2P=ZJ+4MPN3yF18H6|yD=U418@ee72pGK1V3y6 z^%K@d0vwtmqlZ%5hgB_$X6~_Lg}D$M2;upc9KbKo&z3Z(5vCrDnAz( zI>(eydtEedrq2G$1?)6B8U7CNX*m!1?qqSJ}sa-`Tb|IBoPO%X+BSSge0>$ zhO2m@E0$W#lgTU%T7U}KSZ%TAKnmR_umw5i(k(~~7iKcvSW=zRN9$dIY}Z4L3|`9G zgp!P`wy)LWP41YJK&Mxv@L2Vd`N7N}3}^(mtbM@6mPAu@_5CFv4f(o$6}V`d!-b$C zKerS{yWYxW{yvIKsuycJA2dR+KXsLxgB*qmNq>Ho2HW?FTE_sxQBGtX0eR)oGcfmn zz5(%J8&?~-_a*($4BGAPl+zQW~`d(kWh2rA-XeESFBKo%`aN=4$^Hjx~+)8fE>LexLnrnZs< zK_9#D(ofLbw(vWUknVlPPL?SwMl!Fk1OFTVv2f zmJf+RFp{ZwSr^bVeXA(y{_d}2Dcm#snyez4+xaBEa!3}*=JX0$@(oagXLFfGjuTa% zGmxV!M|2~n zK5$G`8yUHT4T8GEKA+zbFFG7-3}|YSB*pNY1lA&e{z1QNVP#T47RI@9Cfx=I$q1(VI)F-={#Od718eX&?t{fsYt_(shXM;|uzNb*>oxKqJpEl= z3}VyjY*CR&v3zC%7R;k*yyno4xKH54bZNK9q%IPYk00{A0GRkM8O3{>Ys=v04F_k@ zZwS+p4CoV0yymne7J7#H{g4{0{194a@;P*-TI%5pZ4@kq77dLDwRx|*=%81dA-D6eB-?0T&m&w22d7-Pw zGfnS7p3DAcWHsEh3HKWc-7c!bcqhcn%2II#7?^u<3wbMM1(YTROmUS!+>&K&tN)`z zTGFP{Dt|CQGrMCB)PL0&?jY?Q@%>~v>-^{Ef^#PFX_I`?Rx)XpM2)_Z?Z6XGfcWI+ zF7x^LusizTKaYS0ea3Kd1^MbMVdGz;o1GHj3@%v^t>-z|woHWEu7{{e407IPr$kr*lVE2o|;xRD>jU(uhB?$1=e1eUoR`gPK1 zlq?}QfUX|OU+XvqFsa`L#hC>x<;`=Xuog+VjTun~L*taE>;=W8-l8eQs@0ejrUQ+$QR#R0R?># z`F+h-UR^RbA18wM#0yc-5hr0+FyKsp->K*mkkUQyOXcU#Uqa)m37SB&_e1hm!V$D@ z`#&WXg=Wu#=B6OQYAIc0pslp1B_4Ty3x|n!CxUlECcP+p0n+2t4`IY4Yj?syt*qaK z7WqflDxd!V==A#s?xtt|x!SsyKVB3T6$8l2P97Vn*e=4+e+ft7>b7jHp8)0sKsY63 zC_O_-1=dctj4y%tAWP zKk>;X*hbg(Tv0N0ra?w*TjlhF=l4vq_M}FE+h9<#wP|Pd-y+kpgu34i#(Chp^CaAM zP~us|BZm_4|0cIL;Mr?58I|nren#QS@0LwESxD1|WvFswk(%?r;)4-46(sp5Vo-m! zf#k1$O45Jqy-@xK-PsAfwj{UQ5k}Ghh^aLs;`%1i1%YhAZeq@l5iKtc4bgLO0|;m~ zUFCTO=Fkbd|0%z{3D4T!n&MOCiMa1q;=UFF0^29_sS z!OhSgi84b=@M^3PclHAQFXb8t%@!E zsb(wm;D5h#`DyUfKBjEY`~I5BYw?f|DP*|-6^UvvRfhY<*ntGzz@VgHgqcnGS^d+w zx7jcEpU|IolAnax>pe#ne7i&<6)4uG6$bUW>9uiuJlhzIZ$nrmMI z$q~%^QG7W^ZB~G^k1*IIOQxMVkagBH8puJ)fdUBpxgG}MjjKRwdx`(HtE>UJ z^{duA=njO+8E`~m!F_rLMwY-0LgR&qf5CN3=Ydy7x;t>6AJ?24J5nU?gG*oS15wj| zZ7~%v`?V74^kxiBSGYd_{v~M`TF>_Q2GxBk;|16-wTw90r+;``Q^4DNYB5+prc7B3_cGDmws=rDs4!XAv+?6cr@n zVet=#;6DwnFytOh!ruVk+AcUq8dn|l3>d90Ki}OD*H=Y`G(qQiEDpC?uj5AV4qSsZ zWc~!jKFOIwkFm;u9bN=!kCNpxNo>x1_2ok>5L@=2B1?+|M7;hgKu`~ZwGkPrK8nV$ zFXFE9q_)HD(U6dnlhFMg$bM@4A!cNxOf&K@DGG_)Be#*}B3qvJL-qy$h?W`}1=0G` z)TlVmbQiY6h|Tu#tYhLPft!E`R34J+-95kDP+gIHkOD8*?Y1# z|BoCy4L;3x#zp}|$CJ&rxqjb}!u6JE(i{$_HFye*{;E2I4D)MmfeLBiBI_b2$mE+_ zJA!%tqMD(Dkd>Bk9BF!fettyi@bPX{s89x-*q(_sA~9N_wDQr+9wa2$pjtLq8GJ*Mh|l)eGU{0CEqx0cLf`4X~MLTqEf(;b_mC z%v%j6Lr~&-pd7TVCI(yD<&!jJZ~Z@k06s1(ZJkUmFkg?0ZQd4`o!zo#FrxU3O)}}fZf8- zyv7`bn_;Dp$w_o2z$WH)-cycmP8>exC zRJP|{ttA5Gu;sGNQ;F!f^;ClL$wu@z_Q5$)7fX?98B@mWK17;iJjh3yY}RqnrD z#(LpMmkQ8OAp-u@IW_SzlM0tE*nrLh))8+!{+5 z!{PSvNr!__zFUI5(9!`oF>*D)~2+f_yv9^fhy=Ho3`#C_rVdyWhL ze_uOov`_ervP8vXeFh?t#>d8(g`f{~F;Cb<{-oVv+383aUVF21)x%I&qTtUD< z(t=C-BK~@}7b^N_E&XNvBg?_4X_e)&?r);`wddzySyg{qPqf3|jMfbnmH%JB1@uu3 zFXSCN=`d+RAgbVSwV^yElRQgp>5(K4jk4SQ9e`s;{$QnExx*Kv<|C2Uup17a>c*&Mq%uB=V0EnIDc zTz_V_|7g2)=q!T#<=tv+Plh`N!P;5P4+zYzsx-RkUP ztr;pfPy5>(SLi97{-SA-?T!09t~eL_%)Mee8c;`&OKa~ny9=Ad<7pR;#^#Dqd>?jM zT!)~;@x#&{U9$AAw6qZr%Rv;M*qMz>{IXG};vd3Vmay_3pOEX_AK$6O?uiE9f9pCz zQqu1C_%iO+W@{PDM+sZQGm33BGaslpZ$}@#W~us)&J$lSIG<0cquJEdE*x&4T)kR; zI8*LIse5-rVR$e~N3FzKUsLt(YV8I5oh$dLCcXVG%!fuK0H2O6Y~`IAUFSd9rUXka z*SE1e-xf1hWQ7RAUNtKTzhF?zn={al{7Y)nRB#%_((JYWu3pe92lp4r?iI9Is~ZC=|-ql$}rirPR%Q_+gP$SrM0^FzQS`#TWG%Dq?fH=S&UCBn=NyT$*V0d31? zy#L7Y0WbcfSC@^wW;(S0_??V*v@O-SIu*L*Dexnb5DdM@eyZ#LR3-Hg==R(xv9(8k zW*is51c&$(eX4Vfgzq&ln))TCA^AE*Re#Ts77f{`jNe!&?HYKDyD5uHDPDR%eubR< zWw5dxZ?Ax^BhF!1Uz+}iDN9(Ise2xmB$`**s$adUK3m1-F-;m!yRQ8AM3QR ztdnY;jswBL_zkJ2InTf6*Uo@+(lhdn@`S{LxP*v2y7ZY#^35y@3vyL*>ee_XjowdR zVFr*Rw7&3^+}UNF|POLNUl$& zu4qV1bjZ)Z&qk0syx@Djg6^Is9J(E0Z$Mn0Pe2k)ugdWbrXt^;=FWs#qUz6*j*<3N zvTG%YWew{y<$tR8oG(Xay}oJ$(StK}>jjqf**=!{=le?HEnL~1l8Ve&f3rEP7{*`S zzxaK1HY&ySqv-?Ru7VQVKVZ+`MgLKz=G9CE?TaRe%R{H}Js+vm41SKGiu=eL`(mNAHJ{<-2@@g4jyAFE*ubgE*zQs}c$b8o4Fj=9l*4zIqV^O-gm{nCfsIciA{?uYsbd{#sauE zk1M7LrqeX$VtIGfPb%AGq!*-=1RORw)sI)Se%;;=N38P|SS-&GrIv{RXDV$Ssl0sN zM6Lgu4_!;EJW`DnJ@)w~S!jt=FNVv>8`3azP^nHglt(K;ZIr0>kC#>7e$%b9yUVZ8 zXkuJs%!%q@Tzp)bv?DEUnHRVJp5M~3*;w|Y?6;FNN2{Kwad^MBQ1 zG_lC2(7#vpTnf=TTQ}QERTDP{nM{t%**!TC%&}__;Ug1!`pvk|93E+G;Hm88_0IR z;!wAjz71@jX!xv6Hs^QHP2kH%_&jy5_2NH@x`u6@e%{=VS2alO%1jBXl^L)>%)CP6 zqB1ZN{}iL{X>PN}EIvx&=#?s%mQlL_h|z?$=!FFNIUnBGsIEG__#TquI)v$B9ZVYY ziD`XE6PBww-ux(Ca8Bj1^Xr%GFiA?B^~9_Qx5bj*&%8X-gSPI&eESB}m+joR;X89n zH-#AvYw=ziX3!m*YB%qePsP=%JFSgM**3zy9?-|v=$4!NWQEuTx<#4%lcrn!!}g?^ z7xx9(*VylBM=Snj72#+vt>hLoFE1aeTlLZJ?K#Hd)$>;eVI{E<>`D4*3yv`z@lk*T-?@Jcw| zrTpD41VMjtcq4qjwMA6(YPFT<5S~q2dA@}jN8Awt96p@}AQ}ZOAZ6tL@tw|N?rhB6 z#h+;7FEmypUvgDS!`nUxZDGARII~HlGSHErO6eG>^GK2S#-{sW?uEDuK?{!C)IvqG z$2J$R($gxF4>os&V-*vfw~sT=_W5u9(XIULY3$H7Doqy4BNrNoDF_U#K0G!x6uXhx zWx%>(#qo1i%ZfZ}{o`=U0@g8q=k1I~&SlF&qtM18N=fdFC{Y=EtE%F7nw!`^{Mftu z;EK3i+QWJsIZ{A9<=j5ruY0Ss1D%N)_i`#?QY6Lg4#IK^% zA8e@#CDJEC@4|I5`Qk&o;x-v~Z{ECzGI7I)H^|JuUp#2Oh-60KZN!Fwyr6N~d#|8- zciz&!un)UYahXagY4qwSg6W{8pen`m1!*H|qEW@pP`~(tV2GGkZy|N+HyNC7pS&{Q%{;vkr*^cJToJ)<~R2lub^Mf^};YsbTwU2%|W`jD?baQ-q$_MLfC?`bzsU#45W+VEcbJe3m^ zLS3$qI{9d`CTbb3Z6satSe2*?#|0bc|523*mMd@{OyZx`rag{Vy&>N;dMB~&)aq0( zebC8(af&0!@|CO7kDo7Czh)t;Dqh-89!6Dx^_Gn|q2gt}L2M&`>9J7k0qHTbj&<0p z>^)7!4uG#P`E;>iy^DEo(93<^GbQ8daH9EpRza(YxW`}{)Zev_IL;oF?KXH#s$M>h zc9Z7bIt#wc?oYTr<6jtlkoNvx3+LD23v_UrL-}O)q>TcTs@E48n z^--qFY}y5gLs}w5%SfF}@Dd*|c^XhLl*#+K@S&Hj{jUo*{K{2BjSF$o8(pYkT`VMA zSjO~Sy#ThJsfA_9AwNdw2-n=&^IB!HIg74i@L+ynieFYZ3VSlfK);%n(5(HJignrN z)LHRR&|kCZF7{W1|M<1yJn1$EaCT9 z+_RftGJ_!e1p)oY7ehQ(AA)TDW9CYsXk0qJfihn5Q9fEbA$`inn% zjck4Y@_Q1fi9=h4H2&;HeqB?oaK~0rDk1)bWwHvDaAcrHqj<*~0f^flxam7`f;E8c zt$?lgtl_pJYn)TJePb>6*x$!cyV*K?=_AHwn<^+KLpijM-|f8)lBTQiF^+R@v~4s& zhGiUe(scqzrADlu8cEkZ-OjHM(~sa940qt#t;{VAMcz$Aq;`!1jWs~e%JF*CFXRu% zSFYu{QJm>ZO)Y9Nu$b&%b zqH3;wa(*%C*|XtMb+W2v3s9|lus$0!J94n?>}LXd;E=tN;N#9&89dl?Rge|f?_r(w z^*tBn2F{L7meuSyt2W-#jKSI;rJLjD$$>9kuV|T@1fY=rBpm-7S|YyWPO99rE3`Hc zic-gWoS#Hu(LUc;@5$J&S+D$3^=Zg__ycoESNrvAViQD>+l^5;ZbpwUBkJzf*K*}> z?^q^6_{F}_6DdU7yWt(}&*dObY!gc>d{}W?f60FA+lmYc?Gqxpdo(sCT?!7`{(|~0 z!Guk_jBHp-k?Pue3&VOIp7T&EhHq8R)Aae64lqr}HsXCIRFMLD8}^U&LbR6CBvKl) z!S=ikv)7_(?N)M5kUHuHru0_TsOX zxBr{tjnoGwuxUAX-tmq(=G=EEzT<=8p;URv(W${r3|Cr;yT4cXfm>U@P)p_|GBA5Y zn?jdbbdKb!PP?g!3UFGr8VV?8X1mA$8yCjsYJU#CSE-43aRU-gsG`?~}M7wpD)7TM%mpfX^K~3v?`%mjuRbINZ*Gq7h9%2ICZ%oGYK%=nz_wd`#zDrNv&8My} zzh_7U=$G+<#kz58>nDQRUGPhyD|tr+WN1Gn0NF=506PS8^g1T!z3-q*HGo`_m!CT9 z87;~<3hZ=qp@JdPyoBM%Y_IVsAB@5L!@7zmh-@p&n?3iL`g8~1s?YJCiS>{3dYV;e z`j|8NjV9Z@U{cAjG6?H*f0P3q3R8?c8bA3I}&*x$+>I!BJFp=5^C@^uE88(+& zuAsv*eC7$fCq2@I2&UXf$yxv|x;mOgt*{T5Hio8NM}T?l``Y-wgHN+=Y=+xQuN1>w zhSvd0CG7*QA-MhuylX{siOh0^gt0mTum!oyH7BKe@E;=p(yJL67D8IZ@E@NY*=ySu zPro~66mFV)F>Cq>b@Rorp)B2y^w@4SB}Kg5#ypB-(c0t?O|tlQbO=Zq90VKsF|6PN zM;839dtsxZthI@bjJV412s6RN&B&C~w|)MeoWsxiC3Azs?!k3lqS|WOeCtly)a3Gp zFVWbQGR>3JyU8~5ch?)c$R2lZady9vq91;l#J&#Fmvl#?Q3@#(DgW}uaYTJNt~A`D zzB^ogSnb-GE!E?5mZ9qvn?cce`E#T57pfougF46c^8~%?(8%SOCGF2y?~V?thD)z9 zaD-|o!?8~M#HR7*1*gdD=Ka%wYGt;FJ)V*wQY5Xm?@-4Kbcod}YbV-}fWZ5!-pykH z7L)J2dyfr$!37I^aXydXUfjJVcxseQsb=?PabRGHb`R~h1P)zcyP(J*F3tbmZZHO- zzYsmVMf)Bxb)V2ExHf9VHn_bs^qY~4e}&UqZ*kVZOig?*JjEM zTk?_j!g=Q;D*86yJzWJ(3*l@=!Eh9o(|Kvt47&{?Cr7;Oi$I{p?z*vAbaCCWP)}8C zm#W7C8Qsqc)shTtIa3(W)}EOSi1W_I2XmkpR5W@2wdsy9a|c;F%!e*ON(oo#X(maL z?8_lhP^qfMk_$%b|5rLaW}1@g3~hYhpX}UH5Wp{x*Sp+!|FwV!X~TwQx=mniZFgS$ z$6CX{o~r}9BUk1iEP{u=)WxifiVD^Ny?=WXZ@;M8< zpbMh?(MD_CrH<%)OcqIhlkjjZ3lsl{bbo>PSibQpjWpt550+5|AAGa;w>vWLFQV7Q zv!<)ZrInf*k5hZc6GQb{rK`5*M{YN?W5tVSo;mv_X?MH4Wachv(|{49su&F|tBY$q zY!=Iza4<5z?VhMdMtXC?T`kV%w?NJLC1AtL#*|Q&v*C;!`=--cdpQwRmGHlXc z2e{-Wr+>dED^G7V5EnJrQe&qYF{1eI%y#B^=$n{z=o{H<^B`@a`^dx8ng(Y__D$vgKHOsw@YQm<3q$ZIvMP;*Mfg^owP z{MUT_KOOZ5=VYH%Ryt;AC@37>X>uN9dT)0d`jB%C1x*@wxu|-T=4kcAOKyqqnF2wI zPjjBRwNkfcSvcJOI1AHQ!dsT7z{5_@onsncn8k$!2f%-+p#QL&DA&AuQBKB?MC3qD zCs(xV5U(9_qq>R%JK8H#zQC~&**-E`kHRM4uEO2ER|d#_tO#==ZY z=TW)C%&GaqYSFgoE#E5tU_36QP6&UFFA|mT-$h_hy3MN4!57HDwgKnL*Q00}f4hiX zT^>%k7v5*PDtg;T=ei}?qhGLe{l3LrXE=D48nizDiTNo<>u}-B&MOpqnb2z6Q&~`IPcGFO~AHX?Ec1Y*biEs1U3AdRLzG@z$9v_c?#RX;{vk_?tc{8S%%mj>SQftgn^A$Hl6Zy@xSdH= z5%dOL_gJV-n1>-(>jTsF4dxBnRe9QJ0?uqF+Agl)r1vo37L%(R*SE{^M?N_L!8BTaqw7}CqaofQ!8dG~ zqmrpcc0B}A)V+K)3&yVFhOOJi+(|xKxS;%t{mt!~K97?)*b(F7Z)$L@(+_ztHD%n}{ zY1ZQf`O&1$-?3RvDwmuoA0Xjy$b&x0uEFZ*e$1mE-*Zf1J^FeihNash6t+Z>t|<4#lRcan-dU&HbM@i z%HIYK12bL3OT=XZ$elNuH+I_T=>@q-J3|G6&ns65Be@V$8l}1pYt$9E$z8*^4hKX? zpX1M_wdl`|ltRRhwufGiZeMQ>H~4bD(1bGHB}`B;(>va@bhCUGL$VQCT3>RC z^0DRR>Sog6S=d&vU>1y*7*u{m{t7#)yOn)<$y8c>esHu3cjcqF$Lsy>)*RHz*^i+% zNbTIMyGb8~*Hu%0jfyp)OM}mm?ovx)9e++BDLH9rhtY@YL+yHpLn$?$~IE zxyz(=oo!3M{7jpA-;g>4xgd`dZnMiy=tmKPBhI z*ZgPnHgj%N_t)34b$rsP_QvxIDx`z6)_vDL7&}) zIOXLuOGcfb>E)?=OA^#bolE(hgBFvQ{DBCYZx{jgfGu89)ld-czyYstYKFumS(Tla z(SJ1n{q0trTesw{8XC{P$X2x*6R*hq?HS%&5KsyE0>!h7tMl;sg!;A{C@kE}wo$SU z6ys4Cr(>v1iJ}8M>(qDNnxm>pvc8St?bK-h&;pd1q z%6OkEzxuUM?LMznLOil3BktdSt>epT<}o-MnB=iCN@!RrF6NW^srqSBb$l<|x<l-c$mt;`D*8VZu&~!Bx6~3-TN~u z+~p%UpL|&|@uu4Z+*W#U8^z&+o!xq=uK5MZ*Q#)7yVxlbk zVw#7lU0g4D+8Vwc`086Y$+xNe#HHwnHxkL6Q_BRGWEOaBP;lGihKbIbj7_`CO69ry z8J6|=&p3>`FJFP{(2!@{Z_TV48uprCs-Wfk?0SiKd!`oMzNNU5l^D5=QyDw24IA(=c|@(42#-ti*-PP%fLsC?qP zwIa9jE2~AA*3w%>U*5#>OiDGx`zPK4#kq0gO;?BQYrGRYd7mWIujsYchHbY^aL?jG zFW7zimiEa(SlT6MDn9sais`}2*Vs7x?im z8ULGk@gxT|6>QmCbgP9j%mrHi|?=G?Kpla-cLhNR>z8wJvll52yb`T;1Y7!L%Ue6R?vh@rN?Ga z@ay~*dtMO3&!~M-*|VrULi+3vlQc>RNZ32jMyQ&8F`<@eY8U8dl61_Ge#$QpA zxA=fI!OWVeUd9hm9iv|*5X3xf@D&}(SyBAl?t2@YY#~i8mTxu$_W`5Zg zG+6=ls{HoG`(uXQwLgq+i+y=WBkYzn9?ZIMN?uZ@PE}@R>2Rp7Ye}C+JSB!`<$Z3C zu<&oz3F_Qqw71 zTjz1LIb+VKYMJx47_pi+t4iy;CiIclH$T4az3z$c>+ftiZrh(lMjAaXS`G{G+XSua zg9BtqDhYEbY;m7ozzGv9JK^2a3df`6c5IAJQTNwH9`5MwuY>KS;F8_HuM+5eXIY-~ zpM*Tfm--FA@h^khQSS?Mt$n8QzK4*NP5;k9jBP4ogl5F@!%JyOUzX1}**x|gxfSlg z3m&7dQo8)M3ByQBY6dWg@A};JE)ELk{6Y4_1>eeH53$DOmBr$Ap9@RN%D)BKfM$5t zkJLTeC^9x?qt-KcuDO#pb9$uP^N0WU%Im1{pQO4wDZjTphtm~)_lwl6H&r(6C)lW3 zw0L zoKlEg`Y{$)8^p0b9VP!cOGPpa|0r&tiR1DNLkg;Y?EOW0^=fHuZ@;ytk6%0uo(T_( z=+=*HHzG}2JI?QAhLez}+jTTTrI@~CSDS$WMP~{C`iV(3d1>PhV$&wvrWt|KMx-eH ziI$z`y zs_c=fo~A;`sslhu4k?Y5+@}ph)r_Y7gWuUgx)lF^4*=%af%reK0klu?vgd-q)&0OU zg%$cA*hh%G-=6$=MKXqVFE?vy(n^J{&U(p2aCDv_o2K`YlZKt1=3xhw0J$Nw;hZqB zC8xdSbH)3m#LZc=uV&uBUlXBMvxS(suJ7j=3) z8mKZjNW3lh*7Ye*a?;|E;3ojrjXeVjB_Hj6!sg&R}h`=g-m2k8y84bJ#4+dH?-lgf`Z? z*d&$pZZgvYC%lXYES8%lXYm&#d5WlHY*iPUMe9BPdK-y+c^^#l7=Dt4E3(q|{9Wag zpBgQCt{`*lo-#9AeQmJ|tXh*u4=i*p;prL0&-q7~cG7bkF?|)%BbM7`KXt4Dof*zw zcj;moCiQ5bhR-bSDE|>km`__#7gBr^znUELgC|E*AY3-`;`C`*%ia{RuL=+Rx{h3# zBBFm*ZGOK38*k#d7f9?>Qyr~HN@{KY*n6P9X(x)1A``f37_GfZ zC$`kmlRsZ=W55l8oB*NapIG9?-#z7S)DQJ!2 zS7pfFRbUOQ@)5yvG@8pGqGxUL&7mag4wlm&7%;>V{5uN+okDc!n*3{~I>-uxw zHiHVyu|KCC;Qnw7OH^jBTx^}n>B|4(f!pXkbSa2u(Nu#@bk|?xeW8d+`=1 z6fa)f2~ymOy9I|N_s#SB&pUJG&dtqCCb`+OchA}Ve)eJRoxigF_3(Av3#eVZiBT7u z*3G5%eKcGSmkI7aJax5?HlGiUO z)ws=;)>*o=%uPl2;q7DPR9XJr|0dG+(h6c9bk&ptFa{X8NAS4$UoRwgrl1LApn2wY zst<~D(08WQ$jmQ+ExWUDQa~(t3nhW;^8*v))YU%R6y-7|$r5lC_MIblb18{&>Xt62 zOV314iV5xjoU#t$8D#sOQUcF*{j%~BAW{aGRm@|LCaH$r-P=Fx9F}D7jL!t~5vf}{ zp9%}#m2Rhnkcl#U-CECaE_kh+6UzHZ*5SMPNLV@5@&~V!VD?J;oALcURF|dN+||JC zW(q-xR}pVIJ@h5Gba4|lTZ-i0a9gXstJ$(osLl^S@MPioXl)qZA+9Iei+~@}D&3;zQ&95ABZNV+| zDEw1Ln3`PVslV<|Z?<|fmhh+CQsWn$za@FgXPW7Fq%pvr>hjN~W-G z2D`hgq08PpLvS)&@&)7o2EU|2;@QA(`(M4`La8!4`kb#Cu}yiFlB*HA+JB96C>_s? zCIwhZbYZ(C?>(}egpz7@G?IT<>5xAUQ&3sBcwfq=aIxLFCJ*_&-@M*n2gT2`19iHzkwpky?@csDFqke&$CwS4 zHqRZ)J)%|*4skfidnc_%{I9*msb+QR>IiH31m{bd-&P*S)}qlB z>^7#k+>=6+bf!CkFzy=WusjYq=U9B_l`@|2^VCmSq$T_%z54BG<5oK5-QV}M#~s$n z+JueK)O<9N-U-cy!G@2XqdH*9&Z$N02XCJXahAIVdkN2Q`SjS|o?z_YojfPOJ~M^(4KgFMI+*JQ0USCZh2N7SGxutC;e2>pv|M zGhgGET8~gEk5&xZ_LICSsf-sW44T&>zUOOjoK;ulo@MCXYLry8PPMrI_e*o;pmq0K zM!Sw2Pu&AI{Ta`d;^EU#3T>I*4IS07rEL?d?|NVS0*%^_uBc-@C62yf!dS}_B2R{% z&cK*QyN87TYU_Ah6I}@m^++=xeq9X0^wm^uW1k{sTaD}skEMV5%XooqCYN=*$BFizW(QXD^30+XmQPk95!moW{fe-4roOR=LtZ{^wX5+-G<_lFEg9qf77{lGsuFm}> zOv`rWe`HF!t58*-RuyxRu{s7pI;siETr!ySmQ5`DX=7_oZF@i$l1pEealSAXV>97m zMZg*jnkjKo?o^;dd=bn696cf7X3kQ^8N61E3O}z{SZQI=v_fh^ugmtBMKK~XuU70= zyI&b-UN7@jR`Qj9v=PdYpRc;aUGxd^Ynm&){Y+yblr<)E5=CS>dBz|jrxngwxwboY ztn2$kIFa|sVghA-wXaO}d5(Ts)aa8znr%115SL$>H%g8o4r(yl zCdO+w8Irf81s2i7u)ifN6njOrj4W#|(db?HG4bb{Rhu;vFS`%1vdOUa)fd!SaUf|L zXjtJUzfC$(A~A-eN!KTA9`TJ-iB3VSSjl#T4#|_5SH-a_1r7wXCJ9UZ z3(Iave`2Gx=`uQ6RQ~3B493*iJ=+p~wev11c;3LT zZXqu4{sXq>Uw`o1MeWJ_hzBT+$ErCP=MN2j@AhHyJmh0M*&~5aKRvr4?t{L!jW_NR zM{EvXuJ0Ws4!Cf7#Ar2JV692$_Y%HbX{iVH+{^LcxbPWM(7#ZR8 zl-ai$j6t(Va#Z2s@7Dc`roJ6$2>pwWJJ-O~L~BC|yvyR^dbel-eUn2!QX7`jE-B}3 zbHr|LYfjmeg)fA+68x@y=_m@_`Hrk61{>>7sI(NdtwuH))?iF}2>OiW5+~YB?Hy@6 zepTZzOVHM|ji~%Rjv{fgljM}}RP6*7nohU%o@Q%J+9X0Ya~e)w9kK$ShhkXmN?#L; zs@0Ap|1k$N(qH|+-Uv+(IPXvR4diSg#S52O^^C|~cMOejrw9my7ndCHi)Rb1S3sYg z4f`|?ep>U(YIN&%k?GP5`8_|Duztn~S(9kh!LJ-9$)JQ{cMc z&d=`RcF26)Xb_O!`fpHuftPOS8eKGuzM5t*wMi%H&|DZ8^yhEb%ys;k!&gIML_$6% z*<{JJJ>hWvki_t?5&KUreV?))N%>1URXR{hJBD!kd$S{_(8@llkif}~e=ItWb+mNv zZ$fM?LyA`Cow;hlCHL-YTU$dZ?;PV90VS2ST=THgBO5DpI=2_zMdzc@TANHPEy3YZ z+OdCBD&Kr{K>@=+O9#0pS?)eLrU5A|)N6g6)BX>Ou#Vk1!52D1?FdmNZO^i-U+P!^ zQf~5}G*z(E8I6dZ+xi^blDv-h1hw1~eZ?V=uwP@0zr!pG+m8DV=Vo!t`A|wqF)GaB z3(ZzsI4{r)3mk3XK7Oq48!}eagYjM2-EZ3MYOyhQJX4%n4$$K|il=XU6-3h9thbxE z%@AmYco2@Dni+|B=B!_IPo>LS|rIIW1^lkft((aeLm^+jLdVTLNrK1|LFx@LQtoYVsGKa+A(2PJV^XG&e(#L zf8Y==lKo<0zVO`dd<8G4vw6UZ&;uOWTElGR?y~b!{$BXCmEMer10%i()Kk`OXGmeP z?j$+=-Eczp=9P?#Lh4NE>a76Hnxw(5)j*N1%+7r7@u;VZ$tzRs_O32251+p*)c@vD9Y#}mA1X=>4UVMLA>}FgwJzjhB)2VV zJ2hfvkE&2)2~OQTE4#-k7H(Lht;3=FH)$DuOPHAN_Q7A>aMwfEGGH-b%);Ii%K6S% z3eCUsIaK>7JzS(%RGmc~eW#RDXOt@Mcvikuvol+>Pm@TPrYADt>5|w;ZTbp{U+MHB zEcvxxJ%@HC^8@lPFMNN0`0@OM{gMLpQeZ?wWn4|#2_1UKcaaw*>1ooNlV=@oAX;O~ zvPfU!u;V@y8?Qo0dSU+n$f&Sd4{{VufbHW5jWe#iq5ZY-rO;KtvOTQZmoCs}D^e^& zOT3I=UFa2;>dfVMI|jEAD73->Z!EN&*7d^5(rk=E8RUSF>|uS$Q8qG6Zj$l!|MXRPDUeqYJ* z{Bmk!Q)NK-Ri$tjYlR0PJ-%t1!ak*i&r~S>RZFxM#k#LQ(dg+Osrh%HqU>28{###` zwkj;6ajADzSA}zX(hZLJ+O1lBG$4V>2FkE&tH=BH?9Pr-c)%VQ31^B4;5Ln5<8?1RU!^Qb{MV1miQ9++L=Xbu{Nn!a@6a+Alh$_0nWq+Q{@4HA_9q6eQv~~#zTnjqiNzf@}+eAQGDh~#Qejob$^2GAT2J?LrX1j#$t{&XFgX0E0R3sq$t53TU1#6hlK`Yw_RCodUW^VoU~_`Rdj_5 z(APts%3TD2UhYB>B`dkIG%tnVBnm7D*2J6i9wdMjyebIK5$U}Cx~OPG!b5R}byhyR zU9Moov?2TOl>n1Lo{0HGR;WIi2;D2}vs}C5+uX*aJ!*>i- z=$hBJoe)3vls8g7uP-);8R`O@Ybft8S(49f7gP^h8NM5 ziYpYyro_40M3PYvZq(ZU`FxM$r?{$|Q(~}ox-%U!iN!zC?J@Z=?%2!O_RI+f8jPM{ z-;fj66e?yiekNGkw8{1hYEP4wiFoW^?x>$$Z92l$cy$!5kCsZtV|Fb0EKl&V_nl+$ zxZ7iC#b-0PA!A}vW3aeiL%%=*zd8L3jH|c`IEK`(NG#XKjt;*t7h31;_#W&2k__rn zh+{eoQ(W|Y8#AKw=YF`Tu)q9DK{lUnbGUnF!RgI>ymyJNq4hjiI#htpZ)S{i(;;Q= zcsr49ye4Ft^jXcbfbLw8ucXhg>*1nwUT@xVlscoJ^0vr$j1w#+MK-3His;|Z^gF>t zYl=-wH#{uC7&e2>jK_{~_Sibkai3!TGLCK8hB#;aeaefYug3+7ec@l5o4)BNYgdxZ zE&{gZn9$$b#y@J+(~xe0XC6z*{$QPcU!4=qt-d$5#MU2B?=KU?l9}@zr_}0UcfFaFdV@_R|8q8d-0!g!eX!o~_G3QcL$XnrtN zK!2w1SMB$4bbBQ3llNRns=P__wSwjNpAW%AP?_-5w=VY31)%C_lYr`R+5Od%7PLbx z4SJL z&fEJtH}8_p?&#Jp$C5~vCl(WMeczo1*asebajC|>+qEpPjy)U(vfmY7jbp- zq6=JyvX{?`cf=YSHn2{tDkTTc>_Dc>0Jk;Re9s8iX4S~E9J9iaTTdy@f&jK$$o2+` zb_hViB7h*rwFJ?7VBH5Me!Pj;Yy}A+z-oC&&`u(R$O+DAuz5T1Aa^lvLJ$bCKwVj( zs08&>HcMTht|e^7ISr5_C<=$?J?|kz+5TcpkuDg4z}l@-Hzhb)-0>;~5-1H?v>y!gBbHS1{lwmDAk*qf-6*|TVg~?Cy`cT&*rp;qhgPQG)O!oY zGF`(v0)=rl%iST8PU@t_wFGJ337i87W(CX6=cps7UtFO0`jYwPerfGAp(h6@h!6-= z>wgUE1V@K<8qr??_wxID&eXed5}D%QJ&6T2`cpZsg-26FG1>9|ZW=hcJMgCVLH(7d zh_o?+3G-3?)lL1sWPr)w5d!($l%%jm#|!un2A2L1a21>zt=`Aw92geWH+pfuu46Ac zGqki_mq~D$l>S}i*VF6Lxc)o2&dd4pJT{rfZTKQA*C7K8%NOv23b;N(vDfeA zjP_3m)?$z2;8$_JzF=5(;5HxP*iQuj!Lt1$`yWe-AloL0q3#DDJ4Ev(Lxi|0S99_7=QE&ghSe6Q1#D?|)2p9jNE0=Jg~wtgdrnje##ys#}GsFyVPK+Sk$ ze|qM{<83EU{A{nlSlkdgfBy2JerI-d{~BK9=Z-RgQFUEg%c9z1@g`%>SIRu9YRb3L z$wf`EOXTL+Q*u7KYnW*Op0{^1zNmNOs%K7Qm7}Q}OB4dAGbWq;q>guCJ+J*aqv*C z8+w8ta9#Xw4|O(=6IkKFqI~(EEJj}-jQNbP#NQ+l{lV+*EUw>3D)mq4wZ9@X?zdqg z>`i=Ue`UhouQ}lD4t@D%cQ(NIPLu!XyvyU!6htZ9d$AHJ%~j>0lry8TlJo8{=70HypIR}N=VyzUoK$}+ zwcd2fz>(>oFDB(ZcJq84@C0+5Mg#eMa|Aw?<<4|tn-8^dE^e6ep%X`t9dmv#%c5-W z$KtZW;lW1}e{#f;Ei{l9m@c#-W!|n5Y(;nCS5J`@1G>im3SiFzzuS&d5^o9|5J*p_ z103!zk?YwGtu7Tv@CG5gi<8)e&J?mu)ZS(Kkfd==SN=~bTPoV`PirU z6z;PLhEr89B8EI%3fA{u!iPNWla63?^E-0YqX`BXPJJGWpB$dW_!gVPq}-Lv6sgwl zDo5A9nZw=$DnMNyZ92-WVdB-@fRb2qEnshtV} zdjT*Guy)`CpszvGoLK=95=Mc{<6R)z2mZyGh@qMLr1DETwLPhGIHaw73xVu71BTA- zA;s${<5u=KbKCUAd*nZShD0hTbc+{33-6@(k=gYIMDknB>tpnS$Z3| zqe zy$I2Z{=n^|5-?02xqg(ik{bl;28O`*Nf7SIYrqL+0XVs&1*X1xEHg~6iMR$b0;)he z!(^3C!fH49eQk5jaOz2NiAiJZ#kWCO zUw@Y8f2OdG=hyPD_ZI^2-0cv_1-x2>bCM8xkpaCE6FA%Oq_)c-Z)Df%>f*nDch1-u zEH8}c)ehu3r=UqrPbHBbsgnzOSAxphVyzfOk86%~197eyw?F26c*^w~+v!hW3Mr9g z;xY~5awh0eHsuW%np<0NCO$iVTPkhpMrkztu6J40$J38v;PWuvIQgTn-l3f8!t>30 zfZ*M+T>dOn8+s^rI-anSgX-80*hS0ffO~ZWd1j;QZsfOKHev3+yVmS zxV(o=i+#?A&-uZwPn{Aj0BdRq*LNmzboTBTG4P=fc+&HGIy~53+jH`E`LBW7>d2wu z<02SfoiMFYF<^oJ=0-bzsHV^>jH;q4k_OYuR6~$tTS?aETDAnTjk&%yc%MWG&nE+h zaFF-An2>;5?W*_9-LLtDB6US9oAx`%H0r>-!2Qww8R&i-HF2RG>+t_QM*ycws|%-y z%QemcaCv7{|9k0!^!%y-zm%M7Ks>>6>+{Nl@!|_w+EnB9%LRKS{>_WtdirLC@Ai_{ zc7@l-T@!O*%ga>c5R*SyK5)i|g|zDj{O0Ea*On3rdQsZpW##z<<@v{@NKjTaYT)%> z?yb2y3?YH8aphHf10a|Dz46cI@~hLIS8Z63#;FYeq+qc%h{e(Rw<8*?nCimM9B#UR zWIB1^OKd3}tR-Kp30n|2c3b%{0rH{#&jpRP$KOWgUN>^+<{*Y-?jZ>=FgG#9UyEGUg<~zYxfHlmxpvBaILL!G}igk}@tDS+^6~ zW1XH>f_%uqFz&!@OMfY&frR#GAj6v&IOCdZ&W#3<@1sV628IKUeU^rt@wx%zKT~sn zSU7Z%+Z}Zo|Gtg`k?#T-WV;2u*Ri1crxLu@SF?IC+=s z4V!>7FGI7)H7y4CP}uzkQNVb&$GZ!URq<{zaC;Ko1uY!5;?b(r9sUc3mbDyhdGpV3 zgyr9*%PpY-Unvb&zUZY-4Iz^MKk5P9Yk@7+vHoXkc!%+PVA!DJf3}9;sypPgCg5)k zk_p@%LJTE6Cehtq_9xAdc3G_QpC2YrwSj~@!E*72?kb2O>#sia}{~x=- z(??Zy!_+j#kgJ6DDg9OoFiduxa0}#93|?=asyPdbp4#Hq(PjX%*_DrxbdZ`W-bCyU z1X3dqbhpE)xEcMdXUm_;AG@A_(wI1hvkeAuu)N!Su}Q6qy}pROLF(Mi6{7?~3`-6V*ajcB zT!b6Myi&!#sXAR{qrZgdB*dlNnapoxa==s+LrU|~BF|8%y0sM=N~8eTLdaz*{2dD$ z-PpQQWbJvnljOMddg$F}sc`*|JcN(+?3Nut;dSSQpPY;TwqSOm1)9{n!AXcOry}8G zjf#?dv%!>-JNcz{Bs}bVui0Yx47qNO$S4Dhj_cayI&1EUZ zYtJloiZ!K0yLWwUuyH?p+G-~h-l$@n(em_@=(ho0sC6@aADf&R&d7W%@r6R{2J+dv z;7+c;T`prQ&&}E#qYmoxU6@@*bboo*wsltQ+Zl2mN*?Pwb97rz3fKIV!H}!$*zD^O z_)zluZ&#VSGpbVLm-6kYo))KZ7X2Mt)TINrV=2Y9?%JKn>ZdUW>C=IrKFj^xApCBH zh|YYi%H{Yd<9+5;!RFN>fTLoub?n)bY%495bJ^ByTFhjRdQ25332s#REu|2#{`vdO z`_^sTA$3~uB38{_qfLR-^!ENpW0sC)vopW#-#^!H-Gtt{B-Bi0IEg5An$w-tnQjiAb-=MS5$s#cD$y7PDWxzQYM+p*)s{KVpj5YBn~1xl#A7 zefl0UHyGz%>PxmjfKxw;b$UH-e(Mxk;5axr7tk^#*2Yk?mX6o&Ce#^b?0xw=2rAku zY2=%BF>TT0$f8Hj@{19pnm(uHTd8cGUY6pU?(J5Qf&-GGl8K17u$WD=wM~S(gkue- zVY%>c}p9rqFb)?FirJLe#Q*tn-I~zEp=xYGgr` z2Zi3i`w83r^mnWstlSV@V|^~avX5KSPUwdxvtl(-oz1sY1?>W}%l?b8c^dE5KD#NQ z(&m~I!e-9JAp={EHl13T+`})14y}7xE(I=@FG5Ma)cWFr@wT11`e*|gmwd7)TZfbA;4hkkpeMV(g?!T7VT&SrvHTdfaAW=2v1U1Y-}aN^ z2U=));;#a~=#T09Yim#;1+o~x3tyUO7b+z4G_F7+IdQA^1rp!Jv^9DLUFfhtL$RHo zB^Z1ZI++hwMhNi2es>FPv0m^Rt9zb#;4Xh$<*&W{1l!tnWMlqd6ZO>@hp#I*mr*Ev zR?~bF_fB!fM>9#uhPtfBLsiR)yazf>{FZ~CDbGUXB91Ka_ZAUduTJ1ar>z+_lX?n; zp&F|BEozs6QVpBrb3iwB91~U`}5Hv^QIPF?KvM8e&Nhn)VD#_%4&-?n{3vMweiv- zOwN=pJ;?-vbt0yfU@p>H{CSeHT9o8da@tOv#`$nGdKEkLbafj!0!c0Tes4yMM|W=K z^jh6Wk2l7os!(?~vk0d?mKBeLx`WuTj`x_1ptU9m@k=pwK9$T`4_e$`dZ2Ikva{5c zOQ|7wl=TA1=F#(- z&J#inO*&8-F~c0~3nBuGPbNX^d0JODB8v0sxK%x^&bKGIITp_>C;vFHTgq|reB1d% zZPZkvWOc4={aI&ZXx);m=Y>gUj#`fa=%1ru>MT9WS;@NN^6bS&{xV%P_v4OPLxo|X z%_)5E5+Ca+x#zw{233VZCz)->ugQnz>t--uK9cC(Ntd9rMt1iR^I**J^uuVhMBP7J z8#VgRHbRw5%>gGf59>eI`#83&1@78^VlPc;LzZz2Orjp~U-7TP8cap=e0P72T+eNt zzFB?JQg)Qxg5a;1RVrE08h=_Hp(?oY^gD|}^IPodE#X_n<1%IcyV^$fPSTW)@hx2< z90H${{1V@#YMwi?Y$k)M;W<@Qv@B2W)!&~?jD4}{M_?#FUO2c~oJ3a3Qs?t)kgIQB zQ^)+PSitiXy1u6P|DYO`)u%%2Iao)SAN|=%510LgjlbwEWKR*tN!kZGe2O}l!JttO@GI2MNUbI!#@H;)3#2({J>iV)mXJ@-%_?Qi>Wz8J9?U-Gaq0=_J z!QTzWa{c2O9BF1f!H5G@7x>$Pp!$Kg!0+P|*eg0zB$yMz{P={~<^0M)&oG(o+vEw* z@BUd9a1FC$@jbXnjYajf@^SpIqWE3@r9`TYD(#c>(%S3K7{n&%@xf%784D<&M;^es zM0l1`W36a3jiug1KfzFzgPTokn3fu;Xi%@4#zH+LP{gQeT(4b7(l@gT78%$e30i~x zbTHYbSqQMi#&&wwKdG5=z*P!ICWRk92T5ukeVq3wm)JN|q1R?EXON_1 zce>Jk(M-7Q5ABzd6i2h9(pRQpDX&ytyxsaS3E%ijv-+ogSSIAPZk#T(n(2VB)9Iq| ztPJ&dP#ufBy%X3R5iyc1d+b!D>$_@-S2tJ=D21`sqgRgN=1>yF8NF&$5eY+M=Pr}f zH8l93gfGi`SCsSdQIC8)hda1=>ovDFF9Y_Q(X9h@(y^^J4Kl2ed+P%k)nOKx7=^8* zxPnHSomJ@wS*CvCquBEs19<^)k^W$E%Y+LFBe1!m(YkA*FqLzga(AQiVk(vN>(j;T z@D!yr@$|Hp1O!j}P8}2T^k1QK@{Zos%m1#C`o&RaX%$TD(!VU(fO)?mfH#ACMoF%n z*_M!?lybN6{`_QMX?!2!F!FbY!+3J4|G+}Yo=4+9JP(CA!FOPRtyE0_kNf~iu-X2G z%1_D2_diZk#H%AfpYX0;A*!H1NJbMTz!=pc2|zYt*R1}5XtVPQ0jh*;Yc(wZ!qpEZ znuZ_8U3pJ8@Zp^CV<3TI&MxR30De1j#`CQpp$H*r4Wl6RA6xCwsndpSi9sK{h>mmCUaA2o6w~|?V@$J)`)ynuw$R*Vk-9!uVUM_*Io+}YkkOK2u zI`?2R{a}`1xumCFVF|8sgqQEjgD05pX1vuL=9t7747 z3C}K%b*-$#)HL>yF&TU)X1LDP{@slsRIR9b?JF?(n#`io@c7}dY_Z3aJ3 zmS69%m3#QhvI0+X)lyc-UVgi7;Y;AJx9Hrtg5`8X@#1&vaAt`Zk-bp4SZ<%!ezot% zIXzFlCcx+CQs^(iQh4?F_ycy%pv%0gdGYC+nJuv*hO&QPAabs&Aj{g}?o#*+SxR!xaG3(qm+UcCilGnD^6FGxCM@X8#X|>W6*kYgg7+Z~9zU zS4&$mI@~HfojR)~%EzWK*IjJCa`)4B)pXHHw;2)jR-JJCcf?UKdcNV;!L5L9$&ugG zOjT9IQr9y*xX+4FbV}*y()N%Jp%}{q^fJ3$#Lg)Dy2NyL_NifV`9jaXZN6{3=U6h` z?z<1|$+p6eFnU8vwt)F-a*2Jko(lGgR-2l$y1C!WlU;W_Tl8GYD`N6s$1g< zc2lnV=j)xGK9SCPBH2oFmdbeAbh%@vg4!;o`~C`n5gl4qRwLDQzY%{`GlPNyJgb0A z-Z>Fa!1lzSxX#ok{y_@KhrS5~G7`^G<+Uihx8FKIgB6H_o~*-BcT-$!4NtkEPps<+ zBoy=gSNBj<`)5CaZ}ZRY+tq z@EI``_)U9>90>p&)23K~VkhSt@Jm3%<(1|&6pt35BD}ZmXFxd5A)RN>0k@4iU3YzP z|C_*V_mx0eNG9$<1oT*dAp^V_C+_4gP?-VROf1uW`cI1SHsV0#`uSrJ(njzB0NRRs zpTd1xH$qzW0I#~calc}4(S;QSP$gIlQoh2Q#|FR!O$9OuJ0b7RTa|Y$UNVr%5aPgZ%=J~abJMAJHX1&_uMOZSE?dg0MO;u8Wd`*Cgm^q9091&N(CV3-mk}x zfMj=2JesTCVdTcr25?4rTfg7oe|Lo#y7o@Uf}0ALfy5ivQ!S8@LYSFbA#UZugCMG) zr^s1S*dU(6(0XjhgH(~kSz~(ltndgG1%2UAe#KfGbyov`wG2*^W#2Q zm#rS}!EM=5D_cEQCKZ=qH_0@8JzFYY} zEb`qrDX%nxu^wvISAY#Hs`3MfLPgoQEgaxV`Xhgr9n#%eZMv!BjtglZ(4aZJ`)-@Eg(%4cHLVNO?K>*{9c)ue_{|Tfnn0co+aO~B33@Cc`S*Ko04Q+r@kgm z;Y*G8G}9?x7I)9|wmi3&5^5ishYkXzqS5!22gAds*r2hTDDu28Bg8t>;L$;arLz?Te$(%?TYh5v=N{==@w_r{viQ(!M z<_0^$DTx?`wJUopBmWGW6*VrKpUv)pD)n6+H8E}IHe6QWbdSCN(pjZ9^U0m>qpiGL z`uuvREY;*vW}dZ-!f9fy2h`e<>@QN)LhZLe z1x?LbVaZ#zyu+8?zC=&%?oO}vBSeDhEvHCyb>TD+quf1*+9Bh;YfG+iC!vaU7O3_Z zz?dd=scEpOMq!i3@xJMLoY&ZD+j3o$7rC+>Y@oGoZFyYP&}r0j+OjP!R0w;k3#GA! z*Eg6sj}}5~NW@C|*(A}C{!)x^J62LeZZeO-k4IV8BhZ*}9zzY_#O|}2yxGw>1$ZfU zN4Q->%N5{@22kX`AMmL!SM#~E`8Ftrn%%`5g&-(i306n0+j0P1wOG_%`_M|f3)>84 ztv>P4aIm(j4rCj&KkX@haXDK0jIYZl;ik9c2xwmVrFLFG9C6cY{jb;OVQ-2G$to-i z5>ElUYILrZAURhT@d_-}jKK0nkiK^Um&1UF!w%rpq02fE5GjyjWa@E-A%Ew#6L|d` z88l%pA5~!7$r?%i<=jb99GuyVgjBwKyh7@_Sc1LL#dC`xZ&Ws*MG2SPg!gpMcaFvn z@Me+_{}hmACD(HHt~@#Lu4z>yWIj&p=TQX`AMBa6i+1t$GrYyMlhz#gpxvYtTVOoF zI>YmMt2ur8mgaE&+X3LjXBN5*X2CrX;Cv36mX>m?~i4V>d2;ysOcdG$})vrA{| z+E2$8VxnKnPYiz(G#4tR@1iyb1zVN?`t0D8$L9cQ-?kA!el5yvyl|`&vZ^zcRu51JIe=3>6@#j#E z!tKw|gdS;%lk+~eQ!|y&*V}<5YNItD1Vwr2V(I*@M@uBv>p)#gb5*Tbh?U-5V* z_XBIRJwqc)7d%8JvfAn^>ZP6n3=O-*fxA)1t zxcobYmm}W|rROMQuvufG=QgUKwXV&w?H=V6g1I)s!gCtsof9dMs_O;ZbKr%q9v zdS!cdp>)mfw&zFQtft!=Ct!EsUYys+369O!s1bD(1=@iczLHu;$fY3-H6=4`D z_K2y?fRyWoal~Y4@8_t2rgAf>(At&wLsG^@(=FrRZ$gw0rz9Ux$!+gf?+g~;7DlOu z#{Ob#SMQzXuczg)ZBxFHHd$+tKWRBXvF9JPw)I>yOB%2wqi_^X7N~dEYTOo0)Sfol zxrZHHhUaJ>co}VbXsPY>r`DC&2-0UZzJl$0J11V1*mt-D(GM*6fx*K%gLB-n}SL+*?(#+}u1?wFbIa5mKs_4O$KOLw3VgaC`nw_wM zW%5VJIvimzzD`T0**>;T2q#_BZ$8|O7-4jI1_YCQS<|oIVkllKM`e7?{Z;u>kj;*; zOOL2D-sbewZXcWJN}*DGl)PA_iKQUSWOz|;cGgltqDAxRm2P_Va*?#w*GKYFLcOMJ z&4c9Qb4^(#twq>Ul@$tBM9a1m|6Z_|-%_I#rPb%cQW`MHH{5;WZlsf`SrU$>+vRS< zi(&&e!>@7lm<6yw_y{`oMrTKI!2rQds4<6Mr(T7)U*eR>2r^P z>qa_kavN)pLoK>%(Tncd8>0syMrcNR6Dm#L1@h>`bg^he1~8?}l8!^gb@RE5z_b%= zk>)bYr%~|9@7Imn#{eZg$}t;9d;EmNzYKUob1B~N2w*n)y+Q!&FbG-!09Z`?az_GE zUZvnFkPl09;RK!v3~Brx3pl&cM6OHcfLh*zmx+*&j300yZ}u^%7zX@cest9003iF{ zuOhDLc-lTAl5KA-TL_&L7fyZm0Yt#e@KyMI3#`nPAT(Qxm zDmYNs^_qPC`2&lw`8VU3j==aImr^MmKr>cv!b+Mx;U3C$LxrP&bxRHauzm>Ku7*RL zCXhh3IXOixY!PqDrNyVAL))=82mDC?P#CodU|VjLOw{v(vq*Q8#qWJ-VgF5qI)!DQ zsgi_px$21jT%2))7DE>zIIt_qsPQV`3NxTUq2|A?sP;nRg9&HZXB{gWaqfOTgsT(T z<@Xi=F0EsXmf~#;X=^bq?DejBpge2K6mTaC#J?Ux5ETOg#seU1YSgiSZyLyWPUCwG zTw>e-H@yBvS}9fZY7S}h4oL#dRKe;C_hz$3D#SAj1W+ zYBkdg3is-z>3o^HF73i7m2ZvR{g58nnYH($J-tFGFI{&g_5x>72T7M_rPPy0ne>w} zgk=p!$nEW~CdK-lMt=R)!6Uzf+BhYTn;b*baQ1z<$Uy$|fFPR(}z_gib*f z%K?+oG{#PL<|6x;Bfy4csBI_NqE}UcVsbc1=_A`G4rZEF639Ypyy^b<>o#uhn4Hcq zia`B-J$`V^ZT_9I3the&EI&!S^}Q+O@Az56$Zjm!vA$#|cGpw6iuBwDdST7iyxx=PajYw~x*Sit3##?3{YZx4gBeRt!t?j+7l)vl}i zJ?5u0x1LA{tiesiy`}W5{VVDp>ic-btwX;C_Awf#sNBuac+WA%n%ac%$J0gFa!0cp zzL;{?+uP%OXNddYXxLyOed<~J03lUc)*8K8TN4;q-;f%OA#Ya-^iCobJfAr7h_jxN64UYduDss>~jNhS}t&+e5<;Q-^H)Wkb@MQOd38xYV~4 z4+)-+tk<&_$*HSCIGkM-hs}nwclo$YxM>(z$;8ny6EQJ-JCEPNr#}g#t#Q?tBe&vI zZ*dsh4rbW3HjJ(JWL?H9+I0h!dzpud$EU;PIC6UovP$=eu1krQl=mWyIH%sSCOZO+ zm?KF`Ba}bu4C`s9%le3aQS4j`mdX_ILNeI2O5~VLy3eJ4rQ=H4N|44)oyopin^C-B-vx3sdt3afJLchLDiS9<@DTIe*2h4DL(=xyqkp8Qu3 zbFP%ZTP{9N{ebJx-vMPy70={*SyEm_x4&*my}*qgn^#w{eWM9c$<g`SSj<0#!-zXyJs4m?|_DURB~8PpcaG!jPwCPWnBUXe;_WXSD9He8tj`r32&f`c<#4!co=d3?D<%dfiT5 zEFE3~Ypa3v+?kEbX@Q1U3?`{AWnar;XVirZjsG}dsonU^co?PxuBInsJMbcrcYZ92 z{yYD-QpE`*{K~;P-(jRiMaw_M+sEPfgGJ4F62Gf(wtDhf@WSEf&U^X;`trXSebwjX z6ZmBK0`D^?q12~0tjA}k>Uw`ZvDeJcdytKZ1VYJCWKU%!Cc0JoHNZD z1>*{OlzdYJOKZ_hJr0IdUGchs3CtbT*a53=xt6<4$B*0=@UZCXHS5`VRPn8;pS$Xg z3lH>?p}#I~rMX`A3F6yzSlE<}4r_Ip`94svccNBgTuiy1n8cN|n2}Pz*nHdMn@kgR z#F)MA?Irze;%HhYs`C5GmbQ%;swcda{(8Bj(%*C@v8rs)9VIAH4G`jgWmDMVV04Bt zYqkyaMfV>Z79H-(nA5I&H2+gR9KxZd`#LRi_4+f;ry(o-}SsVltqJ* zTy|{i(IwQ0q#M6EZ}4=4@eRL*Kz9o1`k+C_^Jhh@=WCJ|g}iseluwXVuY*?KyIQYB z;9BrF{qPOxQmv>EL{`*oo_q`$5`>GR@7LF^|Q7ooNPhOV?7OM$*pNtdusgfT>bNW z7Nnoy*-h_swz-WCpUKS;QywgTJRg{HguTI(WwG7Uj~6oV=GEnXgSfK!hGBFJv{2=^ z#QG1OUixRv_q+RhwiQ9Rqx=3K*HVy-h(M|uu0mXy{-vc?VW`C$XYL&?156SI2-e70CvUsUT@5MW9w_% z6wS!#3%S#1sZB~g;jY`FJ|G0IU>C=h&Z=Yi%VvfU!+gg7Bks-Lq5A*$VIs5$DQg;{ z$`N7 zH~%|z{^fvO7}4|OMd)Rx>m@IwKi4DI%#Z)P_uXg#-E`U)=KP#U-RGXQ1NG(|khgYd z@M_6_c^}g6+xd)#bgq0O{;m#>Cj0n#d`NJ|vu&E`rP-GvtfEMqLc2d&qai!n9A>#XAitL!An#c- zusQ2xMkD3uX|d+N?$oT?mT}bfz3SeZHat<@zzj^flW$<@O)*zlwIge`Jz@svI4|Gt z%X|Aj@t`C`S6uv5o@0EF^-X*#?qg%1*N*ltr`SIa+I#t`Fnsb3S1JrPf7Zhr)fF;& zQ$}v9J@hYkI?XxX`_iEyzj@nRt9>t-7`E>UkNfYS-u?If@6rQ0QW`hCqi_3Cn3>G{ z6gtcuIi05QbNO#~bODGQAE4=H4xN8{uQ~hV+FMA#p@5rHd&l;qGumEjKNy!3ZT(MFe> zcdb8+wMJ~%GiU3t^6km|2UR+`i zQtEE~%$$dXUt!%_wdTo2+Pl_IG2eQci0x|+ZyKKCSR<)2L5t06xIfp7U96(dh#B>w z*WR=XT(kDv@iF!le!D>QdeN?+`uweyv!@Pg9X(ZGF(e5exKIi)$}|3shoMfr6F()N^gAR2whVnEUs)wA)CG4JGTC|iV-|1F8O{3L6}3f`W1ku1TQ3YN_W#v2%2rv` zbo5A5e5lo0ZR0Lds^eN4LN}bK&m$fk{HFc%Biwi{J=qMsW&=;!?M;>PXF1+B} zlsaBg(sgldxy>dGR(&IR?th2hrBz=3x48OlMnV#S1UWthsck33HJANQNvhekX%7c^ zrFU2Us;b>c`;FoUUutf7JeKRxAuSSHM-xdSTwZV>6DvbXa&|OMK-q zufRfLJJH+u~YRj0}b(`3o5==pYRgSx`Tc3 z&sYHmcpYnznfo78U>E;_*RcQmjtsDBHjXSYy6==caOv2&B!0#D&l@ycv<PV7%|L`EB9Pbw+rBZ3%7Ms;ibxj)2MTYqeZ+miw{CC?aor2j#S*4>Lw;_*S+bd z!}zyq*|z0hlARi~a%x+fN7f8If5W)91z4}?A@=ezz1^zd>HzVx|JQdc`9DSC=JkH8 zUpF*XK403?nb6D|bc>aF`90SWKf0uRJJyk!GN}9h%OT*$wcU-)V?`!7H~h6?0fmVMy1dEW6$UYt~W22{L?l!K!4?#Ja}D{LE%sx>tC3@1Gdef2=6KI-Csu|CfS zhMN{TflNeEl(&C9)}?+St2x&5*nus&FUGMngpoaC!>jiC$;hFZmUnOJ zy}r73L5bP^ZzJ-|M~|*=9d_G|1nj8catFox_m{8}lJx%cj5w;_i})xJsS(+&Xra#W>c$NAoWH-r8@k@LE0cCt?6^Ab(R06f{Yk%{##D)rM)JBu_gUD# zETvaq75TB}gSAk^De&uHamjbzknVSmb*=QwR9%1bUjlpMQ_~+lIZ@AF+;?uNBH2CZ z_myVXO3A@C-3*p+P4I%_WIpe%UKU1mH*WO7y31XhNk20Wu1N0XB&>yYQVkEHMW(Hc zLK1m2?BrU_8TuW_e~;%kygqvo+xKOB_tH5n!Xfst6zSru86BJfUZ-I6;-QAEcW9<8 z97=cxE?URV0xz#gD#U(2j?r&)D*e8_H6z#}X~__G7v%YDYo1ZPP44it!I0?2PhF}` zCqJIrb!-2Iexn@@ed3osCxBDqh~RJFa6?FR`4!}B!kTs^roQXE zcBx?NpRGBn6HZT(E}!0;x23xt`LiR(v?XlP&7ninxZjLtJpA~ZZA|F%(WtpFzD~j*=kZqz)Z+`c> zH0XO@VCkaa-LW@!sSnKQcz~FeWmk3i-9{5@IXRo>%LRgY)Y*P5)z%-69<(ie9pCle zFXqo^Mx$u7%RH7hTevQQek##7VP&S1ZOHEhlId{+t)+ji1-jogn%fbnKY66H|J?gz z-S@BKu1&Q*vr%)qP*F3!>|D;#9f;l9b>}*={h2=dy{gS4f-XkRI`-%LG$yz2w8v*o zDy>oja*MDmQ^^0AYQNk6pT+uq&zOJx4K21rv2FM~Ql#zats8MD4FkW%g{%i1mr$dY z@UMchYQ&(nn31UXT`?LGKV6{zA-r-L&(mgSVcEkoMq0Di{~3Ix5)C8W5y}E`Gjr*6 zDOlm`|6%-+=e&WLXFdmeHtr4I|BF_)^rV#=XKf?XaQsf{55t4IOB>TzOZ=+1v&zFmp{bg_uYiknaYl+u zYP$r6;`z8JMvRnR(%-(Sx~DU%C1FtBA~X2!E``49&g}2`&cA@1y;LhGb#%=7Af<_5 zJUd?5=ieM~So6cKJ4#@8jiRt?Kk1jmMzFT#2-*5IB(n{68AWON*XR>)_2$j{hTDjT zF*o%{rL7D__q)2WWv8wlTC$@KGzbZzZS5!B!q3-Ve@t`?d%EU_&P9EN@>OAXXIVqZ z@jq?J$pbdUUyRT7HP4KGe5E*YkHO}p;MYS>3=O#%aj9>|#*!cH`Z_H=-)Awiq&YNT zdqq-K@Wu%~K+ev6IOq0!W~p*#bX3K~h!cfl?C*yZ~wfSdoHJI5&d zPP?P&UH^3>X2MNB_F7OE5}V`yXe2s_KFM$=nLXa!7ZzA>X$SLBy9d#+F*(Dflxh*2 zahvq4={^oOpYHr&$+_A8@w!f_jf;xf88XjF+1}P#9$E2ZFXM~#YrFA9do~NYQ@iqM&h||Xt}3PEc5%Uzc>5x@B1CUB}~+H zJd7Ee|J!adU_0tgeLZiyee=qOyQ{CaXKb6(m0|wyPzl!8uzi0kxosfR_$Mp>!6&pV z>h=2-{h4}$O@TJl#|4W&&|FHFk-#>$b-{1b_9B?e@l`1go+r#(teADE#bP(zJLAH( zizj|uTIwJ60Q>Uta^mH0tv7bevDn*`cd{^eDZKOVa$2E=q9Liz>wRsWgxz<@P3sN$ zMZtyOkpc{Y55*w-nGisWazXRazuEuGhNpc}$1I>}H`?Bw_xr}y0+ zA{Vtk=F&z+U~Aq2$BkwWrIs5F4QD>AKX*+vY?t~*VS~-wAC!j{nIY+Iol&TNW~c<5Cam37*+MI7&2$ zUynOL<3PWTLL2KJ)|i0AM9X)WOOsJCjj0CnEWK0klZY!~W;4&GRJ{n!MKJ1&?yEnV z082DPCgPv~Rv35~9wuQ^9q5hmCiEjkCTG0-%ZmZDCU7w|(;FQodaQ$%iqI|NU~UK7 z&08_`*6Y$?+C~WKQilH_{Bea`Ol!Fi@CHt0_pp2Dc+`czKldsgU#RG?Z-y;5i={bu zBDeU>%U)U~LrWV>gmc*wo_y5}qwu1jQk2^B0Fbg}bdc!N!j`4H1@nRa8nKcx_7xst z3c~f@q`mqf^=cYrV!lt-z-Mr468;Sy4#l{5QI#ALkda{g`zS*`B*mJJAju4*4XS`9 zYOqcQ7IGI$Bn%Dj;z!s*4n-M`-wwwoy%ASP2}_iq#Eym*;D1B08_sw$M_Llk8K>cf zc@WPUzhQ?xhNUDK8;>b)&V#w^?|1=avdtPEhm~Yh4Hx19Ym^H~;Ysi1&|{7iQhddf zJp3fiW?tfFdPC!r-ZB>c4(dJq);W==-QK+56lXJZVl-xdNcv4 zhp;PRnY?he?hU7B3{IGs8iY=&XNGaA8R2ldU3Jsh1PVw&`&XbMDs8-n?a#Y}o}pv% zevmyiFU?>F0R<1iE=KtLt(ZlTQ-knW3DYy8^ItX(h}U$lI6G1A?Rt{OHbE6|yMcpp zzz=Re*~m~U5j?(R&oh;vyZTbKoP(bv*(&G z-^|GIgI(4sBw!|Gn9acwN2@q0b}r8ip$Y)v*2pqBQ50{!e6<20E3}J1Hw9WFYvX7! zz)Tl35jw{uzu*w3KCL8Y(INea2zL^m3OCX)?m6^@iYR4MF2H4XE9QX6IzKpV7tfGV z2lv&7Y>0-1srR+ z#2s#DO7j6Kcl(aO7ziRgU>*JXNhpzXZzN1YeRl#Mg73%T+GGUKa|Ej{{tmqMeum*D{zK6-${IA?qW8)ry*V z5Hc4LP>*(le}R6xtU6gp`S5C8AzPUirKU5MHdhB-*9AKXW_q?T*#qJh(oMQdH1-HX zB-rz1T{7~jL`q?zKo5GG$oX9jzYj#p9IHK$&yJ-Q~cBmfn}EwNif_gyGy*7S$(U>-leapP|(y-4aWo`9sl>|V2g_cv_KQ+lxe>u zcGv`W?YWj$18S$j{S5m3Rb$cH7|$an}p4B`eT#=S`4T=Yt36CWSlA!N%W*F`jmK5URp zv_LUkmjI)7=$9cWK(9I@9%cGINU*dhdJ2GjDRi*pY@9ck0x(~X3=`1J}Q>dej%P>9!*97 zI<)?_)D+c#8<=g)^UyG;jVgoLG6~X7$s$)4ps55SI?hvTjS!`a|0O7}wgC%bDba0$g zq_9>G86AP;As%oQQ@I^7JX^M|@Qa2fCNl^$+x-Fl%|tVa|80^f%EUU?>D#{Op;fBm zUpSpgH9;pX@he#2$p6tq@c^+-SZwGP3~8*AnzqA>{}}C=Gf=(Kq4+|u|1#ITt9N2C zE;9cHO(fo703Oi!MhAw|ka8mey`#m}c*80=6*aM1tvkXgmb;~gQWe4bQKDej4v`E@ zpDcMzNua#KFXMhu^8STaIauL@--Ysh6P_oN2dzE>DIqemIzH#GqT;%71ul_s#^@@$ zp{{&NG6j#8UqbxQ-BF^hi1^<13WtswyrB)ogrfWm0k#`m%9AK%MJ{bfvdb z=Cvu5T8;w(G;Uof=brc*M@l7du9`NR!6TwY21EpG2XMpMa3YA7=fM+}9c&`OiWCpG z(mDUh3yW@7fF&)oT^haVEecW%W8j zW6UgYfVPu^w35g?Y)`Q=x7VM5C>mUF13r{;MIdqv>cR^tZ+PY{eL0-UAOZaqhjv&EDYOu~4M&=`=I@r?a3opsTp~ zUIX4kRy06p3lq=86~_qFrJ)(H@jpM5>VlbqUdP@~r3-t(@fMzt8s0w2k`?ArQo!Jp zRan8sZ9+L{+RG#2l?))D@PaF^2IC=)hcg}*qLxAiL$28%;;Sy0zl6YlVI z7`u5xn@y8-A?^%fTJgxTOJF}q8B&BzQydeU61ZB65ehlJdncaVdL6kP?9dX z9gOBoO0h&xE$lQ8P)ZVaTCT!ODp$dBnzRPjJEj7qwJ>llS_E%b4C7%?GwB`l5)p|HDwE?OC0<@HC z(X6AD{VOjkL@eoH1H~n-UHNR}%d>*I%eV*s38>oTaD7Hh|wRIzGdC=U9d%#yk{YVo)!~l(R0hOId z`r0?R0^<9j9SXAAhntRdlT6DGDA&(VOvO$m2{>Z*r*JVZPU{v*~s_K34Gqlc`% zP&CuIB3B>Z4$k3S>({vtE!v?K`z#u96DC>%M=J=R5 z7VeF`#R7WH+dxR?FUm7047GsUVR3(~CP9}Xm273q#8()pc}Qf=K<3p+sls7^fPO6ee6!u+!|w0{ zsphetxUNXbJzzwH-RB(3Rmwuh42|~Jym|blCRtg?0;xwORDz*2ibbsH%xj-ixHs3d zFh$(`cn9t*<75#u@n*(=&KlH zTbISYfYsW>tXEhrpmy=g<6XxDtZFf);CyKNA-2wn&9@-^V?Qfpfo{_Z&{-dWj_1Te z`lFzL+Lzbg&{kb-oslLBfwWhxJ;0GQK$%uXAy_gP2G z^&U=NWs7r}Gd|N4Ket9s6;39RzIkFxCuP7|9FiIckR`W4DT=X6OKBIjyV&o9Kdj46#;gIJR1^>*qUp?g*EnMP&P}1)0ltMxq)7d6&{H z7RYl|Q!Y1IKboaXq{wA8R)z$?ge{m`yI#){c>xziY}7|dt=83vvNT*RBN^b;+$d&q z_|!j2`eL4hclArTjXAx{KP2n$ozE5-gj6!CrhH8W?6YXLkV->W_j~}jEHu?44QRS| zF2Q}8==4Za3vCp2wN%hYh$qa*N3WUZGG3+B{9?vkmN7p|nm#NDC+%?uxr~Z%7lhM! z%X<$(ijF?hJHR+SR~QN(5!p49e%T$X&OIP&Qk?_G@@pAh6v&q?b-pa>LaG_a9Jrj0 zIuYEEI;xAG*FEhDqa8Ft3?ay%Y0@Z8|B@o#?)^hdhrAxQ{ck{muhf;uf@)hTkUj5y zwAp;=Gi=RW{}{L56840wwf^MJctW4S*B)GT^GC@G1}Px;NIQUK+^?1y3MT59Xe+Vc zIPu;oh$Gx<4Wmp67ga!WsP`ny20mzOg+S<3pwosTXX=ApoYOoCQV4Cp2Akw@z%1@T zrO|9-mXcU_3K;Z?TS#aoXy<`AWk@Cz*MrQBkmOVP*qsW>40#J}nU@Fr3VDMK0%{h+ z%&J$n03_U~ssYyRLY67Uz0vLP`vUDpGo$7uKfnq%RHuc!8w0Ay^UA-uV=?C6n5qQ= zC|h*zvSK?U!}wFYv5dV^&AVaP?*!K+;Kg`j*Q;yPnnqKC|6S__^9co`tI8MGs1&o@ zTzXg@ojnh)(R2XJ@2UNqBrRRL_ivf`K`G2$}GDqAoUC7z(q++)dYM4r( zE(~q?2yM;#Oz3iwc*=Bt62FNcLZRiGV2md6!!#I(0RjF*3Z_x{ObbosJepR@5t4~z z7)^*D*6oPh$8osnB4)aa4iD1NLw+{kl64z!)easz?b_N!n|7NFQq))BdS!Sl0||z! zXrCk`+~h#IG7*Xglx#wB7zZL^)BfB?l6lRXpFRd2-A2JisVI=uF6Ea@vj)vP4M4k&*Gl+p{5!y4{;D-q-RG8ydgm{CQai z^vgakKZsoyxZ2>KuVlFVC{*8k?EW1g z9s>Ryf}fM%UZ#hS5Jp1Ye-u;7efHGAwuDZInmCIwGbvWH&T*2`n}UZeP&L|x+sFpe zj-P4?ea*X*J-dJLWn;8jyiK(1<-?EuXVu#3=z8Lz)d{*7#;iJDI@m)1k62GOMn(%W zYTza7+bLSmwyr6H;`VCXdcCI3139*PB?*&-xYGysZp-$?ml*};K)&$YA4={UNWXF+ zJkD(EvwoOOx>Y6TL=7>YLEzt(qBVF(9{w2ngZYF0K{$7^3qPA0k}_;!?~?wdg%&W1 zo9@!8n-@Ahp*~J@nZ8@MIpX{|SrlZ9cfvjrcuT9 z4i8N{?Q+t$n-E5QIRmECwmMlsx&%}aX}|#mo!>NHL%zN4@+FrOH{l~lCm{x7oSs&^ z4~RRA;_a>pgFD*+-YRJ2DR`g#S0q1qh=faeTk%8i05q%r27wm1v4)HuJ!_q%Oftnw z88V5prL4%fJok#a>^6l?j~eMfE^U;?skn<_N&k6YOiQlvMo!&R58R*(WD~i3;Yc(f zvmMw_cW%?JxTQM!9a8ujkWe>W;oPt%AkSPb@qnMaJ&GKX zP%rwiK-FDx2WWN26Aodcn7PdFy0kgr@+9?qn3hkk->_qlDBOOhjHR$I{+tV0$toPe z8yomEiSwD&Sbu0Gi6WtTe&ez&XZIdFW*c{Zn~-|_I_s{$u!+O0xkmRNw2eWgn-|>U zN7gb{ww=EbD9g3iCa&rEW1ByBpkI!jZ9#X-|pq3ys>C5<)HA*rU2c zQA41<>Nvq6H`qUbAHHM)KxaW6;&7sbFU@6yC(~qAWivl|Sc&pEk8Bv`2eQ@Og{B0y zs76~mC`_9@?rUrX69RD6xVT_UzVZu^FWYM!^4!+P)^(A2L5Z48m4%0rSKv+jcG{Bh ztt?-@D9Yq=+uOUou;ffK5;nIG>0JL6#)-sH(wVFNRiO>pMtJC#RLz(@Go(1@PrC?c zy9v+BBCg|CJGFV-@7x|4`<;Zh^YM0SGe)*PJfXJ&-g$|1Nk+tD_(^Hg?>mg6Z>M?R zQ@uHEnIdd6`b|5K(nd3Eh8`2D^kXqg8FEHd!Op`kD8|@$KA6XO{p`)w)?_syH8MW3 zf%53+A87!RH>cW;fcYegtl9fNpqhkrCDTUHuY}mX0?Et~jhDC6Vt-p2SXzN41lhqP zP;@>yy_68&Ukon3cpfU53Ppv14?Z5fd(Rgt86)TVV$qx)f>g1HXJ-dF#}D4S)`dEh zisA_oT}7l3MnHV*z+OVyQL-Pn5`){wRC0sRkFCAzQ(bbKHZJSt3t3@cAGpk1#KqVB zqUFC4&o@ysIJm8OoSb{JJHaJ;*AQ9h@S5X3{|9Y51uB68&n4gfMUzrH3oV3~p-gB7 zEFcr2CE-oQ5_}-A6IC2|_d?4fa}S>gr-!CqFr{SFso=KPt z?8=(`@M7DAL=2tdHN^b7B!Y13^5kyKZFF=9b~!E~(iiv_P11!4Hjc9pZ6fsZS@MQJ z)k*RRA0!6exn+gVvoIy$dI~PhcwENWu8`}Bo?t{@Ia;2TRVc=ir%hzKVvDUXl0dwl za<}En@9edM-k8JHYjQUJ`~;AEXHQuj(PtgXQc8|5eQ-7&f{(jksU2MzVOD07nYnls zO(n?Rjz}~`*aAglo<D! zxZJLUN=(1QX|Tb`lcD^Yw_HZTFXn~Xi!;=s5iWo@J+{1Z^O)e3eE`Gd;pm@~d#x@C>19`w$L43?Vi%SBpSDT1+5P1Ml>Xn!Gt?(6Zi3+rE18h?Bvv`)ri?wm~|2Rcqx{?uspm6c9UqIZx*mW`ZVkdRj#Yuh408_x- z271aA&Lq8Q>+$zKSYaM>q{Q}vh>-+p2pRjJ#TJ5DuSOlokDuDy7Zb3Hhl;;8ctPi= z2`?Zs^52Xo1nzG42LtXHK7ApH`HF1%P#A59ohs)0CGGt<3m(VUs3E6UmN6<-2p6fe zP;=~01%)&HJv2+03p%*qC9YyhTF(?%`3f@Bf0oe%Tpw8Hl#)+Qo6hFUbyr>I`mwcy zgcoixBe+-5nd_Wyketl~XQmi};tdg2>txPwH7_FIVg)?G6tG*HIMG8)xiu8|$yxhV z@<3Wo1K|y!g+-ImHt1idf(X9QjN5!_+c9zEW`78AI{e7H<<7YYYl?u|Y^aG;O)tHA z+iqcRJU}l!YJ$2{vuq(RH%me?b~ZuhCJnI_5^O4lPg@Mrof@8su5LZLz4Z~JXZSdR zSc3TyriYp-ai4wS8S_W$0UCF81i`tA{5)jxT;dwVxjSlRT}G7IQ#Kh5U3f+vm#`HM zpiN7^RDHusw@KsMru^e~t}UW3lKT@d&u8adJU_-1)wK}Aa_(^(6K=6vY(^lD#;@sU zY2+|L`SYAg@enAJ0B_|0Yjd@riIB8|4&`Pw5%--g+`r}_L4&r>$ip9XV}Zqj(3D;@ z1Y>fB@*RpftH4&?Bo#UG;C&jrLbwsGw!b`+`HxOW69lR5uX~VFmCA8<3B(qf$N?dD zKV;jHEJ=E!M+tCNTYb2sO3QuzZpM8ntwiY;PQo2wu&^whBA1L&()Sr$%U|;mAXIe8 z7@UqNw8!8_*xy4p5Yj+#cR<3J zZJ>$kWbE8WN~SHRKM$af*1Ze`p4~?XDa4$FH$~36+V&GS@pcMc604MSaPnQR%63>C zfvas00~uP!tZ!s94P_{ifTKi|gMEk^W@0n@!rKo(La7b{qv3&?A}kq*4j^uSHN0iz z6Q_ltdBSi1@K!Ufc|8ZdFs$Uf6iHd@#wnx7hB2hX3_~?tul~6uu~QpfBW@sxQ+f?? z>(VoVs?Z8MkPCE0xb}&-5nLhrY`eI|?porz!s|1Xi*KL%nSt6Z+2}!ny9t#bIA73D zmWLF*<%`&_umdZ_cBveED*`saG_)LEl35BM%4f3%m@-2}k8&uQ$JK-x@*ZiM4hV_L zc}xn!iiU4=+@Ae& z{^c1leBxo`SAp1xvqIB-&$*{jiL4`nXxW8I-<5Nm{%^ShF+*(L+S+zlwg@FrgbDVSdmJ;g;Yf zOWDTGWYQz9rr}WZEc9rwOFCCGh8T)0&nNPf1j>Nr$WI_mMCG_2Uav@hA)=pBl<~1x z*yVF7uB#>DI-4%H?D0A95o-X|mLE!4qVxv6Xs;A-R*au9VH-S`5xR1WQ5P;DGTgYU zQlb!Ib-LA7wJ%I49~ymi&rPuNYQPn4Q(rf>uo$NzojI2rNcBnVew5v zFvIUWXbFfH41^jL=EDa-T*Oy0nqa(ddI+|iuM>$4_gq@L3vL_<&1PjWw`>S zcRi0LaK_|5!meG1XtVwv_xA(!9XPmAe|hoGQ%8uI@zkDhZr1EBtKK;;yPA|0MC~k6 zly^qFYu8!PpqZv9e=s!;;$`lYmzm;d)=)H%Lqa~vk5(Z9=j4)Sajs8zuL6hs91tk8dYQRs)7jF!qQ8H6Q& zW!C5^8>}7RQ;)xz-OPgY4;jdxHxhM*2x9IKz`vJcT0X&4QXy*y&FZgdA}C{agUr}9fnkqi zYF0N*on68`x8eOgqPWCXT7x zKYehR$Sci2azSjvg$fpyN)QF?IS5cgumG~vQMExjM$!|A8Mp)T0Rd^S|r?O;& zc5+D(Hgonr_7Qw&C>+@|G{6oP%zBst`w%hlhg24mfHD8}rNIN_4n-z^!&MD%s045m zeR;Ekb!PdRRWp5{5?i5O@+A9~>5TC?rw6><;_*rL{zyC@?q>xwNpx;Jlm{8rQ(pD~ z*K0^0`+$}~Qso%W@OI253}OG?)UG;HpkVKck;OyWElHG>BxJUW%CZYG1%2(3>SaGF zp_%DM(DgV$is9^=aRTer_TVf2m4vv@|7TL>9z7Nm|HR1!vp(EJS-AlZ9Fc2wigZ2= zQ~rt(wYJsZD=hB%6X<9drYeoN^Q17pv7Wb+0-tbMTecn}Ox}2gRwPyj=w~%izULD{ z6s#{pP39^iGQrY;P%wNoF#y*zVO<_l@y(Rp@c;bOKht27JfFj3^-6K`9gVaKFWme| zD&u4QX-Fd$+g%=HD6D>GvMv z$vM-$lcZ(JNv1ko*ELE_z?{wIX|z&FKPrkM4(NL)T+G z1u0J~4!V}Q5}Q-Zl@N(2G~-eoBe4jk>>)AS+#*f$M;=fNN%*U$GH-&7%5+X?Bs1XD zx3!|RHZ=0>MY0PVcHIhBl6#cr= z1CiUIZVhR;V<{pM43f^eaMoF>pL7s$%2|-bnn@;0VrCVGtrT^`@ic5v@hzfiDxWhe zJNz!>vgyT$j(RX`gkv+RXa&k}Y~3%48?m1yn9o5CaaZwgW|J8bt|Ed_lXo}#@YU!U zn~R78R7a|$2|GRoN%CCh{FvW>GX?faFY|qy;(2gUIFU;gf*K4=gQ!Qddy1tHNi9)Q zX>ug4WJ*e8KeVgDl#3V-blC*?R@&m5jKI2i8@W|nZ) zj$mn+NzYfxW_d7od-0ZRY=GeJP*5NnxdboK*;qYE>wC<}lB<6obyh8b=6_Mx?9qa! zox#`n;c{l(y>=*$<=O1{x>9op7>TB|MwG$p6@;0%>db8*oC~)YVoOCE@M&fEd~=NW zlM)q-RQQ(^)QPstl+o=;h`pkmM0M!_Cas!2N#-t+a6X;%XMI_P1(p2j=DbkU2mHm( zznLV$hL^;*gL2^XhMa3*4UPiqbZu;HF{@@>mUC&Vzwzu-xFMMDbGm8g}!;j|kfo1byo#cv=6Qe+1MQ*>;mh* z;VXJ@+nG3RzYMs>$BWh?3ic7T1+Ak{xTcb$;ihn2M|uW_|K#uzF>L2JkGIJXZnTqs zZLtlJNYmef8?IQ>MkaaOknL)y@~fHyin)wPNzEYcIw~c#f_MOv16ln`E6HJ~uNKib zRkTM+tV&&!dzAZ{s3YFU=Vv6ZfHfA30twe*{gS4PunD5}szgFZGm?e!8dXx`blW?v z3_J%F8Scr3?tsDgvUx|5PMl2><#wp_lXYo`9j-%gnxkmu=tZ8^b}BOdzw*e?8vsT) zkl}V#?Xp6mUJ_@^&?Xyx&hP_sAr)WOK=FE)2Why)Bq~osUJjCfhDgSJ2cj@3k$0UX zH%(r&ghvzl5!wx#RRwzE(7E@4~UgLIG)t^h?A6>VKaeAz!~f05@;Dn2a$AS>wsn$^)>@60dSlk zwR_b)aL271&q-%Q@)ic$UcupUeD6y2NP8eo0 z#yP~W*Y?e2p^EkU8kg=rK^3U-Utw;@inRjMU(jaKPd0xWzD0N7eZ;>=n`Jh$2U38i z47?`2m-A;$VH9LG`YYlIa)_u9M84|Y@ndY9sA=HspkPlao*|RW=@m$B$K_$3g8Dum z5diT)gS@+>`-fx)=KZq6QWCcyDZe&jHUv-ELXqul(1c!t{M?5+;xx`#?wqJs#Yq%C z6#*Bp2o3Fuq|FGoGq);&Y;WGaeFrL0q(!aLj%-V2NvZcd6|aD0imK3JIy8P(d+4%j zB{Z#_$WiN{|K2F$aecH7TD|bEQ6F8Jt-eO**loBQH`o|#Mm*uTzzz8vFk4jyFT_o& zb#WW$F4S*dNsEwrLmhDzMztiADn70iE3DxgHV*8l-A}-IdS2B>X(?aVo2v35e5z3|FIr0 zLa}$(;0HgN2;X}_TT{Y#73{U@9@3euB;=?X#R&q(t$IG^5aB0wwt!i)?5q|QvKhGj ztP|D_>v4vcoJZRUSD&a%8)%A+rgrd}DoFDx`f8X&Ezw~_=0zBw!qcwiSi)4283Lsc zyWGrmv0OuZgR>Q0BaF0<^SmHb-FA8LKw7E9I>`r}4igw#C_9~03nb{|0q%jxQ`IVX z4BSA%VOJIN`~=jXJx>USa7N^1pgCwsPw5_6hn$ zhO*LnvBhvXZx`-_l(*x2>LM9+>9mcp15F>#piYFv<&1@GBZeVJ_T%oY^<$i;7-=L@ zEFWchP^O=g=xi*&y?cIhc2ndGK@DvW9`JL7{03jIkdhSx*q=!%v87cz*Xog!8QPk;;R)~R{W8% zv+*NnXEsp>^A_9mZoC~hQ`(Wj$%BsEHy%PltxN_tXA?prKCY$l99r-OCd!4Qqweot z#aw#toYSLEV|JBk6j|ZcQ3MmKLepPx)(K0ym4#O&F?wJWpG$ zCEMO{7|8)deiCNR`z7#`9jmyLw9&7y;4@=*J85SVs%-$K9AM^f($yby<=t_jM!8l`&>H8P_b8hfw5Z zfq^1i{VTCVLCG)XtUXyw0G=wv_&Vnc%8QAA3LlZMRm*T~6?ma4u}jRwlw=N3!KeM2 zaYCg`Nqz}>DH2LQsDK-$@wvt-kgW=G=;zdv88gb50NN?$(hx3kK;o~VVnQ6aDp9BU zReRXhDjD?Lte$?4&=c1kZ)@Eynbgxfhnmbwz}$E6fNYsV5q3hP1l%Ux%Tco20gJ|W zg1A{Ihyu}nCV>7M*EFq;PD6r0k0LKY)RrwVPl7*-D0Gn|n z{ivLYYSz&cM|7$;$67=qA%xsK!*#Zh{J)ZXoc;Uth?!Z%B&0WIW36>18Zuf4_}*4d zd0yqrg2GDbI%|B(TI=-_wh5zTg~OGF^(Ix!Ef1pse*BLEcskH;i0l_SKfhHLP5?L; zJG49(c1%QnGc9x?6+Cnu|KDrq7D$)@6U@D6mso^9(?JBSY&@7RVd_WZuY_95*Dvlw z*Zs2G#ShI&gXn>KzM;KWbQS~I0c_>{+H9G*T*sh{C?GY5PoUS4QC&Ta6hh%tVZe1p{OSVV{jnFpr<+!-CUEfr`xQSEh7m zzFF3&_q~E}iIS#oBZiA2)Y8LYh3f~#z-9=Tdu!op}##>|=x5^NV z$Ynq?P)2wsz$7Fw{rW6jZ~Ta@$?i!`?FS5We@9j(b z5{AuRnbjcjH{gH@8)Ecjj58oTDxoUG`ip3HJwCeVAL;JcaB%nW|DGgFit-B>G6zNM zJwzDT*jrI(kPWK@-o&ibEPoavb*wccDG<;P6$W44l$h;91zL-`q|bW*T{$MS!1IeO zQIbAq>z6q;@>KlRtnkN5&Ow?#|5)MX$M+%_@>>Vp9BpV7@U+hGRzS(wVCQ#ebVyDS z#$`uK4}cmu#|HQ3`p?jsfgER7R|R#xyr_xcEjR;Ke$PMF3)&UXv3u=|NIBAb^g|d9 z-uGZ2PsoEL07iWb%WSe=!LdR=<2uowyifg%0&HjDO{Eebc6^HZnm@&WZkdIe{>~%H zr%z2$8ma#i5Pi1dnpi!@{<`PXLm=~15qq^h6?+$1j~x9Vq*V@LMrVybB_ahF z(S{w9_USI~g>we~0=4D{3%EXKehP96rB6r7wEc^EkqB7dVU- z5bo#d(C~8>8R0#woi}8To13_i)2y(JUx@VPah{8Y9(c2Y1a5vG(_f1@$Mc?i5^jvD z0<|xpc*(wP=;FTGM?a7*`jk%4q}%@~%z3yhykB65X)kyhdXFmsl-uj74w&Gj^?|-X zM|M^{AS(p-Q?DU*k81ah;N!Fe-%cdDZsRpSF;!#|*2LdKh1IZT?pPe@xatR%obB@u zTh$>Ez-{o5@nGN~+^91GG}R9gvq+Jf$L-q}bwZCu^*9bQmtVh#O%7~yoATWjB?{m% zG1E@-W2Dg>LXbtGoRC!}SwLwCsB!=DOaAf1<6cEGvV)}*IT?a|K+KL0-R_Ta0`!q1 zffgs3>AIl`45Pe^#H39H8ps_ZoZ6g3Y&bvw8iqVI5rER(7~xQP645#`5N%Y>^Kt}3 zs?FsgrURK7Ue8)#$73%ZoZI-}3Zi3;dyA``8KFfLT#r`k_!&_H#@l#?TD#VbkXcr- zt1AJTwCd{N-s`#_f&N>RUg}BjHJ()s8`GXK@=ct;Jpz*Sxk>Q6`rcdJ+Ni&E$O?%=VnOH|XaO`YBq2^ijI zqf@jGS;Ag*ZvnfawaufZk~OCzV@oZo!E*b+n-AQzZx7R15!+-W^Jo-U>lGjZ^r2mJ&wtf&Ut$Cg)3z`5uRjWF z%K~)FfBkE)>mDZGAoA~Z{18+U+z5&>OEnKDhs8dR5sh0D!c6!r`NSHHK&;!QXM6W+ zp*Q7^?=GR9(%>>L$%%9tzmio4;%k^FFL(RdAK6-2Gn^afl^Dk9GpCO`=iJ`8`c`IQ z33EZ}Z3Y<+BnM&v!wtO^vyC;+M+`Jwu3`6qC-O8j^wK3_A91I0TxV@Mgsf4ra8Sa% zQ+637)>rgi-jPbPdWY<;)W`Eev3#HjDL`}nbJ!PU6=eBm@$|C(Db5-D@Bq@0vE3Cj zIZUvBCX(Kp`e3V9sNQ7m#+*$9_v0wzPt+0YbIR(yF4*7P>08&O%2J>7a+1ViLGDody7M&Rz!;A1kmbTxbK_w#1~NC&-C|c_I!ZsxuUw`@!_8mPkpwbvWe>xmc%Bx za{fGn3ppE!*10^j5;S98)}E4q1$UkzaKfS{mJvmM2$*s^**U}wRIIZF-rk9YLT*o% zh_?OE#Y2?uEddzLxim837IK|!~+gUxnEc%?|f3%(+9494V+x_TuBUQx6&YuGou za2G6fKwvdQkvfXkih4)@MVk1x5xT=j>h6BX-}^~>4x%Z2|MD0Bgv{L=832kt$iSRL z6K*C+yON<)&SSzI;Mh}zBQ8GsrEojIxnfoH86E5ob4mv^6~yfSYog7r(+)6);ncdjHbVFZ}I5Bh5RCD3Mn0ye`R}> zhy`}|+YI8&{ia^_N|*sHEJ3_&XOhx!bJ0zP4ukne$l1)jZw1s4NK4$1Ik=M%oVVP2 zlIC-#m%S=tm%-zO2X+lZZtu>g{Wm{cI?1;W5CVOB~4;kd0>sqP}v+J?F{!U4Z(a zd8|zBU-6rai(!d9j|(HIc&hqhAV=Iyg?+(W>@hmP(NXhRcL-@u#WDLxg`b`*#HnR-#a@KQ0dmb)ZSiCHYy-;|YuP?G?M&`a%yKWIM2wnJ_vsWUkG1 zVIxDVJam*0L5}gAp*XZl_Q>zw)F1Fs;|tzhY_)F_@Bu2kN?3N_)}o(X^mEVeFFdvy zVMz6HTvjKVp5LI2A45m^dp84ze@UAdk&9?x3EBdAoF&`Avli|k9ZE>g#oKZcSBtpI zrAVEPBFN>qfb;G&>Dr#G+T(k`qkh46Wro47#8F7WNUAi#P{^RsOS*isZ#}vN0J8P% zF7q_I5rIp$X8#0$v_Cmh$<-4Nh+AmNW)hjD_b=nR+fEHCE36ZVI0iba;0E_pAY(l0 z4r>OlXm>Zq0AV^`=2M;z{4v!@#DvxUAl*p;33WjLT?{%+WM3G zeT3tn`gOI{Pk<#p25jdPh?1GY?zLm%5&0FO{b zPH;8wq@ln`&wY;CgO0w3lSYMOxldMBLsRBqi%9_-Yj_?wE>WwMr*>T5T`;yyxdA&gAW85q_Ti1bnE1CCm=NJmpR(a zKSC#yME$;I_Zd5Jb$}~a^J<|?aa!~zs%k*Ky&pD_>$1`gbc;vvs_9z#)ByIKH5ISa zHR~0YFCSz-hkGTn0E~cv&t9d4VNsvrdVywCedByLa(&&|n@seAb;NK3m$Ks&Sc!86 zr+7h=LqM70y&cQXEuGum70=oZDv71(JLiqj9gx+X;no;fMGMY#n;X6n z8^OT3md9NhI#oyh88pZ9qzE=pvcR%b0NJ^C{LXxPnDMlMF6QO_r~Uzj@yF>~t%0J~ zE&spCu5VEC?|v3;B<_J+-A)-$^p>Cd*Arxu#nITY3Q!S6GL)fmkdwj^7~|#d%IUxu ztTGop-@x>`UO?!+9vp5(8t>XOtU~FJxCB&8!;7^yAKi%Czt6X{Z`oP%ZaOVC)pDtTn|kB5`A> zOSz28NfGdiiH7J%q@c!va2?(nGaqAtbDim(@c~!H>1%4gh)PEi;7O}0`^MisF|m~! z{AG(qD62M&|CowF^o_ZlOC3L64DX{%#%lGhJIYYVuBNB8$n^KJ)qExoquLR+?M6#TKxd!;r- zC>$LFve&x|#)R*n1PX{b*Pj58tQ`Ke`Iwk5vlI16bYZyppI_;B)w#D2_aAu|JfERs ze!UZWpv&Hz;qe-7yZ3@I!@GUH_#odWcdr@0)>Z?9WeowDQqMT z0^=bT4=eso-zv?$_M`;C{wKkc_xp&P!R_N0HQo-PuI%b(rg3u#>OYrRB-l_xxtPJr zWQ?MP$fCapT<2=xWnLuMYYn9Kn_WF$J^;R{+c9J~6fj*lJAH+2AqoVP{SetY;(m?M z%eh$e{2K5($Q9;0QpqEKg0>Dm3B#1AEB4s^RI8nAVPW~jQM>PXNf1IM9@vL@Lu)NM z$XR`P3XrRbbm14EOvwPB>R~eZw+@Iqz`qE{Xf8n1iUidwc7xrg4J;b7x+OU|@zjaT z6|Y1}7lTmFL3Jz3(1$@H9w9G-|5jXpPs|1vOc)|%!1e}!Qkw-RM`B{C5PwijKddEy zEHR|odG}?2Tb~V|cdZ4WF$g!Qd-HBZ1W>C^{REof_=TCqj8j{wNI`lj@UrkZl%S9z zQ0?h8w@uEh_>}y19y9`!dc?8)l(;dhKfc|dXQJ(ZLdxS|eZ?Mn?#+7~hT^$&R6ciz z{wQ#=knE2)K*6*0)`tVnk|@K=&bAY1}E z?7jfx{nWr^!-#!5t}`^h8FnNG`OnraJOw1t+OQIiHJyPO$zaUyJ}IWlaFc%#Gkg#b zvH@`uH4K`omguVKU}kqCdgb)>z@;f58_9E`cj6CDgzX25#%`eRC48H@*g;fOfwSh$V;4fq^Khm`{3C_SsDNF`l?0w|6W&YPlz-qPC$MroMhC>=;&*RHG1 z?X6;s23?(V8`*=OKgdOv1$+UrrHXL*`Hv_Gc2?Y)rDi5S#{d!;JJcub8kr_e^4X&-u8{dO^{nE?sPy7p-G-_H@rM5;BPOvLY@klzSj*FThOz^z0N>$As{_$3)Eo zKTG22^UUbrX_9;I!hcaj-GWpBsOGeh`Z_B3iXk|)SYC7sDWeyc^t8}-9I*dh1KR9D z0YbW-?i5jic-;En8THs2_@pQB)p-Dv6=_SzEK%W`JS3?ie3nU`VaKyJ7j;>8(vC*JIxpTot>+fgW_g6?3ldg>o=G6Z4)#dsMX?qN+7lC(*y z{yQfLsHe{6WXQ=YD~sXn1$&WcV|@U@*`_FiGJ27r5KP|Oc*Jah3aAP>Mz4;dB9J4qgI z72Xdy3}cq>BQY8o4FSfJ*_Mk)ED$P*y^d&xI7zACvK_n7-a= zlZWs`bIa0nG%LgkMjfrYSiR6Rt>x}Sm9hBW#00%M7wi)k4G|^GIq=NlV0gPE#I5A) z<*$oQ*6$o#$NTtPJ*R1{jMq3QVI`e;%H`qbWxdGTeV~srwU(HAjV9#`(rc!=jGKu@ zc$ib)J5HB=L#SNT`XA8xZ^66owp<_zkfVJv*m$7G-*cRcj;`oH3SK2Js;IH5T>$wZ z*YhlA>iP8xo@T#$kOZ(F25s)zy^g4I)+KCi#9~rWOEqs;$WZzZH0pQb91aqdylQDqJ`I1wRyZpFLJ6we3;E3%Dy-<}34BZ~?9|ct`C9^V-id-Br&u{2$KNvbw~An%h1yrz`SOoRx8-ZvP=ht?rA!n0WVVg-p5MYYts_`Z|)GQC-EnJH48_V z%1-Kl{bJnhD7+TPc3t@UE{J$Xk^2nXd&}+*>wZ1HHq`H5r0*GQNmT!*XuQ(%`H=$i zNQkNxwy#}s>&}1T6ck(csg5a+YFH=kcQ{Y@BUem4E|K>>8Wb38A@;UpxE0?04rHdF zA98EkH1+GIDBxFkn(7VPK#7i7AFF&#Q5YOj2GpJ=ujRH16f2T+W z;5L}s;`@zl!5~`sL(TONlX(NC$}hxy6I@{@}g$f@Nm{+DU}ulc`>yk#)MT zWNgDYrUb^A$x6Uyn(N=ccfSXR+^plT8CYuQ{*4=AY77SaU`)CVS0W*mVaU#-B{Jd~ zs@N7Orx)b|BCCr&p>qXaiB0M>7@IQ0v3=W@{DhoI?AE44ZnrsU1Z+^4d1D?hY3KCl zO`0IP>=BcM^b-!!OR{;7EicPqGnAcK^APcDHeS=MhtJLb7-s;5*g+6uR|7l7(W{(# z3C2FZBdEmaGs2xTZ`es1oUTKzFlkQD1}8aK27+-gClDh>g8J1)tnID>*XtnX@mf*B zuhk2yA|JP3ROx3<(E_|AZMwnt6|+B34pL!L-sRVy8t5yiu=k{z98O(4tlTa&+Jae3 z&wAT7-UkgX>77M=${^5akse~kYmW|_(y6K&j+5jczy18VKJWn@HCj#54xWA>8lle#eR_B;Va4@Efp1;`Zyp8^3)xBLVM=u)?i`?5+)N)zb6eD z_Ej|8fA)54d-UePq+ocon_ z5#0qGxSW6adK@u-K4NC5M;38UBs}mcRyB@~NCq)+|4_p>?3}wNdC(;Ns$mNMDP+^K z_N3PY;Kx*O$2Cg(e}1a7poTW@uFVP^=wxCRX0kx}Yw~<=c)x90+;V3CA?aQmb3tBd z#w;URsaAQfm)|VhI&HFUD)!nS;l32r$!0|ZRY3gQz2ba-*^8g%&5J!qHqe*bHK!br zZib+WaYo1`>VBLC$M*b>ss<`yNPSz#HjNCAq163f*EY2&9FL}4I*@Wq0lzJ%-1q%w zYyq)mumM0dV(-U?byK-Xr7jr*Oxq^mc-`D{8>(F%iss7)c-*z9F+Vhun2FxJkhJxY z@QpjTBmCWb(%->`$DM2U0f%}E7$b1mg$AVT^xwHb4Xr@}-BLhqxToUBuoXpkzWa|p znX+@R$B%QMEa2v_Qf#HQG~}}_5{NA@zC2|cP@PS2i&tVg8}~9V|Cj!}?*2UeyKoTx__U~IjrutJ zB8{6EKhjIb`VslQY~l&yRVP(c1FzVuc;GK;DlaBGL1~JP==O zlrOb`Cs}y_*>UOzp?4fn09?ZzhA>ljiYnJtJUXdJhJV*b%yLxm>xYijSg#OEXKU&s z#h7j0PeeewnmtK(OPv5+2Et*T>E0OlH%>;+pY&#=Ia`Bg52M;I-uq_>mh+t;U1zQGHx&T@3gw zg7#kpB0!byF&vaDqqnque7+%kVd=E=fuw{*WC?3@Wh_+rSq(djJ?xj`Pl(3qMTD$2 zmu~A5JjMp-AYEc^&@^6pTlGK6^gwdI^CNoIc0BfJyLwK7&scPk*=Iv+?dMGHJ|E`* zhpA2q8bm?3Jxdj3+CfrCt`ZnKVv(or05n>78cd5phxP$lY=YNFK4?GPM5+*4gD<$Q z&lP?^m}c1i1GY$SNbmjeK11qGsE6LN59uxXSQ*z3WtL#^&K9o8a7a{@Em)e@fdKlJ z;sD!;2;-jGxprI24!8;gZ>6d?B2JSO3`CE%(03ttz&?-;Yp!>)m<|5}PinJZjhoDI zgCJXfjMKezg6>u6P(6yMod3gc!b!H2T5jGCdB0pGfWE1g`usJv`&G?2V{pONWzBc3 zrq<8yL;$J1(k))IZ0VuX`~DwE_X}8LY1oV3{dA9QMj>#TGozBbL-YKjLWj!$+%hh{ zhNM_yN_SQ6W3qaa3iWNstPBq3e8qGCszYcYn9k2?#CoCZOdsWgF~G&Z_#gCWTXwvK zGqAT#(*gsXlYpWc>KWmP{PYocZ4dx6z%yQZl~FA$Wh2(S1Y`-e|4k?)6@gnF80K-# zC&BW|NN3o{ucO9!$BwOh;S)g`QwZdlCSFaB<13U6bpzu& zCdP=p%YOYbG`JWhqX!5BiH`rHQV7}GfHcjB$~Y*PUG&F%j7;6^I+Yy zqppmMrJ55}G+Ia{w2}+z?Pn*QJREf6Tbxt(GLR0U_Bc zpzXxI)P%`}55M>i>hI!fjgYYTCQ2v2d=G6l4m(vM5f0*r&o~Ycmr=y|conam^z&WhPuvmdf#Oo1z37G{IeZ@cmBt;<$6eVEqz~NEOxPSb; zC&@mc&af46sQm@-{q^WwyTMSgRi?sjD)!=ZH1>_t6n*YL&;O_U;aC0tbw3-M<7!Fz zUf(OYa?2jnJ2v6QzJjH_*u@gxaB;NW4UAJW9aFAjje+|X@|E0+-q%Y2B1X+vVi z&gC=7ONsGhzongr28=_5KcGYJ7Dj@NQ(kMB6UMH+JMQZsDkds~u+ph8NqOfP(-uTt zVDWPI(=W@Zb{ia~SjFWl9{M?559R-{#uwgp84ScAq{BEOu}o8iqXkCj9u+V&7<(N~ ziU6pG=3JD&_Bh`9vGx-XqHGJLcQa6iJLY@mHY&u}m<4ZbwPaBr+ThJfA*b~TLv!FdzQ>_C;NPFCkQo&7SA8I- zZO6>V73;$;zyuIt(0U(R3$O0aY`8(g%jaSiWMa2-(t1znvTIhO3a#NXM z^%ax~4`NWWCxJSU9BBWz+g_kqN|2{9eF6lkMlXw7Z8Jr?5GG(nuK^~aCTJ4G84Jm2 zNIIKjsa<14QJ1}X^px>m@+loZJoL0+(aAJ!sU%D%aFW+TwcBr=FB$F4GVKqPu+PFL zb!@&Ke}A%vOF(Fu(^q%&FX}S{LVbaizJ`MHO6$<_V)``D)rk9&x0RWL zif+V?*$m2a-9IS1mb&Jn9Mbsp1SLwFjD3Fb@P$^c)YkyT%7@FoN6$+3jGvQX3t`n4 zSEePD8QM>BJFdJmn*qFA>bN%f{3*0x4uf(JebELwL9tOur(6Hc%-SWe^V6_~)pJ#! zsWPydhm<|O>oW0$S0C4$4~EDW$_VkDrH`SLocGurC<3A$WCSUJH1YgI2sTeB6ZHX5 zM}PcIa+yeTkc8EMYLH2org$&uW`SUpE)aR=?oP@wv4VaDOyJ0%&tCm_ZWJSMGG@qz zkZAVQ&0cx^(QzBU8AGunR=v&fjib25^AG>JI#zu-1lTK*MI-EybVn9<*XCA zjTHWP2e2agWE&RA#9je}W>&WXD@(sT`jMNOD1D-dOuEjjq3o|GmIq%U&dy!oPiV@0 zMg$3<8w2jh4|)U?4L*9>n4tYPA+VbT#MwY$%*3NtSJq6Fz7i*6<`*_>tPP;3eIo7r z#pT$Po^X!wnw|mYPD7I(O)$zI9(YAwl4#CB=`szZvI7oGCkwt^ z<%4nvLIA0Y{v3>#19VR_Ga6yI6X*viK{BDXe#(z!`Jnj_j@H@r7(V%ehY@jl5Y4GbiCu$9|=cfnBu~J5RSF-Ky+R4rg0FM-xlcD zO8R5`#TK8U14Y#FDAGo>;wq+o2Xcn*4Q=+Q=AN)71>_U(ZL4O=o*K6RGU++Sn*hur zU6MmBeTSfqEK~vwRSnd#CIl^qVpn|y3YQ7sB6NQPVc#GH#u(&%hWxU08Idrr@Gqg% zX-&2w^PB*~lY{?BTOt*GE|-jQe}e z>#$M!wv-V@Y6`%c}nHP39L=2eO5mj_;Y|!j=YgMs*BHho0~Ic05_lM_~FZI zA~P~(7$B24#83i{rNQ2@$;5J?X{~NtUz1OL&%OOh#97o1H#swg%}FO2Aw{np{+H536R?TwBfLMNEcTI8$n3HsZW^-vlfn`b8hdFgKNttGr4 z=m;H4B`dyIOLWu|hK&2wPciY>QFLUn-+;5kl+ggDhqaV%n5i+b|HCm!9Pt=wM#MCt z0#?n_nS2cg2RdxU9!y`FvTvXwy=3s&jV(RNJ#pvaKJ_GHYYBlb*dErAD0Sf-q}K(U zjxL&ZnPicM);JIYP_;V=Uv$wi&^(O}$BFa*Oa#A67eqll%sG^@-UrWC;Yr0`MvA{+ zXfwsp$R5F2hQI6ez)8zPH_f+31S6%Cn#%%t){x$xeTlRVXAhhw*WoU(NoX;4pX&<6tn z#u1&;e5pe`0B0>Q!w*R=Ua~@!c*vqFKS>d-)Ja^v%>n^NoaB0i8rF_f>Yhp&?bx9K z>innH(c9S=cgJ_u*v}n;&pN=Hd~X3#xpmFwd5Emo0G@xjL2pXf!ZnIiyEVa{>NKTx%n#jG z#{Vb~c1IW@WBkcfd=5wztBH<+r6`?+Kr_ZC^UL{Qmx|@ia60RU%*m(mkne1K>Y;@R zpe0;x0;rem7i+y4zUVmQ#g*F}C5Yv!?E|Ee3!=OZ`k`|6C8;rtam+ml-N6CGtFj$i z7TU-1T2CHvbXii3T&|detvY_p{%Vm2_B z2>j6xlz-3e*K45UV#H2x{tyMZ-;^OrM?ci-_lgrc#GI`iV$CzJWv~`xl}6d>w^W_b z=%W$T0nV<_uvmfd-JG?#^cfmRi>~DM0h)i=oy){MtJx!EJbR6CUXp!^VjGfC{}%O; zA2eI?8(H#gv&s?p+2IASHSOVW^3L$Lr0tW4ltZdTuZg)|#k|H;?C zO4!eGq!VBIo$PvyOH+|$U>H3Ln^Z`2##50H@bJ&(@OJ+x&Sv_qcW;q-bON332STBY z1Cdl9mrD8ihUNu+QKtFm+9eGaDK}aPQwB$~0{JWgpQ%4FLK7fYJgNtS^abiG0ePSM zpl7)hQh|h6ygStWoGYS=R{lk+cYx%25(Q_-3>#;1hmnWiP`P!}n@=qKP8T4K%%-(g zqT7)|mzP7_DTO>)zxj7a)=LBqqhNp78)3iMnD|&@LVK6bB<%s4pdGzE#PE*Zu77K@ z|CAmorq5-LLJ~IK%fY<2j$}NaRg*CI!@?C~iMQvTF|KZBmGSP7#|`%ry5ptvb;b@q zutoSx@*iJPuh|sQ`6dC*ruyy;6;~LW{JId^B9L?eUK?aHsSALeDmo4j<5`Wm`}5wI zRSuRw;cjH>b^&9OW}A`#4*E$wgmjbN<(J=71)uSJa0>iAyZ|_}NNDw0I2hYs_+vYn zQ6eEjii~?e5;uNyouy0Ch(^adq1?XCK%)JbBcWuiZ%Na}yDPSSt3V z3EMWhozc1Tqt!ZWv+zBk6O83tI>xsS`NTX83^|3-j|mc3=&_iPTh z!fgGH!)l^B{H%wV;N+~9&K zGsBdXhX^y0!;-(3c5~jY&bZ=D#m4PuRG-g?i-ciD4+l2P7-Ari?Z}KLk-_-zYNBCl7riJ_cQqrb_@Y2%&@dOcDGf*Q9 znVIEC0%r2*7R*uKR$}0?c!p^sQ+#8Da!`?AzP}{a2g;kODWgpSzR5Gu?Q@;< zkoNct{DZvvWZ_8DrfRx=^)QHaTM!03*kL)OvN|ygKnhqV>1BWB8QrrH_@YCLfka^# zmRq)yeg6R>;Kct*t*v84Jp!9$6>HrMY3q6=3rW=Jgjuc=&)+G63g=Qu5bDix3ECY9 zGT`-Q?M{LrLn9eLHEVfi!FMv%xJRk`a~_kC1fhRnr4n!kyd!-uV?4rO9cuK5&yBn) z5+1;;+&{CU?UwXE{In*ykTng#;nMf3&>vK7k*XNG@C+oz0d z3XQDvMUtW*0kjSX#6fJAC_h@33)*Bg?d1w0=fKPFgONSPYeYKk7ZMLkOfZcFJ0Bi_ z=O5o*BA38j5LPaX_gSxqL6}bHbs)4d4jTC?1c@`KQ9--?g`=?y-TRBir={21AA=2h z!@2U>m|Z~$H{u|^eR9F)M$8}a#hX$>b~8ZufSHjG_OG}muoxcV$h9(fT&bO@;WS_#6k@KYU(YbZ zB=A#60%R4$Y4oG`X2}rH7MHCIQ6Y=Q%b;;uo?axAO!)LYox=DA^_Uw%qg1c2s`@L{ z5GO`2aLS|>3p0YpIFg%Mv0>n-8P9JbPzpP6t&u zt1s}Z2)jA&`yq01KI!aNLHi+_z(xj%(x~~ob>3pw(Fa>U-0lMiirX{E-pyY|+)(H^f z@>1?|-ncIaI0Exq9w58TRi0##$31?43$uJP_(kXUF&C~b66L>zclAbpao*?A=L^E} zo&l+H7HS9^eX2$le~uDf@Ftj{t3Z6nX@PT(p*1S#OM@Wl!r@r(I0+|S2zxVN&{k=k zxw4G~2%;TVqO)@b3v%E{SFjm1LYHqyjPdhB{2cfm71Q&e5I6HwSRRzq71n|0so223 zD9%h7ToNRbmUJP5));RzDhhdpkJE1liOegku~d{24|r`hp?`nK{5b^1+xLRDoq9OH zmdqpkF0aVkZameX6Ap?b00J;wi#V%- zQz`yv_wc#yG?!l-W4j(YzGQYE^meB*QXxmFqs(G9$X#*k@)0l2foXV^%?NrJJ6FkU zZHfyi3Ywq-+f>18$!H<4gcp*Q6;-GMae*j>D*cY3I|nay*?w}p8z1-XlPmM5Au!2O zo|o|lAp}H*@`z(#JEwH(wRKWUAu?FZqssbVt!|`tdlDSIG;4Ke71a?*tzV*mb!Pfu@21;ALg8#D zSa5sRycL=LFmM0jyp13;dfqd>(wVhnhQBE;1jvXI=sXF z$rR-Agm%0EBq7r9MrYV5#bB~0VR+8cXHbCB5(>V-4Ke!k&}Ar#E4$utP9JoS^;WZS z#Q2_>1n9DWU91CT?bN%{61WS(c3iHdI0um~PtwGjhsqlAi+&aZI?s~_5C|CO_OXee z{jlz86O97ZJhBB1up z1TuYwCeb4sz9PMoo+Y7ZWDV*ZGRj&_my1ViR-AlY?mFSgv=lX zUi%qk{sZch*DS`HC${7HWCl{ai;*j^nsA5h6=yh}XTuj6%&SX-cFghJ{({3M0_28_ z&uGBgck(&!o{^8+2aIthZ1k%s8g%-m*fm_uZV#&s032UeuFRhgL@%U%H zl2f$Zf;R>ICN})mtKzcU z&BU>cFzy5};wmLNGdzJ6H}mUUYrnl@lux*OcLKNV1epMVbxolD-((3?9Pi%YT@|RS(?BB9$jmmN~fYzMY&2J-rlvKRLqzYBpYdkicd zogFJ$z40m$3Ifm&_0y|pKd2L8+BD`y$E{!Kk~r@N_xG5uomKY5apRS&^amEk6432* z{2pc(f%C~c_l0C%9Y0^iI)Af=zKbMv2T4SAThSDaYy_2X%gfm>ph29-%60%e(ljh& zkj>MDQj2Wyf$#o!K0HJ=T%56z<8WqSM`I0%OiCmKQV%wWCU``=Mw-|c-~)G^BW@td zR{y{rWhX5=i^gqv`TGyOl1nfbXEHx-gk3_!YQZ?5f{iPfC0>EOQa{)qwZk5TL`7|<&)AnLIz!H&5X zn&puz+l$lh@sI`H02sY{Xoz_qFk#aK9Le7*6Mngd^dMJWKnm~9Xl~LAR=Ia!FKN{s z22}!Qs~~1VK>xqvq0RvV&iKG8mM0BuXP!n_M+)E0*=^AGL6~D~} zLN=MJ*+yyH2m9Gxt=9cTYBtO3R=kg{TmRtmKjR8VVdtAJ=R694sLm2EPcx!v{YBqA zk#9XkXA?FyxrpOth4$;ke~w*p)Y@l~OqwqzLcvuev=KAepHS)L)ed(kg9nOUsL=2sK z=IM1%*x}uqeu0z^Lf{vU6nrs4o=LrE5A$1un8kH-)LWZ@7e~nZ@AdZgYx~qyr+{fJ zX5#SY$9KzHn5($=#xDwZjR8nCeMS<;P~5;prakbB?Iel8NbQSmfUFn)_kS zW;pC608kM1iDBo;bAo3{6<WPd_h+jO+#bTsHEfl3c)Qe}h z>VG6s=xmO#A6MGHP8xMPF+x4$EOYhj{_#Ijvih=rcjM&1(*2L6Oc@jt@5 z>bS{kNYSAgByqLB2*h<-UIMa4p;ROXWwFS3c z!ynF)HDLy!_inzj#fPOBaSE<)^Z~`VXX6#d4Fc;>;A^iDr5=O&z`rrx9AF;k+5x~l*{u^L)s+Q3Fq{98H0&5CiRR7H!E2I2Tfn9`M z5QX=zZ{%CYsoD-6P9GL7tNyFkw7UxBDy+gm^Y4R+-t_ZJpY)_rRVf#03Ex$&&s25E z^N$Chy>o>;Yz%2=p)Ux9=UjPhjpnP>078qD`j*AS{hQ;+))@&mmVqmgAX5b7d>Rct zh4~!w|NeqWPYXndFoJ&7sers$qj^*8c&5M}Ab>{&F2|`egPgakm7NL*MrfQfkqDR^ zhL|=yIZEBdG)1g#j{nc%8xxr5Ty&G5JxKf{Ea=)y$HTO)Pqqc}3{#=oF2Se6G#V-4 zJ4@C(TE0fLZbhe-n!}o~F{rhh_J? zf~wMpYj-PPi>DJVx6n5KUvCKl2Z3ZDyFaJN9zC13*?T;TJA)!l% zh8yBbvZYHh_AHlNyShB~<&KOkp_)S>Bq2my2HBIbC8UllB}pn83QwE1QL{HQ&pgjL zzfbq~`~Abbs@b0BoX_WTKA-neFP$cOpb-3~T(0eUt9p5adSm9UJT@$<_;*Ox(`DjLwb~SR*!nkS?X8M(?Rg7GhgB zDy3xOxlim(GAj7j2E0GC$(b%qnX}NJ2F}>n++73Vt-sRNe?Wiw@7sl|yFc*(DDDj? z)A+^6Tgbu9>m~`m;z@^5{)Eoi;4PhJm8GIXE4R?SAdyC$`2je2=>sNVy@eHw8?`q|gp`88 z7rrJW&Kn3KObRg<{k> z(sj=bR44M>#EwAUbu9hgsJq%%{fBWgCko#;{&pJy)})i$-IkKaM?u%3Z7(? zZrVVrcbyM>0=hhI=v#;Q0DYV4_Lh>Gak5!9{OnKFUi+dII^qX=nvFkeQtQP%`qFGB*2mGM z_m7sxq(Yw(gHqB+OTHy`_MhIj=r3VP|44kGrQn7a3uc$X?&I&TT(arIgMLriH;`^J zYg+Y^U8g3ri4i6ro%7hGEOi6k1^V6tubS!DL3ZZW?3KZQ*SV0~6_ZcR!syF+|6exz zgnb+kE9H~vgX>)26;^R|PboLz$ws>!*=m#IuW=2j1SY_y|1Zu2%%1AFG9@zv{4Myv zct2$GVBvv$wVxcUwWr_>X2IcwT60J}zr*7YIx>@NsNS#p}iR6a`&NC(~pleZ|XuTkD*l`Q8pJ&Uy8 zi~pUzT=?AMnXG+p*g2xNfYma+$;N$5+R}kEQ+@aQCPvz?@lj`fUt2?If7%RF2y7^l zQWrg|uq1T3Xwb{K8?QS#IeZ84L96rJU}cwmds7Ne|`tuZKHCN(Q7{l1chuw8fK z?(W?Me>|lfC@YDEuig?bvs+&W%1S<2JtTI=ENXktOue-fB-)12xbtJrKY}`bW#J%C zK|;qs=4u-NFih#6^AeC=86IJkjNNr*+P7g+;jA}|2_`)%|Mmq=Osx)UfDhb!j*FA2 zl?#nc%;fZfdV|8$9CV*s?4BPvb1s>-%J=}9`k!#xeoh5VN9A)1Q=UgVODkN-zh_Uy zH!w>K?-eG=iC_z$Ht$XPj3!FEJ`9iZ4VHP2xv@EdTyvVf;3SLy=ryKJfZ|qH8uk6) zkxsp!Ggq$2dj{_X|Xt#avg#P3BVlfDcUpEUzkB+2>rX)@`-RgJ$5ryMgoLk0YK5uL51( zQobb5uMm7};Ndtt191QF>K~`ZaXC`;l|4dL@YXIjWxC|%CnndH1y^^Hy<*s%8kK3B z*%;D?=h8dLgcY`!r~&k4TJLX&WpgrD1y2=|;#gF71_%Hnx}mO|1|8T*#~F9bPhNUv zZFFn9@Za-~{G2&h{_w?#SyzqcsZlxN5f5tQ+vT!o8olvrZ@#T2s+om!2=1kR_D5Ya zpv3M62}%-o8U-Q>$M&usciG|NO_<*f;mXh}TNv@VEqIm8bowr+wiK+^DNL%_&bykv z^y~cOD2#k1Wx)Ws8mT`SU{X;4=1rM=)snvHeE`0A0m!@{16x}oZuQmG#uVAPeMK)? zQZb4G)K;-v{>!l!u24?;-B_laK2ScvI<4s;yN;%=b~2~lULp7of9tw^dn$4dY|4&b zzgYyIxH6UV-2IjFQlJ50`yaJWaI4b>_uq5%6M&zSE>!~d7TkI~ptpJNmZt3D-&*tjiSSm`-k_}SdBAw8q;SZ$8u9cnlJ%)ZIy8(__kW2! zGKl@#K`%)~42VRg%6u37jo0ZC+!95uyX{c3nAdL;!7aozg25BQ8{wnXT-p#dGUMv( zOWkC-&EFKXM2EhGk8hEhlNo(*_y-EI@5M`ogO+#NkKDpjQ5E zikiHd!BB%axZEk{G018{zb!}>A#&Yi#^+k@Y=OGluQbdy#EAPiE~^mru)@XStKbHB ztyPf#*yk;`y=-$u&i>4PFP%E(=&k1IWQXvnB3a~Cb5(Hb+|C~JE*;JvBm+iwEZpbz z3!0qY9V4Ej6LG)1TItQdr~VnNl$>`)3&Xu#b$d{t}uf5 zP4@u{Q93X-%s~mP=u2nG$@$b~_~|N`ix}bj9T?(c0{sVpphp-*%w4&__)n zrjk%AAdoF4Xw-vDG$}3uFh3tL!$LYOb^62?xrFJHF8j*r)Y4xbPdEI7z<1{dzY2G^ z+HZM$*;(ehSN{8BrjqV!=#mA}tKX}|<#pE`#uuA|y7sfx+fGaPvk9CZ+2iXwu8lmi z?l#N}ekj~W3qc33(|!d8WuH~6&tJz!b{~Xt&y?dfwbOHpGxf)fF@XZxdZ(cj5HMMr z9|#Erk4D}Tjd~&TY1x$DQwhu zw)?vKn|+E!yy+XxX;$26G35!P?Ai$|LH~RL9UaX^t+V-RS$VVg^kZ>W1o%<uF zBj|`pycpC7M9u}Gqu?bB!=V>OC>blAelw6>FKU!l&q3fk&og%-+B{$I`pzEYx+ofh z=pk^96Yl-PN2B*e*YW<1-`T00)pTSYw(C;w)$`*s5TF6|g=UOaQv8Lf<;o-fl(U9d z0hU*azuC*Hec5zRKB0YAI;fvEp=(!s>#tXNuNdcNf)|ZG;=HsU&AK=lLd2S`XPNAx zcevk79$dZVwY+m?=3u(_>gCFR&aXXY)B%+N;BF^tf3h?7xB~s0eA8r!tdibzht8_j z%%+ovhgTkBrtGc&8&}$CZMl~v2wT2-ZF^}3*Dv`AOXP)#AHsic@1H}lEd8~npFq}_ z`)t{*_ccy4oAi^jn8@!X)%pAF_C0)d(CdxTPZm%i;2u*zqG6X_LH)ZfJLO2_wO>v~ zPLw(3E7AoO8Taqd-q1koG{5~mL&BsQbnHJywfBO(bzaw6(s8`HSb8L1){!OMH5%mX zf3&7ISzgI%rGLuPPB(-4*(o z^x6=xzyZz6+L1Wnu4eU-r!6vYuGk8lr-xj=`E+r<+Gn_`2A`gP9)D01=ULtN>Lf4c z_PLV8&LuDlj}z)g6fVVmc9%V5O2>@5!j#f~_gp;nww&_Dv{)K*%P|9Jz<-zr zA7Msp@Bl9Ql->ONvM;>LzfXne|E!rTRl&cX(bVj#L4G@VXE;F->7qWaXF$4Bclu6t zOqcsafCJuSk)UnYW5)gqeeJBJ3;nc}0sH3M(MtGdSRFM=$e~A74%q`N(W8|ikvq~)hwyomK+O{fkoG^74OL2!z*RN* z*i4X(G%>vW?fjGfSZ2=cNhe)8QiX41w&qKI+kt$4PI6j3cI-5lV)gO2ldkLHs`}O` z9vags5}9CCwl<=a1>RNpkXw?n zURY93_&xE8eLDB#8neyKHVzu4#faQ^(!c~{SR-WiWQ)oa$qQq+-`#j5hH8N4u#dm| zvJpxJx(mIKnsd||)uKcu3V=Cv9`PsqTGy*Jw)`PTx4vaN4QA&S^@^C#FJljf_bz!l zuf~Zv=P=9=@zk>NuIRVwh{_h^!!G8vj#y!_Q*(8~Tk*#}T&vl#AFQ32}CRIfW)V4yraO}O* zvZlQ;`!~$QU70Gg!lccod|kVh_u^8YJoo!ZN;;QF&$qk8q&>6QI&;C5DEwo!IY&B- z4Vk?GH>D12o+R{^LIU}aT9wK~+V|bQ1M-d5)J05s>`c@j8T3v}FFf^|^|ko~{Oih^ zWCDw!$m`#bQ^qQWrdm^E+v*6{fR?{20+7&LeHD+X|9Tkz(tTN*%A{9iNwd{S3~%#Z4^5bShxg;6Ll11bV{|L&kWOY?Q-18# z>yS~R$KO349m1Ko_$}`r;MXoveA%2b#FF!2l`cm;R8IGzVBBCYR=+T*dYyErEuw&(P2)y^2d56w^l1;IkNuU1kbklij<0$>|tfww!CGDcO z-{{$lMg95Wlv;T<6VAHl++vUP+qjta-B#yeX-T8)zzySEq+fIS%^Ay&br`A}*SCAu zk9-YnX<1^(R?k5zzXC-TB#q3`ZZNnWd2)B#F~-tE*<6RUFQy#3y7Iu0*SBp)?HhVJ z*_fDOIed1MOdB^0Z$cV-QG1;ud`mjGU^sz z*!uaQAv^QOR9rL^u}>$+%#u65mINQWCLx2aXdGHieD;UIdp^#F694V4uUDEtht`|4 z{p`#Qfa6Fs6L2}~po{DR3#G9Gu;^dBuE~)OzjE$^of-O)%HYvFNFc_j?d(&Wg;mpO z?2COPL#{3$|LfdYbbGF4wk)}NN#URLl)UAf1hA+eU5Rl?xso}`T|kit*8_~sw!)}yJ|m@Air8k+01%CH zRXfKg7csMUcBVofi$xOXljxVa{oeT17a<9my*GZtT~wNs%9 zb$(GgsQ-h>`~?Qw0k~vnyWNKx;mp=c&c$72Yc%Ceu=+paq-8_tHFWdZ?>#jZMbzs) zd#tzs-BT>=AQsvfYQ_RZ0LD>B6)wA+|GXt>yDJpX-dfF>9O#_jEcQ<^ay08k|IsuO z!IivXh6&)$*S@&twL@k7=^^NS8dS3v>eC8Ny_EiGFRO&qMBcFbyZ(qj^_949x>fE( zSK#gy+2R^Fv7B372%Bhb-)UQ*R;SIL?3r%(MAyeSQ?3sndwbi=Yp+2A$^cuEFh8M7 zp6L3~UwWy%*tUAFeGP_x2~X&wxYA-d{arv$ZsEsg&;pXU0h< ze-x{2x|^rmw0U=(KRu|&BTK`rJZZ5MW=8R!O|>zMS+!ui#k!hkZoMBo!>?$O5OHoW zT;z-wQ#SjNB84_#O-4K$Gl3s~dPLQ!V;H)1$aUQGijDU799`1CeB+tF&xu&UaLg^8*J*-p@vnS~JL+@w&7hZaz}w(R)r;DPdsPLB`&aNj zhY8chO#BhKdhxtp@;M(J3o<5nk1qcsUE{p4h;d%F=l9XqYGga!t^6h2!cW&ebx9Zg z)4&)h6Ho6cj;-geq1TFAAN=h%1UmEwD~vs!iQ;}p{yR=c#E=heTy@!cWvbPq?SK=B ziVv47WFt0CwbN&pbv~2BD4tzXG?9L>eu4q4J4m-2wa{vlLqf~ppLu2XZimFOhTH83 zw~6;W>BM*c9NImrV;U0T01{bTgCc+4`44!7 z$>tFc!qKeNi#PgA457c(C{{`?hBJ1N?DQjlxepiQeADSMOT)coaV$vt++vvZojYZ! zFMM?B7It3{@wT8m07rKQ=Xpd7IJL)e_M^%Ry5Hp!gem#Zm4leFUSc0K`Pp=o)<5}G zi6)MmG-s2?K}V$bXO;dclHS&)-qj4=JYxIJ-LmBMZ4ME~^OyTM;wrz@V{E1Ll=$m| zv0o31+aNeNRr$SvDkF~HWS%svR+Rf+GdLTvjXI9s240JF095rk<8)4R6X!TDdMK^N zhwi2bt9N$57N~6H`K9d9+NYmCx*6Nt-}9N29FELU@kyBm73171 z@!3_;n`T0u7WvfN1B^v_S3xPkS%)1RK`vzh(1svN*;f>-{$lw*?=-j z6cM|oS5Se}LKEvTcq(c@kA8~QW?Ub$Q2Z-k-|(tjVOh+DAsx9*O@7b%ZK#1Zdny^e z*AiFeXZe_`?a3FyfTH)zEe>J7N+-11hmN)416!AgUbUd-I!)XU^1Z!qnPc3LZ#KfT zxn%1Y@6zAqfc00YTa}2;|8h22ayVNW(BY6Em>3EzN zwVX%R^CA`Q!Os&qh7pz9GeDJr&Qk@PpS=xkQ%gt+YVecgvFlY1)0NmISx3jr(~FlO z@)Z^4r8Bxgr{36ezWi~ng{yP2*lV!)}Ku0w9k1he|og!CODc^U##F}z% zy$*WxBZ|96T*p2|hWxg(!1eZj5y&x$Nt_mSo-vMmrcTYT~g6qyGO}o;F~k&Xp5hY zJFjs|CYWPWa-@TBeK2+zKLsovWgeDjG1vyj$-b?fAZri}5F%zTA)tt&jTS(clmuyb$o zR1tH@tUVq&ZLcT zJ|R~9C#ItS(D*^&`_zo~!vGbsQryr_aMoK=s0LgysQKR5A`HN7k9q5~4(-(J5e*4C zKj(HTxEI+z;4DGs)F^BfWyF@C^EuPu32s<(17Gw582+aoSH&6MCn8hO#Bx00TuTyF z2OqB&{axTM>^Idyibdb+Jz8Csz2X#?v{6aUb6>gJ(bE37vG#+)y^8iNaePYO46EA| zU7=KvD#oTBtju?;?R8shQ`Gr=j=IKigG%~%p`Dlp{HlrjQS)!?@6I%}RC<0fG^Vv3 zYHK`JUU)U<+!L5?Q+&VB5-7WXtCW?Xg87pAU)o(Hq19umrRSrLmeFB8KY+DxA)rf` zP0ztTzW7AFFsF7&=Pt`ae3NjZ*RJfXS1xRt^QEvtaX7X3EWWGMnI85Y#0mpjWp$kq zjx4`!yx%Z+K#}1_M2s-3#q!GsJ~Ee;?CYJkqNk!OjXe_B1`rq_hN~A^N)?YvT4A zwi&>M=Ja^nSS(h2vIM1)vDfnyQvf-BU<^K;uS)LslSqUxHblB zVqY-|GQ{k$$u;T)-siNxU(Y*_8_PsnI^W@mH+De_=$7pDWq7~&^==T&g~_TToiKTW zP7*uvXSb9B=|X(zEIvN^pv!(~YP0g_opqaO{OLEaF5RnULM?>3=s&(snmy>!wjqpx?%S)^osM_>a#WD zr?MjSozzg;+~I7(nKA#dWaq5q9VTWl@`1ngJOhr>NDYc3GMoBx@j$0;$JIAZRTWNi zaLHFs(;)tk_Tz(>YG@GosH9ezjB1s`dk()|23d6xdatnGjMAB@=Toa=gp@ar z(d3+~Aow`_N95XiWir`){5>=ba=>Nbf9nw0K6@2+_B_vCKadZu<8o%n7hdVK-FXE} zB0_bx@uA21c6y#;1GARkk8gaNlt*22S8F9B9)Jj<)zdT1px&RhU*F6&*pWq`ylG=) zYGT>$Q3vsuR_~dp`!pJ*i(+3FC|oyE-vdpGQIlI8Di6-`oGyj1@ST_NX*q=xHj&nsba6IOBYwR2=6DVg*T5g#H4qoSGWxar z?X!je`8!)U{J7a&xRjQE(;XO-)wEEwq1Ag%?mCihLcG)$#fDUz9YRk5Bsl1=S_Z5u zc5P`%{_~<;yHdO4@E=02rDB3_)_Jr>&pFSX7mh4XWq$@Ik>5rOLvGb!!!@BE@2SY( zl3prg$&T@-&psgzToRaj?-wc*cG&FG-~=X1Z$w+eS3F(;k?;~8#@9PMQ1ixeXfxRz zJJ>G^tvmO-fI4@7&mQ(5LHajpT^gWFU2QI(*%5OEXZRIBdt^sc!K0OpCxLC& z2PTNcVfui;^p`Ej^)0q|RPe;8Y8VpkXEUW`!5U|CAHJ>37H9r9Gi>{d(K+*T8!!AL zNXi`>sB}8rwY{N5&egrk$vKwBSOoh2|J$WW-RXUzWix+NN>t|Md^JAKW;Z{)@ZZDS z=7-;#ABsP)yt2;T00*+)PGZl0D`~gC4FPseLSW0|(D3^-;tRWFb1n?8PwX{&PB=95 zU;m!g?*3#KK2v!Ivvx(&6yuHX6w>KMW4g9<*_iFp&dw=~4q<|Nv_PNXEcv>%p_?zK zw|XRcn63!xM_)SWU>!Yww zNjEZF+Rx*o!hTB^x2|RF-;MnPeO%yr8pV993jWqbzAmc4_2-G(V*B-V%_=ksVqgM( zr|8&Bv3Z`dV{jEKP6Egv`(Z2i44uf9P+=;x^=P>`Xx&Pl!ZJQbAmjE2% z%45;XYOH}tOb1a}98=2cRAo;7SIxF{(V&gRqUBV~Sp#-ViS0PKG4 zylm7^-%YfzAL?>t%odsRXltaf{J*U^FLBGOveoZ4K8$Ox+0t(I6VEN>T4iB3 z#fTDRfm(LqAK&TF04S|?+HyQ}bC8l`B||g*Gk?B5Be1@4>w@5zHT#;XN~_hU_UGjL zp}<|!Wf!W|>tD+Pg*VUj-dpc};4k^b7y_DxCPqCrGSgdWW|Q+w(OT0W(BnM3!dlwG zttrpLa-*OK5TZ~LWsY|!JoV&=n7$o-$wAY7T3rAFB6M$yHz~oNi`nB@nH%u&&?X!8 z!(_2aS$)Eoe_h1QQcK#~YK;nahVE>kRT|m9_cHxXX_&Oj3tsA_9~H>fA=q^O)puF< zY#;tvWSZ^$s5Ie!;nwSO?eg(om^Ao&`@W%5uyt8)lSbvz=<<44BgnOyByX2=`Q{Zg zYd4w08KpJljT3e}Db25V63Ljhn)>eAmdZ@q%6=MLZt+qnadKpu^?mskaa5&??E9x05YADuxe6Ca5m7|5JubeU0aX8Olf~%Rjuuc@mi{~6fAds28nsL@ zw_Na47ODoh=v{3+dwN}NlElhw>N})Q)@xL4=m4DOWo{{);{Dg|CS&i5xk{$9RWNk{ zWs`)fRbWbaHjcQ3YVwb)>inrk=djrmYZGzjojts8*F3TZMjEi%_q4R&$|RIY>$~Kw z);kqM1weAAk{R21WguB?^-}!(f1A8t{0?W}eij&8|0ix=x)2Wx<3%60n*e}kyJtjv zq$oD1%D0NYbaJ&h0+i0Zp?hp*c+Yil-$E!41W+(FwYd+#A;E1zGC}WD{ zw5x1;r&E&;GnI~c0efU0iltLW14C1GtS{8@wRB0LI0u2U*JS@kHAh-pK+#NP^NHIE z#8bv3x-RxW$qM^a7ife!@7G@ zsV9E?NRVh9GxC{ik4#K`>Mlt4Hw7S{u>YEceD}2zP~f&kw7fof@7$ZmWfx%J2F*fW zu3CCk`j~>&ix;#Klc6N&*GA`k^dSuhQz@4qssyQB7e}389){f}b*ScYU=9z{=&$`a zdvMDB3Ub?FU8bH0zYltz5!I=VTasl9KGrI4$%c$}>Z6hL^MfQG{%vsTmCZ#`oodY< zvy@92oA$p-8u(`d_)s)hqh*ET{z0Su&;$PgMa}!^MDw^O@>nj3^Y(xFN( zZfyDc14@)@{b|W8ukm<{$KteLS)gf%M?j3s&EbWjA@gP2qi++m-M_$*B}9;P{VSC$ zK0n{3XpGSN{^k~2{+}JN&6npB1&|nNW%auHtx~Fg5eh|uDU}>ylCFdX%}>9E>SnIWbN1>}iT($9;t%pEmh`Z-)u33WI^cy5gxWH=Rw1tG^$kE;4WCW5rYUPG}!RsbD z&N$~xct;l8uE-t~$vK>K{9rE&T;^i-_8F)77M_~k_Vj&g+JRgYSxv+5K%Zz<$ztTS zkw_d@CHSs{Df(H}&nRrG$rB+DGVyh{7sFW+_RiI8(`#>wCPn50>fPn;nk$tc1Wv(= zBOF+Xws_P07`XsOpdemqjK@@2J0rt4$U{>+P@}dXfR2rT@7*!=TVewi(nIe zh1WV%#HgW5A9*KORD|=y2V(k)M2>gFN9!U?V}JMCIM}2t#G9VFS#nXIm-@ICU1Rr& zsr`xhg0QzQeIoz;^xM~b>5DeEiTB*kv7cAhlsi;-MCa9gad^aT6dyiIj~86wb05O; z>SoC6P^NKE&1eArnm*=j$IZfu+dfZ}PB0g`Nc~@5!cQ(Cl$5N_?Y%NN?wmpSWcChC zz<|6&c3<&pnE>FkOL;JdjQvy%eH@t`Zc+u(EKHzT-KWr$=QOVe{!uIuaaBt0jX3Wk ztHT2X$+NNv_l7-k4I5uPp&7#zB%4_mY%IE)lz-^iGiZQm!@Za3uvu`T)^mDRsd89T za)um#gs-s$FM|vrJH6-2)`xW1t-0}f4;P3Vy#275y|yB!ne=OBE1545Trtu~l!{wl zJp_mS^XIgqW3J4TbueiG5#vx$16mXo(65*?txvC6mobjxN{fQZ`O+2d+4-?dcqdrW zv&VrWt7q6FqqTB}!9%`f&hEaS#qF1a=oJ@$MGJGJ_k>D(b~IhyNQPC`i(r^j`p>k` z!5$@x<(q}d9zTt#d8-GyO%K`)0thvL{PskHQb@~>FKPmMc5Wd668O?T%Q{T5JxMH{ zjUxmUICPwF9Jh2Im(u|TKTnKfPX=3IOdIR>?LiTGTS<*5+UJ_rEl#|z1znG?cP6aC zj!ItLy6-w-r_*;+X@M1Y2|dEDTX<%vnKQ}~(ja6D$uOm|7;m>3+I3^cA75;vQJhx2 zJ#N*!qI1?BIg0$S6YE~@)pSZn@*pa>zzxYl{!=^CNZ7A$>P!wi4h)umQzWKG?+#; zWZ^Y}reksG!h9e7wKg1|keG+cJJz9H z>+J^*DFO(DsLU%VRy}XGUS2+XxsiSL+eo2;{{5)IgLoKf&@C~TNn7Og`Sg8(8Yn)V zvS{1)jxndDGF3`s zFAOeff3?4vy{#EQz(di%P2c>Lw_^`$2^n{BWMH^@C zO46or)9xn4UcS3=sC)2($7?JR;rGX%l3n~qEWr`QL0g}#8XEU4vm3QGDj)bfx!-%1 zDF2beqpSCy>(id?TpsqL;eV?g>3wzUFmcp|wv^$}mluU@?QszQGF z3+;6;n3e_~yF|x=y2Ias$%+Hoenh_ zc-s`_H;7zAK-r+A^9i7EJFI{6%y^ve1A5pA#G^8}uK=BJG+CukQe+)^tI2@T3~BsRHA z(EJxmV%B}Y$vcP*dZ75eRvuWE#JumrccfrG?OqyDnUsGuM%{eHLXETeyR!SLdQ<%_ z|t1JG!)cWs|U@pO&(4RznB?PD4I@H2nkhBpTbD_V+4@F5WmAa6|FW~|xKsc%&} zljd)iDtPrvwcmDmct86CJKeUx4HD2BAPz2}Zxsb=u8Yf+mSovWy4R2( zjH}K+MEE1@*$SyuR+&yE?c5h|dtRGq^e4S2=FI1*@k?m0@;}LEkXP^faAnDZ7`H&= zu4urGsnOGKpS2|5MLn`bMXrJh_?Z8DvLK|rk!^7~FgKTZMU(8!Da_f)-s!Z6B|XLrurqM6l?fAPAk@JfTzAgphR{EeODXQ z!fnPktxQiV6#NpTPZa+w%|~EcVkNQowwXv#u+A#u zV)zKWDos$3Jz#%oN);ArtNi$Blw(W|E*F!@W3=9o-yl>;xojV604-JXjwnaEy{25u zN&Y3-U)5SMU(cu%f{#p&gaGssmL)GQMdiXTKWhWpYQFJ92p0X#PeOGfeJswDS{Wk3 zW|n{T&yQHMCOf;V{+psQ_)$iJCCKNBR@gcKiX{jcXtwuF0bwlfQN`Y9H zpq$N|Hw}uzptGIC(D!=QEH{T_&^p%2XMSb`H(o(s;HEcRDStOgYwBYXZ10)di{$h{HUhv2WlC=P?W*nRdOF|)`NGUME36FN%hzp{QwMhTebdXf`>#`YwOxMNfI z>ph_t`)1tn9it2dib=J6FGnt6@kv?qV1cNF_*Rjx!_nj$_zG2mC(!ATxjRocqtUOak^%?Y!C=STD7KB054I6HlOc=T*Gt<4W?a$1en#>H2(pG z8n{$AZVpxjPt9d3gIhm($aYc7-pGeqVuN|LNblY1rJVO}MOfGt=W%n}giqvi@N1R? z<4QbN&W|L5(tJT91w-IcM&m66;m`0#zqD>{ygC@UOf;Kj4ed^{BrEwM}vtleN*kk)2<5S|1G{fRKX(xoQ9y7{9-zHb@W zRAd(VP^&E&JzXn$-e!?$R;bRZD5%EE=tD{TNpY2!i-6{PWiU5IWBnis&zB4R_BDkO z(zDRWvev?71rV>63_4pyU(cz(124dS+(SAhThzb2f)PX?F=z4w!eD&~V zSP$z-t=aH5U8uJuk&LL<#%VC>MXjmiuQEAnh{;Tq>#($zRRWmB6xp25nqR*xMu6QC zgWNN#Vk~R44a{pe_oH9Uu82_dREm#3RmIqZkpU!Fmpy77*&S+))ME5O6tm1MF|#qG zwc!bI)L4-p44tx2(+x0k`p|r*Dp5VKgtw{lTRa*|t#aY(K7E2Pc6@tcGVwdKYWT!M z=-(5~Y2@!mkapSTv6G1WJ@F5VUfZDHI_%HUG6z_c!yIs-y@=pIq6&yfn60rwp*RW_ z_&Z8Qz_qicm9ebBqYeL+Im#jd_on0zYSnny9vDS}r^$JOvsAd%>6zpmV_b3~)IC#- zYZX&-aRe1S;P#X&Uc<4EImr6KMNFW}$s#ikQ9;uvwJxbNbs#2(N<@cpPUB{eb}|?k zfB@O9NO{Ge;dP};fRZ^IQ-A*ZDPSU5V%cLO8`c!o<6)~J)nu~J=v8JSE}Sa6Rw1f9 zOM3}M?*aycKY}fdhl3_$eHdNui9(%$0L91altq5mhR@jfkim;Su%B$Ol`z6wME{MzR(-D7;c_ko>D> z#BYGakFx?A6_%8btXd}-YEBa$!q(-7cbQcl1$Z&9WZ$7{c={_ORKkT7@esB=Jf|DEz8>TI-dQ9IUW7iG)A&x{b6hIbRk%>fNXP9TwwG zPs&VJdUqz=D~qD$^tAo98YeBo%=^{h9P)Y8HZY*Tz55+c+eiC@)0@4@xfruT z>`OU6b2`32#$Cf?0Z}o05K3cej;*c26_`l4MwIADXp{1)c<{X5MeWEFrV_0hBog-S z(`AG3v`S&IbsXTr?=928z|YKD(l=n2t(MBSo|AIrRc8?otXv&4N>F)mDHHS01`sV+ z+47R|bn$7z^{G{`|59#8tpbF}z>YdgnuCPT2Bj~~k{cv^r;b0>D+i%MsHb$n^pnE2 zlO=XWSB(;94yRQR?<^_%zM_{%sKZ&^u?h2gsndCdSg(ANn@+p`W~Ds@V^3sCqnx?X z!|b_Y#A#ptJG@co8~6NLMK-PmE^nwjfDk;P%@aty21ynFUH&H$dI&+8YQfW>1P5M) z+4G+*77u}=6H<7|+sIeJ)Haou$f6loS>16j%@20Q z_QPs&k8PnAqT&0zKteZIshouG`OS)FfS)U%9U*hbvDKk2tx3tJ%~-Adt`OF2g!1mc z#TZb)z=55-f*AP*g+&oAqE>+;tyVsJcoPCmLNgu|=|f3K`3(I-I(P;^0;r74!t-h1P9NH04jPp{uEQgsjK`Vyk^%#%&VO7>CM2T4D zy~QGef#OGa60A`hY8+xwAXpR^U}cthy=I`~*LE(*--!DNvmfwrjKx zQJDmL=o4ur;~`MIPzwP#t3V;xI&Ki2@;@+a+lz4f1m{){QH}DCpO{=^JCC+H$fD&d z$I}$H^C!UpMJxI5Naq~>ki23lt>3Jab6$O%R5FQGYFQDx(Ws(2MlXh-(}ku8&Mm7^ zljPAi_N(-Oi9|v5P+`ijIB&LH=>LuJvWrQUF7S^!DglD*#!ZPY< zaH&%>dbIW#A7pS^#==ARTq_!3Ugn9$QlrO5CS>gfID4qXWoqEagT-RX%mUhrx(h~- zl6Hou->9&G0z?}Och<57;5{=J!dH!@W-ks_z#J$K;wjf)QNSn`3d24Vzh1^JkfeVq zENL1h8{7S`x}&_)lsiSn0SUg8*%3qEA;)9tRKZg%jB8FL#{T7IY;QKqs^m+}3dWpZ^DbDHha)UM!NO8zNr%UPw2r7# z$jx~pQWE5mv9<3kub1`0w4232e{Yc8{T#*xuU>^-4bO$xr!IB(%j%Dn`$o z8S#;UZD6u^QX8UD(7b--IA38AX<_F|JK51NSstxYTB2sUkZiWMKegg&SSo@Dj~!iL zLU|Mx_HtQ=x7BKsgn01E5rQ#IC_yivl}(+>~EReiKnO@7}k}L%9DFWNJU^Ne4kXtWgsKoW9|Q-b9rTKOBF^l7w0gNH(kxJY~H8R(x_#2N;>QDZP1Xk4lBDCN@Nw@2tZivq)nky{juA%J!eNFHO(qhLVbhu5Z>W-I z_birmqecf3PrZ-{LAd{K&@++v6x)^+rocUfU3r#Qig^hbq`B-hn^P^WG8HgU z&Azfc_Bh?ED{T>nU_(HRQ5Y2LNg5A|ghdKle?}N{?o9J<+VI~+N%Lf|CvxErqABN% z5>Q1djKsaE5%dd#Wj-qfaS^lc0j$95I62g`4_j+f&!}CtBU?_X&O{*42glYAVx45d zPm^puYyFqT*D+8!eXeEl;d0zT%jw>8b>g#x8(>i84}UL?CH_z*85EXL@S*9Drx3@& z1ITyRKAi_#F560-H@^#n2XrEo2MfU$xfz@+gD`+<6Mw3wAmO)ZhjANfwBb}HNTw2^ z^1F%m!DVJSM6%Ve=aBwqi973@3ygpN3r zq{u@^ff6Wz(L2D7*&|b92qs%06a73(8x$5_JwsimSkw?753Yh)m`#?6rST|BK~;sp zb?SXu!2wsZoQjqhzGGu#g@XQs!U$4j1mPGmgE!_vl#9bwH!_HaHJXRcQEmOKq=RxmFYX4cI$YdbC|!i` zZj=ZKF2g{E1&%5V>W@qSG^Q7A0fC-ErW~>~i2EP`(lM$owLV2s)A8 zI)=4$&?@6_vAW6mk3nLvouh5>vM48 z^Y>km3nI)u>1T1Ra&JY-W|Vw`SC%u;co<6F@FN6NV^Y&iGOfaRfh}{Rmr!_bBIhGW zA2_#PL4!w8Z(0Izl9PxT?!kbP7NEu*P{&teTAW_VT_=>^S^9bB+U`4;hZDX;{3ONA&g zv68lMQMHxGpx9>eqMi@LdsVPdC86*#V{m4p;w0o|af&4bc}+Agu|R1Q?9ol9zKy+b znZq?ipRhvA)wA@y`uG_5O07HD;*Vub@NQDnuVgf@W`qvZn``>sXI`Bj)|;SU1FVcC znEW4_zCAvQ>U>|Tkot{~R%#<4td?T52rH#<4zM6%{eIw4g*BEh^dw>!r9z$Q&dh zMZ{Et1c_m}sL>*hh%uEAj*&|YAq0qIfsjl>?rf6T>}_@~=bYcO`1$=qCS)%&=ki{j z=Xu}rm}Q))2tHs=J^-jSKoGuR4Cc@%J=FtnnrB-^h0|Gc-KG4dm1Y9wx=ngga_wYtitNxMqc6-WhW^O`s34PYuUFJPq*@~ z@zJOL@WA&(TxrF;ES*1KAwfvz(Nn)i`=*T|R(REikwWpYofx^NZS@lmJUr_kH zXkYK7R8rk@_4#M<-me#&roKV8Q~Tk-#C_pR&2CYyY7DitlBb(hof#3`{jD*nSCgDp zfeEfP_#@w6YWOIIFPB&9ezp-kv}jkW=OMwFp#(Je==3iJ1*12Yf1C2wH9lvlQ~90n z>cab{L;EDNXm(;b3}k!BsGS34DWs@H?r<8@BD&S6JGUervrb|yTmB(_kKUCM%jnfy zd8=Qm?q3}ewdkFJ76)l;`Z^5dR5mYb=G9#SBye-#RU2sMa+UEObU>VW(&IFF&bgk4MaT)E9#7t;Z*IxL3Ws*Ev&IJ%u z5^_pkpWXS&^92Ww_k?O?mN(wn+-=Cwy!rIw1NJC#(tQ_CQsz{{?x*vUfXOPZo-a;& zuKAoZ?Yc)<2JO;6Ip5Kr-I^c5CL!o7Gb$`b( zI4zrSIC|#E>y5%Ya<_lehI0vLSXKNhZ4k!cAj@NOuWs)(J-m62n~rQxnK3Nqk;P~l zv%t4YC9!=OwCeS+PpUb)c78y*W?zg-Vooor0yofiI2$+^FClp+!+Lz+o_1`v?m9sb-BF_Q75Ri@h+DGenpI(Ybi_>22>Luj(FUr9R5G9v<+C6N#l= z;D=qM=iKo{WTO-rfwSqfE4t_U3t@v-Y#zk@*1)+Rl4TqaR;XDi})VNNxO2O z(0stJgG}0@(cq9|CntCkw_PjsRJ{I0d^Sm)*6NF2@_j|GI+P8=(w8PiSe>3FKNr2( zYZ~8JGQNs?N$RW~f8|bn>^^W>^|} z%B&m&ETUzzcj@j3$41hE^GL17ou8OSgC^z22lK=ap8Hpp5YZer2ySB+@dU%Z& z;>KNh_aiQ4KK|VOlM*)}bi+@+wsRk6%Jyb0ZnH%ZTYK1d@^+!%h&Y=Fg*p@3g1RIk z{^y85=+TI$jkBpcCEXCEKzXtEr&z_$MeVD6q(m@JT$Ag?E#y1>L5a6LoHG{zuf#F|mx<*Cw9N;8C=&%O6*e5dbV{D#MeDo#?;l`TpmwOXWc zOC=R$Q!~Y>Y>{_Z5=XK{g{vS#DVluxW)G=uO2ianJ!Dm`@Zb92*9WE)<4q^1nBeI2 z(ckNndHLj>hkjO-0b=0*j^6#9uzT?AHw(LX@^|fIgs?L(WK+g{=#6>J3-O)gQ16*i z8JK6IQq1#DUTjVq(Cx7&SBA$-@AQgYtIZ|kM`EKFS?;QDc=2uHhV(`J-AbJIl>aqn zHFJA4+MeyWvOa!4Dh+veRd7@KR_YB0&6&?{bSxKt$zl!P)2J_MpG+gYzF~243D>7| zawVP~apHHrbT+f&MWv|Y7biNTq+e_kchQOYyhU2lyT>Js(5$tjwdpqNdrJ73S1g0O zd9zXzuO#7p!9@krR^E6t?1TqbXv%n(J1gTwez9TJop@!5wr##4e&*O|Y}l4_H157) zfm2VeYy*8%Eg#n}hDF@{T~7Yb#ThqW^4VN7^`eGzmv?r#j8qVuiGQ>R{*h{YB8TjF zlIH-aSuFiF>kFCBcv$Sy=Jgi-u{M>C&l&Z4K{h{wYRoy0#4|toF8?=_uIN~}UzQFrlXdJDHOJF@UDf8@I6&<3~|U=3Y5;7-K1r3Q}BxKCJD zecI)DI%k_WQ3$x`F}hpn(U4khgyo*gfpUa0eWzudOu;)$H9Jx%>E5heG#06%j#s&d z%=}U3)2+dby*eueN~^2n-!GbT@!olwol1H%pbv;y8=_UD!wdU%)MF-?AimyZ7k)~$ zkUxG63ly^xwRH_qsfK<(GU9AoEAKm43&0 z?Ggg!Xy%i#9Khwf_^{&&5LzD~98d$re2s+6aR5E(Rtswy-s7Y?A0Uqwxd)v4x%G-t zEwfxck{%V?C&M+~E}D?MIsXJrAr8&gEa)1=$gNY|m z8^o6qN{Fy8N}T^yTP`bI0uGvC1~L$cRZ9=-J@jv36_5hjmFm0_@#nKamotol@NdD} zBb8(@)rleN;<>9zgymN1iJj_90`dq;{B&~IpOA^9b5J`CD1s7NSB6XEla!$$sC8B93WgjT%6aity7=mNWGCAs)?)yw*i_!2W7Zd2}mBnd2g!8@U%o&>T zrZy<8;3dvN1JC>xwTl2ng;Rt&JMsG>u|FG6nd?ln{5e*j8rJucOs2Bspl0$dKYf7A z#Qi;wA>tEw;M6Vv)+gyZeJYT4=?rZ>B}1x?RKN=KsUWpzd+J5^yQ_D}v$m0oepY^( zGQSr!4Skvs5aVNNVV}C#_Ludcc^Mu7z8goe&plxDBjudR6RTj!k0FFQqZ0_>*3~b^ za#!V0dmff&z`x>S?aJ;{dUPxslzzKKh7Y95y75o2F@SK>#F%CpprHW4G2P8had6N( zc?wNrwe+AJIHdzcu#jLoH5WpK@ezuuMI(R)F$|v&)=C3z5hVhEN$Yzwq(v7ni+l&b z{F1y|i;9n^G6_HiAm}08(wTKmoq8Hb;hMXE+)d?k{&hc?=A_X0j<0}!B-_A?$KH;O zx8n{yKZ0{#>f{d5NqL*r7TF~iVp9(O&-gDwVhF%PC|gWdUU$I0KIJOqTX$mvw7zTb zHwqPG`BwU?FVv-CaaidGzrq00dsyyq>^-&%3*$LuBY>?W$r|WW%a@u2O>UqWI7h!B z1?kUx-&rNPcgfKJhKPK7(4ea#eU`<;CBV^=~tfe}50QxSkU*N(B-JgxN1+{X@qWZ|+jH z?QBRxSN>557JQdCkR0j&^AOGM^^(Jd;!4_`paqky7GI>p-K&;OSXbu*JNxir4wmT^ z#R+R|*fQI&Y@>w)-GD#9{^r*#M&x%NiHJM+E6T=o*wvXN;(5hrVCmZ~r2o$W$lriR zxR+Zac%@5X>B0d94)h9hKIq_Jpmz)P;pN7KzQq)IWCG%be6WpR z&TJ47hdn`zBlL-WJ_dwog=iUTH-Pz89fR+K9~`2 z#`0a<@FdFtlGX#0bPmV*YHhlcu4MB7rUgtNYrw;SXj#jnJX$fdDP8MkT8A&FZ}wwug_&^u)p)gnsg^|aZe8K!b!MTA(qjpUh?uvQb1t- z2Tb?gFGZ(16{fpQ?oiDZ(I5*@jr>s0m+Uz4AHTy@`t}S@J89Y<$N@_g-1g z!FOwo2Jg}k5|7}f+%c3@@$^=25j*jje)}vO^8bavH%~jTVVv!f!zQZ z;~D6V*e)I*Y_c`(>pu8DXXgLE*!9gi(vuMf5JGZL87;?s&Ts)7z!i|mA4C)|M>r zYYu4#%jp!i%3^j9Fy>M8R3gkF==(g95}} zOC5hjf?4dU>2TRDv|MwECi;mT_)Y{ezR1do0vtzYtb2ogEjR@0IBpYpeP!I&FN^f* ze-Wl}x$~vgS0OKXzFltR?nkFCu&BQ6WPwsa1%1;T)^Nms?2Ns;CO4oe0Sd_3p z&EVtWtO_gGou|7F*gHwMv2Fg_2%>!_J{LM^Eych<9x>LL7Wu+MWVk71GJfJtyo9?1@xY<>= z5H{2MFsX-!9NU#Z(D#RP8fCGKN7bNAn)I6qvz-NI-Z5F+CC*%u>D$5@&5}=V;akZT zKJ592fb!23(-G_ao(B?MqTaJ;UY%GZtjRR0^0SGDdHHtov1S=czgMIeM${?~TO!3k zN;f)wc$pcjiG&yD&~6v_k6+SiDZEFX^ey<<#g?DkPf(HONO4tMtWlgI?YCy9{{s09 znVF!?pWQ+3Nkwk}+PnUMaj{4SxhJ+tC-v>4kK&m>y$qxKJ|p)`dmHNl0b%-%(Sx|{ z_xZ5;7s1h0MpS{&tSp|O2IKjXxu>WS(c_E1A?ZG6&C|Mn)jx$L;rVIzgTmS+nRl8P zrH+UyiK42`cGdJEdJO{kJ(-t6>OIo?l$U3Ze6Qy6%RQ1gvuKwbZa_S+!By~$ITQEr zh*m z%S{+xbbQ%$%ENMjVUoP=*WN1RTcljX_phzI75qsA5)HF(Qkob^`U~}$pea$~1YO-@ zl|HdmAaFtena$7Q)S8%T(o0^+tl{JHme6kb;|@E8pCx^*Ae+T3fdJ~P{HktP>7-@e z^Jb!=^o1T%HB)!EM$!8E0Q zU8`4B>QCE)XFxyp%l=wed9U?Hf!J)pE^y#!q<(WE1lTCv6_yXvksHZLlfWe3wcTIqi02a&CPL(|Cv}HgV zUr!bwv#N2ELsHc5Km#NP27war=dq@ph1^=I|C+Y@c!3HyZECy&7 zl_1PzW#VMPDoML1o(fR{(v}7f0?l^lt)PNSY;)(UN>b;E7lXR4$-d|wk_0GlbI$YM zA{Ezsyo+{|-HYSv_(vjIEh7zn^}=5-zC!^=jyss!YNsiO64z5ibRF0s{RBl<{cbzeY@Iq0iut9Qew78FivHt=x?HkNuQFpJrtL2c^>%ra~!2-tFnP8GJW@Z2&)L~TVXF#od;iqE<_LZe zb8uSc8>_T!+$xG@zTKjKnE8Luw>`~{;NUp)TWxo zCGQOb61>Y|YuuN7ol-CEKM12;lqZgQA}MTZlJpGHZ>%M-^Hu#a4SSqI%;$$Jkjjt3 zEt{FEQpoxwk?m}y(?oPOf*lk9L2`v%e~?E#Ehz0RfE#nFu$!$`6g$8SfYfxM*{y2C zfJ7{ycDa#_ZwUE6?DJBTJ&CBOm0#JRwX}$Ayculnu88~T$N6V+IQumH&r4<*l7}3z z^8QB<2Zr6~3pi>M0coEbaX(`CFuK1UxbjD~1f=l-n$z#XefDD-E_q2C7m=~fJ~-zx zjn&$;2eAm-DsZ2vx(}j;0v`42bSG6dYN@2U$2Ji14MGfn)`l-lZM@20xljZj)0@EyDCbLgbrOe)~ z#UW}FV{E^~$BG`>O?Qx`Eh0nd5ZD3Ei0!L1sl-mQ!Mw3a~VbkF5|`jC#;uv-Lk2Vb0XY_zED+a<6)lFZCg zHw(n=T3G(RAaQ}DF0nc!aPk$-pF=?_!}O7Q?e-$d_f=_VOtlE%L`R_&`H=75P1py% z`LtGqaupb_>vN3grG`I{ZGHV5R<2Oq>9xU4QEM+wGb;mp91an`-2X zcX2J@me=&4`}acfEg#l^Wme9A&62m_({kA?D|H5V4!@;F+$-kOCN+BQTPN`%tDIk9 zZkV}SMxV!mXeR!K(;U-!y+NEGCkL|qv~8lZpEl9oKl3@+m`9G$ppW=i(b{jp^j>)#6og?$2I>4 z2C~m%=duF0(O|O_zY1|gyWdK?oXp%Ht+Le&F7uoZ$@xLR3bcD|Kt}^vTIw8OphxGgym|5|4NOMMDgC5|W+PuH z>p1$ijmO4rszxxOS|^gk>f5dGeLtM;(p&e7l4Z^GzXdh4@2nl@%&5vmVsRg_A#=)QPh7BlNHA-YWapDSPzQV9 z)RQE$q!lWSKVXGq;&B@p1`xq6FEBkTh2JXe4*BVd;0C2Jo9xl%!BLLak}RkE*|koTxSUejw+o-RkFaFghtmhV&hv=oV$_T#*bR)a6V!V^!S8KEZ)Chi3kwf`3Mwjz;{gk=_#VPs@yH zgYB+huCk27qWs$>(g4Olf`bTBA7c)Z4jp^9!^n>#7i~aOyNdXn`BSq*`KxjF+c9sv z9+yfA$529uTtW8qIK_u6G+zFoxnZ&95er4JV(4KneE{*oB**_ck3s^Lcyrybo8gW71cSt+Jq5*us5l=U_W~GQq?S+5j@aNZwu;-7!>&~pBXm1?gOSw#k zq+hNwTuB-`Uno|~jVzjzrL=QvIdO&%i=R;Tq!*?J^sJdw0(>6%mf>FUSuv@a_<61TTMHOqMl3(UhgIG=T?bZZX3 zF9elQ#gI&kc+?e^E6-my;h)N$byn(qKROGu;ruFC`N3WK>-z`PC~}%hPw<6gHD9|| zzHJ*kwcV_|Nnah~L{WKz4NW?z+AuK`B-PlKXqP7=m^ORN2X z9FRHv2lOW4uJ1mUDkR=3SwuIORvJ)K=|cn2rnT)b@_kE%_O!C zR$+^{ZnQm1*^}WE|8Uk7%4Iv8)Mxt#JRE-{n_0lh5EIBAI&UF>q+?6SMGsGN7K$ya zP%Ae3N6i<{Wn*&909xrmRe4*&{tVwzFZKDSpQd+|pg~yu%~f1@``U zww9Vce9@IZD?(j>5|#%1RteV3#f%@&I8$@7q3c@4cF(Z9kf0-Tbt`l4HmCK^czhg7 z!#g1d8?)fru>b1g63n~)li#2Ajsozn0Y*H9Z)ket9bTh34R-kx2jSTUcZrS+kvw@5 ziS^bf8z{O-G)F2$Td&ud%-=#6i>*6;@oWk~(BQXhWh!`$lbS3r$1GWAI4iZ%_pYH7 zX&ueIlo4D6m{QroDLfCF#ZO=P|EK%1FrZ?{*`u7hFiP^_8A)0kL7@Xpp|JIs+bH| zEs!ei8Qv`gbDZ6@sZP3@)Sd;xwfhW3sX~X}s*Jlw9|AbWz965zru*;~CgA||+}$tx*fwl=+tV-0e4DU6Lz=S?$6F%8?;>b&flkx1vvqYy zf{mhZLzm2fhLEKD}xiu{^ll^R(JktFbZh!3t5X0dN7Fkawe)NW0*7 z#cP)T+>i{p+#1;?r>R0aXtcsvqzu%MO?|o_x=+7s7xrM?z~_p8vE-0}T8c!H-Z~^K zsO(hc2TXoEp^BI<@m#UU^2^IVJSmGi6T53G2@HAu3}HC=I${j9K#6R%C<6%xQPx)p zX`@m`SV_e1cFIK-3(!0HII_Et44AG7gt=>|?OERA=fx3K&R=CzScm_5(VzdaQGw%` zXtQer51CxJU!w24XK)mhI@!+tN@MeB)QxrWI~|2c zT>8~9E$`k~%-?D@0z=@x74_QGuDOwy_mG=cn#1r?II^rH&DujgW0Ry6(3S6~&Ldll z)>;pny+W^w?-94^RY(@d-n|jpii+<@Zc?K3;zIdB_7t=d4WZ_#tP_8`6!mV(vqAe(x9@jP_9QJg71Ou+?M^6|F=<#RG3NF z2~U8j=~W3f!ent{b-xTSW`}Hhku~L70T(ZKiMvjRfFCVYN|3tqFn=6efbwcjg;}Ev zkPVkXw!&@sR^`>mgk2O2<@Y^oJ4)0q+>rv??mRSpi`Zs9ZKC|42sC7$Z z92VQJ<{wAwGGn%I)S1P|mZi`+4-)GQm_|@k)%2(@)?Y?S$dDfe4?nB!cPmZKA4N!I zOW3ebi)Qy%n3KgB*>-ipVi!6~c{%Kvo&4>@<{u8z{c>!VX=$x2khODyL&SozK}1VG0jXZ z(Rq{BO|kjY^-969Cd73K0x=RMR)y&z13hHDJxH)0zNCi_7+7cUE^J9i?$u?SyHbq1 z?VyJn&G%_6On-IxDHARX!z5rxA3zs~_6k$_ynGAcyGe-%_<0E+8ezoKNwcU^j17_i z5`v7{Uun1&fkWkLU{d$&gv4#cGsN z9|E?$@Je>9)?<$q)9E>RqQ;hKO1PP$*I0J1Tu2#SS`lB~ibZ5@4R zz@@#M-@Md3r<=3IH%RWn0q0CSd9f%W&03$|oE%q4zyG@%PRl)T7~f52%fE@Z?|y)k zt|KG(b+V`-r9DpSc4sXeC=}BP(!qrK;B-Y|mvqQIv`AMr(gb$pd9lZDw(y1K$PeKU zfGAI|9`#|g78PyI#?ZJsaXx}+$1@koH;)`Grn|!4UO;BII?H2GRg3gX_R>P7w8Db%&g0p1 zKsN)s2c)e1YhK~bjF}$!rsnj6759hG@HRpPkxKN68PCNGKv|@=ZkC_RscKe;7^kJDue&ZdAomzu^iMzAhM_;BO(ADMezg?S6OxsIO@7Mf z4dsZ#YFNJ{1G7P&2h+vp1Er1cYru9_N;8~oE1uTa@@}X2(F4BI9{>ki{M>o1fe)J- z;MU?3SlE`40aA{fIJbnB3V#n>gxDyzPyK)eT+{Qy&5O>WRM#5Z14is%*z_RDZz-e7 zDK(suGlK-=eQY@&X8R)*x!`9}3FKC;UGW7j!8L6|LDPah`MYq)Z>Ecps2;w08}8hL z&vz>FjDYj7l^S%8;Fzo3WQQSR3|_NRzvKm^lw{-GB(8=tS!pQsXmB>0j$%9b)z(!w zJZ%J6fgb%deOCK6UeEsra?PylRHNQ3F#_a&PenW3K3cIV>`|ZpjZM{_CzX=vf9<&T zzzgv*XFB=dYp}h?&~HT>%(iiu-?D*mQ_&J;GT)Hi?J<_H>Aq0H)?RrlX;s6U#C1NOF$tN=tku+SJ;Y_Cw zK6OHXYqE5E`S=&>q>hX@*P|8URq>tr%12}oe*y(C(TBh%@xxlcWe)Iaxktp;A#3Y4 ztR+e%>Ghi`|4SH!xy|fQ;vNdyRg6VEO;JUEg*_X)8*w!P7Z+QuXgGVA|GGhxXoCn7 z`JJ|3Ac&s}3-};mm$X4&d^w+#@6LzWiHS}%+>8SF)ZEX=u~6FAN2O@sZ8LN4Byn5~ z-zJ7F6n~^l3I}E&D5TCS^u$_!NRBU8o)ixf8<9SIJ#w2cL?AJ7Q4RO>$x?I%0PL4v z59LnTmgs?VS`GUHvIIWwRW@nn{@G;oasE+{q1facPKY@zi?_hnmr;HOE8(jZd>dsH zh4A~u8*S?iz7dPyM;dGe{0MS;g|4CCG@H-4b;u*8OVuc9rAKu;)5l^0;Zzfkc6o&E zOqX_H*`5&RJO+LNX^z<2r*Z5Z{xD=^6(R-e@}a!dNubuJCy9@oVR}%)EZ39MUpt4C z03@%b6nF3axxnVl6Z4!Fbx4yu#0D&iF;AE|r*Rv5oic(tt1HFZPBc}r7vt}PezOY6 zB3`se?38*8$Atwq=sP5DcL;A54VXEjA$gOV#&yLOUH)^Y=`FJ3rp%3bx&!ls7lq^= z`8554#^+&A4h6mzYn*5e8A|w*fEvaw-1Ia$F8k#k324+?Ze^F&z5sFBDf&Yq@YYf( za^0K+KIjR$$q?!#KTD*;sj@SL9ul#@s^`TRF;dj1IB6FmnUTU!_kouB*}})IMnvAR zBZ*Vd5bEw=0TWj+Cjbj_=$+;`rQgqNV6=t~!O4E{?&TMhIQ!`t`db9sTbz;9RP9H_ zN_H`ojigc4PC|K}*Z?6QV7b9#9KgXy=-=%gU<7Bic5i$+(tuocF?%QFX$ckFs3)Aq z=pj8G;2z`^@r&;5hz-bN+{%5zc?Kt?BC4I4c;Gg#v%DgzlF$)(mIf1w7l|WCRL3FM z4s4*dH(si=0Ayc!&`BceG}F)K!OC~lX@eE^Fghrs9t!M2Z=D9!5Pny~DufM~)JUBM z76AWKN3KugVn-Lqd=x$8#*I$p30WNN>fS!KUGpszs9%uE=|K*s97 z=fwjG*ykd$k)i>tHO|HN)BA7WjTZK^ zdOo+&uF^P;$3%791f@WqNA9&0V_V9 zsr2|+@<1LeLJ#H!nhdZ-ZY0YEK5{WbiH;Js-pehX?c7ISXB)nH`-wWa!nwwYW=!2A z-S~)7hSw6ft689ey1W*eHc1IzT*KG;;*e*KqJwd*o8x)f(q8RVv!TnnSaVWCHaFW! zwe0n>f#Sp@F`TYBin$(qPwf2g&ZvPa`Ezn*F-)cS%j>m^<9MBKADLM;{xqqH2G6K= zhlS|il7C#Sd~MfmOiOoy=-ss{nykQCw~z2-|sB z1JIt8RHXG8`$$((opzgz<{2cF6s^sV4tlpb`+-X?IDkng>r?I7*exGweU6`%08aXV zTVs_nNFxjROf#V8M+=>YyVT0C4u93Oo5Z{eF&#(}Ar4$X$}aiyE!WRCY5h@RWv0_X z7cd~lTHrh!kPUH>zVYA!SSNL+vy2RpSo0!mb}Zezld`U~Xl>GAw27%Wfc4od{;k1R zpU}(0t~}=E%f)ki&UWV_M(#c1hRgr)JD$8M_SQmP>ZHc|4YQPV`&m!FyiYSz zoaJJYy}-^CPf;+?zWeo)tH_UPW(WQ5T@uut*|_nym5fYhLZ2$3-P?pG#5EDWuZCQc z!v8`CrSHf!hLgD1Odh8!R7bZ*H!+IQbhx_CLzUo zmqaDDM(g!sl_fQX5H2f?vL_<_Z!=_JhC3v0suhM|p&LaY>*z!x_?+6nM z|8Ll)_yA-ieFSQ<^;)|>voY~=$X|(^`xOWWN^zs_T~^79OS{+6I^7AdSur(@*16+R zo|d0-2Pu|y5qk0yq(KoWa|=zJW*(GR!xwIKv6Y`G>wbwMAVWH@Kf$KJIUTYqpf5+xiXMMTg3}IoYxaY#R!6aANIRgsq{; z8CBM^K^asqsglm{sMnd|#vs+^nxpU%YtjW-B~?S}9g}Nko6#%~n0K(i54k3~*5wV! z|G?G^C#p8Xd-%`me67}1rc_DC?ZG^ZLWpj?{NOgOZFtN@1m^hVUaf1`Z7 zY8?;B`awX{CrDKqykccMdIHeUp}Iucai0bp)@kF z+-dHtl+k2hPz3;eN;P~q3hRhhs2YTf@YXGujgRV8<6ZphUuC%CC_3-ESZGE^;;@(Gb8ku5q=C5mxR!D{ak-p( z5aF!|=82d3eAs69U6#Mhu&czctUyJRe$c8C{gG@l`f5b&H+XWNdKC*y7SX(8Xclxv zXC?fP%O4diE>!$t zfbfaL6wFa!p`iHES)BmCe5^Z3ag+M;2~pP^s8{giHCmljZP9rX$VsB?Nal{FEeRvaQX=SHNDA!#yd z7@|l+@rg-nHo;+){^HFd+UJQ@@_7(nyr(N8KL3hMOXx7hCc3sIIay$Z#1c~FYNVGm zIA#ae+Wmazg+|?}3SM#R^AeeT&nK}9t#qBS1{8B8ptqOV{yE)>1lEH@3W)FbW;oo&hD5k5? z9@*|3B}WqM9iXQ)y0;)CJ1dhe|AYl7L9r9JWt~F71LBs5{1YSqmx$nV6sFVs3;+dz zZQQN>Y2|lu0G4{i8G2F^IECnE`1=(G64h2nXdWVBl~t!y<@4m1BO73;qkenV^*~(a z(OxgpV65hVkCmW@(_tv0CC6mchlvh+nr)E}3ihJmyiWm32bNeZVrU*{yWm)6Nqf*YM$2UBq(g?*L#Z|tWE5kCMIWX1 z?iAAHf&9oKpDGosiXsuk*|pNcG;_NF*DbOe^=+r}C^Q-9(YJjW@T6xcKjB$V|CH?@ ze{hMMV|gjqRBc{XPng6iel+kK8j2-HDl;_u@05Fn0^<4*B+9y#<5=Q4F)?sAZBd1v zH~l`QbsNmB_yNX>8l>`Zn}@V0;tF!XQ$U}qiW_W1mW4wpdz7)}V7+cPqyGh>mY-j) zeMBTF zWs}USx_WnID-62O5&X1fMEn=*sJIE(4$RKg*!y-q2Im`;ah*Yo0p12;>;=^DO6T!1 zh?_JkUwr>B-7nlxG?^2Y?^nfotBLM;vq+w~?A5p=o`srD+AOZy@FHF{JL-P)4JHdx zw3!|iL7RU<>$xg`Ff5xth=*#@Z@L4?33@0cenX1q!s0sW-g3$-iWI}wU}_^fX94Xg_kDXv7CJh;L1SCUn9`-c91B2xz0Zjj zGX*!7nCYkZockhqc>iQE@%IcD;%hc2pi@$1A@3zDzb`BcZQiY3g6zhy zi=~xjpqQ@S0kuu5Zs@Df9?Zq2fOTLtD|1zuQTdX5WFP4P`EQ|zdDO7+1gG?W*mf^0 zF)7vlervqM;k30-{D^%7zKS8nX3qkK6fr;sdzme6iL}&MI5bL_o?w-nP+K~Nkdy)q zCG5528b9u?4Y^*!xzU6kOm08VHq%m@s?2)aI7}a3L~CiAU*DNLW|I0={M% zQ&w34@iq$#72W42-}k=mmT+eC;HB1Qf>CR>{D_=?|e(0vWf-7g7YtLt|tyo6RB6c8MBdu zx;yC`XnX$0Zup7%lzTit7eV zToe>`xnFE>g#zMzr}$)73Krpfp1g})FG1U5i32EPB`wK1$3}~r>&pAhx<+B&^^S~awb{Lb35zb}HKpczWvs5Y4 zaO?(l4JuJ-vyAPuJErc@(DXMd_GO+vq|VH3*N8A2%+KC~1-BlC+5 zDA%IR6brf~rs4r8cFi0F7YIkE+9{+$#PP-7bX7_{FPN3A7}Na?sj^%6ZaA=gggr)^ z32OSELDJggwROVi5eyC=6k&Mm^OV1#4HOGYY(<%%XyJZYBzE6q+MF02^zQY=)5VAT zw76HG5XLvUBT*{z>9a^5c`hh6{g^DRun>|VatP+3;;pHXhAQ|7glrF@V&>TnZ6*}! zY49rB#<4*<Xu5>xWQ=MXK*gbl;JEHt&Mr@^6rx+7d zW5{E5W_)_XTPMSv*ot4TlkOB1#3<6*8ZaPlILJ+Wd^jofgMJSN`fb9VO>rpys7+;8 z36=KW{UrDI2$U|o{n9-VQ}PL&+7&2y8&Y3+2?5y?vC6_JN`I;aI{=q?_z_gscc+58 zQ+n3L6UA-fokVHT!T5;rwX!t)R<}}+ma+&{$@g@XuQJCvF9AYbfuEmYoYB_zl^M56 zPvuGb0p9Ph10$+>xWx+SJ5#d$Zy~&U@O^(MgRNCj0sBT?e44V6MpIkOwH{31R`K4o zO_*g5VyN}4y!9`y1wSVjsqPetX+ z+ye`S>ywoNsa8R<^Zhfy)=L@jfLV#1@051a2KVO}Nb1}aI;5GIpgA_%0hd)O{wv1|03w(F59v{G2{QU- z81%LD@S)r7wPd@oAe=0=Yi-`?|6=TB91Z$vuVv371;0d`iJpqs%g>?lXS*vl_Qqz~ zO@k?7#KEsgIt`-Vmg3=ao<&MMf?sjjoR!lPvw0m zjzxEceRxHO9Pde_r_wVD7XDh4qJC(Fg=L?nKiKF*u$DkXufj$B{-<|d|I<5nS6zOm z{{y^}mRi8wyyCaWS)#_rWS`-e%w#d&_Diz~8^9aBcRQJQL%kd~RuEQ0gL(!*?Zz!p zBc)k?Vj1(%gTjwGhzWRYr`xINmqmKi$i{1vY0wwqRt9O80t}Jv_oN!AiTJ-uy1Z9o z!;c6vfW4jHM=zl$o_|kTc(eqr^%KKSgUMnk?m3*w^YF1lZYL$Nzx78xF0*aL1&Ktx?5ah(*9Iv(9qDArxEPxNKP)vHl98E?#UfitZZ zACXcXDMUBK2gSW#K+ZctsjvCXk^g)s5Mb;Xkco_Rv>?+;eY$IbGhD;o#DFZ|!&9;4 z@L)QvcEL9ml6C=OGwj#LFz%$@W!q8r5693sTYQzkKS-&|Ziu??uK{#HPb}%ayaHeo zI)3_)H>FqMpz#@=&|>Lha?ep^gR8QM-ZYM$DP%*J9}vw|QA%`E3iK@rAT+UpVp7Zn zmxw9NWM{>)%O8NcYFhv9>p1b|dzaX2TdAGxUa@x?40$pB$3Do1U31pj>qFFyr^u0F zJ(oY=e{3;X$IwS&ZKf1cAH5YT;DXpI9usS>US%x?EAkY_YD|)1%>lX1TqnKyBx;+L z_V&VjfXyEM{VvyTluHk}XYjpJ^}Qz6dS4+#CaEhpiV4?U9>W2b?Z<1dv`!Qz0G^ud zfrRWkfg+Jifa{1?ZxPXCWR}%rW5oT#*|00`qyNX&+kiz;eevU!6`3iS8s-aI`9gh7 z*EB>08GF;zbW2NA)JaLHP&YF}1?HxvWQv<&q9Tm%RHpkiMO1{F5+EWhh>C(Rzyb>_ zFzgGvJ3BM?{?F?7_kVew|MU1b?Ck8!oqNwc_nvb;=X20dAdr1zYsgJHO}wHM=9UP) z(5aOtu)wDh2(~OR zm2pcUc>$2GWy*ctmmtp7!%v35MoQ`>sP}o$-XH~9at=?G^M>b|btww8#K=fFKM^R;II%OzZGp+!dtW z7a*^CGC84Vf+sb*L;5r zQ~TU&5WVLp#NGiXLEoiYGCkQ`dj#ZkoTp0|S4{XGvF=F%e_31Dt|utqQ$~BV^;YaI zdkP<+{$o zdyfC&O;6Uz&Rb45 zrg`m^@ZY&j}Fo_)9S` z6Cm1RW*q@n)hSTU1p0eYcNatMo8H*R046{kQh8`mF`cdS5sSC?H$0l7W;%g_H63;c!^{}XaC@r@l^&H-H6jbbX zH@BiIomT$ghO`<16wc?1UsZk6Jdn&fK_k@r46vB|rHG8nZDWtEhU$CE$9>>j##%Qy}GFgLH4_$iO1c8hocH{1RxrB;_pVyAfv!1us{JU(z3t17n7<* z4?$2TZaj+;AY3`JNK=T^B3w|BFI?$P9qC(={x!;*Z0=R+%E$ZUyhwZ*_FU(?BZpI{ z`@t%QzLFwG&?K^LKVEMy2E}*lo<3RevIlIwX{Jw6PC;p~<<_iOa{+MXsSZNhRV$b& zy&zAjA@(C6+M3m+3{7U&993Zb68G(5Z~Ubsz*gT8J0~2FGCheE&^IZP5iCP=!2?n+ z9=;0w7D=o@kV;>Q)F+ikY3%$?-zGl-H`X3J&%JAp%=tdb^Gs1FXcgR@JsfaWJHKlv zs^G^W;F<}aNhbO>zp=AOUqDR#7^bW#Vva*9HjcFGZI2e(xVNZsMws$o(+HHal(a@_ zf)J#`1p(oE6RTzmGstfdrxJZiZ@ygw;{-@^B8$*B6m}1~y|h+d6Dl!FXP_g>MCn}R zZo9cLqyqm~T+>*WxluISubM%^d=1M?RWiT<0D#04#q>y#aQ2w1Yt8aIQt#S{2l$aV znLINy?4#N)c3hQT5&9Puc>+h`nus;=hP_~UpN-qMs+Fy~lJ{jHB=)bGGAFRgO(3`a z4GFj$z*UR7>_V+~%3l5sWD7O1-Mx^hQ3jOBQnfl#xA!2){PQeoA1)pD(GOYvgsAl7 z*|2C^vsm?W+_lgi(8^j)(`DA`A|?YIY^P}|@e2KKLP16Dd?VUSR?Ca%yPp#&l&qD7wW$w&O#4D0C~t6pOn*w2xMM-D~~O{wsaS>KwQ6 zlyEID=i^!cgFdB9Twbz8s&+R*%+WUWo6lp;MCPU`MfCH;e*A7RJ5j)Fc#EauR zK5jc`P4$HltM2MX(*Iuk>5R9ikuAetoaUft_yFDgKlzWzC~5b~CO38@7wNl}NPQ+) zvWtB8heL`zp!%>lGC+adOcZ<35}TWuT{9=;;x^2*!bu>BN#%k8!9 z> zOn;^?T{#@2%diKue3$NXGqilS=W1H$;xT(6+YPchyL1U3fMc{a*3rn^5p$1;%|*X| zD-0;gg|+rG=aN0jPo#S%RK%D=<{F!-8;#%r3G;TYw(G#JJ3#$>B#v!eG-fX|71~NV zm~PRtYLBwoTbagmh;-FKWxThtn|IX+f6asHv%xr-8aM#)^uYOFz)Lwhn9bBa@he{x4$*q7p z-%a-|EP&+AIwkgj#mj2C&WabBqR~CgRHVME1biz2865ugkqa6fTC{WodZ=mKglEF0 zu2&8_g8oLfLF^NY{y+FW9Z>Rphr{6cd;6Bq;=dL?;Q@369Ne%u@l+mACSmYIkC9Ty zQK*VMeHQM5XLXVh&Duq)X9U9Z zD$qz46-tG#w=4P|E-9}{FvsfbTN{l4`6%|^%S(|%#xNg|vC_`9(!2ITz^OO+!NecE z8NNhG^rgkzuTU&-R&#xTZ$I6!iRKsS-R?`ZXzkuMK=K3x0bckW+Tc@>=25GLOJ+zWB(wJ7d6CC_-){90=FQscW2yw^7zFYJZY=iD5M^F-sPZ`U zuXhHhPQ7DRGHs>v54H17uzk0oWs1p(-&wbt^QVP z&z=gZ zG6+vFZPV4e6Jmcp&JFXoi*;)H(kmz-T-sI}lrV%V)(FmyB7-^E!UWR!;nKf(_h`ab zi<$g~P4i9(a#`fcAGp!qtm7H5n}BB+iYQ(RnS0H`OEm{i8)}WyC6_z!NNtBDX5$VM zDiMa_o&8z%SnqIY{b#?RH{buUoi3^s37+O^ij*SWDbTbfd{;u(-22Q^IaTgAFy!c7 z8i&r(<-`S1PnqTd&+$cR+sa*UpXrWpWMv&(adbz^>yoO+@9=byH(QVebAr8?$;Wge zvTLgl8of=sK;nxd-|IJh6zz9>F#Wbb5#n@Vbe(@zc({E>UYoVS!E8`x4(7vY!-#k8 z)9+rnE@j5?zvgFuM_tjEsqt#B(YBb=`&;0Kn{rmIky4k|CkxGg%GpdYQAj4*CA*2v zENIU@#Ee?lAkZQ?;z$v`o&8CjeqcTco?pi|>bUIF0|@{KY^=Jr2FZ)-Ihy&(?s|>1 zIQ()+q;0}$hlyCjA>ipNGdU9=9_8L~q3_MB_C<5v z`UwQ>_hEcCRA!BRGMd~T1?=kKYG#XrDPInuk3lG$jv3Udjk?#uQwZE4IinCjAXuWxD( z@+>L;iN2H7w|9>|Qs(FTQF5%OF)JZRcyG*HvScMK4ebHR+`)Zn>(7iQ!|yoip*U8P zz&8X^yO3A^;BF3f8Q0n;HFstVe6N5mUzw<^9(LYt)EbDz0goSH{#F)NoQ))nDfXb( zv0X2fEo&;?{fVy8<{y1Xv58~PG6_G9o3r$V3-~}J$#e;j-sVXh9sI&Ad|&>63kdWy zv6JGt%YKw!IT78Ax+)k9O+;JMXHD+O2kj65LZy+any zeCoY#6Sk>07xx-U`WZ&j9CvnnEu9~~3%SO}+jZ*Xvms zZTAWHPEI%e7@N9`O#Y=qzP<h_d>EBy6Ko(5^wT#zR|uU_lUP2U^cH&GP$H^C3{zk zuwuyYP%zKFcgNa7J~-}G#=etbzkKU>%aw^Ed~;UE)a&LntbRCT+dUe)+(ZB4s4v$1 z3rg;OKhOFex_=U1g#yu2nwj{LtOI|(e?0K-`MCXQ{y9`A}>0zaz)AHZ`c=yGC)3)FI zrmyNs?&@CtA9HUnx+qMWRhWfeUY9@nYQ4$0 z;2?5T*IfSHGy3Rn_hU9jgwwpsZf0*JROBhr6!AX?y?J%C**k3X5c85S%i7-3<}AzH zjS-E@Z=ByNtQcT+&0pZW_0!uaxs9=(R6A>Fqp2%g8gOg9YDx@meLwFlwB+O5g%4j0 zPyl|zN;_-B>!)9bq~y@;d+S#{znaeHirqAUSHh$02HG(3CwF&kHa~dCtB}YK1y2?R zZqQI_l^o+@=ot4KpE^)JmWc`9N>H`65Y{sta7}yGkZz9s=qt~p3ujwD3~!~Qu0)(T zPR}^s5N19Mdho)*z9Hhu{Y}ZaOI+*wEIM?#pK5+*Z0h=lXlro|{VAqo45O#(mw)ujS4C>`&zA$P;3$?Po=Ib~2__upPZ>t7eu*#cc-k z2Q;SIS~1L<~I8{v0*U%@P&FY>)TsbZ@fSTE0;f*jI0sOu@2*g-$)R#P?zbz z11a-Cg=hVpfM1YrQ$QutLuZE%o}87nX4tx4^k{U4n~mFnAP31hZq~|Ox93*c8%>eYdOhH!I5Kb^!O95F%U7M&vGcdbp%HXU*vRu`mbdA; z%?3THaeL-_{Jb|CuQkS^c6e`K$mK^^tQh}H3{U%i*1mjioGtzOkT{|EY0 z~WfP1`gn4f9i z@#PL0Td;6=7M*c5!6TQwF=5_qx@5!DhLoc^ucudp%q#VOZ6pT*o0s=`dUsa=a?Tps zc=V0T!AaYBr!b(i!?38f!}K*3aGFh-9_R62yYsJAH?g=N(etuHl!kR_okzdcu0GsH z$-I-bPoUAKii|5?3HXL?N3WVqgQhyur*3d3nv5( zIOIZMjWD?C{Z&cM?(B7J+@oc5!|Anb z#T%!`_AmF(ui29NMWiakLr7qrVq65}AG!F6lr$4{wTW1jIvDraweot9g z!*q)!P^Q0}xFJ4e(QUl-gUkKQVcOdL^=aAkHeJuj8(_xz+m{e3n8U$9~aWNOJ#agSsfo)RQdR_Thfi zdQx^52iGY_YlFtc2n`F9*MGUkc630&Y+?JTU6^Vb>)hQtK5{a7V^^$fiUnNmiyx>X z|NQO2THdG8_SIMBpcU=mG~Vua0Qr_Dce^sjF3VByFm**S}8|t|b9- z>Gg%L+J5lz&k0_BR_=2`AGAA*t2r`#PycdW4b*R~{{&}Ut0=UHD<&6%5!UEa#uu{Gkk;LuiE*5&sGODdAL-onlOG^C_0<=HKVm1`b%WPs-?m1VMXQZT*w=fAL@?wu8|YRS^w zS9AFZ`~d+SSj`0#+{_wu%#=VYat6e?C*(MV-(E@K60E~Uc_D$Os;Cq*R<#6TVNzevU1s2$lZ>4kXT`<=12APqF6113SS>`JL{@_fBcxkE;+I` z`H`Lt^Y+Z|RwVzcdek?vx@7Tx=F9$OL0w>?R}C4FOz)=G$rXpyYw;tnW#(DXw)$m~*6egFMi9dEQ z4!=}X5)|GHfn8$Q*BN^a>$eG`vvW{R?$e}fU@H3~GM_hqT-OGjEot6WG4@ucC7e}z z-};nRYJNdjo?h<|+=lDoZ94*Etcux=Xp~K4>M~Q%o>6k}B>hV7dxLM5t8ez%EpSkp zjOYwh7M0c?fn!R1szaz3o`LK)QyT&6+JMGTG6wZMBCWm^geRP_sgs@P=8W4E^|<+- zTHvI@VL~G-774z!@)Rz3GQlyp4ER}%wn(UE5v0;LRT^@fLMms0{(VFzI2~Chc|2NG zI$A9H=?seVQn4%MRtxq0By_GU?BU29rz7?lkH;sF&Qg)e1*jA^GamLMz z*##{8sbv)P@=`!DDQBIMIFm;oP-=sP=-8uYiPI94HBLv=CNavp(NcN;6cuk%pk)`l z!GUBD)VnYqr_2c*9p`08^+_sZQ2M!(;vIxmmQx#WEXV8u$3YUIDdjY)m1aAs3}633 z3?donrR;QyJTdLcph9Pd&3JA)6=*QI%$lF9@A}b;rh2BlIwWvzb>bb@YZR1I*eTN- zP=~-rJnhcLX$+p-g=fE*JG;xoB^lwpC#e)rl^n2WqQ`Ad!3B_&)(;nmQcSKCoK6o3 zYA{!CwB@i-BnEIXRIK0SFJ%s}9X{?!5f|tUzK(ZXFR?(YA8x&uO*pW{EQ|@3-65@Bg0|AA@Syo0T zc-l`@_!bKV6`O!v^kYm-PFb75;Of(Ntvvvpjljr zgN=fGn6JG+|3#s$3~*i_BIsjE^H5SEZsxmUrkpSZl0)cu^4i7zM+TC&<{&WMTE}gZykC-?E>(CtG(L^^e}{gX+&vRqKh-9@$4_~3H=foVYT`;DF#w1xEy5w9`e^T^5J1`` zVI`KtvPXOQKNosIH<=f7L*+lb{556B~n6^KIs z;>?@*hZ~}{D&H#j@K~QiiAdTFp3K3N+&3oaxOK#xWkD!{xckuTVjA9v46TCZq0|$~ zXVPHAvxCdV5x@=fRwBEgZtVXFF>4!KmEN926+aSy%0epMcn3=90_12Ab_OVKf}l8J zo^sHwP{XFHg?zyQ-&io}5F`Wia0{F5&9m#(H88?|fi$iAfLEYAF){Z1N>+*pP}b6; zO!t{WXOZ5PO3LvM4nXDzo4hfk3D@x_vbe59wVA(KZlXt+_VYT@!pa6uUhXkOe_~eI zi^S7By^HR9lMfOSLYJYMpb@mzjzLWI(lc~Ox5uPz0V-xyhpyr2l<@e8iBAwHMeT>K z8Atx{>`0*eo{t@OTm0osI=mRZlW$D${@lsx>eIgVj8zNGAYqn?Tn&wH4se za^cw&;#Sdk2u|FqX7c)bDh8T(Dfn6tsx|hU<0P2p_QlxqpyI99`Vynhe zO0GkMUkBj9GjTu;)Ky)vxV>LAbhTqA3t1SMw3)Hf6Z=u2Myk}S&A1>|4D$wqxT8A5 zTZO)-=#)L!rYHWOChVGp29Pbk4P>Ay?<~ZsvBwMaA}9!YoJ{e$&ogaU^=MWehPFD4 z@^RvPo2ZUQG}S!qM1xhiCY1i;;mrb_L{tq701ia}_%+#ZEO&-!GlXA}jpf4-!aE+5N1$^oPF^`qf6Mkq zXZ-x=E18gT|J5!pu0u3>OIIv-xO3f*SK#X@4ay1#Mcu|U`C^;U43=DI< zj*>L&VCV4keK<^|?{S**+=g3ol>;X|Hlt0il;T5w6|klJXYh3<^n7|+A}#<_#MM); zNGdtNUhJXJ5O1UIiS4)mJF^uw6uFHH$2H@9(;6098x z4`UDhE11`$G)DmIBBE2d=ae=7@J4zc*?nE2f*KTXh@APSAh9*0z&OClZ<-YR^2Cj_ z^2&i8$&lZ~qtmX+Eq`U=m%r?AOW=kK-4IX~NEZzZP-lfXJe5y%b8M&0_syG~O^2B$ zOOU4dc6+6Cn%;LUwOIkr)~@;9M;>Dr4st;clqt!KxAF;wPJ5vvWckEr9Cx*_3yHU< z4#(xjXGW_#xg<@7fVLMxAUsVEky;ng6kwp16xrET&2^RDic427Eua`E> z&e6JQBWNZi0VXk?{fG0ehDLYNgon)<^8`A?VB_V?5BUB772+rx6;B#jOA4{+MEU@i zYUDz`zTY5U%Bs@pEMjk6Q2}<4NI=X93+DzSrCNr}yh+7et8X7fLJ&~84_1z`z(>-L z%MrdvsZu@#E$aY+q*UHE|ta^{h1EU(q=JD9tZhl0dO{h*i#zyO+g zTTr~ELP)HJH)sX~9sprM1|1<^rwWNxN}3al{TQO6>qe!7D~I(_>6xta_0TmjL289| z&~%5&b_D^1;mz_!Eod!63hJM!_;;USc5u`rxmj0`a?mN$5|wz->qIRfAAIewR9Ns7 zWY4zaSf>LY4#ydo_IAqAik!^Y#3KT4wID_%18{c&3CTdTja_F8%JruC6s#Y5y^BU& zXu`8bYnweT-4Q*kU@{8zjCXO9Om+0yI>@ZAI*<)-t2oFB!I#g#t-d%CPdKsC8AE%c z+Zwe_Fu$U>H{2sRY_BR=i0ZS^8`H}lM(DQw`>w@^rqcfkYF+Q@vJgCBqDupGn<~?a zNJ*_yMLT%smhi+mo`lQB2gcr=-b4t}k)S0*!qm*yYOrWbdPO;oW|#LsH${>$Q~}Kn zeCPCmUs+F7f6cc(O+(|rj3tL1GaM>+dukYq<+4L1G3vhZUxU^9R1+1>S?lMw z=%f{icrXRF8wGSI>+$GTPN4vGp||632*W2pIoajW#7%d?AkU?Pifu9mHD{gF_tS6@K# zc%{hH5;P!FI>=fADli&|NTLm@qGv%rB{Opv$??3a zfV-=&KfNK;RW5^k|Nqu*P-1?xqiSQ11UXBcT-Kp`H&^TbrDQ&oq;^`j zFer-+I38#dWkoi#0pG{np$><+` z2~9^X<2+C_@Ql325(|@uX)qBpGBF*M+fL9*C=84mLLjI1t3kzjQk2G81?4>GVpwy$ zpCcER)yc%IheIwKz?qo>O4cc&Z_+J8 zrAEiohotddw^mx$B?=zPul_Ep{V(-O*&=K;b{imX9u8VNruDqTw_zKCNQUhafjjND ziDq9{Va4?1HdMj{Q1XK!Y8#Q;BcP3IXXgGJD=OD?z!>J)!MIHupQ?6dgM(aSq z1O(=5X>i{dB@UledUdL%1A~y=C{<7Scn+D;X-lDpJZ?r_e=UyI8hdGglLbD5#>sVC zI(a2l>Evg3urO_gW>Jw_BDqrNjEZDIseFkUOV=T9W1mb(7dTkNQamyHi|NG7?=xcNy^30ksXuIC?YfBKLk3sT$1vZsoMoO|)CmrFD)!obh-_-b8`YO1O7Z ztI=;KRVugUBZu`|pr`xDlj(HRk$M<=t;bOpL`NfFRDt|79QdVV7%BfvR~3AFll70E zOE&#nIdeOJkAHb*v%ha`IPI(7yh?K5)b(cA4Al!bHM5B-F*F*zhGxCo6+N)Zw>)YQ z6pkn@1mZIcsroL>G+s#%h}q*{cGpwbqe|@eGcWq@gBn_|t&}PbY(jzaME45Q_@| z#3`_2?q6%sk@2Jv6fmi0dmOU3S4;s9jCVRYCe(+H2P;=S1fAgQg&lr$5$#}|ZLtJ+ z=4l#vCV`7P=6}fwSKxA1k)bb5M!-}+mzm_9Y`n#{#MNRCEOA^zr8kx|gb0#&pr7x9 zKpLVk&_OQ(1qj>-&!QpoT7&kD!(Cb_`FHg=ZiEVJXh=n3SPuS4&B2XEb&eEsqdmSm zMY%67{%%ZzNY;-;Jtv;2LlMd(&(+2oDx4u-62(-H=v?A9!gT$CxHYinp8=Y&0nydo zth;ZMR}iSqG@nA!k-f+r3Qg{g&H-kTtv+QiYAJo*J9GmH$M*!U_kkW3nl1iPD!h2@ zBa$T03R?v^#GAuu_UH1SK1Z!A*rMIz!$jmX%2s;Pz!?$T`x(@FUa&%oI_b%V^HXR} zml#9b87&S|i^KOl7-(BK>vW`R=28FyP+99Uxna z*QGKCsCrxyn1fUu-^$+KBfu^&10|hdo&_W&QH;mXj6>wM32pW5$NXAjTe5J2+k3vq ztZIKRVMNCNr!fL1i-qfr{QoA0H!$5`cCr|w)Afajg3_&aJ zc#41EGU)DL3vyfEi&Ca3K(uY$DsZP+&7gJx+-MT(@|%))3K;O{9Gtsh9%_!IofhAk zG9B&+j370hWOU&5Y&}J}D;7Foo?U2u;{{3*T761521##PZv`|S=j;(m8~CHV z-J9>i7xA)jgAKHPH>@;HYmY3I)g1bg$2As{8zp??4PR!j&<0ZP&qf+{u@?%A{D~1O zKkw~`m@2EUd)<@Fw7D{I@zrI|={LNE9LA*fd!lSbUX>>;u~BJ2mf-ccW0%*;2`FKK z<$=-vGO>R3)(!hnfmw7xFm_kc0nmIsO4y)+PhW6%N6;$j(t3Jfr3tDjEQ8o^ z;ji?a?c1LN;kAb>9|Ai;UkB7{1*Pi7YsxZjPwU%(HJXC{p1ck1phrJQWl790Bes=F zj)7IY+xosmS@E!#EtsgRc)?n!a4FEZB*HIo5wy+FzO~CP21-bI+ASDksi;f8L z3}f@Bhb*XxEuy5=j1ARF6b>H;nIlG1c%ISUORL|Cfz?=wR(~r?6y$XjGLrC zdARTZjaE8Q;Y1p{Yy7G;-EE*9xKyo>b6rGLr!9y5Wag6UvvS6xCPr;DHed39r4d1I zmdAYZo!CtkEBO=KZB`aC62B+D47^mBSPGgaPU7B*JWcT22Ah zN&>%0O$A+Y2T-4|m+`JgS@@Ulp{mXq+?GPU&|2_+{3cl$Z{-xv>DpXUJ&@w0^O>|5{RCs!tOK{xPS{S(zHoH<|>+CrwLH)eTzkHx>H0P{c%*JFW0=m_~Sn5OiM zzFDVk8u$!Jki5RpJPJ+BnHDIbxCF45s?mVoZH)3c&QFELDgt!JdTZ>-36XlPk`+S; zP}|>6WBvQfr%{KF++@Mk4rYSria;*#y9URSHUXI3vQQ20J&hieb{ZpYW9UCQf}TT) z3#--%sQX$mP^syZ)5h8%bkolvNcO4nG}9YqpqDH41T0Jweme=oD#6?XQSmDiY2T*f z)9{n>t&fv@ukgVa`K^^;)Av{;d3v`B!q4+R;-F}1lW{Fn#u$kUQdu)r*SCPlZ}OIK zTfwXE&E#x)+hA~SKY+~=fpT#GSWv4_lb#MPYs+&8wh$l;J;A#5o+YhkSj~&vd6s$Y zD|{Ey{%>O+X-i}|#uY|dU4emrp;veyI7kbCX_gG~V|MTu>in8{>@vQ|&%7s2zIbq*6C-<4{~lEaQ)HW31nbU0N_WDsf^tSAu>2>6*2s3R)?RPYJ! z#`ikNtE%J&%oqz0DfBv+le`febM&53jk#&k(BNmt4swf|oxmcJ?{#SI@$?*lhmDq` z>^4)By74`Rma%etXay)(H;>gsy9uq5wM{&|=3@R5=bA%bMPHOt0$j4+!uX!E*O(v9PW8uR|#T}GQeK4Jpkj$e!L`ig7n3)W{D|9``qaRVClf=`B z7ykW^+6rCL{Yve1XV(4;J zf(Fn9==Mv7vW~*WDU0?E2L;8{u@VdiSzQMZ9)Bh61;IyE> zn6Gy%uCtmxL*&CpUtCylivid6$1R82ghKE5ivRn$CmuKV@%v1N``_dDy_2%mH`WIa znouuwF6ih3Gz;Eg8019pmkGlIlTw=!X^j(~)C_9}Nqncgp4#L^D zBM>?2b!cz%2*kxF5P$k!L*m;^tU2I6i`9c|CQT)eGe}rD59F$c+f2+y|35#OS0NPI z9kF+L<}9OgT3`TtcfHHg-w9ODv>0bE3vGr`uDo;_njy?XqVw|QJ})|J5^9Xz$= z(K~+_2akGumkhBL1jYBoZ9=_ z4hH2%kbQV<5SZ6g$$9Pq-5O|hKNe)Ti|N7=??IR2pbN(I@jJoP_KCM~?THO-CZXe_ zjzOxj0=qQh2uva76i?G}VoNbI^-&){(?Pyo>i{!(9#_ig^2G&pG#wffzF+iB(U`E$ z!(f*E!O$n*4Pb)78^8a*H~yn)`Xkx>->o#0?{cLVK%D*J|4>^@v?VB$-{FcoiUPbj zpdGnI4E-9Smg)nT+{iSS^YyCcPv;c)!C(EgzWBwSj6VkbC^$@W74lYhFBWa@mDvOh3B;r_Zw-TOinPZvkqb$VFU5EFt75An%KXT`NIkQdw?i4 z+E8Q9?r5c_zJ=zVVxsZPYWknA!KWq8Or%Q)>EX0!K*+|bgsI@qvu8G_nwbK9 z-v-Kjm?|^i6ib2?YYwPr7y8dq-}Ev0Br--}f2pJ+1W+iThNHcbZ^2pN({PZF)C{CU z0>w?DZx(@g`d5fh@kM?#VPI4De7ZBa^%$Zc37}J;sUM@+l20A_vX>bOe+};@X==%SOZma&a z@1?v)UBHw5c83ODR+!0=6)@qYGu`VzwX~X;_N;O@$i1t&&Eh-X(SJ8gH7B^cmohNG z)#4H8L@3qp4Fbuk;B_bnRvUVbJtERERUlvM=dLy~biBhY{t3b?bPVf&IX;;=i(tw9 z7=^1f{c}MmxL7q3k!bHaSFZuNB;I?DoPjYN4FLqG5xee(>GivvdQ~!j)US@LZ!u-~ zmNW{A&3QIAgNY9Hro)4N_&+UPr2|cdtEa$PL?+8V;P;|>vWYz{+4D@0ltv9pXo-Cz3lvi(? z$U_L8AJ>F>I}D`axX=tFlANJNFxR;!%2UV=!5pCk3f?J#nvT38FyE)6LQyiP=@dTk zN;-woCKz;OsZAfN^x7>BL7S9(TdMhit=i0fugo&g-_4BV(M}}AyHUPPZ*Pp{?8&=IAv%%~gr%bM$<2+r$)(5QIE^ctSr^qS1 zT5Te7bR;iwq{WeJ;t{!PIc?H1^dwJ5^K=PMkMndEPY3hVkEhW*jpb>TK)|(MjpXBc z`lLVtuqq(Al97{4T=97gGdQgyZRp{lX*pqXUMabE9(A>ALS;)S$vjWH+e6ej-n1O? zW9%3&NKv_t=y(foVF=)I@j#(Du{%y#`ap!pnUR-r$Uaa}Y7V&~Sh1YLNn$rrmtwQS zlukL5mZ$Y5y3K;yB)vCZ@6H$1d|u6GJ^73?AKO3lE*JB!?F`c9x*PoCZ5dZRsjO0? zCD#I|w3C$@Vr4Mzv7;$fOS`nRQA;mtsYOdgZ5GS9>{78{X=-e`Tg=+W(H$%h+&hDa zhxb%)4Mw^HTY^Xv?}-JUFy=2gB4;=5_A;C*TqSsE zke;g!!H(3l5MAw6&LQU(32zC?Q9Zd7f+jZ|hIob<5J3PE_E{&f$f`T8!A(I(Hoiv5 zB4>$lHoyX$+NO$DEI@pCG?yemlG$i5JCsV#nU*Z!5GSvO!+uUqg9FsY=m7LbR}9!~ z1)@Dh0d&et9*|Yl;vB4AhnyUgWN5{qxBzl!08iP^3#gr4Tv8evm3sZG&A65)p;9nl zRnqAoe=Z5O6<~MC{U$sx+8!9!&UqJj+&xpcq%DVmJ#d37<}EJCgp!(!whs3AvHho6 zbH1^h3}VS3=6$`gY~KSq3?)JM2lda93L$B)zVZ?{{u*K12j`wokTcXlsLW`CVxp)8 z4!5(=%L#J8ufvo8STq}85r)fd8*M3bcY+=7sX$41`y!>=*&%!|$12Palp0*X!aGiZ z!>sS55V#urnEqvm*1-XyPS2@s!)-)|t8N{9x&sy@eD{{>)&edZAXHj7S!J{t!N{Dv z0-~i~{kb_B_*O>xW=NWAnep_LL*hLaOxHyG{5cr=gXoW#E zG~vB91x5)0S`GjRXm7n2-m81gJ^)*%qP5)NRt1M10#mFfcr0JrRh z1DK$5;9!dZ^phSS0|1fH`^ewmpvI8vtRqVbW=Jr~W*vPpt4_{$|8X}1956~uxF?wL z2K#d*U}qYB&lhbmYrypylFf&JLY&$RCwd;%30YoMs(efI2Wr4+A;bkw6F+xf<7&K}U<7Q}#t*jAv7-bP2La)2F& zuNikGT4PQQ03T!tCHo`6)z*w~=7H~UCj*M6W4!ibJwp_~b zmkgTxdU@>0fYwjzXk%>?jD#{Mc}gARLiK2M$HoEJOZMwf&*8pb*@Ix?qSW$$xEK(J z-c;qRb+eAv>uP$eKH1b>iN!H0~_2mutMKfT=3Lo)*I?L`$Y4*a#IxUCjoh*2Y~E*sy0W3JD4-%W@P# zuY)WO8bIag&P6vZx98T~%Gv)^hCt9nZ(|nFeIyA@1F<+HTemwsjGmcl;ZGob3a}!N za!42e${a2MHKbfKt#pc-O+ScP<9Rw8j|jIR>`+3K4hTD&HF4x;qQ0LC-j77z`_98k zR;z$pihUc#@mX}8*WHn|xrmjTkQ{m-i>u^4S!nuo8Z`AJ;|cmmg;{+^ccesbZ=2^; zb?S~nJkJAVaQ>{eH)&y^wfOGYPea~=h`=UiXtpk}T6dyQXuQk1L${6ti&-`#SVWT6 z`<>0h#wOet7lR)})B)q(Y1Wesv#y|9|IRTakP|mjoIuSy=2VIZg)V2#fKY?SrKLG^ zkXO|Mm-k4oTZBU&*n8F?lqgt$#ek*>eu{%t!@qh!RjdSZDGwxGiaq#%n&Y05cy)>I z^(*Cs^0`OUDxuJVU!!tlf@U;&lFA`!?Rf(z-6$)tu8yJdGwXJ?@EWR?5qQSZOvjXu6S#UzUJS#%7=QJ(K+hg?6+$4H!se3 z>yCb5`0(d&!VUomFa6pi;6IhEEe>JB4i_Fl<(d_K+JDLPb?`htQ5QuNW zh@rB0OX=7(%Twe_Jx9{dvX8}LdHS+lSk!ELoAel_a2DM)k(Tni0ldfz#WWSom*QT! z#SGTxh$5|FyDAd`<(f>OEc3x~eMxR`@RYQ&z=3}r+$KE{%Zcb*MzF@9M42B|q_;%3{!Y+{h}f$_t@H%P*}xvj<-fy0RkwZLOf>XzEE zFoNx_1Y=fD-0l&gFPSm7kP^~}$ssUQ|DmPN0oi%X$C5DVT{XC9dOnV5EGLU_0rcJO z{ZrxgAJ{~V64QP=2)#(<#62e2mlZn^X8K->90P0U)9Rx$LpEak^2QAR7B{mstd89o zHcyc)WKg103^4-tO-2zT zaNl?oVAWb-B8qT9tq{=huL15e;UB)a6^i|X8Li=37f6gq;67<0G0cG1a1ID?#01DK za0G0NcJpKmbO{{zLX-~Rt)O5aKoLJ1g9V|P)*z5!!9?KyZxLuy4fA3m&;*1{<5wx5 z4nPLJI_a}yjcX8W&oDB2t9XawG6evP9Ui?SRApzRlqO)+Xoq8OW<3lkutzm9l1tD@bgd>q>B_0gc09mcVs6M z5HhdJ&*q)`Uvox)w$aCQ0D46Y@dfnX#5HO+ejdw$%s@emYB!*dCuc$JggksaErIg! zf6t{@_XPUfL1R8u|#Gb0#2A&GBag%5Cby1Ii>ROhK~x>|i)_Lo&>gynyEtgfDiYvYV-b-*Fc-qYBY*0DEs}LU z{%b52=$d$Fu^lJ|hC8tn#s*0U&==s{&;S&y5Ep^2z*uAyK+4IRUiJX(+)7$KfB?f$ zladJmV|JPj>aHF?4WecM>EQ>uTMCpy0b+=d0#x!4lmbjJ9w-I${Y`So2dJ2k5`b2$ z&IA1bug@#Y0Q=NbA4^3wVPKuik=+2SjYYQZ{s}-w@fkF7Ng70gQrrOy5%VGdotM1= z|HB*_%}`*#h{*wJnoec}0)4hgW}E|p0nm$|C&8WBKo7tmpg9P)iGyXB77#`lS_T9# z42$75A_!nC9deow$&{;$b9K_IRR20UPR6HJHc z1vZDEF9XV|SqcD@P%dJGjro6(3UF01h}4QifB;vVL|A~u3p+l_kX?qss*OeMmW7UBELm_;!k?Di z0cWHThA^N#x`6#DU#;QXlJRsH)Fog$q<~kMBLkLi3I;a( zBLbDaMrJvIsTfc_fw5Z5S|@;I!3ddUvDUW*%z=mq5qtJ;FjWvLF#d5sgyHdK@?YFh zG5RN-3dSl0eFhHDSG9mE%K>InUNEhK1-%15Z6fS*Rp~h(N z4e$&yxUU+*QU~8u1Ol8q4FvKG23}5eP^JRb2%zkri3(22gP9L`rfZ6!?(i@b2w!-( z9)yH9=7+$D0jyDAG{TJaAK<+<$Yr2U0nVS}z{AOYM*l5x}YC64fIVg>v$vUa0aByT!+9g?IU4e5`T$GFVg2BeV`_pU~B?P z2+C`;0-T9N0r3_DhU6L)>M! z9zN1Qn#C6+z$gwpzLP}h0B{003rYsWr06{eY=7yE%!2_yk7qMs(BH=)L>J66o+|LjG_s7@s@W0JqPjHSA|L25M`_~(9-CCO z5NND1@}_44i|sN)r^Jl4J7uVO$q?b86V|%2CSGr6Ly4T0yabl zR|m$3{y+-_5X#;oq)_I`r#8LNd^}L&YG}ZOx)grS%!mLc*!D|c?xMFF{xgJQqVdVv z8GxaMtt$%uKmTC<2m2v%rLar@=ut&{^G) zvp}KCO}av@F7T`@T$h6PWF+4Q{wSyw8&gN#(_Uf2z+(cU0#zPN4=^=#dNAc1Q`xfM zY3RH*u%!wqYaUrT;P-&i;{F}Kve5wvNg73dpqfZMG=TMm z_kOR&uVQI&AfpT(}{Q178N0$!xzp8 z&+EprG2M4h=Wrk2uThLEnYzG@!UH@MXGnR=;?7n#qWSzoHu3Y!_ zpBHEM=`!;0teA#%*rP#!*P{WZ2;jm?gdSTpL+)@C{f4Hnb! zw3*1Kz#GrZ5kt;JR-R&4@Zol25!KM*axvt$ytz28yABdLHgUde@@Z6791DxYTI;d( zaSY(9kpYiQ;G-YNCL$k+NIntyOhg=sNDdK^B_i!aB+H<-6L*@)6N#efI4F|BqBjsC ziRkG$3UH!|K{M2qdPEHRLtU8$f}seTX4Bd3kyzX~ zjBOG%Q7bSaK!WGyL?h`L%{}#C3VXAgWhQq2w$TkO zuLFK&s__8%jl4|bRDee5XB}ErVJ|4r22v=Q*Z@Sk3^~m}lXw%KWW40Zr;m+o z?iuILBs_g!EPn*j$qQyP;5rXu`Q0!#f~jX>*hcx6Z|m-auuU(ZF-+mQ4Uz_`29l=B z{v|Hvul{quZV+056Hp8Rvn2S30VhBba7hHHR#{1n!|H}q;4nAt{Ohv6s zJ%&x!W&i_`f@aJ_Lg)(+ zO6?^=KT)k*9^=S|}{Epg!>wx_Zu49_j zQ=oDJ>H@;EL;{+`UR^wiqC5-`2X$v7Y~-H^WUc}=O)3A!Pa!LrW|q{B$Is>vu_)$hE?;%1;m{bX1grmUL5SqtarS=dp4GcuT!wV@hX6PZ1 znucG`!vpXrABD*QVkNphmtgGU+A3c*hJodP3KJ7&xwAuve#rzh1g_IvZS>xxVjD5j z>^2W2W-TBD9MS~=n$;zA4ERe+SwQEC|3w4|t?=9p5NzNUg6Koe14 zx|`s)mT>{y56Au)NrB>YFqc^biX&j^vvde}AJxTyuYLnm2KElc)IqFlfMj+P{0qE;(CF^A!vzdDe+i)MBrmk)l1FPhV2V%K~0b`v3-e)`b1eR#i zx-2gMb%;bUN*9LF+X>)qvWJk5z(MtREevc-wh}z!wN{2|VpW~uzzNQ^Mh}w((Mqso zF@AHN%^{1CNl0W0TLz^5JfRsNOn7k?1BuJ2Fp4pN@iLEDP?++BYHVc2BMpPVdYa1s zQmjZuo?$(!faQ}f0*#>TSwksM0Nb-G20#&C+#M&GVfB#i1H=hsO1lk>bX2+^1pWGSw$7+Oq^TU(Wr}$KJsm-L9FQVzO(&v7sp#15O zrPq@v1H4j4YHrx03myl}l76&h-4hRNUv;t<>>d_`el3lF0A6#_8Ns~8$u+xVoamkI zwaOz(q_EmAEoNUPrFkXjGkV`whqZ5X#W&~PB^0=Z8YXfrw#1`C2Sin6FYV&%R9&`5 zDroNK5_i1Q6+AW=;<IwdI^Wf}XgyCbCXSHNDr?fflltL7w21MGE-2T%qyTH|{ zar%b9y{LD!d^?J9eNH#D+i|P3$CgibR5p-w@PaDzs`%z?#*rJ(h&N*g^!ui8Uw)jz zWeNXMU-G^6)y1NsLHieNb~P=8urZ{0BQL>aqLA3q)fBP2RhE@2%!`m9!f!NvC%bdwc}C4)&~L z&bvsnF}ba#^CH!!NQ7`Q*(4eFJ|iZsfx}Yz+5W=aGnG3#%u;WgpzaUqgN|=Z4e!BVwQ8+Im*z0r${BCg8>!4MBvu6<;o*=0kIlHcthlZuIl+) zS7yyP9_~YYA09HU$JulnEv^?AIurEHM-**2spBbJ<9apNp0TjD?}!~HdzR6BX*sxo(@Ur~->@ z6HEL=9(%r6(_CS|xK^`}q7Da1oP1Uw9@eQT%Xypir7u6?S!<>3iR9R*9}!0sc5Dhi zSEg)zQ+4O(s}o~ULCTW%m9}TolD=aWmgmBr4EjakWPFC+Uvo-4cV$PWFER9NLM^Oa zxOL^b>!&ULd;{FNYDB^ng)mN`_&4L4CitO*kuBKDqE-)3J@PF}uANTb0g*l`0Q^@Z9^?h5b68@KCytF^Imjwsg6xC=G=> zinP>5FSLk2rR|E+jzS{*Un%A7WQ6sV^PLebYRcmIqZ`8` z@S>7s&b}IlWRhkq7t8M?^61r)sLR~!x#;(3{dTLtSAI8{PorW6Ppz)+`}35T6tp$5 z%!;1gfLOgTbNItADA@ehkI5p&t`AdTe#RO-I}*akIDl;)AJ`SJHd*4NVD?>eSGGB| zFhl8Hik-K{0D?>;**~BzKYonH4m@O5RpjQUzm92=^F29Szhp(H6&}I4e9bAG%>5K{ ze<@}fYy@rXBj8#vZEp-`Q~1C@@JTOU_KEx=te)hoVSm8;H;Xh5%jLtlBARF7OktyIHSwus(!cqxbObo zMi)S=aadJDU*G;m;_shEBhhClZOsS9K2J*jKI+)s9v0@6_h@2jpgfQIz;W9Q9CUkr zTUi9h)G*ag!t?>ZpY3P7R#~B+pPmgt|Qr7ko2hI}go5O-_0pG30`gC(^SOBuhcBlg%0; zPsE`sihF(Ox*_WIBvdQI54Ih^Yf{-FE;XF-oII1#`a&5o5!o3}L_f$_3!9B@J9pXR zT4g>i>W*DogDPet2~`V0-1ck|}Mo9g9wuJM^hh+eXT9+{*X8CNNKz3Dc^VMy`@2AQ@rg2*9*?Nd$xL68|rv@7;ZxM zbd@Tu-=F<4LqKoy>Q6qnp?*UyeN%* z6{mAIq%>46;k>%Sm3fh$)s6Sv&VZ4DL}f2`sjxkQPU;aj+*!%`D+If2G* zN_d36?sA({&RbG%Q#THoy<1uPp`E*};S{G+0hS>aAffpu`lZtG)8`sjKGoTt-*!o( z_|o3?S*1kRaorI2>aRMAJIYUp-LVo?31f?Rq#jTkMW(!T^5O~)SKZTSFx`%ceK6U3 zI_B!+U-ygG-;Qn~W|T>Ddjn>{luoto=hfUrzpRyOAa(vctz>;)=oM zh=ql|a4Ub}!(dWm&THB6Pr)aScX?&s7@TaG-MTf>c6Vk0Gsz&{j@Rz)eRu`?rS9w> z2j@da1^G{iCHGZu``xvnSLPqO{xt6LMB3>axa^ut^Yl0oi;!MFnRx5ZGA`l$Sjvf zMrsA$Da4KmHG*7VKw7oXe1{oRiXdZ)AWa(r+${t z`qNHr7IG=y-Sxbk_C(X=3~kU6?ex7;S;JFM^QWI8wi-FiLz^7@d&iu>sVm;CTQRjc zmS-KWPI_uSjXr{}XiIOiow6z&aTAn*!rRHUZ_2;E@qEpAgKfKRq;9murzjszQ45Z9 z-RJUm!ZYJco7)QmjBrqT!I4l*&v(3R?6Vz`yzXxG;|*c`6zW5Yd_m@oj3SyVJhF__ zrT{a|Ch-BI_h$BJXw^k5W7J41Ia^j>l+VFtsJw4ld{%yjt1>IUj)&Fo_$XePH z+01Se2~&R88hU>3ihegTl7DiMf54-U)%SSMFPq-lt-&W3j*O`n4fCwB+*#p_9)E}M zMN*Yf!+vLBEIuXWE;reJ=n(r(9rCQg#=>jxTXpL#RrR|;@bCJIv}3Wd()$jl@a^^6 zE1Cow)4$Gd=?~4>#vdR)Y1EuZfAKCo#^)oxrdE|!QKh`8dhpClByM1>O&1Rbu!o)}Y zY(EyNVytjKhH^HDPHu2kaa8*ITFt#3ovz{%`Ix-+V7g4_CR1U1yiOnEN=Qh?t`2YQ zm|y8Uy0Pu{v&+>~k=+l19rgx*{LB*uI#~o<3VWt$TgLo}pFc@!<2HGewywj>cTuC2 zH(Un>_|+-*oloY!wl!)ySldeTzAeNZp{jB)9p|~xP26|xDzdup_c70{Q@XDMA-75V znJ#r1j!ww^qaM(vgVDKA1Ivm+S|r3LD!J)q|YpL2`C5dcdn?$B68*Y@i|6QY;qqOFwt&PuAP74P6#chV>n_%_Q9r~1bT zp^cPMi&7ajKP73`lX0ZYvNH%@l+ZH5@m=Y&Y2ePN@QaTmK5U0;lJ&|z_)kj)QL>u_ zH58u<2Qi~<2a=+*_t!k#HY;yr5YgZrCxlRAMG&0dr8W4Fh|l>jF2^N*YI}it<}iEU zoicQ1yBtO0;mh(5rTk=>O&-dN&%S=0tPZ3~@21M@y*6HyL&g#`k%#@QobJ2oUO<&a zpARu}Um^ZiO33(Y7r*`4j{D*PeWg}>vY+=5N{hNA@Cf5bcKG&ao|Ak`IlP&#R0c8Y z+)#6Dfb|`B^4qM#Ra&FZOuJdz?%94Z8eTDQt21Si)p)RgQhOhU^8H+!Kd4N&wkzo# zNB1F-1j?*qGXDl4{=yQ@u?d;No4#f78Mr;#e`4?AzSB!V>z@Wa1Re{wlCMAEzMiSO zs645o&uh193l9+%v^0E zzOw&d^KJRucfTn7`i%`8zrX(K(U!C2{N{NQ9j@f62^;5X{ORX+drvv5j`9%v6?A>` z*4=j=_)=UWSI=wdbu{EmqZo=v$v1OX9NzNzWcsOVkmqQb!krrsHPhNeD(I1X6Dr=~ zKGHriKf*Cs!!44yk1SS_p?59n0)oHYAR9xx_DIOrLFB);msg)8>P86?9Pi@&&E3#& za@Z3nJn?&heC4ZF0k!74y)AC{T1p*@=lcjfqbvFGFD&WHboa@!4gZd!w1>xx02bgjMj`i1cv(pp^!vqEWUk z8+QB9ZRM~kAzA-QL*#wa67iY^SII#E81-QlZ@5UQf9QWD3d;0@bMxwP<3zORxxAvyI zCO3-oyma>AEp(O{c=6idveW&8viBkn$}2KDW7DGQsjhXV*QN_24yoKEz8iS;G1IsG zfy~YBg3CYlIFC>fh28%CrAPboDwJ%`Ci4D_xT(k*$ayay;CWK(psUwSq2%EM!>ISA zGphyeb5ib8{BKVDkji*?!WbX^z23?0NC%iRtgqSS~^}U+QiJ&qw#Uoj04k+;uZFjs<65lvplrg1dc8 z8D|&Y1>F3m4ljP|%YAh*t|?+>r~Ic2X`1&Y?nTSW%QR35w}rsDh0fdWOxlIKRdbfM z8L+nGTdV!g#Z_{ZxzMuqeEA}4Qu$0=?-2>n(g2yPbSV!R>q0j9 z?cZ{RxV5S2|QsUKEm*r&sj6i?acABh~B5E1^s>zu^BdJ zZ?l>gat383HoTclW=~p6LfA_srut58sFr< zHt$7U4uu^NKeniGxFkD~dv^ESDZO($is;j30(GAZjS{aAGu|?kxxR1;b9LP_t=G=U z;e@tDmw%qHx+NNwuv>)5C3>g6z3Aij-7&LL99+2T9G+Y6ev#jrxe>E}j~qq)-7mq^ zg7>##O>Z4|Cb6^PhrnwUPlx!oQpyk_V$M%9EzG>lckN(ys{D!%rLW82GHFaBVU+v7 zNRHgK`>x%{mudVw-F5H!-9=WX$63pMMkImd24p&`t5-IuIUbJ&-N9D+*Ha?~x!aRL|@w|Rv zmh((8-mlnox~`DYkzpg>RQ%sW(4Oj=`91D-cMtI-#LX&62E@PPiu zv4KaXr8%$Gmt)J$$L+Ya@cMzR@h(P^o`JGvta$;hBGDzUT>sHV&5yS5b)}wb>qat? zLHC^}wo4-WO8Y(+XJMVmP07GAZeOmCpB~O`&$;WY>+Lb-NEbBv%qr|Qnwn8gEin1g zWAbn#{O*r0J0e3Bc^{{Zr!r+8B&vVd_39TR)kWJ_=C{bcCx^5?M>ZJn`klWmdJZP{ zyROS{q~B32#pHt9^k$&`8l71ByVh2Rr1jeK9JT(OWy(rFm2qtl)ji}yze}?gM>xc6 zdDD=st@Bi(r=IlT`KU4bp2<#hCdo?|=I?)2xK>U1X*Qbrv~6c3>bd)jzjXUh$h)h? zNsb9`9Q!;9E{|n}(PmOgW?XuFVTUwbto0s^RNq=SVL+UgFw& z`c|47hq!7(cA<}R{_R6U-+3Nshdzqx^%&Zk#@KK(WejNwHlsZ9FsmtSI!Y5D-q9doR*V+BvSO5+`{4fbjUT6vt+*GYUMMB%c;g|*wTyf z6%Bra!ZQ0GwOj4VywiC*N2DIq>01ne4BiHw>mS?9d8^) z+EQPf6_PWtTC3cM5iC9Sq|dJu%NPOmqN63l^|PYb1%EQ+3eWk?fZC{Jz414SSorS!I5++|TyGgIk?mqtBo5wC|QJfLvTF5@_*>mBI_B@{ExBu7zf zJ6_j1p-!#apAQBno%TLC@PGrlosj8T^Q3IE+C}p9mE~UV`Mdgt3QHeGoMLyK^UQOv zzn8nmgsg20bC{fXF>HJdqt*|LpYCGvy5v54$43a?J|Fvr51W-McD&rp5_Q*@-ajM3 zb=7rF+rV;}r$AwV^GucP!LZlQ6y>(hSljJ9;+}=C5Gd1Q2OJFEE_Ge^&{%750c^$ci?(%n^ilUmZ( z{XebB+DF`;(o4jTuUnkeFggjdqwY!PR|Tn$Qlo?T6Qxp2u}~es3(Mc{@uPB0?M*Z) z)I#0q-Nb6KyL-mCtbPd*n|}Ji#B+<=uRPmpuGhk|669oqRP&?pk1wx;^=Xh+E8E&U zZ6*(p0*g3vjxYu>yZz5)65k&vUXpdW&~Rvn&dcU~PY)KQ9CrwrJJxXEMBPcd^QXiO zqNQ#f>lF34nWK2#%l4=K_xdG|)Yo-xrupyL?lo7(#+N94mqG^K>!Ce=C9TXNJ|&9B z?K}}j^G`2iJkI-gR8hpmLvE)Wx1Ua6QSshq4b@`47cUf6hrU-C@pJEH<;2YCc}7=H zD#+(#exG4~p4!eUhvbmds_>hDYczi`r@kw)I)X(hyZ?H45xRe6CRt6()#KD|$GRU6 zczp5K3dh)gN^C~jl;XJ!qS8z z-Z9rfS;tdchman2+F(3JxqXhbB9gC@nMYxrj>@J(eA~3#&&1&3l@3!`mGt{trVbyv zz!=IV7j!Kjyka)tsa)>Dl!Fo!FAhDf-1F-9_Mz6Ucq6r?VcA@#^TIRRDl^{4AJRy*LvYl4|MVEo_~QqGIoiIWeuwW>j?nF$7vJA_3LW{* z&s2)?Ny-pphnf~NvnSc55|g$z*mmp7SLMe{xK-1!i;PpvO(XV`f}AV+1{`ODcU%x7 zH|JiKD5_qSSl5~C97(2j{a2c&MSOT;l*38xo+u;t+~^B|ERGm+{s&t!-L6+r_N9d+ zlSLi;o(_Gi4U)dQkg27SJ{PyFHn3!QgZ-Fi*gvT#QK;a{Gx?Ld;NZ&r(}oHk7#tKK zdYyO9dE?}8%9!2jGY2j1^PeN{luX}+J9@;WKK#79c3SS0QQtQw^jmTwK4YyTd!Csj z+QglzJ_oz?cS@A){pLBJeczrbUekB4yeL8a1$BNhpj^A@!j2&eBB5+aB>ILRZRPFJ z;=$jh5`6U|Ywy2r+b4M9OtL5{vgMw_SBa#m`f8$&q~PBb61_8L*Im^m zto`icwp>+sJ4>M5aBqW0>9MTBfLOVDm9)b{vd)HQ`o2TFi%ABvxv959rQlUfcK7Z2 z;JW+P-Hw5R@0>=GlL`o`;rT5j%Vn9L>T0|rg!^|-rBOX%a%`r`^7-h-W6imG7uVP& zJpY;Oz%4?&4l(A+n#V|$-FFtdSJnjc8(t-#HWB??C~J&F?w#7MXP%D(9j@~m36-{)ev9$;f4$2wmg zGlJso6+##$uCj9X2QPlJU7DjQ^E`}y13 zj_}X9>5E-g$+k|;#ZBPTT92fEY%nw8=$OqN705Q~;BSPs219EH+yeNF!>G>d(HOVQ z2uJtWe(SW68)%Im@@AKj9JW1tGv>oySio<-`Uc~Q|<5d+X`ETB_a;J*Q}^7 z$=nP{@w924=9{p0s`ChZ~$qUUhOFCLm8TTiS!oH@-HuJFB*G<|&=A*pjf7_WbC7ghaeHPStfS zyY_M+D^d0Rba(M{UuJ~%!M54r1^@d^$4_ne=eF)R<`xE!#bSH*N$m@g^rvE|$uF5{ zw&)Abu-h&7&Q^TBwWvSKfFb^GiT*Qz9^0<3nr!88R{c!bRsUZCb29mt&ukuV>kj## zSLf^M?t4sSd6b`%+^xG{Pmy(Gw66K^Y%zBWvC z$1j0fq;ufm+)&H@W0L3^f^s zcA3JlT$?VKv-YcnR{d`-<0C$|RW6CYRo~T6pxJi+VoE>lh&GywCSQ5!?9yzFM!fjA(p{d| z$NAgJ`nb*Bs}B@ieQ4!R>yf~%^R>}cv{L!i%q@q7Jz}mMHIDn7#QuKoNMO6%`i3fg zvIlt-dT?rA#N7x(C83Uh`R<+kmp)%hojhC;_PwN0eTypQxnXPWCw7S-nHU^|*YT{0 z=Ja!9^1MsUmPLx5(EH7x!z@DH}J~Daqi_dao`@4OR5znEu$jB z)oit4#Y=VX36)>I2Vu*nQF|sIE|4%ToyRuq5M$rBqbn0()Lj8rMVk+eLswvo%H8rPDUBH zN!d(Cdt^EFPN=LNh_uj|J9E9Hb|Y=2@1eYn8>=zxz8f-hWA_92L=F4Uj;(jPr@IVR z+}|=w&WxB8W`r%Nka=+ZuOS=fDP5V2PnByi6 z??cB<<>s#*>mP`iFstUntL+~VgB#tPf1%TH+S@peeR4j~5LdOFK#?FoZinaJpBj0f z-up&9_!JbL)|1&BBzU;Jc_F}LpLLW|wb46OC``ck@VQRot=bo<97IRa$xic~V`neu zw;Y+=uj9tAUq^7`G=Y@>Uc0>0`bc`WyW@+K`Kcmtg2I9HTdhW0cZ)M#( zz5{Ld6s*k~Zfw#ljtf&`)O>b_;f}hze)-}>m;nCk`J__CtpuU1{Hh`W6RQKHTbBC? z;hrt@38n=BZMxV;y5-c;5mkcF+Yj5c_$ZfIa%elEd*(ZW)2ObF`=nG>YId4Dc`+e* z1?{=h`%Y@~9rs0%WHpdgAsN%=Y%%=y_1Zm~a|VP@ZlT;)k80j^=&2+7ypR>>bXGO* zeK%ok(GLhE$ZG=of9%kA?CZzz%zZi9*cyA~WZQkECWS}0C&LxTCc>N4MfTV2s*s5J zq3v%_m;5$+i;-^7G1C{PUptxKlHhWZaBp?~XcnKE*XG3hoit#vjOW-ohsrdNtR3K+ zF9?mE$yL)UYae#$3vs|28fnG{I%33S-}@dfz&mcKOpxQS7_+x^;_Ta(zrk_1Kuxfl9b0(=>RpmH$^WTgT*?CVrVs}wSYE{kJsPWbGv6HTwa8j~v30jGf^7!UcfqN@=kiD;s%Q?`=``dwzmN@&r zla<%)VlJilZZ6;H))#nlO(&fpQ75U#J^9mI>L&`VloT zI5s$@pXy2j1$08VAw4~1iK`-hgTNblLzB4Zt^3nsGor5yWP6Nu9f#{yXf{?ip>R^% zuhp`NA#;JkF(C%|lwI!8ZyKzEAfl=#b?*{;fPZyEP_=OT@d^BAzO#Mn!?=Rt5)lId zk8q+!jtO(y_~Xo0=ZDhuJ`GE zHPHMp>B{g@-e;^2B|RjR6+5Fh=ur5;;&2mEtWzWFdY0a(;P#}wrrIRx>2;tdE*sJ63 zZw^?R#92GsiqPMFIk&JhXR~Qq>rRK~Qtm~F)9iQm<&zGMj>h*Hb97xqe}A8Z;dyk6 za6f)r>wxqT`zt@U8{5C-_<7v(n+;G!`qz8=e0Xd7dY^z-uRkArSVE!;G_PskmqI5=vCzUytre^LpZ9N! zdr(#>Vg#1Caq{%nz_%M_&XU&GRP3+0#EDwhpaquIAMak&Oe|N)t!bik#Ea=}Jznvv zQF|;*y~n0#!o7f+_j5G%T%GtxO`+3$pNFX{bGY>FoqN7lYESb;$eDRI-eKgvuwWJl zRP0u`*wnPk|N29p3yS?NvnFF8;UHf@szE!Kt?PZ?puYlNeSx#(q~0G7m+(_JBJF4< ztpc2X?yU|5XlK{!sjd{bq*0i}L+5pTg%}DfwWCRr?KG)skvpj{q9()0;UU?@y zvRPG%!UVe50HrzL@8jLKw*-Fg^!(7D++dg1)ro?pC|*sw^4@jV-$BAOl~ufen14HV z0$W`urST8a=u``Zf$bvIrn6NyM5=~HDjF5>O-Ov!MBC5WcldF`D!ECOR_;d^=wYFo z5fkIF=2pt_Z)ICm%ylY@mcBHe@j~N{(#SWrv=Qyiliv5&WdsJANk3q!xz2VbDT!V! z5H!*`5X+YpMTq%UM#}Kg z=QREDT)#^1AY83D7fAkb*6hvFV2{w`7Tbtllj~}4{p#e^D^EX~mkZZiuf{LkW73AR za2}sy#Q%OB*kT^sqrU(4@kYJ5WbP@2A;+eRZ>v4r4m0D~lFIQdPmY%uZCws6N)tVM zRvflB6A9tH{@SVZZ;$t+_6Ay(zXPo3M~I&%d2|LNpWZK9{=3Wkly|t` zqU-roE*H^PZAsQfG<$B5{z!IXVONtt|dI+84>|=|3*zcky_h93<+kfB0(@p;J3ekP$#JEf( zNb#S>Z$eN%SKwQ+TEa89{Y`?FB~r2YEKzjG@u^7WZNH-f2Dj?_g{AGzh!RU8T{V?G z<=0e1g!e?qWO!EgVeKEYO;cjGyYp^qUU^JBfj_Uq=hWdp z?CbsE(EKH8QJebZ(HiB9%~Sb{3VPGk75%U2BaOd^>_?pLrZta0W_~iZ&W)i&e!SuK zPOwBizJ8;?>ex%glG7K+&mMM6pS*tJ&+jicad7%Zw21D+uewD-@T;qSRfe%pvO;s|>Bk;~7@=*ZLRPyo;<6pcF}Sch}{R(&tJY-{Z)9 z1c6y!qd!T`V!Xq_$&qG9{S8BiiP9O=Prr%-|8iU1$QCY$2LX$hxhgh#$v84V5G;C!9^Q?6xKc0gaUfpnR)6$?INQ)Q z_M5Eo*o>Eq@#a5uN|%0#gzRE%-+qhzBy{gl;s%n^*ASLC#r319p&EXcnr{OPv)$km}@6FhY|=oFaDak9K7?(?13ItW!c@Ug&P^BLK^ zNITyr->P?PQIysGA$TC~U6+Vq=l0Lt7o?U2?(F{2tg!Wxf_`h=VfxSUqw?-vi+zgB z=g0ipb+jvv{y1w%fx_z(MbnNRV7+*hiX@*toPU^~Q+}h`{FIW!myrAS_78hXJ=w3` zVkt9jYrV3t%d1OxPF1Pq16zNMMSa|S^!eFD(TM{a{BD2gdKv=M<71ytA?941 zb&oH6p;*g|=r|)5B-?-6O5``NoctKgFxwntclyl13oO4F5%T(Q7N&z5HrKZp2 zPMIxGNaNUDu(=eo(JKc!xEyK4qK%J`M?5N{YfrI1tZT40_wydb1JLavShcm_HgY(S z$#;wi@K1iV&uS`B=>bbv;Ap;+m((tE6JDMeoz=+%geIs`yD@OfFrjaGC7qCP{<9hIW- z{1N^>#}oDMv>JAj^D-{17|6(7WskH>36@Q%vzk*Glc@|R3i}a-P5aE4e8J#M-+rHY zj%$~K6k@1rbLnwmZ~I)*R`@{7iu~=WX7}9V`Gf-n?QWB1a{A_9;e|x}Mk|ghC~1m6 ziB_MX6xZT$y&k(0V&NaH;x%$!+bPxBzvME0T_PmN{K(lD(`zjKvtm`WfYZuUUN52F zaMUF6$uPuD`kp&to+H1*Y%jOiYOC1z?FSflZb1}$GNvWK;=v2w<(o4+jmi7sCxrF6 z{x1@YFw*WMb)_;J*4GNx9>Ph;$UQ0A zQ)p|TGIAoK)YBfCDqSQ`OI;e*xUL(|_2!TQMttwhJfcH|uKM{FHtu_3~M_naeWddDe|Y*cXJpyCzQ%s*9m#BZ1l)tD^FTrB?|D`H0l9>vvk%#MVocA=pD|&GY*u9m}aew2!|4)SDm?7&B1Pc4PH?rdIhuzgiDhb=ejqdNR z`lQ+QcXy#;54){jU19S}$(pcPesKBirh@j6N_y*4%y??(X#Ea@<%ivtmxOcDU2@^N zdT@aRLbu+hhp>;UY8G~D9d_}KPz2B*usx7l(Byjv{Ts!pHLEJlvVHPxwoFD*BCnx3 zm13E?w<7-xEpIjIK)Nq?*|bQUOk(p&o1(8%Nj~%7Qii&@uhEG+xC#iV?ceu(Yt;$- zv|)PIBpIbc%281oehR%AhYID%hN}LdCZol?E<7-4|6ju|E=Ayg-!Hd@sx1aS_bJ1{ zjmvna^(2=yy$#=3>b-gI^}Mm#@*pFrH!cUb_s5i)&bHgEica!2{idBexnk=+UD>*o zPkBhsy#+;CxyvsFS~W{E%^W3vw%a|o8~(YwN_)Edq0Jx*ZOPQX?wSBuW`bjf4P?wE zane6l-NtUWo3MG=!6k0th40E5kA>Im@an$&scO)U(yZv*YyGOb9w%cMGXH@!}E!>)Cp19iLr2$#<&Bj?3@(MH{d123$ z7tv(KmmRy43y)J3ngpU(_d)2HJCz5f!b$a~-Bk;S0MpA4!7p7c+GH)Y$576h?T~Lh zqcosX@p+G4g5f(l+e~W**h6P^dfvsY|NWqCkVZeBhpt=lfp2^!9|$X15&X^9I9~#; zZoA~$nBm5-L#1TLoc8%lj#SlL>$|H=ugPDdKwc7KJ8NaMUi)KDy!^M5wU9kGZR$&u z6VOq%g4`kHMUV9-XIPpK%K;EDY_Z|slxG_M9p8AxqsC$E?IEFYo^^@p>AlY`w;*9Z zWNd!PL2*x%cuszK<1~qNJ*l^|_f5&V9DJ&)H|t+_`YOkdlaY6rZTx%(A#0W&ir%>%dJ70zW>LSfZ+U-_-D8z15bkg=9KFetb`LzW zQNfigGBOFKYlBm!{Ny>A_f`iia-BKhyH14k9WuM;W3}S_^)6$Tp>5mj4*%Zn2sTakE1GrHS-n)j2#DaK=)FB?B|`Z&nWFWn&?PVp zFX$PSYwoiiL@(LlUAM;T7;g&^wiP{m3NkDSRAn1 zTI(qYqbwG`)1a22chzuhtIp*wH(JiM87C4N)(y!Ppe^g=!$)!{M#XPj-M_dmvx#76 z_x0=HwO-4XWv}N3JU#p6PwN{#?UURkmnQzaW{CHhmHGK8EV&)rEkOfkNX1=UT9toU zK}QS&4{GD<$d4C+o3-z~3sv*Kuh{aUPaV_z&c2gk1AP^iRBZ11bmXI~vyyJ|^5VM} z*9`cR^3p`|s^A9OG@>`h;>)cC=cqedF19gZ7>_kqKF0YGty*udw1<3Y`G{yrQM~We z7cD{>H^hGmpvyDiLLi)PnrN(KE`9jx~k1K%rSqVZoR8vqXUEwK+})^Czqe``hX zyhy=5BaQcO2j#XUb2u6Mr>9D{TJ9ah;$4;<+;{SBKw9@lDnYtOSu>vpB6A@A|>81mELdAACzLWPHddY)izQ8qRxzH z`nHh%ZS@xu+mb@nbKUc@}Q&gC_G(6m_ zBreum{GMNREdCLE&M1CcbU1$h_|+G`R>)9){2)ve=PKSroHD7Izs=UnLxaA{e6|x? z+z4mi28vrDUlymI`RwHFI^x)s=6}YcTVzq?!ae$Bz+3zC@$e_p2ebUPNa}1|eIYOD z+`Ay_)GPPlH=qS~J#{6T(l<}hx*bZVX{mZ$Jj*5>}* z_->_T5|Ir77tU^I^`;q)agx`xKk)Qe%!!D&eEQdPBC|R}iDj(O=OOJPCQ+@Vaq6;O z#MJ>eZtPVz@+IhIN0LV3-vu|ik}qKtNA_0_?J82(#X@76I`4NG{r!5=?NG`Cb3OkX zwI`cZmU`AaGZ(#WR`V>ZkqOsd9L(wp`RFsX5PmpdjPM*ef8T>W_~p{j<|?&s!{6y+ zBIlQ?(2UId2F018r>le|GA9d8T1SkUPdL{sh7(aoA2cD@cJcf8INt*DxwDC_@aIxCQXzeA6(bXnOC1UVXiZA zoH}#e?pchb*UqBPmdCm9Kq&R{p%rZ!89r$5g4BACvdY^~L85oM~8AIr$Zm8wgJ6$aenZJ>Wg*B-Kbs ze&jQh&QoHe#ia?JAQMf630Bz3xt5q;C;4F~jcPf{Q8T~vS`Af0+793G2FeDz3X#2R z3@cw&+FaSC_Nbv^mK7hbZ#Nkw-9DW^V6LpoVYvsCZnYm&X;Efu`z4=gyG!Bef2wQC zPE{){y^0mlhK7>h&?Yi^jw>(@OQ(OX^-=^jMx?85S5>Ye7LiYkErOZ<9cfcq_B;-g z9M@8&9j)?}j`}=B5_(Y->PTOrOM?*V@vGG1{T7MIMNi_gP~Y8RR?j)Jr28sC*ZhIz zKN^DX{WhF~MCYla5svnU$W47}<~*VRY>#5Kw^yZjiU~n}YOVsj-%eZ@X7&kqlC9EO zF$6;H(IUOrbr>d%^_``gK2%-bUaZOP*;ah@X?%}baOAX2%d@3PJgR0)F>bu#b_+vp zln70}OA8!BjiIB~hgwz;-LO`*Y}q_W*Zm6fGw0sxH<7s{i^48{e~)9?nXyLq^#8tN zCX41=?pcNEO5U<>SKZ@pMGxHXk9ES}qmJFa$dL1knJ%7#-0IYPK^1aY&0_(`h%yN(aGO>R5Pc0b2?SK9xU!dat3SF6gP{$rP^rUH0?ew)} zv#7(c-T5x91N&@}iuEpjJ6ieaeB}%TA-Ikn9Ic!FQzTA;AdI~)AfJkN* zbs>sYE%VcG>S``?heQu0w(jPFy-9BWV)#2| z=L)~44HSFQyIP1|Zb5S5YPXQezN~9t02UUDt}eG<;Lk-D5Kv8q&h?UsX| z+Mi$2-ahyDS9|+r|Ia5=GvhL6zcdA^=s)y0F=TTka)cxlQA)jBlR zbK2SazR+3|f2@g;@UwQ_XAQgySC9U>e`>>3q2fDt3$YI`&zZg6S0KJ6#foQ0)_*jV zzT?n|CH0dJ?HQ!LFp3Gj1%CJ}7j62-CMubU_xFUKStHld)eA^#_H0H zFTeb5Q;a}-^!-O|v%KFW-pQX6!bJy7HhTU@e)L1P>T<2j;`a+5sJT|Vqy`Ql7iDWv z*{DB9r#fR=PDyThx)f7_eRyOX04 z0}Og;!wH*%XXntf<$0=X5g2D^>4dT>Wt#P?4=wY4dwaqXNZ`1U>1g*!mj3wfkC`+{ zIW;N8Jqyh#^z2h81zYX^G{Qc)Cq{(T#Hx%lXUtC}`FyCil@_*)f3;4Qk3)aD`%HyS z?PFnV;bNeAgwpC(6-JbRW88;^Yuw#;w)^rjx`i>Bw}Yt~Pp&^d+J1sHaM$Uc&zqB`Ujv*qRW=73IE&??=ST+wZ*^C`SHC;&Cy{umujhR8WFRWX z3)pA(wq1$0%yv+EQE;ZhE6$6P-%8<|Z7GCK=|HvF=}iVR?vQ3l!P$PZFY!xnrSj8` z)zG)myhd6KQ1$i$0hu~nuEmlT9QqJw{pgJ4c0~XYqjjQ&oOf&Zer|p8xsxR zC;ck#Z@c?5viI(!3#BI$?JJcuA9_4E6jAR4;I=x)^##GjLq`wU{2uFdtM0MOVOHE@ zgmSie&g>ORY3uzNi`OGhe>?KPOq@vfTcPV%G|Zd7r|U4E3kuZlQkz} zS7aXB6`Qn^6nn~b>wW#D_ls7L9_gc#r3Dwsq-9gZE|zW2k{+5T)hUokzu!#D-@KP#@pwjr)ajLqY0Ez+&3Iz{9 z|IP`N4!`M`6Z&R$C?JU(z^(_jeE^i5rUM-)GXY;~xSk9g;^9uZC6&RU%@y;lkIXfZ zEhmAp>p#aIdZ!WsBygi9C~fl+oz8ElPQp`Q>(r8kYVtKSpwy-4i_I0{D32MI`3qTq z3V=kRVE&tkJ`-k+#mtQT`)U_>fjR$gAb*(qGjS`3%bZU`9bk1mAOJl_Wyd8UoMZ&r zD8wC2p!h;mjxkvP?%Mnh3?SRc67ykX5P-dcArd+#-2rqKnTcS$Kq64>IZ&jUcLGz} z3)B%Y2QVn0H!L;A6gvdh(x=CB;clkD40GrL%1uBQ6+o6cph8dnNt}k4W4yE>jldc3 zzp%vz!N2D*N*43kH?qT7>@?h}sCp6j46!&|H~2}G=-<%Q%e)vs+ZIF+iXekAhb$vM zgGY4v#=}GZoIp$f$SUy77SSs9p}`UA;AZz4A~%x3CahhI?!M%V#?dvzDyyiH>q)CjAXUY>(@sE2)GiMRdoY9ZX z>+zQpcfQhr$qEMuKTaja6+3oZj>GBBCEX*20znXddk;PR2$RI-+~yK_!(?-f<{4!3 z{6f5FM>Y~GCsE@AcSrU4@tTt4(a-ik%J+Q6uHICT}}BH;yAa(fqvnjmb_?J=Z_U=kfspb|k1SXVy(GSx^b+zjlDgX!pvT^%6;rCg0le zoDw_MDRE2UQ-5h5*NoBYhKd1sr|Wj~oLU7Tp?^pG27l5bu3u#+=40l{d*;D~ZFH*J zKF5bo@+1c~W3+xZuE9Hrb#u#ycn?pTJNIN&S-6D|Pp0#vfA!wM*W57wU@oreIl7tH zYE()B40GKnhKhk8Bv50l>r>Yp~lk+ik=@VXBP@O0lpFO@IRj#CPfMOCRTb!TE2 z3u6U$&fjz(kb%!Vqa4n++X_PJ`X^f#I5YGL@3`M}P_X`JT3%QI~kq@Z?U-C2kl}ZRNlsJvIzLJqtz4@q={sDrP8wCp*RC$TysxU5Ybqr)lQ~EH=4?~sQ*a%S zC;X+<3)qStbeJ(2pW<();${;MmquEm#i5Wol zuqsKY<-Aq_2Rg00_oS!CKP(ZpF-DQG`YuC$2(Tyzi%!PGES%TNm-J{d)2XKIN( zpaMs|NkjyKF(jY>sA{cXf|dvWyF(!OBnXCKjjbye(y&&zHX0|SF-I7PdYWOO6Q3## zH?qEBI1o*TL6;UxIG}CxWfc_yre;1-w0?$z33pdVYyPDG33NGBq;|Rb-vx@3S*^mN zwz>;rKD)*9GBw|vBQ!Ue@Fx)03xw&7m#~1$1tNi)Ho=--&I)60_ESbaix%7saC3Yp zGm(m$3PbkXrLybk$y;uo@>gbceVIiXw-RfK8CoM*IE3WrUk<34$ONi-=E2X8#um>E zKw%L63UNLt?_Q^z{ zL0i|X>OVWzME7Le6siS95M_vE6!V9SMCz}8eF%N0@@c)Nh z7Z(1_Irrw2d69cmgSv^zxmdq7feL$6cZQeOTX*Q+-`bF)xq;9BuZN(ASP&t5 zVbiN}G5senMW~%^mn>S(xZq8fcS==ho+ZnCUVyk;(gkgm=m?`yb#Hu?u(0(n3Yyoa$HC#Qfkw2 zsWr)j)N6Ln_fzkyT*AEMjAz2|y@yV&T0!gtV#fDCyrJ zn8+Ptwve%GNR4Q)p%2#63v-(n-`FbB>3(gY$GUKf1^WrdkMz?mvF@M?gh3E=_HsR^ zW|u&kc=9g`d;p28KZ5mob+J>748NLTwz`PQ?Hx%%8qnF37fjRG)QRFDD*hIUwb>V# zkf|OI%fH^C|z4H8RUObOl4ti0tX1tJ&&GWNj&)!m z5!U~nR68sjqi7aC#N$aH8EymT>qI0hBP$h;hhr@q+UNhhi?9+Q;X;u$W8?Kwk9=5u zh^MB13#y<;{>Gny0Fxa`tWzGSzZwXBm$VVFD|(hBkeJZ6x`~ciB=}{S$4Gp-oCKGn z;(6f=!RV3%vcy_wh~|~~;Ka-OtcE9rVe^iiMX6N0A4%6lDP2_WkL%RJzKbS%dBw=S z^d96W2niP%8`nd6Deq`%;RRzXT9g-$gcm@|S_g%!-G-~r1)pb#K4O!UL2$dEwms!f zLQyoOSXHc<5w%!mlC!Ly!+M@P5TLnN7OKb)f;dcD0Q#V1FmV&b06V_R5uO4|#szI; zR&F0+9)xkt%L_|>klnOm1Gikc@*@h!&0F)&Q7c2T9T_@8DdGXqypcbYoCU~F=Ow~Y zT-kA)X$xbayN(W@A$s9jA;lg#djy*`yC62#K(-|7kB5Zykie1K6P@?U6EvM;b+qr( z6ktFD8t;H&q2pD!|KVrb^tq#vL^5&fwKYQ_D?c*fv)4G~?!*8GIeDK?!ZRZF1K9Tv z@wKA7Dg&DKPYFPIY5K}@N*IUohtz-VE4;za>FsjK!Q!W9rZ^7zn<9>RKC}(Jbnh~3 z824x4nd6@iYnye>4T)jua7O-hRT(^kkP4DH=^iUNkJxcL{1tZ`e+1>{ms5xJKmS_s z2vH$W>xn+ktl`uVcC7QP+5m^jCm*2d91>7?)I~8S+hdQ9HFVMC=giVi*j4R zvM31mPoF&%C3I2PT@tbL?A;kFGvSv1Y&Y#T8O;tcRxW+CWJ6s{(7oS8b(VW~yJrm! zHDum%WJn0Z31QTdjknSBvB%jjPAeFReWBiPlJuFJ z7KISn%^dRlIIeoHgIw#`%X_cv)hc*FBT^5YCsa_ zW1l7C?V$Q}>8&|H@_u14jHtKq@3g?^H8_G1MPtlSZ!FX|b6~{~ZzvH#N#z_%z@Y}_ z{~RIVlL_)xZz3KTfD$zhc{Gm4OW*-@+y5Xf>c7c>dw1_r-Sqox^-#_wn;AVn@FgMN z<%oleJ}OrzO7yrcqDs-_Rrxerj!lUcv4r{qi|kNlWhUA>kyrgYG2)wJGn04%gw=w| z9~92;jeRyB{gV6ndmFs?YQh4=)B^Spj$fk!XBRBp* z$5x+yHQ3g89`74*Tlhi#(kE&z6Rmk4j_A3;hBgt$Hu^sKVAqs^0H@0jSA(0K;D}8} zn=>u(7ACL?88MX~qqM1iH7cPLY3|Fs(5MBAL9=S@THfew|0pDlik0c(7sG#%t4iEx z+GQ;QofShQVKH>{Z4ml(gY%f=iQvYPwq_k8JfzrGWo3Ef$9HI){`ZBHm=~MF;ft2~ zXL{Sn==dxG1IBSYIPZ&Na}59`7MP@$m=!V0;evGLK`l+MtnWUcGo4|&^$kznbg*HV>=%K$*`Ae zX5s4wmb)j&R}T^j1=C>zM8!y3aE3^(XH&Q#&ufPB_7(rwp?WX&tSs(-amG`NOJ12Y zMd^T}OREbQ=29D5lj9F~Pt)}!aF?ph!AlG-LJdS+x)9dS!|5g>VH|PVsF%OL?m}xQ4~f4b7V7!dL6pAc@_upm+mOV&>pMs2UOp%;v^OQr>K}yB8U-h)CDmv-> zM|iD<{uk3OCc`URMDF-%H+KP3FR;mnpWjkUeYt`rAYmVGOj!M_6?MArwXA?5%RbN3 z>m-MYR2po#n?lbdig2}lEsJ5WE?DG`U05k>=~{iH~SE)RAPWdtw+WTsoGc&g1gu> zf_w&5fE9JKfSIeJk-kWaShY0~I(c@Qwm^x`wCkomT>FH2a!ny@zl2+iNmZ=Sf$Shb z2y`1~NEy%G9xQ-k9(8dV+X<7_r+)s}{Zx9&$b$+Z#Plv9O$5LL%O8INS+bb;(bgGO z9cMUY(D78lfY18Rl}zD%blz+{09H{{66j(=%6%=7f@Ybm*wk_@E25oX*YlMEg=&7x zpExD{IYsyc8sK~$M}831;;iyX1b$OF5%8cc`UPtBvC%q)DzxX{7LC%i*MiFUv&z0a zeUennL`4w?kt|m!Po&YJ&nG{AoG|7$~{)q?%8^P@r}_#{Yp729<|dp zjqmeEZ@pfnO;r0x?mm5`6;|w63`-S!$8WvujzT11;`GBRzA?ZtYew=2N|CXug-D0t z)iZ~vILP-_AOcDrBZbx1kvpRI)pBY^<-eTvKK;_i>+tFW+MlX z`w(t{&qA)b!pwV_%X=ckHVMa7Rrw^*StGauv1gfOk0{%a(l!vsz& z5@ei7Lu4-M#ZviOPhHLZj}2Ihsw*ROKQwLH48SkDm#Y#LAm(yv#vg$ZZ+!>01}bW& z!!8F#eAHoyQR)N>xNdH3^}O<6xQK6J%6tBMMn;DT$@q?pvziW?7}ZFgk< zqHeR#H^=z)U3fnWaTSw8!z%CN)z_!nEO4vWyfE|7o;#W9s3N4-{YNkg(&Nzz2MCkn zj&lqdx&mYrUMDN5rYBrNSV-@}N1wa1_y56N98**s@2he{ym?_|+4*c%6-oVj8Zrz} zPev0>;STy3P#Xf@BRKGLGTv-xHz5kce#45;J6odRuO4%aLR_co3ZDuppHh+fo9vi5 zYeZN_2{k!i&dg=C;3mZc`9?S`=cNETt?LXd68u}G47>XMl zt|s&L>JLJC9wm%uXi(vG1m5Z_-ch97N9M*IoShq0}S)MAP(^VzzYJPTJrSN0`Lxt zqY62EDvp605b%`xW+AkNenPwvvhW5mN4N=)J3?UQeF7VW#>nqP0(jP`PoPka`scz! zoM{NF2Nou?U<%v*0zWxnCIE~3Td|=GSfuomoO#ki?*{Z2xTqishO!7Uy zui9YBhbSvJ{a~&cXLH39(ws2y*C5oxwM%~Sd^Z8$d^1CH9M~;W_<(_;&!;s?dyB=~ zV=^QtQo;r% zI3zr;R2RH|j-I9HoK^V4wZd zZS;E(!;SqAB%L_tPd%}X%BTexYOw9DXOP{=48>c}o#UlN{Y^(4U^EweP>jZWGm3#h zJQ!3^C#cW>05s!+0G$PF$$<-EOkC5u5~1takHDy4EQD<4)H+w<4Gtjh*UaGd#$m#f z%v_^R&VDAglLCXrFrH+_HCur7>0&%sU<_r@GS|e?NEkrlWUhrUE>%q_9iRY=(zAV{ zSjk)dLPIk6QSG$Wy8Zx@B7rqyf)dnMYdwrr<2#>RPfnn+skr@cJ%{THcH0P3G(JSh z5t3)q659!2b?VEe!xrNK$0b0CfXbc9U)%ulLLwE+$ri;ars%__jni%*c~eKmGr2>> z`23A4Gfq8k<|00hf6*~*B#UCuI7lMW43Ih*IkJM;0K6b)?WR6QM$|eKxQXo-zW}{b zmV!-(P53q5_WKZKn)4d>U5#sTJ}a+Frkl>tn)=-P0}xo4J#5(hH4Zw<1GzrHiQJMN z;nuu~>&sBzCDtzTVFrF+e(^B08`xD4<7n%26GLITmucUsUHT1-j~L&2`TF#jf>2n@ zFYqXbCJ{D^xCZGo1Gq>U8-Q!|YZgdV>DF6Ob$IKmK*9ckZ~K8!MhUzaR7W5U(rd_4 zCnr__x=JQW^~k}K8a5nwF6(uBKI5XzjSyEUmkrlL-|#aSTI-iBq*`nghR}&JTHM3R ze=L{-JjDdgu@3xj?`btHuo|i}|G`ky`$>@7CeG${mTuP<2=o2zZ-W!!?pAYZwy@j4 z8dl5&@oa$syxCYTdQcDIX+#PT6jyqP+9HVkg0J*hdd@Eg4)NHgSmjkp%6HdiuOg!1 zIi_6aH0Ax&Q_%FcS0|brMhrqIZ}YmS6;9RWxLICxhp7fl#df zt3GI3A(~`hG}ib(x6c+bEaq_)e7yTYaX*pp$`W8KA+@XgFl(X+iN63K+`LBO#$)1o z;H)$@3H*hFk|WB6Avoy?8_poGJiwSc@Fz)FXYw7qpSE|iP@34;tOZRot0NCnvo%+F zqC4Tcc0cLCwxLMPN5WoDf@|F}!kqWj0?g%L8JdP_f=Tg!2p#+_JkA;&16%>vQ~qaA zh0R&Cy{GOKQR;cbEs&u2L9^3M>+?fRjftywTbVd@7iaN`xzEDzM-cZo2$flGKQELKtV2#eXQ z8zc#C>S5^*HhA7-o&&5^EATl#EWbOiy``QFxs077o5F-ie6L5gc$7g0qwu2=f zSo?R9jN9v_K+}%>om4h?WW^X~&yjHd*k_SYUL51j*Kne*K?$vd-w$_8=nARl4hurs z+%xQVBpkx^d4XKYTlK4Awx_|01bGJ$ldoQO_hH>c01m)^qVbEH+U$*g7&!7yFaJ9{ zpO%%@ru}^1i<=H(-+uk6n4`4GJV&Cr^<-2 zTNhCD@}O_t5_OKD6VX{@VVUV)#glCfYWEFa4=9Cui6fG3I&XhT|J|8vf%oe&UeU-= zdXmW&4~cJK;(sa5w}#Aie|??sjsY+VFp@Y|Y`%ldOoAW(7Y}vOEz=3JLOynQk2!W2 z7JHRP{YyEtz=<=6oQn&N6`Gp{@pTxED1M9qMIw-)0HaiMbpMMh+f-Ns1Fb)em#Rl( z97nz}2{pX6fA8d7T#IIyM|9@G$f=SCWJk!0RcW^~O@EL`928KqS#T;tkXKm(HsoI3 z$;b7e^4Y(5IsjnP8`WCl5nSyS4Rx5gaR4}%u6%bZ=kexYrLv2!jht$cv*qg_3-b#1 zO^-*lI>$EYY5IgSA&Cwb*zj=7ySFe9$wT@n{CUt9Bb^HzfUiNoScsyo6>Ow*hvzFB zg55f~M@!CjGaKQ9z;*BLKca>v%8);$px3HU04XTCaz|H5j37ss@#jEjEBrsLlD=!2 zxcBD$TaSla5E=l7cAfs_gy1PxX{et6qhuS+Ju0vWwT16-#iO~zCi^ih&EaVlYHWek z>W-g(#G0Jv`&j6_FFARRdv0Ctp5^K7!i8f?0oJVEGRAoUH=S^tf0f7o`vTui!#suG z0V#k9VG|V(%sN@>f*emMH=X*9M~`2U2iU<%`b;mTxkU}m2%J`vhO7)2rN|&f?*Uis z&}@7%k1_;h&cblsEKZ;H1!P8^;14*AM-hE+uEF0z;Wm$R$b`#+rVY3&GKj*vi}h@TPkG3M0{PB`O2 zV{PRR5H=#-d1pG!lK*?tZ)ul2_`la-aX%XR#!`1|^jY((dJ#Udf1w3=-H9>h)%^1H zrYGsMYFaq$f#=LS#q%BJmxoX0OIS)gg|x!}At41Da>ad|H@yVBXd0g5gJnQ@w5T(u zu5_N<09nuSS~%^N&^~;8gDZ$VKH#rj*QKXoZ9XKEzZ!xz4Dbmh4GNVZcs2flcGTb? zS{PXInSArEmulu)(%cE(b?nT<%-@J+(_C9)6VwAgL(qe~G-y98U~$u+7DfodFnb)g zsJF?IGB| zFcJ)bu8q{g960g=&NP7VOmvj+!B^2bjBx9vPqM_PhRNJlVBY~Yu2NXM-hp_cnjzaoA z44)80A^Tu{3^$6NrdwV>3%niOgL~bO=TUN~_9Usdciqm3{H`Rm^LnQYJNF>Qcd$yh z%xa;S&}odsDs_(EC;E}!fsehnqzlF4&}CYa@2x zL|e`D<=EwN;g3NDiI#3y2l85-ce~)n+mA47BTf>^+o%Pe3Ul(?A$GcwM+Ez_Ezxee z%L5CVx8LG0D5L}xWHIp|P?QnZ62>aF4G`|u;CkPSZU)o_rflWZd7zd2ZgC*72%XE* zXAu7dAF>k)Vw@B4cxvRi>}yv(QZ1(_!Wf3!=}&kF&P5gxAc;1gt{|f%ELW04%KpHG z0EusnZ$ewhggUg!ZC(xA!_{z^BPAR}!_eE&)znav{v8`8$+Obvp35f))AI!98|B6y z58tq$jTlNCu^uDGpn!VK@5r3vXzQ(cIwfu#vT(c*y#vhXzVyVN`JMC zr%d0v@h(ppO+EaS@T(9iZ~g)rm%SuOw%~(%*sL6=QVv!)bU17<6PK%z z1_{I%jr4ha4Q)iNHDrv#g~56=(5X$qMkCJs1blM_a06bHd4s;F4~a;K-?biCA)-G) z91Bh`cyj<++=9$eAGZ6Qoz=QWkp~{y^WH17TDzxPvuaM}toTJJ6QU^Z|7QMObv6j> z;8*aGVPHWFZPZ&6Do_jZXGmPuX=ws8Y@L-7BmWv}UD>fA7i}TpsVZysC5(_~Zyz~k zJ7|fh(?58ICK~^t@=do=A2^=d;YIob;5)n>i3lk}9_ZB4ts>bZOyu2~Z>snm(%K|Z zc@}>E=M9olT}$N$;BqI|G0eUjw#7WTx!nk}#!K2D3^@j`)R=KXvvtP;*b<6X7i-Db zH9jpjQ+db8Xq->-rS(K*8}*1`3CIEZiGN%!v7NFD4@rCLhjyw|!^?$>e1AjJwAup$ zuv_gWKhrxw`NwYI*YaD)RX^^i{gWqMH@io)Ji3im`IeRLS@wAQ z?Dcak9j-r$ZkhnX4wgzB49Fo0lTjxw)u9Hv#HHdMHpCF^BO8KMgo5#1W-`x+e{FR7 zBZOM~rr?WF7B#C97hk@@+iP0-m5K8%oPchB%!JLY`P6tGZteYfo?>b7msQ7v#ZKeO zzt~PilsH=+B5iQqCg~PlvB4JGF$Y(Z{;6+nl}0# zT$*(ctCLrRb}a02jw7Bnt-GTspt{<*cC9@V1}E3{Q|_+zlo8pk+|vJ)%5SCT{59+p z)Bg&;5h}q`bVnP}wTOGyJsD@MJv>X1M4gq-9?g1C>+*Bdp3E3}R8XJ&f#8;h*rZ^q zctGyYaZ(DAJMk1%_n#{kIe%xf)^j3^f2A76*1IdL z>*%+1%{IZ}c9zVky$xGnxdl(R(sW~4G-7-_4DMr+GNZb^+aFpeoqG0T;Mdzn^6&iJ zpQLo&{1L8-N)6t1&-vPa@p3fSl8(UH86136g&TGMSqwgAxoz5~Z5I6S((E^s*(x)58ZWO+fxV44H#TTkkQ&Q0D~wKgLA-Stg@lAV7l6iFHtg)^b2Tp$h8(vErn1QSPW%T`Lctb z0mZ-mZcq#H9^65OX|AVHu#=|EpT}%g0_USo!`&QrgPke+JEnD!QN@~xy58)7&EL1C z{s|DuN$%m9VIM&;H*J=J#Mni0FkeI26{~$7D7vfsSS?_IjB^+P0U;jB1lpV-ujK`d ze=Nil5lVy7c}@p--bFvyzV5$J#d7LA)3MjrgffooPjh6;4R|`ELMSLPT= zP#vvMZP7}z&BZC6w=Y;o4Z`~4t9Pv753}6lDg|xS(~Khx+htOyDU1ib(@qr1mbUD0nVvj3&Y#F3gH%L)G%+DBJ>o!ER ztL&FDvbcE-ASLVlXfIesB)Y|bXXItm~C*6XalIDTr=cD7-&yJ3HoTJ!& zxKOt_{qxX|*WP1ouXkPQElGae`z!3_)ES}Z*!a~{olfI(`f~93D1(eDl3nkXi;=Z2 zx3w}mH>1{HTk^EVa|;wd3KR|(Ei-a*c#%2x(jo7=>tP+48;O)*6TAd~TQmQ*cOAXK zK`g2Vkc*hG`4_A}SWkUrKF?GjVXf)feCve1ZjyW?pda-;Qf_E)sCZ0+5%|{(r^aRV zDFH39SIZ@MJ^$6JdY+qzfZ@VMUM zV8;D@-GQQUm$C_xaCFk(2Ni%Y%j2EbIWh}-B0yf2@jbVlzS0SAJ-MQ)H{1a7f9A2v z&90?`c0#;;{f08?XYVUI6Xk1E5Ro zPq6`vUU$E;S#5WdFAQ2l)mByj)Pl&+NDz!C?p7y7A8Q3qUVb+m5d1}#p->bQO{DVW z3}PuDq=BBx4Ctce24&F7uxLB>0UD*LB>;Y*J|&i+HFxklL(tc(>r}HB2JKL0)hh`X z=&|5`WW9G#lg;}*j5I+IP>_y@^xiuXk*4&bROwA>r1t~?L3-~c3J6M-8hWI6kR~7{ z^xi`Y3CWx1^PTzq^JaE7cV;qoCOdoYUVEK$o%7Kiw7|w1BSNTt$5nI$N&^Jk;-&%k z^ji1-xzkDqPD>SEYy}z6PQ&?O7&j*;Ao%_S<{mbH2YhrG(pt|A8@#^0K87#CJD_oy z=(B1xwkraGLUu(I1k2aENfqcIbXkuNwE<&}3!6$;r>kA|S9?8so0zWSo@h${6Zql_ z7dRu&5m9d`md^OoT+02B2g*y;Ph^>@+t zciK?Y-QqCmHua+uc=0$z-QIW^svfP>DgOcvIXXJhe!6)-at`B$4T+*Vfd~H*5B{Z0 zzYIBKRcQ7XDL8(Sf26Rq$R1#NWepTAE_|v}U(kUd<;PX7+xM|cxHitIz6oj)5ZZPR z3jB|5imST$k8qEUvaI+|b07f+?rzM%nc%D^YvwZB=k6M!IH!_nT!F7-CjvL_W!$s- zt&TkA)AGF9IKs`-NlTQt`}C2|N>hcp|B0oAMM4>RS)-HD_>zcde1Ji{kJHoONpDd zT=c~W>K55iaAX{qleT^hW3F+ezCbSC@#ChfO`#}A_XyIJ_RkLn=)g1xzy@QtYHB}} z67sW745z|SFz~e%``wETJkSLie2UA_C&1$|cSm1T+aM9X{?8#BNGY6OGA0RhWVNB| zU8xE?nT7$7uI)IY2>2FP>=2*|E4X8{!Y~T&o`~OGGu$QaoM3%116Z<;AdAc>s}T(P z1<4)4@7ee>1cn9wJJtSdWE;3CC72%F)-}%O_lV8yBb950+&N-n5iy; zZ6fnP1vnJxUcc*YdnpjNSEv$B!Ft{O4#6l`KcU2pBxnMM5q+P~{V}#aXX42^Cs7oS z8D_X8y<4HOf2j#h$eK~cjkd&{;`fQublg^>agv9@tqDxG6akg^3ZXJ~$2E>$cF^V; z^90?Tp+?ga;r$|Ie|bZ_lK!2D#IqP^Ro6f^n-b;*o;J4YV&T)$Al>yat2F07UW=S- zdO^i;8xj~v#|u)QZn#S5e>j%+?O`}vCGN>&S<}rOW6H#om0cXq$7s+o?{_E?YHd3A|Gy49?prgz$>ih`b{`G~Yg}r~t@?Z;3A3i= zm`{F5b=dV~Y&-Rk#aW%5w}S7}u!E6y_Y>j{oag;!bj!O$U`+D2(TF zS!oTs-sJ(z9pliu9IpSwSRrqHF*icsBH+?d`+0y8Sf5Uj5XsZ$3JJZ~PWjwu@@^z# zL29F{uYoha?)Ekyv+7^_m15xkIeaHAHVJVZNMQ#F##Zw#ZIvF%v$9HSd)AKTNoeN1 zQxqJJbC#>un}#AUn+bM2SpRIag`@5#ZdU^G%@fz1L6+83M+&-SvvpPV&UuB#zH$~g zw^AOEo`5jg#$nodMFQSCXbDk7A^tURC0PfZTmNB^yh>GHQjn%?DB z8ErL&6i!UV_+2P7Zxj2Wv420p^Q^4?&hphP9?S(Ub`IeES-gG9VDaw6lbi1>CB>T?klblRA>es?1TgObwkSp>2?xS>5_ za1B(B=GbWNtKk1$)b5U945}Yr^zCp<{1;SE)+b9n*`6kaaIttr^Mn-N_8;s%xD$HH z;DE5VNIxkyCoTcvizIgrXzN(bB9Zr3FD93ZAxz(ns2oNCW6@)R&b`8v7I?M!yb6DBqXo!`v_TzZ_o1{n_HcM^(2&ehY7|Jg<|;ahDZ$+`Ah zDbJ+r4noi4sj8Y`dEBdNw=0SD#C!6Jg=0hO@SpBNC#x_!i3@elff{c)*pCTa_HSovX==*z#+*g+M3z@;nxi1nFOOsfQYB$;^L zvYKk}zq<~3T9*#vIV5gn$DeFvVVR?IZ3nwBhWPj}=hQ|eXD;v^DCAj`A=`@BBFqH< zKEod}1-woYF5`SngR%*_ir!>h?9D}>id?MX8g|4fkN*fPOZ4I^dPpr+XKq~vw3S1r zYsj1n+4ALuS5p2+^iiIFTf3{Qh{8E(cvOU0ZN=?B_WWSVnCLQvXf+GrnOHIy75oIs zEHnM}zzMbE1{ypXiglpgKUs8f6P9Vq-I35d0gA}0e4m9Bap_wfz3W8;SL7!&OkIiFHfHW~l$+~RvP25Dnf zs>Jfwf8XWl?_iWKfROrH+4F-`(mA%z<*>xe0``-9`stjnpL@}ddWT@(NfWu&$Jk^r zQxB)~)bib$`eOo(RDFpfHRowZNp1o02VbY3V6v-6Dm#%DVz7Gj^4z1(TED}}zN|0S zheyS6=2f<<)*LC=5feE$1}Zl@jf#DHEotv=oE(sORio5(_G~12SKvcVcyoT;B4F^q zB{)@bhSxCaOHdw3%HjjjR;txiktz{cV}z~Tz>jKC^E7n0Ld>-h9YHupL5SY#C!`{x zC09WX%JZdWbJH~g}m1ZT}WgJz`O{L%2a<6zlGtY5BR{gici7AhJh%dKV@6OTh zn%W0D*7j&5o!^idSdVb(u0~(dL=R$*T}Mp!j)b+J89rv9kp(&hkEq=q+- zX3^Ob#R$A2t{5H43VU24T-p0W{_fti%KU}Mpiq6$C>Q7GN41Zp&xisGn)Ah!Pvn7s zgCGkv^v22;Fj|X6gmEMZ{Pj9_(f=K!@h0vPY*8h=T@qW?w6j<~Uvpwd5u6#%@`hCf z_^?mKyL8a(y{ISCuRF%V&7;2p!D&0Gdt>4O%r!%6&09+$i4Nbj3_W@aO3dc@K+0>L z6AxRr(!~@BH9-`k*U|mo31rl|Cn3c{A*!9bS(~vKn4J*8&JFf6Vt3;jn<iAs*L|J)mOWF*5_v`)Tp9W0j^iGMH@Z$A1k|=u5y9{TU z({`3(mFL@(9JFBP0JmoTQX5vlJh7EoFX#JXI0IT8It>KvFcs);ETaWB&{*1}`}KF_vxS@ zh@8ApIdw~^niO?W7)~i%f=KmpLpq~Dx!zodSq!SFQKUf&=_g-%UmABP$o(!a>hvq~ zJDXMw;qSr?SIHV}daSxholYyDbU)GW@!~80WWwa(;1K_REGqVeFs1z$9i`H-dn2tu z{&#_$3P$K_5J|)P+1WPN@p}dod{$mjwwXHBhOA|xTh^e-)*pLJQKQ25n(p!9$#tJy za@&1*3ZI{8M~Vm%X#pWHG3zPY+Q$)Y;wPUt;KZC0lZUHb*HW!}OwUI}XraXb!MKXgdA7^q= zem;Qw&gl@acl~qkG+J6MsW&|_piXGm6toxv%7vuO@g9qZ=*b^Yhpm~!(F_O_EC|W) zVY!I?+f@8~KH8o0?bcLX6MkjQaTuNJeKZm`=^obpmN+0+db-sl<=L{-d%O70omTw# z2;-S04to9dkKK8BT4x=7=lK>*km`fnsIk|}>o3^J&g+n_yV`(5(;7#&wjaecTZipX ziELAL4`;yp=Oi1ggTidoPy09@dd4lZdj^~cQm&moqu!?0Q4AHIdc;A~Sz1Z|Ot-vz zw0_H7b)f$eiImOX8VQ@tIfZ_e2V?4mRiWvHQG+QH0iewn$d~HgWOygspspY^a<8q( znU~x7xlu|N4e~-_z@N$JDpbi2Ve_!K3+wvj@(6#blZ_Sj!!niKpuLS#o~6c!a}@bl zQF5h?2!TFi!&?5h_5wkl;(>)kkD0Dl=3ehE>maWbk$BLGga-~1$w)Ip|F%ajMi%$b z1ZqmW1c_ba_0EaB4Ud(-Ek|+PkMIu~DhuiB$cBbx3d1tZLo@$d6}eXFjO*BOh> zITY^--}pm|@cHS}LO6vijH-&GiC@6ync+I8iZvCN`=LZhk015*iIFUPps2sV|J_Nt z1RQ{{9kYQu;VzUr36TI_n%8ub^eNw)`@(L#A*2jZGL$%%1NC?eWx``P3WL3N_LN5+ z{#p0lyE9UTR{vV%6$%rRsbVBykl_y{lUtI>UnJ!rTD7uLkfbg2drSr=yn@kQIJivYd~3Ic(+36=@a!?U)6szj~G zyWPwgsFb<7YVo&ceq62tg+xgdhmK||GJniNsw_}y)b+U>zrj2dJ5HD8p>#ePD) zpFDnul1qC)q1E=*US+_^rCcR=`oa4&DV$Y6Ii~{*Z}8}`$aH=fNcnw0+gZR*-vJ@0 zq!)?b(p1C_2OTkuus)c&xTQd=PhH#(243~*K@mp?ztK0k#3yYM((h~{xvE74#XOa^ zARfJ6DWY{A=x6%2F$nUM3NI?!z{gDVJ|GeHFY-qSekVw|{ci!*oA$rjG3SZrlUsE#CS-gs+l(&z@f~gmuwMdckd~cj00k_PvptFuuO#s*K18Xy_6>-u1+g1iD@ij zvASO$Ju{k#dXLhwovJgTxiKs|YI2>Grnn4s6r|t3@ui^lMDZ+o76zW>{l6)B*2egDm`2)Y9 zsX|cFa}{VOz(~7C0Nb*zhiE38FbnRHugj_IMjs~O670Hg_uSl(P9m1qJcF2AW@xcO z!K(GA?dRJBp6^OOI|3DKTt=og;#@Mb6sBG15VuXQZt9cQV<&o}H=(7DZylZ0uxL30 z1lvp*>o&F2HPj%xXDC@jl6T+Rhbg&7?&i(AjKHS$qeJs+VE~|PJZ|I};-fh@6M!`x ziEm$SZ(neQQ^|S(Sov6&6ggc~6lZ3kf%P%~RSpfa&MMw$y?nzzf2v)@oJP+7sr^(= zE^+VaXho7dq3UqW?YKVyA5Tg^p!eEBh69s@4;HGP?2jpUvyVfkB?~_m%mn(m_Rz|> z8n)xGodYQ%Wq!l^bEo_65_8f3KK_>{0D)o0Cl$WD$`Q%eIE4T)j?FvRcz{GB7F+u5 zBfZa^FL8a?$fwB*^>c4p;+CY>!L;=?yxLjk9wBak_Q?yyz|1cH)+77S*<|GlK7g<{ zvAE)QEy{K{db!-?e6ZVNI|oYjRvx#w^)U-pI}`RvY}s#zQ$f3QGMhF##y~=uQK;eV zJ04ZXVw3H4HLXy!Y#jd5k3XV(V2%YwLV-II4=Eli7JzW*^u4z6dLiF+ChY9BSH);L ziDQivI{6ZMa|CiJw37lyA|2{|WM(eqNj>*kM@{>(|L^ zw|uf0J(wFM{AiuQ7>g}d*!QNFW3`=xL?0p%pI*QmLs0D1Ai#H~F!ZhLDC^!aC0(NM zxfFtEv%>^=z`5EA!6V{W<+(G`jwA22Pt9RKfBV=1SrJLa;m=LHCWD=pmK#pMR1m$( zK33fu^{^t3RW5ERT)9)nM^9iU(4wK#2?-9X*nNUD2OYr#pJKT5#iz=cN ztR7n$f=6L8@710W-*IAVn3FQ{z6G|A&HG{CGEI5fDC~hAT9z(-F{fov4s#?>(Jrz! ztF;4eeV3nCwU)r%yu5Uw{wxj(Wmf+s)TV{#ixt=n4kmjf);S<|I3dPKZXRT6G=1R~ zX!-e|2)D(!hgLv7KRKdgX9t7wi2CzFE8Zwh2*s6q$W>?Dp`C!LAs=aBD2o)~a*W>iC`dib^x`R%1-;=gR6BQ3M~BJe(Na5N-gZ}s^8*vLe}?TzF1 zKz4@H!PdnA+3SINoQYRJ{mN#tg+|C7*yEN!JyKo&4whg%SeT~^7UQ2oR%LIgv2u{m zc9yE2ONJU8d^Pb$Ki;^NE5F*AF?Rk!h>YJ+SxKYxk$~czV#X7(ex9HQNrj_Y<~4{0 z8QstP(=Mi#=0Ggg*MoWtgu)1=ec}XyA3}%hV#uP-eCM@S-u6^mgR&i$Q%{^m+#d{u zxEhLRZPjeOoUFK)5FJtmVR_yo#l#1GK?UW^b5g3}n|XuSENX; z&@!xU-EZuDblDsLg_%AD^$EI3zMTb*$4yoWbvi*=P26^a-!n=UsP3b$G^=Sw(EG#2#YJ z-yrK9K9Qr%fOKI#VPeSmVi?UMmsUlN8vaw39C= zERiY}yZjSL`Xn?E1lEwJ|G9n8+Ls%i>jVYW0@{)Et%g@7G$is-tlu>t?B9@c)5iQKX|!lLZX zodByC<}$}gf$a98H%|DMv~O<~m=+JDT;Xv9^$V5Oza0LpE<+3tAzMd2Ak9O_Hle+~ zz)Am0*7tL|$+{5F7oI3|xaY zWB+zts5HC;^IzTQXKugiVXk!?TJdiM z3m*oXwarb_dtU|Hn(U!DOikyD>cL=DR_~N*FR)Bpd&*OSPx0X|`?uP8NENFp(cnZ< zP{2YK89>yR|!V{9JtSx>zeG)}nqaHD=q&}lF# z$4dRI#k#(DZAE?)9j4^JwH10FW77&xvDRCLNsD?6T=z@`X+B8y5n7bXYuXEZ2e*DG z9^y}yyCl;zHhi{S8>j%{@7q6O-f2U&+=bYYe zKM1#<`oxYA{4oYWNseF~kJATo;-XV+Oj!9Q3*>7rB z?A_18-`R<6ITHDB76-=WDukM6lFtdPEY4iXa~Z~QN^xxn@(e--T1N4htsB@fC5itE zU`V;FMovM$5BGpp#+=K3w_4J+&7C=WDA@wZ_KZ2np^__&pvQ8C9OqcO`T+j8scR#! z5I1DjW;+uF77FOP?@0BC-cK+UpYYub(p_d)P!0lVzO^e&rhaMhgB?t;E$2ZTx?wGrTcSq&J5~|Rf*n`i$jRtmNum9iihP6a z*bGLU=75p*P<>l8Qd+Yf@Ovp!4veM*a77)?bLK z5X$c_da!*dJQsSIQS&oU^zM!QF(z!;+<<3LG_1#QPiyt}LD6ZtLS6ZLgxgZ;$FOyI zYhbch6Dvl55`939A|MVyvGJt#cAZoYIBi}V8D1R$V@~(Ha;pZVjdXL!o9~4+Fsmz{ zJTU!{Z44c9S^CnFvBow!P&4%Hr|<_}p9Qg_1iZ9%_@a1)u$2xdHxk)|kK*Ko=5n-) zf&khi{ZK9OqnOATSQ}2V@w*1EYI>|sZT{8?6}#n=Bj%%5rz7a{>j(bf#zsZ&J(LwN z?c;mX&`yqxK=HDf)X`VD+GWV{E#!k&@Gyy)OP&H_W7&txOpRS!7Re8^xc{JW$V&lj zK@Y{)>psN~iGK}TGa-iCZkdlE4VB4Z^RF|js$;qCdm!b%k{Y%04L=TTM6|Zfzp!h~x6)Vzq~5vcY_1ya8sITTUQD*O}Wn{of*K*dA4{(2{G9@Rwdew4Je6~;I` zI>rZ~-ARVCMRf`qdgR6}np9G%B3v1o&Bus-x}`#-u;HdRnVVqFL6Iv%qL;lN{<*#3 zXHpAYH`jf6)VlIaE|!4zVFv#X_(96x^K*JSWa@f_^B3}I@}Wbng0}}-M50`2vV?d8qnO3nnb}eBs|WECMuw@xL|zv=68xGaTAfcb zH?j*+3)VK*%S?|O+V9j%Z(ZX%qAAJK)^@4xi#we3O-}G_viuMg+}+y$CBe>kpFvAX zp`x6MVA4j^RV3oIhMr=L0+%}ja0t>-BjZl{6&RcUZn4^8PvpW(HzdDJf`h&NnrRp?l^nCAywd%)iQzXvwgSyYreZ# zqA-Iz6~yxS#S_85FZVu|6IUox%nqkrMD{=yF4(AtWSc*+$_~yOg;>2k%25)56fo8p zE?r*xC;&Gz^A^$oEu1wb(uqgbX0l1K$btRyv>Ip^)T{cQ*|6{qDoh=EX{V0uozO%LamaV z5dt?wL=1&FO5N<&ue%TJ4T{Wno z5e)7|lH~kQ>=>@(qxuElS3$pjA77)bxlz>2#zPQd!L@&HQ^cW#Ym)UU4n#|Wu>ACs zb08Sm;@eqt!IAK&Gg}&w#>|@Ca;@BS&AlU?^k;&r1y<^N3w9D%=jxijVol6RPCgGk z-x=*x>FNJf+sj~cyL<59g4o2$?uKAH7yL`ejxnUId}YP!&`Q#T!*nic%eQnPQ-8Jj zaW&OM-nL?+B2d*vEcnn=j??KAebSBVF#r2L%K0~>@{g0Yy4OD_t!Pa${S>3pQvD$Y z(oRvA-B4A?4qo#EOU{?v7C-k~RN2ens~Kvnf86y$sgl9#A=!hzuM3l-4jk`n8P#YN zAtaYo3lqBeQ6r=K&~dNSEi+>-`^zq|tpw-8&xVgWL#C6{?L0=u{<_M4fFUqpl+)f` zM&5L}p~bQb^bzepGSQxDuGCf{#qqIp?;xaWFaX(s(lH5psN3P_vu<=)KotFr#^dP@yM1S^yCpO5mVeTol z*FNK2)u<2S@EId}QX20AVX4EUwzZ-hHPW+6I7O7$21=Tl~PL%UN z2JE$ESK1`@J0)wJq?srEZPsacEC1c!hRnOxOYBQ|m%0YA2;n8-Avv#NN>{SVHwo@{ zq)!ZIH|n4rN@Atw9+F^L)b~#U~!Yad>rAPFN}l#9cO@Mf+GhI8h7~8{%2YFY5-Ha*vrNZ zqX15@nFP(^AEuHLpnQa{?;A3#c2K9K*tI>U0F{A;IGOfyb%Ec>Gj&^{FX|q@u!&x< zJtHKeixii!+icrXt9l$3qW>|hb+pFb;em^pddBcCkHT4|JxOc(q6@}gFnvzlLm)rp z(|EOlSDJj9N~vjk<`fd;xy)(r8uLHVc=D};lcQTE!kR{s5)-qk&A}`4zW#$Ny_I>z zM~1nhp3I?<@HG+tNlC1@3Tu`?(bE*K!hRM=&ySEyA#8i^y;0N z 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%0DML1O|v!zkuL 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%0An0)A$_k)_g&d5vs7;l?a_XS$eC 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 + Assignes a specific dictionary key. + + + + + Defines the contract for customizing dictionary access. + + + + + Determines relative order to apply related behaviors. + + + + + Determines relative order to apply related behaviors. + + + + + Defines the contract for updating dictionary values. + + + + + Sets the stored dictionary value. + + The dictionary adapter. + The key. + The stored value. + The property. + true if the property should be stored. + + + + Defines the contract for building s. + + + + + Builds the dictionary behaviors. + + + + + + Abstract adapter for the support + needed by the + + + + + Adds an element with the provided key and value to the object. + + The to use as the key of the element to add. + The to use as the value of the element to add. + An element with the same key already exists in the object. + key is null. + The is read-only.-or- The has a fixed size. + + + + Removes all elements from the object. + + The object is read-only. + + + + Determines whether the object contains an element with the specified key. + + The key to locate in the object. + + true if the contains an element with the key; otherwise, false. + + key is null. + + + + Returns an object for the object. + + + An object for the object. + + + + + Removes the element with the specified key from the object. + + The key of the element to remove. + The object is read-only.-or- The has a fixed size. + key is null. + + + + Copies the elements of the to an , starting at a particular index. + + The one-dimensional that is the destination of the elements copied from . The must have zero-based indexing. + The zero-based index in array at which copying begins. + array is null. + The type of the source cannot be cast automatically to the type of the destination array. + index is less than zero. + array is multidimensional.-or- index is equal to or greater than the length of array.-or- The number of elements in the source is greater than the available space from index to the end of the destination array. + + + + Returns an enumerator that iterates through a collection. + + + An object that can be used to iterate through the collection. + + + + + Gets a value indicating whether the object has a fixed size. + + + true if the object has a fixed size; otherwise, false. + + + + Gets a value indicating whether the object is read-only. + + + true if the object is read-only; otherwise, false. + + + + Gets an object containing the keys of the object. + + + An object containing the keys of the object. + + + + Gets an object containing the values in the object. + + + An object containing the values in the object. + + + + Gets or sets the with the specified key. + + + + + + Gets the number of elements contained in the . + + + The number of elements contained in the . + + + + Gets a value indicating whether access to the is synchronized (thread safe). + + + true if access to the is synchronized (thread safe); otherwise, false. + + + + Gets an object that can be used to synchronize access to the . + + + An object that can be used to synchronize access to the . + + + + Constant to use when making assembly internals visible to Castle.Core + [assembly: InternalsVisibleTo(CoreInternalsVisible.ToCastleCore)] + + + + + Constant to use when making assembly internals visible to proxy types generated by DynamicProxy. Required when proxying internal types. + [assembly: InternalsVisibleTo(CoreInternalsVisible.ToDynamicProxyGenAssembly2)] + + + + + Abstract implementation of . + + + + + Conract for traversing a . + + + + + Identifies a property should be represented as a nested component. + + + + + Defines the contract for building typed dictionary keys. + + + + + Builds the specified key. + + The dictionary adapter. + The current key. + The property. + The updated key + + + + Defines the contract for retrieving dictionary values. + + + + + Gets the effective dictionary value. + + The dictionary adapter. + The key. + The stored value. + The property. + true if return only existing. + The effective property value. + + + + Applies no prefix. + + + + + Gets or sets the prefix. + + The prefix. + + + + Identifies the dictionary adapter types. + + + + + Identifies an interface or property to be pre-feteched. + + + + + Instructs fetching to occur. + + + + + Instructs fetching according to + + + + + + Gets whether or not fetching should occur. + + + + + Assigns a property to a group. + + + + + Constructs a group assignment. + + The group name. + + + + Constructs a group assignment. + + The group name. + + + + Gets the group the property is assigned to. + + + + + Assigns a specific dictionary key. + + + + + Initializes a new instance of the class. + + The key. + + + + Initializes a new instance of the class. + + The compound key. + + + + Assigns a prefix to the keyed properties of an interface. + + + + + Initializes a default instance of the class. + + + + + Initializes a new instance of the class. + + The prefix for the keyed properties of the interface. + + + + Gets the prefix key added to the properties of the interface. + + + + + Substitutes part of key with another string. + + + + + Initializes a new instance of the class. + + The old value. + The new value. + + + + Requests support for multi-level editing. + + + + + Contract for dictionary initialization. + + + + + Performs any initialization of the + + The dictionary adapter. + The dictionary behaviors. + + + + Generates a new GUID on demand. + + + + + Support for on-demand value resolution. + + + + + Suppress property change notifications. + + + + + Provides simple string formatting from existing properties. + + + + + Gets the string format. + + + + + Gets the format properties. + + + + + Identifies a property should be represented as a delimited string value. + + + + + Gets the separator. + + + + + Converts all properties to strings. + + + + + Gets or sets the format. + + The format. + + + + Suppress property change notifications. + + + + + Contract for property descriptor initialization. + + + + + Performs any initialization of the + + The property descriptor. + The property behaviors. + + + + Assigns a prefix to the keyed properties using the interface name. + + + + + Manages conversion between property values. + + + + + Initializes a new instance of the class. + + The converter. + + + + Gets the effective dictionary value. + + The dictionary adapter. + The key. + The stored value. + The property. + true if return only existing. + The effective property value. + + + + + + + + + Contract for creating additional Dictionary adapters. + + + + + Contract for manipulating the Dictionary adapter. + + + + + Contract for editing the Dictionary adapter. + + + + + Contract for managing Dictionary adapter notifications. + + + + + Contract for validating Dictionary adapter. + + + + + Uses Reflection.Emit to expose the properties of a dictionary + through a dynamic implementation of a typed interface. + + + + + Defines the contract for building typed dictionary adapters. + + + + + Gets a typed adapter bound to the . + + The typed interface. + The underlying source of properties. + An implementation of the typed interface bound to the dictionary. + + The type represented by T must be an interface with properties. + + + + + Gets a typed adapter bound to the . + + The typed interface. + The underlying source of properties. + An implementation of the typed interface bound to the dictionary. + + The type represented by T must be an interface with properties. + + + + + Gets a typed adapter bound to the . + + The typed interface. + The underlying source of properties. + The property descriptor. + An implementation of the typed interface bound to the dictionary. + + The type represented by T must be an interface with properties. + + + + + Gets a typed adapter bound to the . + + The typed interface. + The underlying source of properties. + An implementation of the typed interface bound to the namedValues. + + The type represented by T must be an interface with properties. + + + + + Gets a typed adapter bound to the . + + The typed interface. + The underlying source of properties. + An implementation of the typed interface bound to the namedValues. + + The type represented by T must be an interface with properties. + + + + + Gets a typed adapter bound to the . + + The typed interface. + The underlying source of properties. + An implementation of the typed interface bound to the xpath navigable. + + The type represented by T must be an interface with properties. + + + + + Gets a typed adapter bound to the . + + The typed interface. + The underlying source of properties. + An implementation of the typed interface bound to the xpath navigable. + + The type represented by T must be an interface with properties. + + + + + Gets the associated with the type. + + The typed interface. + The adapter meta-data. + + + + Gets the associated with the type. + + The typed interface. + The property descriptor. + The adapter meta-data. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Describes a dictionary property. + + + + + Initializes an empty class. + + + + + Initializes a new instance of the class. + + The property. + The property behaviors. + + + + Copies an existinginstance of the class. + + + + + + + Gets the key. + + The dictionary adapter. + The key. + The descriptor. + + + + + Adds the key builder. + + The builder. + + + + Adds the key builders. + + The builders. + + + + Copies the key builders to the other + + + + + + + Copies the selected key builders to the other + + + + + + + + Gets the property value. + + The dictionary adapter. + The key. + The stored value. + The descriptor. + true if return only existing. + + + + + Adds the dictionary getter. + + The getter. + + + + Adds the dictionary getters. + + The getters. + + + + Copies the property getters to the other + + + + + + + Copies the selected property getters to the other + + + + + + + + Sets the property value. + + The dictionary adapter. + The key. + The value. + The descriptor. + + + + + Adds the dictionary setter. + + The setter. + + + + Adds the dictionary setters. + + The setters. + + + + Copies the property setters to the other + + + + + + + Copies the selected property setters to the other + + + + + + + + Adds the behaviors. + + + + + + + Adds the behaviors. + + + + + + + Adds the behaviors from the builders. + + + + + + + Copies the behaviors to the other + + + + + + + Copies the behaviors to the other + + + + + + + + + + + + + Gets the property name. + + + + + Gets the property type. + + + + + Gets the property. + + The property. + + + + Returns true if the property is dynamic. + + + + + Gets additional state. + + + + + Determines if property should be fetched. + + + + + Determines if notifications should occur. + + + + + Gets the property behaviors. + + + + + Gets the type converter. + + The type converter. + + + + Gets the key builders. + + The key builders. + + + + Gets the setter. + + The setter. + + + + Gets the getter. + + The getter. + + + + Adds the dictionary initializers. + + The initializers. + + + + Adds the dictionary initializers. + + The initializers. + + + + Copies the initializers to the other + + + + + + + Copies the filtered initializers to the other + + + + + + + + Adds the dictionary meta-data initializers. + + The meta-data initializers. + + + + Adds the dictionary meta-data initializers. + + The meta-data initializers. + + + + Copies the meta-initializers to the other + + + + + + + Copies the filtered meta-initializers to the other + + + + + + + + Gets the initializers. + + The initializers. + + + + Gets the meta-data initializers. + + The meta-data initializers. + + + + Contract for dictionary meta-data initialization. + + + + + Performs any initialization of the dictionary adapter meta-data. + + The dictionary adapter factory. + The dictionary adapter meta. + + + + + Contract for dictionary validation. + + + + + Determines if is valid. + + The dictionary adapter. + true if valid. + + + + Validates the . + + The dictionary adapter. + The error summary information. + + + + Validates the for a property. + + The dictionary adapter. + The property to validate. + The property summary information. + + + + Invalidates any results cached by the validator. + + The dictionary adapter. + + + + + + + + + Initializes a new instance of the class. + + The name values. + + + + Determines whether the object contains an element with the specified key. + + The key to locate in the object. + + true if the contains an element with the key; otherwise, false. + + key is null. + + + + Adapts the specified name values. + + The name values. + + + + + Gets a value indicating whether the object is read-only. + + + true if the object is read-only; otherwise, false. + + + + Gets or sets the with the specified key. + + + + + + Helper class for retrieving attributes. + + + + + Gets the attribute. + + The member. + The member attribute. + + + + Gets the attributes. Does not consider inherited attributes! + + The member. + The member attributes. + + + + Gets the type attribute. + + The type. + The type attribute. + + + + Gets the type attributes. + + The type. + The type attributes. + + + + Gets the type converter. + + The member. + + + + + Gets the attribute. + + The member. + The member attribute. + + + + Contract for typed dynamic value resolution. + + + + + + Contract for dynamic value resolution. + + + + + Encapsulates an invocation of a proxied method. + + + + + Overrides the value of an argument at the given with the + new provided. + + + This method accepts an , however the value provided must be compatible + with the type of the argument defined on the method, otherwise an exception will be thrown. + + The index of the argument to override. + The new value for the argument. + + + + Gets the value of the argument at the specified . + + The index. + The value of the argument at the specified . + + + + Returns the concrete instantiation of the on the proxy, with any generic + parameters bound to real types. + + + The concrete instantiation of the on the proxy, or the if + not a generic method. + + Can be slower than calling . + + + + Returns the concrete instantiation of , with any + generic parameters bound to real types. + For interface proxies, this will point to the on the target class. + + The concrete instantiation of , or + if not a generic method. + In debug builds this can be slower than calling . + + + + Proceeds the call to the next interceptor in line, and ultimately to the target method. + + + Since interface proxies without a target don't have the target implementation to proceed to, + it is important, that the last interceptor does not call this method, otherwise a + will be thrown. + + + + + Gets the proxy object on which the intercepted method is invoked. + + Proxy object on which the intercepted method is invoked. + + + + Gets the object on which the invocation is performed. This is different from proxy object + because most of the time this will be the proxy target object. + + + The invocation target. + + + + Gets the type of the target object for the intercepted method. + + The type of the target object. + + + + Gets the arguments that the has been invoked with. + + The arguments the method was invoked with. + + + + Gets the generic arguments of the method. + + The generic arguments, or null if not a generic method. + + + + Gets the representing the method being invoked on the proxy. + + The representing the method being invoked. + + + + For interface proxies, this will point to the on the target class. + + The method invocation target. + + + + Gets or sets the return value of the method. + + The return value of the method. + + + + Used during the target type inspection process. Implementors have a chance to customize the + proxy generation process. + + + + + Invoked by the generation process to determine if the specified method should be proxied. + + The type which declares the given method. + The method to inspect. + True if the given method should be proxied; false otherwise. + + + + Invoked by the generation process to notify that a member was not marked as virtual. + + The type which declares the non-virtual member. + The non-virtual member. + + This method gives an opportunity to inspect any non-proxyable member of a type that has + been requested to be proxied, and if appropriate - throw an exception to notify the caller. + + + + + Invoked by the generation process to notify that the whole process has completed. + + + + + Interface describing elements composing generated type + + + + + Checks if the method is public or protected. + + + + + + + Performs some basic screening and invokes the + to select methods. + + + + + + + + + Provides functionality for disassembling instances of attributes to CustomAttributeBuilder form, during the process of emiting new types by Dynamic Proxy. + + + + + Disassembles given attribute instance back to corresponding CustomAttributeBuilder. + + An instance of attribute to disassemble + corresponding 1 to 1 to given attribute instance, or null reference. + + Implementers should return that corresponds to given attribute instance 1 to 1, + that is after calling specified constructor with specified arguments, and setting specified properties and fields with values specified + we should be able to get an attribute instance identical to the one passed in . Implementer can return null + if it wishes to opt out of replicating the attribute. Notice however, that for some cases, like attributes passed explicitly by the user + it is illegal to return null, and doing so will result in exception. + + + + + Handles error during disassembly process + + Type of the attribute being disassembled + Exception thrown during the process + usually null, or (re)throws the exception + + + + Here we try to match a constructor argument to its value. + Since we can't get the values from the assembly, we use some heuristics to get it. + a/ we first try to match all the properties on the attributes by name (case insensitive) to the argument + b/ if we fail we try to match them by property type, with some smarts about convertions (i,e: can use Guid for string). + + + + + We have the following rules here. + Try to find a matching type, failing that, if the parameter is string, get the first property (under the assumption that + we can convert it. + + + + + Attributes can only accept simple types, so we return null for null, + if the value is passed as string we call to string (should help with converting), + otherwise, we use the value as is (enums, integer, etc). + + + + + Applied to the assemblies saved by in order to persist the cache data included in the persisted assembly. + + + + + Base class that exposes the common functionalities + to proxy generation. + + + + + Generates a parameters constructor that initializes the proxy + state with just to make it non-null. + + This constructor is important to allow proxies to be XML serializable + + + + + + It is safe to add mapping (no mapping for the interface exists) + + + + + + + + Generates the constructor for the class that extends + + + + + + + + + Default implementation of interface producing in-memory proxy assemblies. + + + + + Abstracts the implementation of proxy type construction. + + + + + Creates a proxy type for given , using provided. + + The class type to proxy. + The proxy generation options. + The generated proxy type. + Thrown when is a generic type definition. + Thrown when is not public. + Note that to avoid this exception, you can mark offending type internal, and define + pointing to Castle Dynamic Proxy assembly, in assembly containing that type, if this is appropriate. + + + + + Creates a proxy type for given , implementing , using provided. + + The class type to proxy. + Additional interface types to proxy. + The proxy generation options. + The generated proxy type. + + Implementers should return a proxy type for the specified class and interfaces. + Additional interfaces should be only 'mark' interfaces, that is, they should work like interface proxy without target. (See method.) + + Thrown when or any of is a generic type definition. + Thrown when or any of is not public. + Note that to avoid this exception, you can mark offending type internal, and define + pointing to Castle Dynamic Proxy assembly, in assembly containing that type, if this is appropriate. + + + + + Creates a proxy type for given , implementing , using provided. + + The class type to proxy. + Additional interface types to proxy. + The proxy generation options. + The generated proxy type. + + Implementers should return a proxy type for the specified class and interfaces. + Additional interfaces should be only 'mark' interfaces, that is, they should work like interface proxy without target. (See method.) + + Thrown when or any of is a generic type definition. + Thrown when or any of is not public. + Note that to avoid this exception, you can mark offending type internal, and define + pointing to Castle Dynamic Proxy assembly, in assembly containing that type, if this is appropriate. + + + + + Creates a proxy type that proxies calls to members on , implementing , using provided. + + The interface type to proxy. + Additional interface types to proxy. + Type implementing on which calls to the interface members should be intercepted. + The proxy generation options. + The generated proxy type. + + Implementers should return a proxy type for the specified interface that 'proceeds' executions to the specified target. + Additional interfaces should be only 'mark' interfaces, that is, they should work like interface proxy without target. (See method.) + + Thrown when or any of is a generic type definition. + Thrown when or any of is not public. + Note that to avoid this exception, you can mark offending type internal, and define + pointing to Castle Dynamic Proxy assembly, in assembly containing that type, if this is appropriate. + + + + + Creates a proxy type for given that delegates all calls to the provided interceptors. + + The interface type to proxy. + Additional interface types to proxy. + The proxy generation options. + The generated proxy type. + + Implementers should return a proxy type for the specified interface and additional interfaces that delegate all executions to the specified interceptors. + + Thrown when or any of is a generic type definition. + Thrown when or any of is not public. + Note that to avoid this exception, you can mark offending type internal, and define + pointing to Castle Dynamic Proxy assembly, in assembly containing that type, if this is appropriate. + + + + + Creates a proxy type for given and that delegates all calls to the provided interceptors and allows interceptors to switch the actual target of invocation. + + The interface type to proxy. + Additional interface types to proxy. + The proxy generation options. + The generated proxy type. + + Implementers should return a proxy type for the specified interface(s) that delegate all executions to the specified interceptors + and uses an instance of the interface as their targets (i.e. ), rather than a class. All classes should then implement interface, + to allow interceptors to switch invocation target with instance of another type implementing called interface. + + Thrown when or any of is a generic type definition. + Thrown when or any of is not public. + Note that to avoid this exception, you can mark offending type internal, and define + pointing to Castle Dynamic Proxy assembly, in assembly containing that type, if this is appropriate. + + + + + Gets or sets the that this logs to. + + + + + Gets the associated with this builder. + + The module scope associated with this builder. + + + + Initializes a new instance of the class with new . + + + + + Initializes a new instance of the class. + + The module scope for generated proxy types. + + + + Registers custom disassembler to handle disassembly of specified type of attributes. + + Type of attributes to handle + Disassembler converting existing instances of Attributes to CustomAttributeBuilders + + When disassembling an attribute Dynamic Proxy will first check if an custom disassembler has been registered to handle attributes of that type, + and if none is found, it'll use the . + + + + + Attributes should be replicated if they are non-inheritable, + but there are some special cases where the attributes means + something to the CLR, where they should be skipped. + + + + + Initializes a new instance of the class. + + Target element. This is either target type or target method for invocation types. + The type of the proxy. This is base type for invocation types. + The interfaces. + The options. + + + + Initializes a new instance of the class. + + Type of the target. + The interfaces. + The options. + + + s + Provides appropriate Ldc.X opcode for the type of primitive value to be loaded. + + + + + Provides appropriate Ldind.X opcode for + the type of primitive value to be loaded indirectly. + + + + + Emits a load opcode of the appropriate kind for a constant string or + primitive value. + + + + + + + Emits a load opcode of the appropriate kind for the constant default value of a + type, such as 0 for value types and null for reference types. + + + + + Emits a load indirect opcode of the appropriate type for a value or object reference. + Pops a pointer off the evaluation stack, dereferences it and loads + a value of the specified type. + + + + + + + Emits a store indirectopcode of the appropriate type for a value or object reference. + Pops a value of the specified type and a pointer off the evaluation stack, and + stores the value. + + + + + + + Summary description for PropertiesCollection. + + + + + Wraps a reference that is passed + ByRef and provides indirect load/store support. + + + + + Summary description for NewArrayExpression. + + + + + + + + + + Provides appropriate Stind.X opcode + for the type of primitive value to be stored indirectly. + + + + + Returns list of all unique interfaces implemented given types, including their base interfaces. + + + + + + + Initializes a new instance of the class. + + The name. + Type declaring the original event being overriten, or null. + + The add method. + The remove method. + The attributes. + + + + Represents the scope of uniquenes of names for types and their members + + + + + Gets a unique name based on + + Name suggested by the caller + Unique name based on . + + Implementers should provide name as closely resembling as possible. + Generally if no collision occurs it is suggested to return suggested name, otherwise append sequential suffix. + Implementers must return deterministic names, that is when is called twice + with the same suggested name, the same returned name should be provided each time. Non-deterministic return + values, like appending random suffices will break serialization of proxies. + + + + + Returns new, disposable naming scope. It is responsibilty of the caller to make sure that no naming collision + with enclosing scope, or other subscopes is possible. + + New naming scope. + + + + Returns the methods implemented by a type. Use this instead of Type.GetMethods() to work around a CLR issue + where duplicate MethodInfos are returned by Type.GetMethods() after a token of a generic type's method was loaded. + + + + + Determines whether this assembly has internals visible to dynamic proxy. + + The assembly to inspect. + + + + Determines whether the specified method is internal. + + The method. + + true if the specified method is internal; otherwise, false. + + + + + Because we need to cache the types based on the mixed in mixins, we do the following here: + - Get all the mixin interfaces + - Sort them by full name + - Return them by position + + The idea is to have reproducable behavior for the case that mixins are registered in different orders. + This method is here because it is required + + + + + Summary description for ModuleScope. + + + + + The default file name used when the assembly is saved using . + + + + + The default assembly (simple) name used for the assemblies generated by a instance. + + + + + Initializes a new instance of the class; assemblies created by this instance will not be saved. + + + + + Initializes a new instance of the class, allowing to specify whether the assemblies generated by this instance + should be saved. + + If set to true saves the generated module. + + + + Initializes a new instance of the class, allowing to specify whether the assemblies generated by this instance + should be saved. + + If set to true saves the generated module. + If set to true disables ability to generate signed module. This should be used in cases where ran under constrained permissions. + + + + Initializes a new instance of the class, allowing to specify whether the assemblies generated by this instance + should be saved and what simple names are to be assigned to them. + + If set to true saves the generated module. + If set to true disables ability to generate signed module. This should be used in cases where ran under constrained permissions. + The simple name of the strong-named assembly generated by this . + The path and file name of the manifest module of the strong-named assembly generated by this . + The simple name of the weak-named assembly generated by this . + The path and file name of the manifest module of the weak-named assembly generated by this . + + + + Initializes a new instance of the class, allowing to specify whether the assemblies generated by this instance + should be saved and what simple names are to be assigned to them. + + If set to true saves the generated module. + If set to true disables ability to generate signed module. This should be used in cases where ran under constrained permissions. + Naming scope used to provide unique names to generated types and their members (usually via sub-scopes). + The simple name of the strong-named assembly generated by this . + The path and file name of the manifest module of the strong-named assembly generated by this . + The simple name of the weak-named assembly generated by this . + The path and file name of the manifest module of the weak-named assembly generated by this . + + + + Returns a type from this scope's type cache, or null if the key cannot be found. + + The key to be looked up in the cache. + The type from this scope's type cache matching the key, or null if the key cannot be found + + + + Registers a type in this scope's type cache. + + The key to be associated with the type. + The type to be stored in the cache. + + + + Gets the key pair used to sign the strong-named assembly generated by this . + + + + + + Gets the specified module generated by this scope, creating a new one if none has yet been generated. + + If set to true, a strong-named module is returned; otherwise, a weak-named module is returned. + A strong-named or weak-named module generated by this scope, as specified by the parameter. + + + + Gets the strong-named module generated by this scope, creating a new one if none has yet been generated. + + A strong-named module generated by this scope. + + + + Gets the weak-named module generated by this scope, creating a new one if none has yet been generated. + + A weak-named module generated by this scope. + + + + Saves the generated assembly with the name and directory information given when this instance was created (or with + the and current directory if none was given). + + + + This method stores the generated assembly in the directory passed as part of the module information specified when this instance was + constructed (if any, else the current directory is used). If both a strong-named and a weak-named assembly + have been generated, it will throw an exception; in this case, use the overload. + + + If this was created without indicating that the assembly should be saved, this method does nothing. + + Both a strong-named and a weak-named assembly have been generated. + The path of the generated assembly file, or null if no file has been generated. + + + + Saves the specified generated assembly with the name and directory information given when this instance was created + (or with the and current directory if none was given). + + True if the generated assembly with a strong name should be saved (see ); + false if the generated assembly without a strong name should be saved (see . + + + This method stores the specified generated assembly in the directory passed as part of the module information specified when this instance was + constructed (if any, else the current directory is used). + + + If this was created without indicating that the assembly should be saved, this method does nothing. + + + No assembly has been generated that matches the parameter. + + The path of the generated assembly file, or null if no file has been generated. + + + + Loads the generated types from the given assembly into this 's cache. + + The assembly to load types from. This assembly must have been saved via or + , or it must have the manually applied. + + This method can be used to load previously generated and persisted proxy types from disk into this scope's type cache, eg. in order + to avoid the performance hit associated with proxy generation. + + + + + Users of this should use this lock when accessing the cache. + + + + + Gets the strong-named module generated by this scope, or if none has yet been generated. + + The strong-named module generated by this scope, or if none has yet been generated. + + + + Gets the file name of the strongly named module generated by this scope. + + The file name of the strongly named module generated by this scope. + + + + Gets the directory where the strongly named module generated by this scope will be saved, or if the current directory + is used. + + The directory where the strongly named module generated by this scope will be saved when is called + (if this scope was created to save modules). + + + + Gets the weak-named module generated by this scope, or if none has yet been generated. + + The weak-named module generated by this scope, or if none has yet been generated. + + + + Gets the file name of the weakly named module generated by this scope. + + The file name of the weakly named module generated by this scope. + + + + Gets the directory where the weakly named module generated by this scope will be saved, or if the current directory + is used. + + The directory where the weakly named module generated by this scope will be saved when is called + (if this scope was created to save modules). + + + + ProxyBuilder that persists the generated type. + + + The saved assembly contains just the last generated type. + + + + + Initializes a new instance of the class. + + + + + Saves the generated assembly to a physical file. Note that this renders the unusable. + + The path of the generated assembly file, or null if no assembly has been generated. + This method does not support saving multiple files. If both a signed and an unsigned module have been generated, use the + respective methods of the . + + + + Initializes a new instance of the class. + + The hook. + + + + Initializes a new instance of the class. + + + + + Provides proxy objects for classes and interfaces. + + + + + Initializes a new instance of the class. + + Proxy types builder. + + + + Initializes a new instance of the class. + + + + + Creates proxy object intercepting calls to members of interface on object with given . + + Type of the interface implemented by which will be proxied. + The target object, calls to which will be intercepted. + The interceptors called during the invocation of proxied methods. + Object proxying calls to members of on object. + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given array is a null reference (Nothing in Visual Basic). + Thrown when given is not an interface type. + Thrown when no default constructor exists on actual type of object. + Thrown when default constructor of actual type of throws an exception. + + This method generates new proxy type for each type of , which affects performance. If you don't want to proxy types differently depending on the type of the target + use method. + This method uses implementation to generate a proxy type. + As such caller should expect any type of exception that given implementation may throw. + + + + + Creates proxy object intercepting calls to members of interface on object with given . + + Type of the interface implemented by which will be proxied. + The target object, calls to which will be intercepted. + The proxy generation options used to influence generated proxy type and object. + The interceptors called during the invocation of proxied methods. + + Object proxying calls to members of on object. + + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given array is a null reference (Nothing in Visual Basic). + Thrown when given is not an interface type. + Thrown when no default constructor exists on actual type of object. + Thrown when default constructor of actual type of throws an exception. + + This method generates new proxy type for each type of , which affects performance. If you don't want to proxy types differently depending on the type of the target + use method. + This method uses implementation to generate a proxy type. + As such caller should expect any type of exception that given implementation may throw. + + + + + Creates proxy object intercepting calls to members of interface on object with given . + + Type of the interface implemented by which will be proxied. + The target object, calls to which will be intercepted. + The interceptors called during the invocation of proxied methods. + + Object proxying calls to members of type on object. + + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given array is a null reference (Nothing in Visual Basic). + Thrown when given is a generic type definition. + Thrown when given is not an interface type. + Thrown when given does not implement interface. + Thrown when no default constructor exists on actual type of object. + Thrown when default constructor of actual type of throws an exception. + + This method generates new proxy type for each type of , which affects performance. If you don't want to proxy types differently depending on the type of the target + use method. + This method uses implementation to generate a proxy type. + As such caller should expect any type of exception that given implementation may throw. + + + + + Creates proxy object intercepting calls to members of interface on object with given . + + Type of the interface implemented by which will be proxied. + The target object, calls to which will be intercepted. + The proxy generation options used to influence generated proxy type and object. + The interceptors called during the invocation of proxied methods. + + Object proxying calls to members of type on object. + + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given array is a null reference (Nothing in Visual Basic). + Thrown when given is a generic type definition. + Thrown when given is not an interface type. + Thrown when given does not implement interface. + Thrown when no default constructor exists on actual type of object. + Thrown when default constructor of actual type of throws an exception. + + This method generates new proxy type for each type of , which affects performance. If you don't want to proxy types differently depending on the type of the target + use method. + This method uses implementation to generate a proxy type. + As such caller should expect any type of exception that given implementation may throw. + + + + + Creates proxy object intercepting calls to members of interface on object with given . + + Type of the interface implemented by which will be proxied. + The target object, calls to which will be intercepted. + Additional interface types. Calls to their members will be proxied as well. + The interceptors called during the invocation of proxied methods. + + Object proxying calls to members of and types on object. + + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given array is a null reference (Nothing in Visual Basic). + Thrown when given or any of is a generic type definition. + Thrown when given is not an interface type. + Thrown when given does not implement interface. + Thrown when no default constructor exists on actual type of object. + Thrown when default constructor of actual type of throws an exception. + + This method generates new proxy type for each type of , which affects performance. If you don't want to proxy types differently depending on the type of the target + use method. + This method uses implementation to generate a proxy type. + As such caller should expect any type of exception that given implementation may throw. + + + + + Creates proxy object intercepting calls to members of interface on object with given . + + Type of the interface implemented by which will be proxied. + The target object, calls to which will be intercepted. + The proxy generation options used to influence generated proxy type and object. + Additional interface types. Calls to their members will be proxied as well. + The interceptors called during the invocation of proxied methods. + + Object proxying calls to members of and types on object. + + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given array is a null reference (Nothing in Visual Basic). + Thrown when given or any of is a generic type definition. + Thrown when given is not an interface type. + Thrown when given does not implement interface. + Thrown when no default constructor exists on actual type of object. + Thrown when default constructor of actual type of throws an exception. + + This method generates new proxy type for each type of , which affects performance. If you don't want to proxy types differently depending on the type of the target + use method. + This method uses implementation to generate a proxy type. + As such caller should expect any type of exception that given implementation may throw. + + + + + Creates proxy object intercepting calls to members of interface on object with given . + Interceptors can use interface to provide other target for method invocation than default . + + Type of the interface implemented by which will be proxied. + The target object, calls to which will be intercepted. + The interceptors called during the invocation of proxied methods. + + Object proxying calls to members of type on object or alternative implementation swapped at runtime by an interceptor. + + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given array is a null reference (Nothing in Visual Basic). + Thrown when given is a generic type definition. + Thrown when given is not an interface type. + Thrown when given does not implement interface. + Thrown when no default constructor exists on actual type of object. + Thrown when default constructor of actual type of throws an exception. + + This method uses implementation to generate a proxy type. + As such caller should expect any type of exception that given implementation may throw. + + + + + Creates proxy object intercepting calls to members of interface on object with given . + Interceptors can use interface to provide other target for method invocation than default . + + Type of the interface implemented by which will be proxied. + The target object, calls to which will be intercepted. + The interceptors called during the invocation of proxied methods. + + Object proxying calls to members of type on object or alternative implementation swapped at runtime by an interceptor. + + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given array is a null reference (Nothing in Visual Basic). + Thrown when given is not an interface type. + Thrown when no default constructor exists on actual type of object. + Thrown when default constructor of actual type of throws an exception. + + This method uses implementation to generate a proxy type. + As such caller should expect any type of exception that given implementation may throw. + + + + + Creates proxy object intercepting calls to members of interface on object with given . + Interceptors can use interface to provide other target for method invocation than default . + + Type of the interface implemented by which will be proxied. + The target object, calls to which will be intercepted. + The proxy generation options used to influence generated proxy type and object. + The interceptors called during the invocation of proxied methods. + + Object proxying calls to members of type on object or alternative implementation swapped at runtime by an interceptor. + + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given array is a null reference (Nothing in Visual Basic). + Thrown when given is not an interface type. + Thrown when no default constructor exists on actual type of object. + Thrown when default constructor of actual type of throws an exception. + + This method uses implementation to generate a proxy type. + As such caller should expect any type of exception that given implementation may throw. + + + + + Creates proxy object intercepting calls to members of interface on object with given . + Interceptors can use interface to provide other target for method invocation than default . + + Type of the interface implemented by which will be proxied. + The target object, calls to which will be intercepted. + Additional interface types. Calls to their members will be proxied as well. + The interceptors called during the invocation of proxied methods. + + Object proxying calls to members of and types on object or alternative implementation swapped at runtime by an interceptor. + + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given array is a null reference (Nothing in Visual Basic). + Thrown when given or any of is a generic type definition. + Thrown when given is not an interface type. + Thrown when given does not implement interface. + Thrown when no default constructor exists on actual type of object. + Thrown when default constructor of actual type of throws an exception. + + This method uses implementation to generate a proxy type. + As such caller should expect any type of exception that given implementation may throw. + + + + + Creates proxy object intercepting calls to members of interface on object with given . + Interceptors can use interface to provide other target for method invocation than default . + + Type of the interface implemented by which will be proxied. + The target object, calls to which will be intercepted. + The proxy generation options used to influence generated proxy type and object. + The interceptors called during the invocation of proxied methods. + + Object proxying calls to members of type on object or alternative implementation swapped at runtime by an interceptor. + + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given array is a null reference (Nothing in Visual Basic). + Thrown when given is a generic type definition. + Thrown when given is not an interface type. + Thrown when given does not implement interface. + Thrown when no default constructor exists on actual type of object. + Thrown when default constructor of actual type of throws an exception. + + This method uses implementation to generate a proxy type. + As such caller should expect any type of exception that given implementation may throw. + + + + + Creates proxy object intercepting calls to members of interface on object with given . + Interceptors can use interface to provide other target for method invocation than default . + + Type of the interface implemented by which will be proxied. + The target object, calls to which will be intercepted. + The proxy generation options used to influence generated proxy type and object. + Additional interface types. Calls to their members will be proxied as well. + The interceptors called during the invocation of proxied methods. + + Object proxying calls to members of and types on object or alternative implementation swapped at runtime by an interceptor. + + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given array is a null reference (Nothing in Visual Basic). + Thrown when given or any of is a generic type definition. + Thrown when given is not an interface type. + Thrown when given does not implement interface. + Thrown when no default constructor exists on actual type of object. + Thrown when default constructor of actual type of throws an exception. + + This method uses implementation to generate a proxy type. + As such caller should expect any type of exception that given implementation may throw. + + + + + Creates proxy object intercepting calls to members of interface on target object generated at runtime with given . + + Type of the interface which will be proxied. + The interceptors called during the invocation of proxied methods. + + Object proxying calls to members of types on generated target object. + + Thrown when given array is a null reference (Nothing in Visual Basic). + Thrown when given is not an interface type. + + Since this method uses an empty-shell implementation of interfaces to proxy generated at runtime, the actual implementation of proxied methods must be provided by given implementations. + They are responsible for setting return value (and out parameters) on proxied methods. It is also illegal for an interceptor to call , since there's no actual implementation to proceed with. + As a result of that also at least one implementation must be provided. + This method uses implementation to generate a proxy type. + As such caller should expect any type of exception that given implementation may throw. + + + + + Creates proxy object intercepting calls to members of interface on target object generated at runtime with given . + + Type of the interface which will be proxied. + The interceptors called during the invocation of proxied methods. + + Object proxying calls to members of types on generated target object. + + Thrown when given array is a null reference (Nothing in Visual Basic). + Thrown when given is not an interface type. + + Since this method uses an empty-shell implementation of interfaces to proxy generated at runtime, the actual implementation of proxied methods must be provided by given implementations. + They are responsible for setting return value (and out parameters) on proxied methods. It is also illegal for an interceptor to call , since there's no actual implementation to proceed with. + As a result of that also at least one implementation must be provided. + This method uses implementation to generate a proxy type. + As such caller should expect any type of exception that given implementation may throw. + + + + + Creates proxy object intercepting calls to members of interface on target object generated at runtime with given . + + Type of the interface which will be proxied. + The proxy generation options used to influence generated proxy type and object. + The interceptors called during the invocation of proxied methods. + + Object proxying calls to members of types on generated target object. + + Thrown when given array is a null reference (Nothing in Visual Basic). + Thrown when given is not an interface type. + + Since this method uses an empty-shell implementation of interfaces to proxy generated at runtime, the actual implementation of proxied methods must be provided by given implementations. + They are responsible for setting return value (and out parameters) on proxied methods. It is also illegal for an interceptor to call , since there's no actual implementation to proceed with. + As a result of that also at least one implementation must be provided. + This method uses implementation to generate a proxy type. + As such caller should expect any type of exception that given implementation may throw. + + + + + Creates proxy object intercepting calls to members of interface on target object generated at runtime with given . + + Type of the interface which will be proxied. + The interceptors called during the invocation of proxied methods. + + Object proxying calls to members of type on generated target object. + + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given array is a null reference (Nothing in Visual Basic). + Thrown when given is a generic type definition. + Thrown when given is not an interface type. + + Since this method uses an empty-shell implementation of interfaces to proxy generated at runtime, the actual implementation of proxied methods must be provided by given implementations. + They are responsible for setting return value (and out parameters) on proxied methods. It is also illegal for an interceptor to call , since there's no actual implementation to proceed with. + This method uses implementation to generate a proxy type. + As such caller should expect any type of exception that given implementation may throw. + + + + + Creates proxy object intercepting calls to members of interface on target object generated at runtime with given . + + Type of the interface which will be proxied. + The interceptors called during the invocation of proxied methods. + + Object proxying calls to members of type on generated target object. + + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given array is a null reference (Nothing in Visual Basic). + Thrown when given is a generic type definition. + Thrown when given is not an interface type. + + Since this method uses an empty-shell implementation of interfaces to proxy generated at runtime, the actual implementation of proxied methods must be provided by given implementations. + They are responsible for setting return value (and out parameters) on proxied methods. It is also illegal for an interceptor to call , since there's no actual implementation to proceed with. + This method uses implementation to generate a proxy type. + As such caller should expect any type of exception that given implementation may throw. + + + + + Creates proxy object intercepting calls to members of interface on target object generated at runtime with given . + + Type of the interface which will be proxied. + Additional interface types. Calls to their members will be proxied as well. + The interceptors called during the invocation of proxied methods. + + Object proxying calls to members of and types on generated target object. + + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given array is a null reference (Nothing in Visual Basic). + Thrown when given or any of is a generic type definition. + Thrown when given is not an interface type. + + Since this method uses an empty-shell implementation of interfaces to proxy generated at runtime, the actual implementation of proxied methods must be provided by given implementations. + They are responsible for setting return value (and out parameters) on proxied methods. It is also illegal for an interceptor to call , since there's no actual implementation to proceed with. + This method uses implementation to generate a proxy type. + As such caller should expect any type of exception that given implementation may throw. + + + + + Creates proxy object intercepting calls to members of interface on target object generated at runtime with given . + + Type of the interface which will be proxied. + The proxy generation options used to influence generated proxy type and object. + The interceptors called during the invocation of proxied methods. + + Object proxying calls to members of on generated target object. + + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given array is a null reference (Nothing in Visual Basic). + Thrown when given is a generic type definition. + Thrown when given is not an interface type. + + They are responsible for setting return value (and out parameters) on proxied methods. It is also illegal for an interceptor to call , since there's no actual implementation to proceed with. + This method uses implementation to generate a proxy type. + As such caller should expect any type of exception that given implementation may throw. + + + + + Creates proxy object intercepting calls to members of interface on target object generated at runtime with given . + + Type of the interface which will be proxied. + The proxy generation options used to influence generated proxy type and object. + Additional interface types. Calls to their members will be proxied as well. + The interceptors called during the invocation of proxied methods. + + Object proxying calls to members of and types on generated target object. + + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given array is a null reference (Nothing in Visual Basic). + Thrown when given or any of is a generic type definition. + Thrown when given is not an interface type. + + Since this method uses an empty-shell implementation of to proxy generated at runtime, the actual implementation of proxied methods must be provided by given implementations. + They are responsible for setting return value (and out parameters) on proxied methods. It is also illegal for an interceptor to call , since there's no actual implementation to proceed with. + This method uses implementation to generate a proxy type. + As such caller should expect any type of exception that given implementation may throw. + + + + + Creates proxy object intercepting calls to virtual members of type on newly created instance of that type with given . + + Type of class which will be proxied. + The target object, calls to which will be intercepted. + The interceptors called during the invocation of proxied methods. + + New object of type proxying calls to virtual members of type. + + Thrown when given is not a class type. + Thrown when no default constructor exists on type . + Thrown when default constructor of type throws an exception. + + This method uses implementation to generate a proxy type. + As such caller should expect any type of exception that given implementation may throw. + + + + + Creates proxy object intercepting calls to virtual members of type on newly created instance of that type with given . + + Type of class which will be proxied. + The target object, calls to which will be intercepted. + The proxy generation options used to influence generated proxy type and object. + The interceptors called during the invocation of proxied methods. + + New object of type proxying calls to virtual members of type. + + Thrown when given is not a class type. + Thrown when no default constructor exists on type . + Thrown when default constructor of type throws an exception. + + This method uses implementation to generate a proxy type. + As such caller should expect any type of exception that given implementation may throw. + + + + + Creates proxy object intercepting calls to virtual members of type on newly created instance of that type with given . + + Type of class which will be proxied. + Additional interface types. Calls to their members will be proxied as well. + The target object, calls to which will be intercepted. + The interceptors called during the invocation of proxied methods. + + New object of type proxying calls to virtual members of and types. + + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given or any of is a generic type definition. + Thrown when given is not a class type. + Thrown when no default constructor exists on type . + Thrown when default constructor of type throws an exception. + + This method uses implementation to generate a proxy type. + As such caller should expect any type of exception that given implementation may throw. + + + + + Creates proxy object intercepting calls to virtual members of type on newly created instance of that type with given . + + Type of class which will be proxied. + The target object, calls to which will be intercepted. + The proxy generation options used to influence generated proxy type and object. + Arguments of constructor of type which should be used to create a new instance of that type. + The interceptors called during the invocation of proxied methods. + + New object of type proxying calls to virtual members of type. + + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given is a generic type definition. + Thrown when given is not a class type. + Thrown when no constructor exists on type with parameters matching . + Thrown when constructor of type throws an exception. + + This method uses implementation to generate a proxy type. + As such caller should expect any type of exception that given implementation may throw. + + + + + Creates proxy object intercepting calls to virtual members of type on newly created instance of that type with given . + + Type of class which will be proxied. + The target object, calls to which will be intercepted. + Arguments of constructor of type which should be used to create a new instance of that type. + The interceptors called during the invocation of proxied methods. + + New object of type proxying calls to virtual members of type. + + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given is a generic type definition. + Thrown when given is not a class type. + Thrown when no constructor exists on type with parameters matching . + Thrown when constructor of type throws an exception. + + This method uses implementation to generate a proxy type. + As such caller should expect any type of exception that given implementation may throw. + + + + + Creates proxy object intercepting calls to virtual members of type on newly created instance of that type with given . + + Type of class which will be proxied. + The target object, calls to which will be intercepted. + The interceptors called during the invocation of proxied methods. + + New object of type proxying calls to virtual members of type. + + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given is a generic type definition. + Thrown when given is not a class type. + Thrown when no parameterless constructor exists on type . + Thrown when constructor of type throws an exception. + + This method uses implementation to generate a proxy type. + As such caller should expect any type of exception that given implementation may throw. + + + + + Creates proxy object intercepting calls to virtual members of type on newly created instance of that type with given . + + Type of class which will be proxied. + The target object, calls to which will be intercepted. + The proxy generation options used to influence generated proxy type and object. + The interceptors called during the invocation of proxied methods. + + New object of type proxying calls to virtual members of type. + + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given is a generic type definition. + Thrown when given is not a class type. + Thrown when no default constructor exists on type . + Thrown when default constructor of type throws an exception. + + This method uses implementation to generate a proxy type. + As such caller should expect any type of exception that given implementation may throw. + + + + + Creates proxy object intercepting calls to virtual members of type on newly created instance of that type with given . + + Type of class which will be proxied. + Additional interface types. Calls to their members will be proxied as well. + The target object, calls to which will be intercepted. + The proxy generation options used to influence generated proxy type and object. + The interceptors called during the invocation of proxied methods. + + New object of type proxying calls to virtual members of and types. + + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given or any of is a generic type definition. + Thrown when given is not a class type. + Thrown when no default constructor exists on type . + Thrown when default constructor of type throws an exception. + + This method uses implementation to generate a proxy type. + As such caller should expect any type of exception that given implementation may throw. + + + + + Creates proxy object intercepting calls to virtual members of type on newly created instance of that type with given . + + Type of class which will be proxied. + Additional interface types. Calls to their members will be proxied as well. + The target object, calls to which will be intercepted. + The proxy generation options used to influence generated proxy type and object. + Arguments of constructor of type which should be used to create a new instance of that type. + The interceptors called during the invocation of proxied methods. + + New object of type proxying calls to virtual members of and types. + + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given or any of is a generic type definition. + Thrown when given is not a class type. + Thrown when no constructor exists on type with parameters matching . + Thrown when constructor of type throws an exception. + + This method uses implementation to generate a proxy type. + As such caller should expect any type of exception that given implementation may throw. + + + + + Creates proxy object intercepting calls to virtual members of type on newly created instance of that type with given . + + Type of class which will be proxied. + The interceptors called during the invocation of proxied methods. + + New object of type proxying calls to virtual members of type. + + Thrown when given is not a class type. + Thrown when no default constructor exists on type . + Thrown when default constructor of type throws an exception. + + This method uses implementation to generate a proxy type. + As such caller should expect any type of exception that given implementation may throw. + + + + + Creates proxy object intercepting calls to virtual members of type on newly created instance of that type with given . + + Type of class which will be proxied. + The proxy generation options used to influence generated proxy type and object. + The interceptors called during the invocation of proxied methods. + + New object of type proxying calls to virtual members of type. + + Thrown when given is not a class type. + Thrown when no default constructor exists on type . + Thrown when default constructor of type throws an exception. + + This method uses implementation to generate a proxy type. + As such caller should expect any type of exception that given implementation may throw. + + + + + Creates proxy object intercepting calls to virtual members of type on newly created instance of that type with given . + + Type of class which will be proxied. + Additional interface types. Calls to their members will be proxied as well. + The interceptors called during the invocation of proxied methods. + + New object of type proxying calls to virtual members of and types. + + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given or any of is a generic type definition. + Thrown when given is not a class type. + Thrown when no default constructor exists on type . + Thrown when default constructor of type throws an exception. + + This method uses implementation to generate a proxy type. + As such caller should expect any type of exception that given implementation may throw. + + + + + Creates proxy object intercepting calls to virtual members of type on newly created instance of that type with given . + + Type of class which will be proxied. + The proxy generation options used to influence generated proxy type and object. + Arguments of constructor of type which should be used to create a new instance of that type. + The interceptors called during the invocation of proxied methods. + + New object of type proxying calls to virtual members of type. + + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given is a generic type definition. + Thrown when given is not a class type. + Thrown when no constructor exists on type with parameters matching . + Thrown when constructor of type throws an exception. + + This method uses implementation to generate a proxy type. + As such caller should expect any type of exception that given implementation may throw. + + + + + Creates proxy object intercepting calls to virtual members of type on newly created instance of that type with given . + + Type of class which will be proxied. + Arguments of constructor of type which should be used to create a new instance of that type. + The interceptors called during the invocation of proxied methods. + + New object of type proxying calls to virtual members of type. + + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given is a generic type definition. + Thrown when given is not a class type. + Thrown when no constructor exists on type with parameters matching . + Thrown when constructor of type throws an exception. + + This method uses implementation to generate a proxy type. + As such caller should expect any type of exception that given implementation may throw. + + + + + Creates proxy object intercepting calls to virtual members of type on newly created instance of that type with given . + + Type of class which will be proxied. + The interceptors called during the invocation of proxied methods. + + New object of type proxying calls to virtual members of type. + + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given is a generic type definition. + Thrown when given is not a class type. + Thrown when no parameterless constructor exists on type . + Thrown when constructor of type throws an exception. + + This method uses implementation to generate a proxy type. + As such caller should expect any type of exception that given implementation may throw. + + + + + Creates proxy object intercepting calls to virtual members of type on newly created instance of that type with given . + + Type of class which will be proxied. + The proxy generation options used to influence generated proxy type and object. + The interceptors called during the invocation of proxied methods. + + New object of type proxying calls to virtual members of type. + + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given is a generic type definition. + Thrown when given is not a class type. + Thrown when no default constructor exists on type . + Thrown when default constructor of type throws an exception. + + This method uses implementation to generate a proxy type. + As such caller should expect any type of exception that given implementation may throw. + + + + + Creates proxy object intercepting calls to virtual members of type on newly created instance of that type with given . + + Type of class which will be proxied. + Additional interface types. Calls to their members will be proxied as well. + The proxy generation options used to influence generated proxy type and object. + The interceptors called during the invocation of proxied methods. + + New object of type proxying calls to virtual members of and types. + + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given or any of is a generic type definition. + Thrown when given is not a class type. + Thrown when no default constructor exists on type . + Thrown when default constructor of type throws an exception. + + This method uses implementation to generate a proxy type. + As such caller should expect any type of exception that given implementation may throw. + + + + + Creates proxy object intercepting calls to virtual members of type on newly created instance of that type with given . + + Type of class which will be proxied. + Additional interface types. Calls to their members will be proxied as well. + The proxy generation options used to influence generated proxy type and object. + Arguments of constructor of type which should be used to create a new instance of that type. + The interceptors called during the invocation of proxied methods. + + New object of type proxying calls to virtual members of and types. + + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given or any of is a generic type definition. + Thrown when given is not a class type. + Thrown when no constructor exists on type with parameters matching . + Thrown when constructor of type throws an exception. + + This method uses implementation to generate a proxy type. + As such caller should expect any type of exception that given implementation may throw. + + + + + Creates the proxy type for class proxy with given class, implementing given and using provided . + + The base class for proxy type. + The interfaces that proxy type should implement. + The options for proxy generation process. + of proxy. + + + + Creates the proxy type for interface proxy with target for given interface, implementing given on given and using provided . + + The interface proxy type should implement. + The additional interfaces proxy type should implement. + Actual type that the proxy type will encompass. + The options for proxy generation process. + of proxy. + + + + Creates the proxy type for interface proxy with target interface for given interface, implementing given on given and using provided . + + The interface proxy type should implement. + The additional interfaces proxy type should implement. + The options for proxy generation process. + of proxy. + + + + Creates the proxy type for interface proxy without target for given interface, implementing given and using provided . + + The interface proxy type should implement. + The additional interfaces proxy type should implement. + The options for proxy generation process. + of proxy. + + + + Gets or sets the that this log to. + + + + + Gets the proxy builder instance used to generate proxy types. + + The proxy builder. + + + + + + + + + + + + + + + For interface proxies, this will point to the + on the target class + + + + + Handles the deserialization of proxies. + + + + + Resets the used for deserialization to a new scope. + + This is useful for test cases. + + + + Resets the used for deserialization to a given . + + The scope to be used for deserialization. + By default, the deserialization process uses a different scope than the rest of the application, which can lead to multiple proxies + being generated for the same type. By explicitly setting the deserialization scope to the application's scope, this can be avoided. + + + + Gets the used for deserialization. + + As has no way of automatically determining the scope used by the application (and the application + might use more than one scope at the same time), uses a dedicated scope instance for deserializing proxy + types. This instance can be reset and set to a specific value via and . + + + + Holds objects representing methods of class. + + + + + Holds objects representing methods of class. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Provides an extension point that allows proxies to choose specific interceptors on + a per method basis. + + + + + Selects the interceptors that should intercept calls to the given . + + The type declaring the method to intercept. + The method that will be intercepted. + All interceptors registered with the proxy. + An array of interceptors to invoke upon calling the . + + This method is called only once per proxy instance, upon the first call to the + . Either an empty array or null are valid return values to indicate + that no interceptor should intercept calls to the method. Although it is not advised, it is + legal to return other implementations than these provided in + . + + + + + Creates a new lock. + + + + + + This interface should be implemented by classes + that are available in a bigger context, exposing + the container to different areas in the same application. + + For example, in Web application, the (global) HttpApplication + subclasses should implement this interface to expose + the configured container + + + + + + Exposes means to change target objects of proxies and invocations + + + + + Changes the target object () of current . + + The new value of target of invocation. + + Although the method takes the actual instance must be of type assignable to , otherwise an will be thrown. + Also while it's technically legal to pass null reference (Nothing in Visual Basic) as , for obvious reasons Dynamic Proxy will not be able to call the intercepted method on such target. + In this case last interceptor in the pipeline mustn't call or a will be throws. + Also while it's technically legal to pass proxy itself as , this would create stack overflow. + In this case last interceptor in the pipeline mustn't call or a will be throws. + + Thrown when is not assignable to the proxied type. + + + + Permanently changes the target object of the proxy. This does not affect target of the current invocation. + + The new value of target of the proxy. + + Although the method takes the actual instance must be of type assignable to proxy's target type, otherwise an will be thrown. + Also while it's technically legal to pass null reference (Nothing in Visual Basic) as , for obvious reasons Dynamic Proxy will not be able to call the intercepted method on such target. + In this case last interceptor in the pipeline mustn't call or a will be throws. + Also while it's technically legal to pass proxy itself as , this would create stack overflow. + In this case last interceptor in the pipeline mustn't call or a will be throws. + + Thrown when is not assignable to the proxied type. + + + + New interface that is going to be used by DynamicProxy 2 + + + + + Get the proxy target (note that null is a valid target!) + + + + + + Gets the interceptors for the proxy + + + + + + Defines that the implementation wants a + in order to + access other components. The creator must be aware + that the component might (or might not) implement + the interface. + + + Used by Castle Project components to, for example, + gather logging factories + + + + + Increments IServiceProvider with a generic service resolution operation. + + + + + Provides a factory that can produce either or + classes. + + + + + Manages the instantiation of s. + + + + + Creates a new logger, getting the logger name from the specified type. + + + + + Creates a new logger. + + + + + Creates a new logger, getting the logger name from the specified type. + + + + + Creates a new logger. + + + + + Creates a new extended logger, getting the logger name from the specified type. + + + + + Creates a new extended logger. + + + + + Creates a new extended logger, getting the logger name from the specified type. + + + + + Creates a new extended logger. + + + + + Creates a new extended logger, getting the logger name from the specified type. + + + + + Creates a new extended logger. + + + + + Creates a new extended logger, getting the logger name from the specified type. + + + + + Creates a new extended logger. + + + + + Creates a new logger, getting the logger name from the specified type. + + + + + Creates a new logger. + + + + + Creates a new logger, getting the logger name from the specified type. + + + + + Creates a new logger. + + + + + Gets the configuration file. + + i.e. log4net.config + + + + + Used to create the TraceLogger implementation of ILogger interface. See . + + + + + Gets the configuration file. + + i.e. log4net.config + + + + + Interface for Context Properties implementations + + + + This interface defines a basic property get set accessor. + + + Based on the ContextPropertiesBase of log4net, by Nicko Cadell. + + + + + + Gets or sets the value of a property + + + The value for the property with the specified key + + + + Gets or sets the value of a property + + + + + + NullLogFactory used when logging is turned off. + + + + + Creates an instance of ILogger with the specified name. + + Name. + + + + + Creates an instance of ILogger with the specified name and LoggerLevel. + + Name. + Level. + + + + + Creates outputing + to files. The name of the file is derived from the log name + plus the 'log' extension. + + + + + Provides an interface that supports and + allows the storage and retrieval of Contexts. These are supported in + both log4net and NLog. + + + + + Manages logging. + + + This is a facade for the different logging subsystems. + It offers a simplified interface that follows IOC patterns + and a simplified priority/level/severity abstraction. + + + + + Logs a debug message. + + The message to log + + + + Logs a debug message. + + The exception to log + The message to log + + + + Logs a debug message. + + Format string for the message to log + Format arguments for the message to log + + + + Logs a debug message. + + Format string for the message to log + Format arguments for the message to log + + + + Logs a debug message. + + The exception to log + Format string for the message to log + Format arguments for the message to log + + + + Logs a debug message. + + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs a debug message. + + The exception to log + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs an info message. + + The message to log + + + + Logs an info message. + + The exception to log + The message to log + + + + Logs an info message. + + Format string for the message to log + Format arguments for the message to log + + + + Logs an info message. + + Format string for the message to log + Format arguments for the message to log + + + + Logs an info message. + + The exception to log + Format string for the message to log + Format arguments for the message to log + + + + Logs an info message. + + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs an info message. + + The exception to log + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs a warn message. + + The message to log + + + + Logs a warn message. + + The exception to log + The message to log + + + + Logs a warn message. + + Format string for the message to log + Format arguments for the message to log + + + + Logs a warn message. + + Format string for the message to log + Format arguments for the message to log + + + + Logs a warn message. + + The exception to log + Format string for the message to log + Format arguments for the message to log + + + + Logs a warn message. + + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs a warn message. + + The exception to log + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs an error message. + + The message to log + + + + Logs an error message. + + The exception to log + The message to log + + + + Logs an error message. + + Format string for the message to log + Format arguments for the message to log + + + + Logs an error message. + + Format string for the message to log + Format arguments for the message to log + + + + Logs an error message. + + The exception to log + Format string for the message to log + Format arguments for the message to log + + + + Logs an error message. + + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs an error message. + + The exception to log + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs a fatal message. + + The message to log + + + + Logs a fatal message. + + The exception to log + The message to log + + + + Logs a fatal message. + + Format string for the message to log + Format arguments for the message to log + + + + Logs a fatal message. + + Format string for the message to log + Format arguments for the message to log + + + + Logs a fatal message. + + The exception to log + Format string for the message to log + Format arguments for the message to log + + + + Logs a fatal message. + + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs a fatal message. + + The exception to log + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs a fatal error message. + + The Message + + + + Logs a fatal error message. + + The Message + The Exception + + + + Logs a fatal error message. + + Message format + Array of objects to write using format + + + + Create a new child logger. + The name of the child logger is [current-loggers-name].[passed-in-name] + + The Subname of this logger. + The New ILogger instance. + If the name has an empty element name. + + + + Determines if messages of priority "debug" will be logged. + + True if "debug" messages will be logged. + + + + Determines if messages of priority "info" will be logged. + + True if "info" messages will be logged. + + + + Determines if messages of priority "warn" will be logged. + + True if "warn" messages will be logged. + + + + Determines if messages of priority "error" will be logged. + + True if "error" messages will be logged. + + + + Determines if messages of priority "fatal" will be logged. + + True if "fatal" messages will be logged. + + + + Determines if messages of priority "fatalError" will be logged. + + True if "fatalError" messages will be logged. + + + + Exposes the Global Context of the extended logger. + + + + + Exposes the Thread Context of the extended logger. + + + + + Exposes the Thread Stack of the extended logger. + + + + + Supporting Logger levels. + + + + + Logging will be off + + + + + Fatal logging level + + + + + Error logging level + + + + + Warn logging level + + + + + Info logging level + + + + + Debug logging level + + + + + The Logger sending everything to the standard output streams. + This is mainly for the cases when you have a utility that + does not have a logger to supply. + + + + + The Level Filtered Logger class. This is a base clase which + provides a LogLevel attribute and reroutes all functions into + one Log method. + + + + + Creates a new LevelFilteredLogger. + + + + + Keep the instance alive in a remoting scenario + + + + + + Logs a debug message. + + The message to log + + + + Logs a debug message. + + The exception to log + The message to log + + + + Logs a debug message. + + Format string for the message to log + Format arguments for the message to log + + + + Logs a debug message. + + The exception to log + Format string for the message to log + Format arguments for the message to log + + + + Logs a debug message. + + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs a debug message. + + The exception to log + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs a debug message. + + Message format + Array of objects to write using format + + + + Logs an info message. + + The message to log + + + + Logs an info message. + + The exception to log + The message to log + + + + Logs an info message. + + Format string for the message to log + Format arguments for the message to log + + + + Logs an info message. + + The exception to log + Format string for the message to log + Format arguments for the message to log + + + + Logs an info message. + + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs an info message. + + The exception to log + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs an info message. + + Message format + Array of objects to write using format + + + + Logs a warn message. + + The message to log + + + + Logs a warn message. + + The exception to log + The message to log + + + + Logs a warn message. + + Format string for the message to log + Format arguments for the message to log + + + + Logs a warn message. + + The exception to log + Format string for the message to log + Format arguments for the message to log + + + + Logs a warn message. + + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs a warn message. + + The exception to log + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs a warn message. + + Message format + Array of objects to write using format + + + + Logs an error message. + + The message to log + + + + Logs an error message. + + The exception to log + The message to log + + + + Logs an error message. + + Format string for the message to log + Format arguments for the message to log + + + + Logs an error message. + + The exception to log + Format string for the message to log + Format arguments for the message to log + + + + Logs an error message. + + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs an error message. + + The exception to log + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs an error message. + + Message format + Array of objects to write using format + + + + Logs a fatal message. + + The message to log + + + + Logs a fatal message. + + The exception to log + The message to log + + + + Logs a fatal message. + + Format string for the message to log + Format arguments for the message to log + + + + Logs a fatal message. + + The exception to log + Format string for the message to log + Format arguments for the message to log + + + + Logs a fatal message. + + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs a fatal message. + + The exception to log + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs a fatal message. + + Message format + Array of objects to write using format + + + + Logs a fatal error message. + + The Message + + + + Logs a fatal error message. + + The Message + The Exception + + + + Logs a fatal error message. + + Message format + Array of objects to write using format + + + + Implementors output the log content by implementing this method only. + Note that exception can be null + + + + + + + + + The LoggerLevel that this logger + will be using. Defaults to LoggerLevel.Off + + + + + The name that this logger will be using. + Defaults to String.Empty + + + + + Determines if messages of priority "debug" will be logged. + + true if log level flags include the bit + + + + Determines if messages of priority "info" will be logged. + + true if log level flags include the bit + + + + Determines if messages of priority "warn" will be logged. + + true if log level flags include the bit + + + + Determines if messages of priority "error" will be logged. + + true if log level flags include the bit + + + + Determines if messages of priority "fatal" will be logged. + + true if log level flags include the bit + + + + Determines if messages of priority "fatal" will be logged. + + true if log level flags include the bit + + + + Creates a new ConsoleLogger with the Level + set to LoggerLevel.Debug and the Name + set to String.Empty. + + + + + Creates a new ConsoleLogger with the Name + set to String.Empty. + + The logs Level. + + + + Creates a new ConsoleLogger with the Level + set to LoggerLevel.Debug. + + The logs Name. + + + + Creates a new ConsoleLogger. + + The logs Name. + The logs Level. + + + + A Common method to log. + + The level of logging + The name of the logger + The Message + The Exception + + + + Returns a new ConsoleLogger with the name + added after this loggers name, with a dot in between. + + The added hierarchical name. + A new ConsoleLogger. + + + + The Logger using standart Diagnostics namespace. + + + + + Creates a logger based on . + + + + + + Creates a logger based on . + + + + + + + Creates a logger based on . + + + + + + + + The Null Logger class. This is useful for implementations where you need + to provide a logger to a utility class, but do not want any output from it. + It also helps when you have a utility that does not have a logger to supply. + + + + + Creates a new NullLogger. + + + + + No-op. + + Ignored + + + + No-op. + + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + Ignored + Ignored + + + + No-op. + + Ignored + + + + No-op. + + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + Ignored + Ignored + + + + No-op. + + Ignored + + + + No-op. + + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + Ignored + Ignored + + + + No-op. + + Ignored + + + + No-op. + + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + Ignored + Ignored + + + + No-op. + + Ignored + + + + No-op. + + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + Ignored + Ignored + + + + No-op. + + Ignored + + + + No-op. + + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + + + + Returns this NullLogger. + + Ignored + This ILogger instance. + + + + No-op. + + false + + + + No-op. + + false + + + + No-op. + + false + + + + No-op. + + false + + + + No-op. + + false + + + + No-op. + + false + + + + Returns empty context properties. + + + + + Returns empty context properties. + + + + + Returns empty context stacks. + + + + + The Stream Logger class. This class can stream log information + to any stream, it is suitable for storing a log file to disk, + or to a MemoryStream for testing your components. + + + This logger is not thread safe. + + + + + Creates a new StreamLogger with default encoding + and buffer size. Initial Level is set to Debug. + + + The name of the log. + + + The stream that will be used for logging, + seeking while the logger is alive + + + + + Creates a new StreamLogger with default buffer size. + Initial Level is set to Debug. + + + The name of the log. + + + The stream that will be used for logging, + seeking while the logger is alive + + + The encoding that will be used for this stream. + + + + + + Creates a new StreamLogger. + Initial Level is set to Debug. + + + The name of the log. + + + The stream that will be used for logging, + seeking while the logger is alive + + + The encoding that will be used for this stream. + + + + The buffer size that will be used for this stream. + + + + + + Creates a new StreamLogger with + Debug as default Level. + + The name of the log. + The StreamWriter the log will write to. + + + + The TraceLogger sends all logging to the System.Diagnostics.TraceSource + built into the .net framework. + + + Logging can be configured in the system.diagnostics configuration + section. + + If logger doesn't find a source name with a full match it will + use source names which match the namespace partially. For example you can + configure from all castle components by adding a source name with the + name "Castle". + + If no portion of the namespace matches the source named "Default" will + be used. + + + + + Build a new trace logger based on the named TraceSource + + The name used to locate the best TraceSource. In most cases comes from the using type's fullname. + + + + Build a new trace logger based on the named TraceSource + + The name used to locate the best TraceSource. In most cases comes from the using type's fullname. + The default logging level at which this source should write messages. In almost all cases this + default value will be overridden in the config file. + + + + Create a new child logger. + The name of the child logger is [current-loggers-name].[passed-in-name] + + The Subname of this logger. + The New ILogger instance. + + + + This is an abstract implementation + that deals with methods that can be abstracted away + from underlying implementations. + + + AbstractConfiguration makes easier to implementers + to create a new version of + + + + + is a interface encapsulating a configuration node + used to retrieve configuration values. + + + + + Gets the value of the node and converts it + into specified . + + The + + The Default value returned if the conversion fails. + + The Value converted into the specified type. + + + + Gets the name of the node. + + + The Name of the node. + + + + + Gets the value of the node. + + + The Value of the node. + + + + + Gets an of + elements containing all node children. + + The Collection of child nodes. + + + + Gets an of the configuration attributes. + + + + + Gets the value of the node and converts it + into specified . + + The + + The Default value returned if the convertion fails. + + The Value converted into the specified type. + + + + Gets the name of the . + + + The Name of the . + + + + + Gets the value of . + + + The Value of the . + + + + + Gets all child nodes. + + The of child nodes. + + + + Gets node attributes. + + + All attributes of the node. + + + + + A collection of objects. + + + + + Creates a new instance of ConfigurationCollection. + + + + + Creates a new instance of ConfigurationCollection. + + + + + Summary description for MutableConfiguration. + + + + + Initializes a new instance of the class. + + The name. + + + + Gets the value of . + + + The Value of the . + + + + + Pendent + + + + + Deserializes the specified node into an abstract representation of configuration. + + The node. + + + + + If a config value is an empty string we return null, this is to keep + backward compability with old code + + + + + General purpose class to represent a standard pair of values. + + Type of the first value + Type of the second value + + + + Constructs a pair with its values + + + + + + + List of utility methods related to dynamic proxy operations + + + + + Determines whether the specified type is a proxy generated by + DynamicProxy (1 or 2). + + The type. + + true if it is a proxy; otherwise, false. + + + + + Pendent + + + + + Initializes a new instance of the class. + + The target. + + + + Determines whether the object contains an element with the specified key. + + The key to locate in the object. + + true if the contains an element with the key; otherwise, false. + + + is null. + + + + Adds an element with the provided key and value to the object. + + The to use as the key of the element to add. + The to use as the value of the element to add. + + is null. + An element with the same key already exists in the object. + The is read-only.-or- The has a fixed size. + + + + Removes all elements from the object. + + The object is read-only. + + + + Returns an object for the object. + + + An object for the object. + + + + + Removes the element with the specified key from the object. + + The key of the element to remove. + + is null. + The object is read-only.-or- The has a fixed size. + + + + Copies the elements of the to an , starting at a particular index. + + The one-dimensional that is the destination of the elements copied from . The must have zero-based indexing. + The zero-based index in at which copying begins. + + is null. + + is less than zero. + + is multidimensional.-or- is equal to or greater than the length of .-or- The number of elements in the source is greater than the available space from to the end of the destination . + The type of the source cannot be cast automatically to the type of the destination . + + + + Returns an enumerator that iterates through a collection. + + + An object that can be used to iterate through the collection. + + + + + Gets or sets the with the specified key. + + + + + + Gets an object containing the keys of the object. + + + An object containing the keys of the object. + + + + Gets an object containing the values in the object. + + + An object containing the values in the object. + + + + Gets a value indicating whether the object is read-only. + + + true if the object is read-only; otherwise, false. + + + + Gets a value indicating whether the object has a fixed size. + + + true if the object has a fixed size; otherwise, false. + + + + Gets the number of elements contained in the . + + + The number of elements contained in the . + + + + Gets an object that can be used to synchronize access to the . + + + An object that can be used to synchronize access to the . + + + + Gets a value indicating whether access to the is synchronized (thread safe). + + + true if access to the is synchronized (thread safe); otherwise, false. + + + + Represents a 'streamable' resource. Can + be a file, a resource in an assembly. + + + + + Returns a reader for the stream + + + It's up to the caller to dispose the reader. + + + + + + Returns a reader for the stream + + + It's up to the caller to dispose the reader. + + + + + + + Returns an instance of + created according to the relativePath + using itself as the root. + + + + + + + + + + Only valid for resources that + can be obtained through relative paths + + + + + + + + + + This returns a new stream instance each time it is called. + It is the responsability of the caller to dispose of this stream + + + + + Depicts the contract for resource factories. + + + + + Used to check whether the resource factory + is able to deal with the given resource + identifier. + + + Implementors should return true + only if the given identifier is supported + by the resource factory + + + + + + + Creates an instance + for the given resource identifier + + + + + + + Creates an instance + for the given resource identifier + + + + + + + + + + + + + + + + + + Adapts a static string content as an + + + + + Enable access to files on network shares + + + + + Email sender abstraction. + + + + + Sends a mail message. + + From field + To field + E-mail's subject + message's body + + + + Sends a message. + + Message instance + + + + Sends multiple messages. + + List of messages + + + + Default implementation. + + + + + Initializes a new instance of the class based on the configuration provided in the application configuration file. + + + This constructor is based on the default configuration in the application configuration file. + + + + + This service implementation + requires a host name in order to work + + The smtp server name + + + + Sends a message. + + If any of the parameters is null + From field + To field + e-mail's subject + message's body + + + + Sends a message. + + If the message is null + Message instance + + + + Configures the sender + with port information and eventual credential + informed + + Message instance + + + + Gets or sets the port used to + access the SMTP server + + + + + Gets the hostname. + + The hostname. + + + + Gets or sets a value which is used to + configure if emails are going to be sent asyncrhonously or not. + + + + + Gets or sets a value that specifies + the amount of time after which a synchronous Send call times out. + + + + + Gets or sets a value indicating whether the email should be sent using + a secure communication channel. + + true if should use SSL; otherwise, false. + + + + Gets or sets the domain. + + The domain. + + + + Gets or sets the name of the user. + + The name of the user. + + + + Gets or sets the password. + + The password. + + + + Gets a value indicating whether credentials were informed. + + + if this instance has credentials; otherwise, . + + + + diff --git a/packages/Castle.Core.2.5.2/lib/NET40ClientProfile/Castle.Core.dll b/packages/Castle.Core.2.5.2/lib/NET40ClientProfile/Castle.Core.dll new file mode 100644 index 0000000000000000000000000000000000000000..2c8811072c09aa87b5a2a618055fae60735aebfa GIT binary patch literal 299008 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

H^}POAl1h7f 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 We6t(QjH02<|7lJ8KhM@N@c#e|u3Rtx literal 0 HcmV?d00001 diff --git a/packages/Castle.Core.2.5.2/lib/NET40ClientProfile/Castle.Core.xml b/packages/Castle.Core.2.5.2/lib/NET40ClientProfile/Castle.Core.xml new file mode 100644 index 000000000..448fd69a0 --- /dev/null +++ b/packages/Castle.Core.2.5.2/lib/NET40ClientProfile/Castle.Core.xml @@ -0,0 +1,4927 @@ + + + + Castle.Core + + + +

+ Assignes a specific dictionary key. + + + + + Defines the contract for customizing dictionary access. + + + + + Determines relative order to apply related behaviors. + + + + + Determines relative order to apply related behaviors. + + + + + Defines the contract for updating dictionary values. + + + + + Sets the stored dictionary value. + + The dictionary adapter. + The key. + The stored value. + The property. + true if the property should be stored. + + + + Defines the contract for building s. + + + + + Builds the dictionary behaviors. + + + + + + Abstract adapter for the support + needed by the + + + + + Adds an element with the provided key and value to the object. + + The to use as the key of the element to add. + The to use as the value of the element to add. + An element with the same key already exists in the object. + key is null. + The is read-only.-or- The has a fixed size. + + + + Removes all elements from the object. + + The object is read-only. + + + + Determines whether the object contains an element with the specified key. + + The key to locate in the object. + + true if the contains an element with the key; otherwise, false. + + key is null. + + + + Returns an object for the object. + + + An object for the object. + + + + + Removes the element with the specified key from the object. + + The key of the element to remove. + The object is read-only.-or- The has a fixed size. + key is null. + + + + Copies the elements of the to an , starting at a particular index. + + The one-dimensional that is the destination of the elements copied from . The must have zero-based indexing. + The zero-based index in array at which copying begins. + array is null. + The type of the source cannot be cast automatically to the type of the destination array. + index is less than zero. + array is multidimensional.-or- index is equal to or greater than the length of array.-or- The number of elements in the source is greater than the available space from index to the end of the destination array. + + + + Returns an enumerator that iterates through a collection. + + + An object that can be used to iterate through the collection. + + + + + Gets a value indicating whether the object has a fixed size. + + + true if the object has a fixed size; otherwise, false. + + + + Gets a value indicating whether the object is read-only. + + + true if the object is read-only; otherwise, false. + + + + Gets an object containing the keys of the object. + + + An object containing the keys of the object. + + + + Gets an object containing the values in the object. + + + An object containing the values in the object. + + + + Gets or sets the with the specified key. + + + + + + Gets the number of elements contained in the . + + + The number of elements contained in the . + + + + Gets a value indicating whether access to the is synchronized (thread safe). + + + true if access to the is synchronized (thread safe); otherwise, false. + + + + Gets an object that can be used to synchronize access to the . + + + An object that can be used to synchronize access to the . + + + + Constant to use when making assembly internals visible to Castle.Core + [assembly: InternalsVisibleTo(CoreInternalsVisible.ToCastleCore)] + + + + + Constant to use when making assembly internals visible to proxy types generated by DynamicProxy. Required when proxying internal types. + [assembly: InternalsVisibleTo(CoreInternalsVisible.ToDynamicProxyGenAssembly2)] + + + + + Abstract implementation of . + + + + + Conract for traversing a . + + + + + Identifies a property should be represented as a nested component. + + + + + Defines the contract for building typed dictionary keys. + + + + + Builds the specified key. + + The dictionary adapter. + The current key. + The property. + The updated key + + + + Defines the contract for retrieving dictionary values. + + + + + Gets the effective dictionary value. + + The dictionary adapter. + The key. + The stored value. + The property. + true if return only existing. + The effective property value. + + + + Applies no prefix. + + + + + Gets or sets the prefix. + + The prefix. + + + + Identifies the dictionary adapter types. + + + + + Identifies an interface or property to be pre-feteched. + + + + + Instructs fetching to occur. + + + + + Instructs fetching according to + + + + + + Gets whether or not fetching should occur. + + + + + Assigns a property to a group. + + + + + Constructs a group assignment. + + The group name. + + + + Constructs a group assignment. + + The group name. + + + + Gets the group the property is assigned to. + + + + + Assigns a specific dictionary key. + + + + + Initializes a new instance of the class. + + The key. + + + + Initializes a new instance of the class. + + The compound key. + + + + Assigns a prefix to the keyed properties of an interface. + + + + + Initializes a default instance of the class. + + + + + Initializes a new instance of the class. + + The prefix for the keyed properties of the interface. + + + + Gets the prefix key added to the properties of the interface. + + + + + Substitutes part of key with another string. + + + + + Initializes a new instance of the class. + + The old value. + The new value. + + + + Requests support for multi-level editing. + + + + + Contract for dictionary initialization. + + + + + Performs any initialization of the + + The dictionary adapter. + The dictionary behaviors. + + + + Generates a new GUID on demand. + + + + + Support for on-demand value resolution. + + + + + Suppress property change notifications. + + + + + Provides simple string formatting from existing properties. + + + + + Gets the string format. + + + + + Gets the format properties. + + + + + Identifies a property should be represented as a delimited string value. + + + + + Gets the separator. + + + + + Converts all properties to strings. + + + + + Gets or sets the format. + + The format. + + + + Suppress property change notifications. + + + + + Contract for property descriptor initialization. + + + + + Performs any initialization of the + + The property descriptor. + The property behaviors. + + + + Assigns a prefix to the keyed properties using the interface name. + + + + + Manages conversion between property values. + + + + + Initializes a new instance of the class. + + The converter. + + + + Gets the effective dictionary value. + + The dictionary adapter. + The key. + The stored value. + The property. + true if return only existing. + The effective property value. + + + + + + + + + Contract for creating additional Dictionary adapters. + + + + + Contract for manipulating the Dictionary adapter. + + + + + Contract for editing the Dictionary adapter. + + + + + Contract for managing Dictionary adapter notifications. + + + + + Contract for validating Dictionary adapter. + + + + + Uses Reflection.Emit to expose the properties of a dictionary + through a dynamic implementation of a typed interface. + + + + + Defines the contract for building typed dictionary adapters. + + + + + Gets a typed adapter bound to the . + + The typed interface. + The underlying source of properties. + An implementation of the typed interface bound to the dictionary. + + The type represented by T must be an interface with properties. + + + + + Gets a typed adapter bound to the . + + The typed interface. + The underlying source of properties. + An implementation of the typed interface bound to the dictionary. + + The type represented by T must be an interface with properties. + + + + + Gets a typed adapter bound to the . + + The typed interface. + The underlying source of properties. + The property descriptor. + An implementation of the typed interface bound to the dictionary. + + The type represented by T must be an interface with properties. + + + + + Gets a typed adapter bound to the . + + The typed interface. + The underlying source of properties. + An implementation of the typed interface bound to the namedValues. + + The type represented by T must be an interface with properties. + + + + + Gets a typed adapter bound to the . + + The typed interface. + The underlying source of properties. + An implementation of the typed interface bound to the namedValues. + + The type represented by T must be an interface with properties. + + + + + Gets a typed adapter bound to the . + + The typed interface. + The underlying source of properties. + An implementation of the typed interface bound to the xpath navigable. + + The type represented by T must be an interface with properties. + + + + + Gets a typed adapter bound to the . + + The typed interface. + The underlying source of properties. + An implementation of the typed interface bound to the xpath navigable. + + The type represented by T must be an interface with properties. + + + + + Gets the associated with the type. + + The typed interface. + The adapter meta-data. + + + + Gets the associated with the type. + + The typed interface. + The property descriptor. + The adapter meta-data. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Describes a dictionary property. + + + + + Initializes an empty class. + + + + + Initializes a new instance of the class. + + The property. + The property behaviors. + + + + Copies an existinginstance of the class. + + + + + + + Gets the key. + + The dictionary adapter. + The key. + The descriptor. + + + + + Adds the key builder. + + The builder. + + + + Adds the key builders. + + The builders. + + + + Copies the key builders to the other + + + + + + + Copies the selected key builders to the other + + + + + + + + Gets the property value. + + The dictionary adapter. + The key. + The stored value. + The descriptor. + true if return only existing. + + + + + Adds the dictionary getter. + + The getter. + + + + Adds the dictionary getters. + + The getters. + + + + Copies the property getters to the other + + + + + + + Copies the selected property getters to the other + + + + + + + + Sets the property value. + + The dictionary adapter. + The key. + The value. + The descriptor. + + + + + Adds the dictionary setter. + + The setter. + + + + Adds the dictionary setters. + + The setters. + + + + Copies the property setters to the other + + + + + + + Copies the selected property setters to the other + + + + + + + + Adds the behaviors. + + + + + + + Adds the behaviors. + + + + + + + Adds the behaviors from the builders. + + + + + + + Copies the behaviors to the other + + + + + + + Copies the behaviors to the other + + + + + + + + + + + + + Gets the property name. + + + + + Gets the property type. + + + + + Gets the property. + + The property. + + + + Returns true if the property is dynamic. + + + + + Gets additional state. + + + + + Determines if property should be fetched. + + + + + Determines if notifications should occur. + + + + + Gets the property behaviors. + + + + + Gets the type converter. + + The type converter. + + + + Gets the key builders. + + The key builders. + + + + Gets the setter. + + The setter. + + + + Gets the getter. + + The getter. + + + + Adds the dictionary initializers. + + The initializers. + + + + Adds the dictionary initializers. + + The initializers. + + + + Copies the initializers to the other + + + + + + + Copies the filtered initializers to the other + + + + + + + + Adds the dictionary meta-data initializers. + + The meta-data initializers. + + + + Adds the dictionary meta-data initializers. + + The meta-data initializers. + + + + Copies the meta-initializers to the other + + + + + + + Copies the filtered meta-initializers to the other + + + + + + + + Gets the initializers. + + The initializers. + + + + Gets the meta-data initializers. + + The meta-data initializers. + + + + Contract for dictionary meta-data initialization. + + + + + Performs any initialization of the dictionary adapter meta-data. + + The dictionary adapter factory. + The dictionary adapter meta. + + + + + Contract for dictionary validation. + + + + + Determines if is valid. + + The dictionary adapter. + true if valid. + + + + Validates the . + + The dictionary adapter. + The error summary information. + + + + Validates the for a property. + + The dictionary adapter. + The property to validate. + The property summary information. + + + + Invalidates any results cached by the validator. + + The dictionary adapter. + + + + + + + + + Initializes a new instance of the class. + + The name values. + + + + Determines whether the object contains an element with the specified key. + + The key to locate in the object. + + true if the contains an element with the key; otherwise, false. + + key is null. + + + + Adapts the specified name values. + + The name values. + + + + + Gets a value indicating whether the object is read-only. + + + true if the object is read-only; otherwise, false. + + + + Gets or sets the with the specified key. + + + + + + Helper class for retrieving attributes. + + + + + Gets the attribute. + + The member. + The member attribute. + + + + Gets the attributes. Does not consider inherited attributes! + + The member. + The member attributes. + + + + Gets the type attribute. + + The type. + The type attribute. + + + + Gets the type attributes. + + The type. + The type attributes. + + + + Gets the type converter. + + The member. + + + + + Gets the attribute. + + The member. + The member attribute. + + + + Contract for typed dynamic value resolution. + + + + + + Contract for dynamic value resolution. + + + + + Encapsulates an invocation of a proxied method. + + + + + Overrides the value of an argument at the given with the + new provided. + + + This method accepts an , however the value provided must be compatible + with the type of the argument defined on the method, otherwise an exception will be thrown. + + The index of the argument to override. + The new value for the argument. + + + + Gets the value of the argument at the specified . + + The index. + The value of the argument at the specified . + + + + Returns the concrete instantiation of the on the proxy, with any generic + parameters bound to real types. + + + The concrete instantiation of the on the proxy, or the if + not a generic method. + + Can be slower than calling . + + + + Returns the concrete instantiation of , with any + generic parameters bound to real types. + For interface proxies, this will point to the on the target class. + + The concrete instantiation of , or + if not a generic method. + In debug builds this can be slower than calling . + + + + Proceeds the call to the next interceptor in line, and ultimately to the target method. + + + Since interface proxies without a target don't have the target implementation to proceed to, + it is important, that the last interceptor does not call this method, otherwise a + will be thrown. + + + + + Gets the proxy object on which the intercepted method is invoked. + + Proxy object on which the intercepted method is invoked. + + + + Gets the object on which the invocation is performed. This is different from proxy object + because most of the time this will be the proxy target object. + + + The invocation target. + + + + Gets the type of the target object for the intercepted method. + + The type of the target object. + + + + Gets the arguments that the has been invoked with. + + The arguments the method was invoked with. + + + + Gets the generic arguments of the method. + + The generic arguments, or null if not a generic method. + + + + Gets the representing the method being invoked on the proxy. + + The representing the method being invoked. + + + + For interface proxies, this will point to the on the target class. + + The method invocation target. + + + + Gets or sets the return value of the method. + + The return value of the method. + + + + Used during the target type inspection process. Implementors have a chance to customize the + proxy generation process. + + + + + Invoked by the generation process to determine if the specified method should be proxied. + + The type which declares the given method. + The method to inspect. + True if the given method should be proxied; false otherwise. + + + + Invoked by the generation process to notify that a member was not marked as virtual. + + The type which declares the non-virtual member. + The non-virtual member. + + This method gives an opportunity to inspect any non-proxyable member of a type that has + been requested to be proxied, and if appropriate - throw an exception to notify the caller. + + + + + Invoked by the generation process to notify that the whole process has completed. + + + + + Interface describing elements composing generated type + + + + + Checks if the method is public or protected. + + + + + + + Performs some basic screening and invokes the + to select methods. + + + + + + + + + Provides functionality for disassembling instances of attributes to CustomAttributeBuilder form, during the process of emiting new types by Dynamic Proxy. + + + + + Disassembles given attribute instance back to corresponding CustomAttributeBuilder. + + An instance of attribute to disassemble + corresponding 1 to 1 to given attribute instance, or null reference. + + Implementers should return that corresponds to given attribute instance 1 to 1, + that is after calling specified constructor with specified arguments, and setting specified properties and fields with values specified + we should be able to get an attribute instance identical to the one passed in . Implementer can return null + if it wishes to opt out of replicating the attribute. Notice however, that for some cases, like attributes passed explicitly by the user + it is illegal to return null, and doing so will result in exception. + + + + + Handles error during disassembly process + + Type of the attribute being disassembled + Exception thrown during the process + usually null, or (re)throws the exception + + + + Here we try to match a constructor argument to its value. + Since we can't get the values from the assembly, we use some heuristics to get it. + a/ we first try to match all the properties on the attributes by name (case insensitive) to the argument + b/ if we fail we try to match them by property type, with some smarts about convertions (i,e: can use Guid for string). + + + + + We have the following rules here. + Try to find a matching type, failing that, if the parameter is string, get the first property (under the assumption that + we can convert it. + + + + + Attributes can only accept simple types, so we return null for null, + if the value is passed as string we call to string (should help with converting), + otherwise, we use the value as is (enums, integer, etc). + + + + + Applied to the assemblies saved by in order to persist the cache data included in the persisted assembly. + + + + + Base class that exposes the common functionalities + to proxy generation. + + + + + Generates a parameters constructor that initializes the proxy + state with just to make it non-null. + + This constructor is important to allow proxies to be XML serializable + + + + + + It is safe to add mapping (no mapping for the interface exists) + + + + + + + + Generates the constructor for the class that extends + + + + + + + + + Default implementation of interface producing in-memory proxy assemblies. + + + + + Abstracts the implementation of proxy type construction. + + + + + Creates a proxy type for given , using provided. + + The class type to proxy. + The proxy generation options. + The generated proxy type. + Thrown when is a generic type definition. + Thrown when is not public. + Note that to avoid this exception, you can mark offending type internal, and define + pointing to Castle Dynamic Proxy assembly, in assembly containing that type, if this is appropriate. + + + + + Creates a proxy type for given , implementing , using provided. + + The class type to proxy. + Additional interface types to proxy. + The proxy generation options. + The generated proxy type. + + Implementers should return a proxy type for the specified class and interfaces. + Additional interfaces should be only 'mark' interfaces, that is, they should work like interface proxy without target. (See method.) + + Thrown when or any of is a generic type definition. + Thrown when or any of is not public. + Note that to avoid this exception, you can mark offending type internal, and define + pointing to Castle Dynamic Proxy assembly, in assembly containing that type, if this is appropriate. + + + + + Creates a proxy type for given , implementing , using provided. + + The class type to proxy. + Additional interface types to proxy. + The proxy generation options. + The generated proxy type. + + Implementers should return a proxy type for the specified class and interfaces. + Additional interfaces should be only 'mark' interfaces, that is, they should work like interface proxy without target. (See method.) + + Thrown when or any of is a generic type definition. + Thrown when or any of is not public. + Note that to avoid this exception, you can mark offending type internal, and define + pointing to Castle Dynamic Proxy assembly, in assembly containing that type, if this is appropriate. + + + + + Creates a proxy type that proxies calls to members on , implementing , using provided. + + The interface type to proxy. + Additional interface types to proxy. + Type implementing on which calls to the interface members should be intercepted. + The proxy generation options. + The generated proxy type. + + Implementers should return a proxy type for the specified interface that 'proceeds' executions to the specified target. + Additional interfaces should be only 'mark' interfaces, that is, they should work like interface proxy without target. (See method.) + + Thrown when or any of is a generic type definition. + Thrown when or any of is not public. + Note that to avoid this exception, you can mark offending type internal, and define + pointing to Castle Dynamic Proxy assembly, in assembly containing that type, if this is appropriate. + + + + + Creates a proxy type for given that delegates all calls to the provided interceptors. + + The interface type to proxy. + Additional interface types to proxy. + The proxy generation options. + The generated proxy type. + + Implementers should return a proxy type for the specified interface and additional interfaces that delegate all executions to the specified interceptors. + + Thrown when or any of is a generic type definition. + Thrown when or any of is not public. + Note that to avoid this exception, you can mark offending type internal, and define + pointing to Castle Dynamic Proxy assembly, in assembly containing that type, if this is appropriate. + + + + + Creates a proxy type for given and that delegates all calls to the provided interceptors and allows interceptors to switch the actual target of invocation. + + The interface type to proxy. + Additional interface types to proxy. + The proxy generation options. + The generated proxy type. + + Implementers should return a proxy type for the specified interface(s) that delegate all executions to the specified interceptors + and uses an instance of the interface as their targets (i.e. ), rather than a class. All classes should then implement interface, + to allow interceptors to switch invocation target with instance of another type implementing called interface. + + Thrown when or any of is a generic type definition. + Thrown when or any of is not public. + Note that to avoid this exception, you can mark offending type internal, and define + pointing to Castle Dynamic Proxy assembly, in assembly containing that type, if this is appropriate. + + + + + Gets or sets the that this logs to. + + + + + Gets the associated with this builder. + + The module scope associated with this builder. + + + + Initializes a new instance of the class with new . + + + + + Initializes a new instance of the class. + + The module scope for generated proxy types. + + + + Registers custom disassembler to handle disassembly of specified type of attributes. + + Type of attributes to handle + Disassembler converting existing instances of Attributes to CustomAttributeBuilders + + When disassembling an attribute Dynamic Proxy will first check if an custom disassembler has been registered to handle attributes of that type, + and if none is found, it'll use the . + + + + + Attributes should be replicated if they are non-inheritable, + but there are some special cases where the attributes means + something to the CLR, where they should be skipped. + + + + + Initializes a new instance of the class. + + Target element. This is either target type or target method for invocation types. + The type of the proxy. This is base type for invocation types. + The interfaces. + The options. + + + + Initializes a new instance of the class. + + Type of the target. + The interfaces. + The options. + + + s + Provides appropriate Ldc.X opcode for the type of primitive value to be loaded. + + + + + Provides appropriate Ldind.X opcode for + the type of primitive value to be loaded indirectly. + + + + + Emits a load opcode of the appropriate kind for a constant string or + primitive value. + + + + + + + Emits a load opcode of the appropriate kind for the constant default value of a + type, such as 0 for value types and null for reference types. + + + + + Emits a load indirect opcode of the appropriate type for a value or object reference. + Pops a pointer off the evaluation stack, dereferences it and loads + a value of the specified type. + + + + + + + Emits a store indirectopcode of the appropriate type for a value or object reference. + Pops a value of the specified type and a pointer off the evaluation stack, and + stores the value. + + + + + + + Summary description for PropertiesCollection. + + + + + Wraps a reference that is passed + ByRef and provides indirect load/store support. + + + + + Summary description for NewArrayExpression. + + + + + + + + + + Provides appropriate Stind.X opcode + for the type of primitive value to be stored indirectly. + + + + + Returns list of all unique interfaces implemented given types, including their base interfaces. + + + + + + + Initializes a new instance of the class. + + The name. + Type declaring the original event being overriten, or null. + + The add method. + The remove method. + The attributes. + + + + Represents the scope of uniquenes of names for types and their members + + + + + Gets a unique name based on + + Name suggested by the caller + Unique name based on . + + Implementers should provide name as closely resembling as possible. + Generally if no collision occurs it is suggested to return suggested name, otherwise append sequential suffix. + Implementers must return deterministic names, that is when is called twice + with the same suggested name, the same returned name should be provided each time. Non-deterministic return + values, like appending random suffices will break serialization of proxies. + + + + + Returns new, disposable naming scope. It is responsibilty of the caller to make sure that no naming collision + with enclosing scope, or other subscopes is possible. + + New naming scope. + + + + Returns the methods implemented by a type. Use this instead of Type.GetMethods() to work around a CLR issue + where duplicate MethodInfos are returned by Type.GetMethods() after a token of a generic type's method was loaded. + + + + + Determines whether this assembly has internals visible to dynamic proxy. + + The assembly to inspect. + + + + Determines whether the specified method is internal. + + The method. + + true if the specified method is internal; otherwise, false. + + + + + Because we need to cache the types based on the mixed in mixins, we do the following here: + - Get all the mixin interfaces + - Sort them by full name + - Return them by position + + The idea is to have reproducable behavior for the case that mixins are registered in different orders. + This method is here because it is required + + + + + Summary description for ModuleScope. + + + + + The default file name used when the assembly is saved using . + + + + + The default assembly (simple) name used for the assemblies generated by a instance. + + + + + Initializes a new instance of the class; assemblies created by this instance will not be saved. + + + + + Initializes a new instance of the class, allowing to specify whether the assemblies generated by this instance + should be saved. + + If set to true saves the generated module. + + + + Initializes a new instance of the class, allowing to specify whether the assemblies generated by this instance + should be saved. + + If set to true saves the generated module. + If set to true disables ability to generate signed module. This should be used in cases where ran under constrained permissions. + + + + Initializes a new instance of the class, allowing to specify whether the assemblies generated by this instance + should be saved and what simple names are to be assigned to them. + + If set to true saves the generated module. + If set to true disables ability to generate signed module. This should be used in cases where ran under constrained permissions. + The simple name of the strong-named assembly generated by this . + The path and file name of the manifest module of the strong-named assembly generated by this . + The simple name of the weak-named assembly generated by this . + The path and file name of the manifest module of the weak-named assembly generated by this . + + + + Initializes a new instance of the class, allowing to specify whether the assemblies generated by this instance + should be saved and what simple names are to be assigned to them. + + If set to true saves the generated module. + If set to true disables ability to generate signed module. This should be used in cases where ran under constrained permissions. + Naming scope used to provide unique names to generated types and their members (usually via sub-scopes). + The simple name of the strong-named assembly generated by this . + The path and file name of the manifest module of the strong-named assembly generated by this . + The simple name of the weak-named assembly generated by this . + The path and file name of the manifest module of the weak-named assembly generated by this . + + + + Returns a type from this scope's type cache, or null if the key cannot be found. + + The key to be looked up in the cache. + The type from this scope's type cache matching the key, or null if the key cannot be found + + + + Registers a type in this scope's type cache. + + The key to be associated with the type. + The type to be stored in the cache. + + + + Gets the key pair used to sign the strong-named assembly generated by this . + + + + + + Gets the specified module generated by this scope, creating a new one if none has yet been generated. + + If set to true, a strong-named module is returned; otherwise, a weak-named module is returned. + A strong-named or weak-named module generated by this scope, as specified by the parameter. + + + + Gets the strong-named module generated by this scope, creating a new one if none has yet been generated. + + A strong-named module generated by this scope. + + + + Gets the weak-named module generated by this scope, creating a new one if none has yet been generated. + + A weak-named module generated by this scope. + + + + Saves the generated assembly with the name and directory information given when this instance was created (or with + the and current directory if none was given). + + + + This method stores the generated assembly in the directory passed as part of the module information specified when this instance was + constructed (if any, else the current directory is used). If both a strong-named and a weak-named assembly + have been generated, it will throw an exception; in this case, use the overload. + + + If this was created without indicating that the assembly should be saved, this method does nothing. + + Both a strong-named and a weak-named assembly have been generated. + The path of the generated assembly file, or null if no file has been generated. + + + + Saves the specified generated assembly with the name and directory information given when this instance was created + (or with the and current directory if none was given). + + True if the generated assembly with a strong name should be saved (see ); + false if the generated assembly without a strong name should be saved (see . + + + This method stores the specified generated assembly in the directory passed as part of the module information specified when this instance was + constructed (if any, else the current directory is used). + + + If this was created without indicating that the assembly should be saved, this method does nothing. + + + No assembly has been generated that matches the parameter. + + The path of the generated assembly file, or null if no file has been generated. + + + + Loads the generated types from the given assembly into this 's cache. + + The assembly to load types from. This assembly must have been saved via or + , or it must have the manually applied. + + This method can be used to load previously generated and persisted proxy types from disk into this scope's type cache, eg. in order + to avoid the performance hit associated with proxy generation. + + + + + Users of this should use this lock when accessing the cache. + + + + + Gets the strong-named module generated by this scope, or if none has yet been generated. + + The strong-named module generated by this scope, or if none has yet been generated. + + + + Gets the file name of the strongly named module generated by this scope. + + The file name of the strongly named module generated by this scope. + + + + Gets the directory where the strongly named module generated by this scope will be saved, or if the current directory + is used. + + The directory where the strongly named module generated by this scope will be saved when is called + (if this scope was created to save modules). + + + + Gets the weak-named module generated by this scope, or if none has yet been generated. + + The weak-named module generated by this scope, or if none has yet been generated. + + + + Gets the file name of the weakly named module generated by this scope. + + The file name of the weakly named module generated by this scope. + + + + Gets the directory where the weakly named module generated by this scope will be saved, or if the current directory + is used. + + The directory where the weakly named module generated by this scope will be saved when is called + (if this scope was created to save modules). + + + + ProxyBuilder that persists the generated type. + + + The saved assembly contains just the last generated type. + + + + + Initializes a new instance of the class. + + + + + Saves the generated assembly to a physical file. Note that this renders the unusable. + + The path of the generated assembly file, or null if no assembly has been generated. + This method does not support saving multiple files. If both a signed and an unsigned module have been generated, use the + respective methods of the . + + + + Initializes a new instance of the class. + + The hook. + + + + Initializes a new instance of the class. + + + + + Provides proxy objects for classes and interfaces. + + + + + Initializes a new instance of the class. + + Proxy types builder. + + + + Initializes a new instance of the class. + + + + + Creates proxy object intercepting calls to members of interface on object with given . + + Type of the interface implemented by which will be proxied. + The target object, calls to which will be intercepted. + The interceptors called during the invocation of proxied methods. + Object proxying calls to members of on object. + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given array is a null reference (Nothing in Visual Basic). + Thrown when given is not an interface type. + Thrown when no default constructor exists on actual type of object. + Thrown when default constructor of actual type of throws an exception. + + This method generates new proxy type for each type of , which affects performance. If you don't want to proxy types differently depending on the type of the target + use method. + This method uses implementation to generate a proxy type. + As such caller should expect any type of exception that given implementation may throw. + + + + + Creates proxy object intercepting calls to members of interface on object with given . + + Type of the interface implemented by which will be proxied. + The target object, calls to which will be intercepted. + The proxy generation options used to influence generated proxy type and object. + The interceptors called during the invocation of proxied methods. + + Object proxying calls to members of on object. + + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given array is a null reference (Nothing in Visual Basic). + Thrown when given is not an interface type. + Thrown when no default constructor exists on actual type of object. + Thrown when default constructor of actual type of throws an exception. + + This method generates new proxy type for each type of , which affects performance. If you don't want to proxy types differently depending on the type of the target + use method. + This method uses implementation to generate a proxy type. + As such caller should expect any type of exception that given implementation may throw. + + + + + Creates proxy object intercepting calls to members of interface on object with given . + + Type of the interface implemented by which will be proxied. + The target object, calls to which will be intercepted. + The interceptors called during the invocation of proxied methods. + + Object proxying calls to members of type on object. + + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given array is a null reference (Nothing in Visual Basic). + Thrown when given is a generic type definition. + Thrown when given is not an interface type. + Thrown when given does not implement interface. + Thrown when no default constructor exists on actual type of object. + Thrown when default constructor of actual type of throws an exception. + + This method generates new proxy type for each type of , which affects performance. If you don't want to proxy types differently depending on the type of the target + use method. + This method uses implementation to generate a proxy type. + As such caller should expect any type of exception that given implementation may throw. + + + + + Creates proxy object intercepting calls to members of interface on object with given . + + Type of the interface implemented by which will be proxied. + The target object, calls to which will be intercepted. + The proxy generation options used to influence generated proxy type and object. + The interceptors called during the invocation of proxied methods. + + Object proxying calls to members of type on object. + + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given array is a null reference (Nothing in Visual Basic). + Thrown when given is a generic type definition. + Thrown when given is not an interface type. + Thrown when given does not implement interface. + Thrown when no default constructor exists on actual type of object. + Thrown when default constructor of actual type of throws an exception. + + This method generates new proxy type for each type of , which affects performance. If you don't want to proxy types differently depending on the type of the target + use method. + This method uses implementation to generate a proxy type. + As such caller should expect any type of exception that given implementation may throw. + + + + + Creates proxy object intercepting calls to members of interface on object with given . + + Type of the interface implemented by which will be proxied. + The target object, calls to which will be intercepted. + Additional interface types. Calls to their members will be proxied as well. + The interceptors called during the invocation of proxied methods. + + Object proxying calls to members of and types on object. + + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given array is a null reference (Nothing in Visual Basic). + Thrown when given or any of is a generic type definition. + Thrown when given is not an interface type. + Thrown when given does not implement interface. + Thrown when no default constructor exists on actual type of object. + Thrown when default constructor of actual type of throws an exception. + + This method generates new proxy type for each type of , which affects performance. If you don't want to proxy types differently depending on the type of the target + use method. + This method uses implementation to generate a proxy type. + As such caller should expect any type of exception that given implementation may throw. + + + + + Creates proxy object intercepting calls to members of interface on object with given . + + Type of the interface implemented by which will be proxied. + The target object, calls to which will be intercepted. + The proxy generation options used to influence generated proxy type and object. + Additional interface types. Calls to their members will be proxied as well. + The interceptors called during the invocation of proxied methods. + + Object proxying calls to members of and types on object. + + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given array is a null reference (Nothing in Visual Basic). + Thrown when given or any of is a generic type definition. + Thrown when given is not an interface type. + Thrown when given does not implement interface. + Thrown when no default constructor exists on actual type of object. + Thrown when default constructor of actual type of throws an exception. + + This method generates new proxy type for each type of , which affects performance. If you don't want to proxy types differently depending on the type of the target + use method. + This method uses implementation to generate a proxy type. + As such caller should expect any type of exception that given implementation may throw. + + + + + Creates proxy object intercepting calls to members of interface on object with given . + Interceptors can use interface to provide other target for method invocation than default . + + Type of the interface implemented by which will be proxied. + The target object, calls to which will be intercepted. + The interceptors called during the invocation of proxied methods. + + Object proxying calls to members of type on object or alternative implementation swapped at runtime by an interceptor. + + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given array is a null reference (Nothing in Visual Basic). + Thrown when given is a generic type definition. + Thrown when given is not an interface type. + Thrown when given does not implement interface. + Thrown when no default constructor exists on actual type of object. + Thrown when default constructor of actual type of throws an exception. + + This method uses implementation to generate a proxy type. + As such caller should expect any type of exception that given implementation may throw. + + + + + Creates proxy object intercepting calls to members of interface on object with given . + Interceptors can use interface to provide other target for method invocation than default . + + Type of the interface implemented by which will be proxied. + The target object, calls to which will be intercepted. + The interceptors called during the invocation of proxied methods. + + Object proxying calls to members of type on object or alternative implementation swapped at runtime by an interceptor. + + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given array is a null reference (Nothing in Visual Basic). + Thrown when given is not an interface type. + Thrown when no default constructor exists on actual type of object. + Thrown when default constructor of actual type of throws an exception. + + This method uses implementation to generate a proxy type. + As such caller should expect any type of exception that given implementation may throw. + + + + + Creates proxy object intercepting calls to members of interface on object with given . + Interceptors can use interface to provide other target for method invocation than default . + + Type of the interface implemented by which will be proxied. + The target object, calls to which will be intercepted. + The proxy generation options used to influence generated proxy type and object. + The interceptors called during the invocation of proxied methods. + + Object proxying calls to members of type on object or alternative implementation swapped at runtime by an interceptor. + + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given array is a null reference (Nothing in Visual Basic). + Thrown when given is not an interface type. + Thrown when no default constructor exists on actual type of object. + Thrown when default constructor of actual type of throws an exception. + + This method uses implementation to generate a proxy type. + As such caller should expect any type of exception that given implementation may throw. + + + + + Creates proxy object intercepting calls to members of interface on object with given . + Interceptors can use interface to provide other target for method invocation than default . + + Type of the interface implemented by which will be proxied. + The target object, calls to which will be intercepted. + Additional interface types. Calls to their members will be proxied as well. + The interceptors called during the invocation of proxied methods. + + Object proxying calls to members of and types on object or alternative implementation swapped at runtime by an interceptor. + + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given array is a null reference (Nothing in Visual Basic). + Thrown when given or any of is a generic type definition. + Thrown when given is not an interface type. + Thrown when given does not implement interface. + Thrown when no default constructor exists on actual type of object. + Thrown when default constructor of actual type of throws an exception. + + This method uses implementation to generate a proxy type. + As such caller should expect any type of exception that given implementation may throw. + + + + + Creates proxy object intercepting calls to members of interface on object with given . + Interceptors can use interface to provide other target for method invocation than default . + + Type of the interface implemented by which will be proxied. + The target object, calls to which will be intercepted. + The proxy generation options used to influence generated proxy type and object. + The interceptors called during the invocation of proxied methods. + + Object proxying calls to members of type on object or alternative implementation swapped at runtime by an interceptor. + + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given array is a null reference (Nothing in Visual Basic). + Thrown when given is a generic type definition. + Thrown when given is not an interface type. + Thrown when given does not implement interface. + Thrown when no default constructor exists on actual type of object. + Thrown when default constructor of actual type of throws an exception. + + This method uses implementation to generate a proxy type. + As such caller should expect any type of exception that given implementation may throw. + + + + + Creates proxy object intercepting calls to members of interface on object with given . + Interceptors can use interface to provide other target for method invocation than default . + + Type of the interface implemented by which will be proxied. + The target object, calls to which will be intercepted. + The proxy generation options used to influence generated proxy type and object. + Additional interface types. Calls to their members will be proxied as well. + The interceptors called during the invocation of proxied methods. + + Object proxying calls to members of and types on object or alternative implementation swapped at runtime by an interceptor. + + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given array is a null reference (Nothing in Visual Basic). + Thrown when given or any of is a generic type definition. + Thrown when given is not an interface type. + Thrown when given does not implement interface. + Thrown when no default constructor exists on actual type of object. + Thrown when default constructor of actual type of throws an exception. + + This method uses implementation to generate a proxy type. + As such caller should expect any type of exception that given implementation may throw. + + + + + Creates proxy object intercepting calls to members of interface on target object generated at runtime with given . + + Type of the interface which will be proxied. + The interceptors called during the invocation of proxied methods. + + Object proxying calls to members of types on generated target object. + + Thrown when given array is a null reference (Nothing in Visual Basic). + Thrown when given is not an interface type. + + Since this method uses an empty-shell implementation of interfaces to proxy generated at runtime, the actual implementation of proxied methods must be provided by given implementations. + They are responsible for setting return value (and out parameters) on proxied methods. It is also illegal for an interceptor to call , since there's no actual implementation to proceed with. + As a result of that also at least one implementation must be provided. + This method uses implementation to generate a proxy type. + As such caller should expect any type of exception that given implementation may throw. + + + + + Creates proxy object intercepting calls to members of interface on target object generated at runtime with given . + + Type of the interface which will be proxied. + The interceptors called during the invocation of proxied methods. + + Object proxying calls to members of types on generated target object. + + Thrown when given array is a null reference (Nothing in Visual Basic). + Thrown when given is not an interface type. + + Since this method uses an empty-shell implementation of interfaces to proxy generated at runtime, the actual implementation of proxied methods must be provided by given implementations. + They are responsible for setting return value (and out parameters) on proxied methods. It is also illegal for an interceptor to call , since there's no actual implementation to proceed with. + As a result of that also at least one implementation must be provided. + This method uses implementation to generate a proxy type. + As such caller should expect any type of exception that given implementation may throw. + + + + + Creates proxy object intercepting calls to members of interface on target object generated at runtime with given . + + Type of the interface which will be proxied. + The proxy generation options used to influence generated proxy type and object. + The interceptors called during the invocation of proxied methods. + + Object proxying calls to members of types on generated target object. + + Thrown when given array is a null reference (Nothing in Visual Basic). + Thrown when given is not an interface type. + + Since this method uses an empty-shell implementation of interfaces to proxy generated at runtime, the actual implementation of proxied methods must be provided by given implementations. + They are responsible for setting return value (and out parameters) on proxied methods. It is also illegal for an interceptor to call , since there's no actual implementation to proceed with. + As a result of that also at least one implementation must be provided. + This method uses implementation to generate a proxy type. + As such caller should expect any type of exception that given implementation may throw. + + + + + Creates proxy object intercepting calls to members of interface on target object generated at runtime with given . + + Type of the interface which will be proxied. + The interceptors called during the invocation of proxied methods. + + Object proxying calls to members of type on generated target object. + + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given array is a null reference (Nothing in Visual Basic). + Thrown when given is a generic type definition. + Thrown when given is not an interface type. + + Since this method uses an empty-shell implementation of interfaces to proxy generated at runtime, the actual implementation of proxied methods must be provided by given implementations. + They are responsible for setting return value (and out parameters) on proxied methods. It is also illegal for an interceptor to call , since there's no actual implementation to proceed with. + This method uses implementation to generate a proxy type. + As such caller should expect any type of exception that given implementation may throw. + + + + + Creates proxy object intercepting calls to members of interface on target object generated at runtime with given . + + Type of the interface which will be proxied. + The interceptors called during the invocation of proxied methods. + + Object proxying calls to members of type on generated target object. + + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given array is a null reference (Nothing in Visual Basic). + Thrown when given is a generic type definition. + Thrown when given is not an interface type. + + Since this method uses an empty-shell implementation of interfaces to proxy generated at runtime, the actual implementation of proxied methods must be provided by given implementations. + They are responsible for setting return value (and out parameters) on proxied methods. It is also illegal for an interceptor to call , since there's no actual implementation to proceed with. + This method uses implementation to generate a proxy type. + As such caller should expect any type of exception that given implementation may throw. + + + + + Creates proxy object intercepting calls to members of interface on target object generated at runtime with given . + + Type of the interface which will be proxied. + Additional interface types. Calls to their members will be proxied as well. + The interceptors called during the invocation of proxied methods. + + Object proxying calls to members of and types on generated target object. + + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given array is a null reference (Nothing in Visual Basic). + Thrown when given or any of is a generic type definition. + Thrown when given is not an interface type. + + Since this method uses an empty-shell implementation of interfaces to proxy generated at runtime, the actual implementation of proxied methods must be provided by given implementations. + They are responsible for setting return value (and out parameters) on proxied methods. It is also illegal for an interceptor to call , since there's no actual implementation to proceed with. + This method uses implementation to generate a proxy type. + As such caller should expect any type of exception that given implementation may throw. + + + + + Creates proxy object intercepting calls to members of interface on target object generated at runtime with given . + + Type of the interface which will be proxied. + The proxy generation options used to influence generated proxy type and object. + The interceptors called during the invocation of proxied methods. + + Object proxying calls to members of on generated target object. + + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given array is a null reference (Nothing in Visual Basic). + Thrown when given is a generic type definition. + Thrown when given is not an interface type. + + They are responsible for setting return value (and out parameters) on proxied methods. It is also illegal for an interceptor to call , since there's no actual implementation to proceed with. + This method uses implementation to generate a proxy type. + As such caller should expect any type of exception that given implementation may throw. + + + + + Creates proxy object intercepting calls to members of interface on target object generated at runtime with given . + + Type of the interface which will be proxied. + The proxy generation options used to influence generated proxy type and object. + Additional interface types. Calls to their members will be proxied as well. + The interceptors called during the invocation of proxied methods. + + Object proxying calls to members of and types on generated target object. + + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given array is a null reference (Nothing in Visual Basic). + Thrown when given or any of is a generic type definition. + Thrown when given is not an interface type. + + Since this method uses an empty-shell implementation of to proxy generated at runtime, the actual implementation of proxied methods must be provided by given implementations. + They are responsible for setting return value (and out parameters) on proxied methods. It is also illegal for an interceptor to call , since there's no actual implementation to proceed with. + This method uses implementation to generate a proxy type. + As such caller should expect any type of exception that given implementation may throw. + + + + + Creates proxy object intercepting calls to virtual members of type on newly created instance of that type with given . + + Type of class which will be proxied. + The target object, calls to which will be intercepted. + The interceptors called during the invocation of proxied methods. + + New object of type proxying calls to virtual members of type. + + Thrown when given is not a class type. + Thrown when no default constructor exists on type . + Thrown when default constructor of type throws an exception. + + This method uses implementation to generate a proxy type. + As such caller should expect any type of exception that given implementation may throw. + + + + + Creates proxy object intercepting calls to virtual members of type on newly created instance of that type with given . + + Type of class which will be proxied. + The target object, calls to which will be intercepted. + The proxy generation options used to influence generated proxy type and object. + The interceptors called during the invocation of proxied methods. + + New object of type proxying calls to virtual members of type. + + Thrown when given is not a class type. + Thrown when no default constructor exists on type . + Thrown when default constructor of type throws an exception. + + This method uses implementation to generate a proxy type. + As such caller should expect any type of exception that given implementation may throw. + + + + + Creates proxy object intercepting calls to virtual members of type on newly created instance of that type with given . + + Type of class which will be proxied. + Additional interface types. Calls to their members will be proxied as well. + The target object, calls to which will be intercepted. + The interceptors called during the invocation of proxied methods. + + New object of type proxying calls to virtual members of and types. + + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given or any of is a generic type definition. + Thrown when given is not a class type. + Thrown when no default constructor exists on type . + Thrown when default constructor of type throws an exception. + + This method uses implementation to generate a proxy type. + As such caller should expect any type of exception that given implementation may throw. + + + + + Creates proxy object intercepting calls to virtual members of type on newly created instance of that type with given . + + Type of class which will be proxied. + The target object, calls to which will be intercepted. + The proxy generation options used to influence generated proxy type and object. + Arguments of constructor of type which should be used to create a new instance of that type. + The interceptors called during the invocation of proxied methods. + + New object of type proxying calls to virtual members of type. + + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given is a generic type definition. + Thrown when given is not a class type. + Thrown when no constructor exists on type with parameters matching . + Thrown when constructor of type throws an exception. + + This method uses implementation to generate a proxy type. + As such caller should expect any type of exception that given implementation may throw. + + + + + Creates proxy object intercepting calls to virtual members of type on newly created instance of that type with given . + + Type of class which will be proxied. + The target object, calls to which will be intercepted. + Arguments of constructor of type which should be used to create a new instance of that type. + The interceptors called during the invocation of proxied methods. + + New object of type proxying calls to virtual members of type. + + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given is a generic type definition. + Thrown when given is not a class type. + Thrown when no constructor exists on type with parameters matching . + Thrown when constructor of type throws an exception. + + This method uses implementation to generate a proxy type. + As such caller should expect any type of exception that given implementation may throw. + + + + + Creates proxy object intercepting calls to virtual members of type on newly created instance of that type with given . + + Type of class which will be proxied. + The target object, calls to which will be intercepted. + The interceptors called during the invocation of proxied methods. + + New object of type proxying calls to virtual members of type. + + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given is a generic type definition. + Thrown when given is not a class type. + Thrown when no parameterless constructor exists on type . + Thrown when constructor of type throws an exception. + + This method uses implementation to generate a proxy type. + As such caller should expect any type of exception that given implementation may throw. + + + + + Creates proxy object intercepting calls to virtual members of type on newly created instance of that type with given . + + Type of class which will be proxied. + The target object, calls to which will be intercepted. + The proxy generation options used to influence generated proxy type and object. + The interceptors called during the invocation of proxied methods. + + New object of type proxying calls to virtual members of type. + + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given is a generic type definition. + Thrown when given is not a class type. + Thrown when no default constructor exists on type . + Thrown when default constructor of type throws an exception. + + This method uses implementation to generate a proxy type. + As such caller should expect any type of exception that given implementation may throw. + + + + + Creates proxy object intercepting calls to virtual members of type on newly created instance of that type with given . + + Type of class which will be proxied. + Additional interface types. Calls to their members will be proxied as well. + The target object, calls to which will be intercepted. + The proxy generation options used to influence generated proxy type and object. + The interceptors called during the invocation of proxied methods. + + New object of type proxying calls to virtual members of and types. + + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given or any of is a generic type definition. + Thrown when given is not a class type. + Thrown when no default constructor exists on type . + Thrown when default constructor of type throws an exception. + + This method uses implementation to generate a proxy type. + As such caller should expect any type of exception that given implementation may throw. + + + + + Creates proxy object intercepting calls to virtual members of type on newly created instance of that type with given . + + Type of class which will be proxied. + Additional interface types. Calls to their members will be proxied as well. + The target object, calls to which will be intercepted. + The proxy generation options used to influence generated proxy type and object. + Arguments of constructor of type which should be used to create a new instance of that type. + The interceptors called during the invocation of proxied methods. + + New object of type proxying calls to virtual members of and types. + + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given or any of is a generic type definition. + Thrown when given is not a class type. + Thrown when no constructor exists on type with parameters matching . + Thrown when constructor of type throws an exception. + + This method uses implementation to generate a proxy type. + As such caller should expect any type of exception that given implementation may throw. + + + + + Creates proxy object intercepting calls to virtual members of type on newly created instance of that type with given . + + Type of class which will be proxied. + The interceptors called during the invocation of proxied methods. + + New object of type proxying calls to virtual members of type. + + Thrown when given is not a class type. + Thrown when no default constructor exists on type . + Thrown when default constructor of type throws an exception. + + This method uses implementation to generate a proxy type. + As such caller should expect any type of exception that given implementation may throw. + + + + + Creates proxy object intercepting calls to virtual members of type on newly created instance of that type with given . + + Type of class which will be proxied. + The proxy generation options used to influence generated proxy type and object. + The interceptors called during the invocation of proxied methods. + + New object of type proxying calls to virtual members of type. + + Thrown when given is not a class type. + Thrown when no default constructor exists on type . + Thrown when default constructor of type throws an exception. + + This method uses implementation to generate a proxy type. + As such caller should expect any type of exception that given implementation may throw. + + + + + Creates proxy object intercepting calls to virtual members of type on newly created instance of that type with given . + + Type of class which will be proxied. + Additional interface types. Calls to their members will be proxied as well. + The interceptors called during the invocation of proxied methods. + + New object of type proxying calls to virtual members of and types. + + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given or any of is a generic type definition. + Thrown when given is not a class type. + Thrown when no default constructor exists on type . + Thrown when default constructor of type throws an exception. + + This method uses implementation to generate a proxy type. + As such caller should expect any type of exception that given implementation may throw. + + + + + Creates proxy object intercepting calls to virtual members of type on newly created instance of that type with given . + + Type of class which will be proxied. + The proxy generation options used to influence generated proxy type and object. + Arguments of constructor of type which should be used to create a new instance of that type. + The interceptors called during the invocation of proxied methods. + + New object of type proxying calls to virtual members of type. + + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given is a generic type definition. + Thrown when given is not a class type. + Thrown when no constructor exists on type with parameters matching . + Thrown when constructor of type throws an exception. + + This method uses implementation to generate a proxy type. + As such caller should expect any type of exception that given implementation may throw. + + + + + Creates proxy object intercepting calls to virtual members of type on newly created instance of that type with given . + + Type of class which will be proxied. + Arguments of constructor of type which should be used to create a new instance of that type. + The interceptors called during the invocation of proxied methods. + + New object of type proxying calls to virtual members of type. + + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given is a generic type definition. + Thrown when given is not a class type. + Thrown when no constructor exists on type with parameters matching . + Thrown when constructor of type throws an exception. + + This method uses implementation to generate a proxy type. + As such caller should expect any type of exception that given implementation may throw. + + + + + Creates proxy object intercepting calls to virtual members of type on newly created instance of that type with given . + + Type of class which will be proxied. + The interceptors called during the invocation of proxied methods. + + New object of type proxying calls to virtual members of type. + + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given is a generic type definition. + Thrown when given is not a class type. + Thrown when no parameterless constructor exists on type . + Thrown when constructor of type throws an exception. + + This method uses implementation to generate a proxy type. + As such caller should expect any type of exception that given implementation may throw. + + + + + Creates proxy object intercepting calls to virtual members of type on newly created instance of that type with given . + + Type of class which will be proxied. + The proxy generation options used to influence generated proxy type and object. + The interceptors called during the invocation of proxied methods. + + New object of type proxying calls to virtual members of type. + + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given is a generic type definition. + Thrown when given is not a class type. + Thrown when no default constructor exists on type . + Thrown when default constructor of type throws an exception. + + This method uses implementation to generate a proxy type. + As such caller should expect any type of exception that given implementation may throw. + + + + + Creates proxy object intercepting calls to virtual members of type on newly created instance of that type with given . + + Type of class which will be proxied. + Additional interface types. Calls to their members will be proxied as well. + The proxy generation options used to influence generated proxy type and object. + The interceptors called during the invocation of proxied methods. + + New object of type proxying calls to virtual members of and types. + + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given or any of is a generic type definition. + Thrown when given is not a class type. + Thrown when no default constructor exists on type . + Thrown when default constructor of type throws an exception. + + This method uses implementation to generate a proxy type. + As such caller should expect any type of exception that given implementation may throw. + + + + + Creates proxy object intercepting calls to virtual members of type on newly created instance of that type with given . + + Type of class which will be proxied. + Additional interface types. Calls to their members will be proxied as well. + The proxy generation options used to influence generated proxy type and object. + Arguments of constructor of type which should be used to create a new instance of that type. + The interceptors called during the invocation of proxied methods. + + New object of type proxying calls to virtual members of and types. + + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given or any of is a generic type definition. + Thrown when given is not a class type. + Thrown when no constructor exists on type with parameters matching . + Thrown when constructor of type throws an exception. + + This method uses implementation to generate a proxy type. + As such caller should expect any type of exception that given implementation may throw. + + + + + Creates the proxy type for class proxy with given class, implementing given and using provided . + + The base class for proxy type. + The interfaces that proxy type should implement. + The options for proxy generation process. + of proxy. + + + + Creates the proxy type for interface proxy with target for given interface, implementing given on given and using provided . + + The interface proxy type should implement. + The additional interfaces proxy type should implement. + Actual type that the proxy type will encompass. + The options for proxy generation process. + of proxy. + + + + Creates the proxy type for interface proxy with target interface for given interface, implementing given on given and using provided . + + The interface proxy type should implement. + The additional interfaces proxy type should implement. + The options for proxy generation process. + of proxy. + + + + Creates the proxy type for interface proxy without target for given interface, implementing given and using provided . + + The interface proxy type should implement. + The additional interfaces proxy type should implement. + The options for proxy generation process. + of proxy. + + + + Gets or sets the that this log to. + + + + + Gets the proxy builder instance used to generate proxy types. + + The proxy builder. + + + + + + + + + + + + + + + For interface proxies, this will point to the + on the target class + + + + + Handles the deserialization of proxies. + + + + + Resets the used for deserialization to a new scope. + + This is useful for test cases. + + + + Resets the used for deserialization to a given . + + The scope to be used for deserialization. + By default, the deserialization process uses a different scope than the rest of the application, which can lead to multiple proxies + being generated for the same type. By explicitly setting the deserialization scope to the application's scope, this can be avoided. + + + + Gets the used for deserialization. + + As has no way of automatically determining the scope used by the application (and the application + might use more than one scope at the same time), uses a dedicated scope instance for deserializing proxy + types. This instance can be reset and set to a specific value via and . + + + + Holds objects representing methods of class. + + + + + Holds objects representing methods of class. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Provides an extension point that allows proxies to choose specific interceptors on + a per method basis. + + + + + Selects the interceptors that should intercept calls to the given . + + The type declaring the method to intercept. + The method that will be intercepted. + All interceptors registered with the proxy. + An array of interceptors to invoke upon calling the . + + This method is called only once per proxy instance, upon the first call to the + . Either an empty array or null are valid return values to indicate + that no interceptor should intercept calls to the method. Although it is not advised, it is + legal to return other implementations than these provided in + . + + + + + Creates a new lock. + + + + + + This interface should be implemented by classes + that are available in a bigger context, exposing + the container to different areas in the same application. + + For example, in Web application, the (global) HttpApplication + subclasses should implement this interface to expose + the configured container + + + + + + Exposes means to change target objects of proxies and invocations + + + + + Changes the target object () of current . + + The new value of target of invocation. + + Although the method takes the actual instance must be of type assignable to , otherwise an will be thrown. + Also while it's technically legal to pass null reference (Nothing in Visual Basic) as , for obvious reasons Dynamic Proxy will not be able to call the intercepted method on such target. + In this case last interceptor in the pipeline mustn't call or a will be throws. + Also while it's technically legal to pass proxy itself as , this would create stack overflow. + In this case last interceptor in the pipeline mustn't call or a will be throws. + + Thrown when is not assignable to the proxied type. + + + + Permanently changes the target object of the proxy. This does not affect target of the current invocation. + + The new value of target of the proxy. + + Although the method takes the actual instance must be of type assignable to proxy's target type, otherwise an will be thrown. + Also while it's technically legal to pass null reference (Nothing in Visual Basic) as , for obvious reasons Dynamic Proxy will not be able to call the intercepted method on such target. + In this case last interceptor in the pipeline mustn't call or a will be throws. + Also while it's technically legal to pass proxy itself as , this would create stack overflow. + In this case last interceptor in the pipeline mustn't call or a will be throws. + + Thrown when is not assignable to the proxied type. + + + + New interface that is going to be used by DynamicProxy 2 + + + + + Get the proxy target (note that null is a valid target!) + + + + + + Gets the interceptors for the proxy + + + + + + Defines that the implementation wants a + in order to + access other components. The creator must be aware + that the component might (or might not) implement + the interface. + + + Used by Castle Project components to, for example, + gather logging factories + + + + + Increments IServiceProvider with a generic service resolution operation. + + + + + Provides a factory that can produce either or + classes. + + + + + Manages the instantiation of s. + + + + + Creates a new logger, getting the logger name from the specified type. + + + + + Creates a new logger. + + + + + Creates a new logger, getting the logger name from the specified type. + + + + + Creates a new logger. + + + + + Creates a new extended logger, getting the logger name from the specified type. + + + + + Creates a new extended logger. + + + + + Creates a new extended logger, getting the logger name from the specified type. + + + + + Creates a new extended logger. + + + + + Creates a new extended logger, getting the logger name from the specified type. + + + + + Creates a new extended logger. + + + + + Creates a new extended logger, getting the logger name from the specified type. + + + + + Creates a new extended logger. + + + + + Creates a new logger, getting the logger name from the specified type. + + + + + Creates a new logger. + + + + + Creates a new logger, getting the logger name from the specified type. + + + + + Creates a new logger. + + + + + Gets the configuration file. + + i.e. log4net.config + + + + + Used to create the TraceLogger implementation of ILogger interface. See . + + + + + Gets the configuration file. + + i.e. log4net.config + + + + + Interface for Context Properties implementations + + + + This interface defines a basic property get set accessor. + + + Based on the ContextPropertiesBase of log4net, by Nicko Cadell. + + + + + + Gets or sets the value of a property + + + The value for the property with the specified key + + + + Gets or sets the value of a property + + + + + + NullLogFactory used when logging is turned off. + + + + + Creates an instance of ILogger with the specified name. + + Name. + + + + + Creates an instance of ILogger with the specified name and LoggerLevel. + + Name. + Level. + + + + + Creates outputing + to files. The name of the file is derived from the log name + plus the 'log' extension. + + + + + Provides an interface that supports and + allows the storage and retrieval of Contexts. These are supported in + both log4net and NLog. + + + + + Manages logging. + + + This is a facade for the different logging subsystems. + It offers a simplified interface that follows IOC patterns + and a simplified priority/level/severity abstraction. + + + + + Logs a debug message. + + The message to log + + + + Logs a debug message. + + The exception to log + The message to log + + + + Logs a debug message. + + Format string for the message to log + Format arguments for the message to log + + + + Logs a debug message. + + Format string for the message to log + Format arguments for the message to log + + + + Logs a debug message. + + The exception to log + Format string for the message to log + Format arguments for the message to log + + + + Logs a debug message. + + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs a debug message. + + The exception to log + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs an info message. + + The message to log + + + + Logs an info message. + + The exception to log + The message to log + + + + Logs an info message. + + Format string for the message to log + Format arguments for the message to log + + + + Logs an info message. + + Format string for the message to log + Format arguments for the message to log + + + + Logs an info message. + + The exception to log + Format string for the message to log + Format arguments for the message to log + + + + Logs an info message. + + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs an info message. + + The exception to log + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs a warn message. + + The message to log + + + + Logs a warn message. + + The exception to log + The message to log + + + + Logs a warn message. + + Format string for the message to log + Format arguments for the message to log + + + + Logs a warn message. + + Format string for the message to log + Format arguments for the message to log + + + + Logs a warn message. + + The exception to log + Format string for the message to log + Format arguments for the message to log + + + + Logs a warn message. + + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs a warn message. + + The exception to log + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs an error message. + + The message to log + + + + Logs an error message. + + The exception to log + The message to log + + + + Logs an error message. + + Format string for the message to log + Format arguments for the message to log + + + + Logs an error message. + + Format string for the message to log + Format arguments for the message to log + + + + Logs an error message. + + The exception to log + Format string for the message to log + Format arguments for the message to log + + + + Logs an error message. + + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs an error message. + + The exception to log + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs a fatal message. + + The message to log + + + + Logs a fatal message. + + The exception to log + The message to log + + + + Logs a fatal message. + + Format string for the message to log + Format arguments for the message to log + + + + Logs a fatal message. + + Format string for the message to log + Format arguments for the message to log + + + + Logs a fatal message. + + The exception to log + Format string for the message to log + Format arguments for the message to log + + + + Logs a fatal message. + + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs a fatal message. + + The exception to log + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs a fatal error message. + + The Message + + + + Logs a fatal error message. + + The Message + The Exception + + + + Logs a fatal error message. + + Message format + Array of objects to write using format + + + + Create a new child logger. + The name of the child logger is [current-loggers-name].[passed-in-name] + + The Subname of this logger. + The New ILogger instance. + If the name has an empty element name. + + + + Determines if messages of priority "debug" will be logged. + + True if "debug" messages will be logged. + + + + Determines if messages of priority "info" will be logged. + + True if "info" messages will be logged. + + + + Determines if messages of priority "warn" will be logged. + + True if "warn" messages will be logged. + + + + Determines if messages of priority "error" will be logged. + + True if "error" messages will be logged. + + + + Determines if messages of priority "fatal" will be logged. + + True if "fatal" messages will be logged. + + + + Determines if messages of priority "fatalError" will be logged. + + True if "fatalError" messages will be logged. + + + + Exposes the Global Context of the extended logger. + + + + + Exposes the Thread Context of the extended logger. + + + + + Exposes the Thread Stack of the extended logger. + + + + + Supporting Logger levels. + + + + + Logging will be off + + + + + Fatal logging level + + + + + Error logging level + + + + + Warn logging level + + + + + Info logging level + + + + + Debug logging level + + + + + The Logger sending everything to the standard output streams. + This is mainly for the cases when you have a utility that + does not have a logger to supply. + + + + + The Level Filtered Logger class. This is a base clase which + provides a LogLevel attribute and reroutes all functions into + one Log method. + + + + + Creates a new LevelFilteredLogger. + + + + + Keep the instance alive in a remoting scenario + + + + + + Logs a debug message. + + The message to log + + + + Logs a debug message. + + The exception to log + The message to log + + + + Logs a debug message. + + Format string for the message to log + Format arguments for the message to log + + + + Logs a debug message. + + The exception to log + Format string for the message to log + Format arguments for the message to log + + + + Logs a debug message. + + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs a debug message. + + The exception to log + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs a debug message. + + Message format + Array of objects to write using format + + + + Logs an info message. + + The message to log + + + + Logs an info message. + + The exception to log + The message to log + + + + Logs an info message. + + Format string for the message to log + Format arguments for the message to log + + + + Logs an info message. + + The exception to log + Format string for the message to log + Format arguments for the message to log + + + + Logs an info message. + + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs an info message. + + The exception to log + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs an info message. + + Message format + Array of objects to write using format + + + + Logs a warn message. + + The message to log + + + + Logs a warn message. + + The exception to log + The message to log + + + + Logs a warn message. + + Format string for the message to log + Format arguments for the message to log + + + + Logs a warn message. + + The exception to log + Format string for the message to log + Format arguments for the message to log + + + + Logs a warn message. + + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs a warn message. + + The exception to log + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs a warn message. + + Message format + Array of objects to write using format + + + + Logs an error message. + + The message to log + + + + Logs an error message. + + The exception to log + The message to log + + + + Logs an error message. + + Format string for the message to log + Format arguments for the message to log + + + + Logs an error message. + + The exception to log + Format string for the message to log + Format arguments for the message to log + + + + Logs an error message. + + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs an error message. + + The exception to log + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs an error message. + + Message format + Array of objects to write using format + + + + Logs a fatal message. + + The message to log + + + + Logs a fatal message. + + The exception to log + The message to log + + + + Logs a fatal message. + + Format string for the message to log + Format arguments for the message to log + + + + Logs a fatal message. + + The exception to log + Format string for the message to log + Format arguments for the message to log + + + + Logs a fatal message. + + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs a fatal message. + + The exception to log + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs a fatal message. + + Message format + Array of objects to write using format + + + + Logs a fatal error message. + + The Message + + + + Logs a fatal error message. + + The Message + The Exception + + + + Logs a fatal error message. + + Message format + Array of objects to write using format + + + + Implementors output the log content by implementing this method only. + Note that exception can be null + + + + + + + + + The LoggerLevel that this logger + will be using. Defaults to LoggerLevel.Off + + + + + The name that this logger will be using. + Defaults to String.Empty + + + + + Determines if messages of priority "debug" will be logged. + + true if log level flags include the bit + + + + Determines if messages of priority "info" will be logged. + + true if log level flags include the bit + + + + Determines if messages of priority "warn" will be logged. + + true if log level flags include the bit + + + + Determines if messages of priority "error" will be logged. + + true if log level flags include the bit + + + + Determines if messages of priority "fatal" will be logged. + + true if log level flags include the bit + + + + Determines if messages of priority "fatal" will be logged. + + true if log level flags include the bit + + + + Creates a new ConsoleLogger with the Level + set to LoggerLevel.Debug and the Name + set to String.Empty. + + + + + Creates a new ConsoleLogger with the Name + set to String.Empty. + + The logs Level. + + + + Creates a new ConsoleLogger with the Level + set to LoggerLevel.Debug. + + The logs Name. + + + + Creates a new ConsoleLogger. + + The logs Name. + The logs Level. + + + + A Common method to log. + + The level of logging + The name of the logger + The Message + The Exception + + + + Returns a new ConsoleLogger with the name + added after this loggers name, with a dot in between. + + The added hierarchical name. + A new ConsoleLogger. + + + + The Logger using standart Diagnostics namespace. + + + + + Creates a logger based on . + + + + + + Creates a logger based on . + + + + + + + Creates a logger based on . + + + + + + + + The Null Logger class. This is useful for implementations where you need + to provide a logger to a utility class, but do not want any output from it. + It also helps when you have a utility that does not have a logger to supply. + + + + + Creates a new NullLogger. + + + + + No-op. + + Ignored + + + + No-op. + + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + Ignored + Ignored + + + + No-op. + + Ignored + + + + No-op. + + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + Ignored + Ignored + + + + No-op. + + Ignored + + + + No-op. + + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + Ignored + Ignored + + + + No-op. + + Ignored + + + + No-op. + + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + Ignored + Ignored + + + + No-op. + + Ignored + + + + No-op. + + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + Ignored + Ignored + + + + No-op. + + Ignored + + + + No-op. + + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + + + + Returns this NullLogger. + + Ignored + This ILogger instance. + + + + No-op. + + false + + + + No-op. + + false + + + + No-op. + + false + + + + No-op. + + false + + + + No-op. + + false + + + + No-op. + + false + + + + Returns empty context properties. + + + + + Returns empty context properties. + + + + + Returns empty context stacks. + + + + + The Stream Logger class. This class can stream log information + to any stream, it is suitable for storing a log file to disk, + or to a MemoryStream for testing your components. + + + This logger is not thread safe. + + + + + Creates a new StreamLogger with default encoding + and buffer size. Initial Level is set to Debug. + + + The name of the log. + + + The stream that will be used for logging, + seeking while the logger is alive + + + + + Creates a new StreamLogger with default buffer size. + Initial Level is set to Debug. + + + The name of the log. + + + The stream that will be used for logging, + seeking while the logger is alive + + + The encoding that will be used for this stream. + + + + + + Creates a new StreamLogger. + Initial Level is set to Debug. + + + The name of the log. + + + The stream that will be used for logging, + seeking while the logger is alive + + + The encoding that will be used for this stream. + + + + The buffer size that will be used for this stream. + + + + + + Creates a new StreamLogger with + Debug as default Level. + + The name of the log. + The StreamWriter the log will write to. + + + + The TraceLogger sends all logging to the System.Diagnostics.TraceSource + built into the .net framework. + + + Logging can be configured in the system.diagnostics configuration + section. + + If logger doesn't find a source name with a full match it will + use source names which match the namespace partially. For example you can + configure from all castle components by adding a source name with the + name "Castle". + + If no portion of the namespace matches the source named "Default" will + be used. + + + + + Build a new trace logger based on the named TraceSource + + The name used to locate the best TraceSource. In most cases comes from the using type's fullname. + + + + Build a new trace logger based on the named TraceSource + + The name used to locate the best TraceSource. In most cases comes from the using type's fullname. + The default logging level at which this source should write messages. In almost all cases this + default value will be overridden in the config file. + + + + Create a new child logger. + The name of the child logger is [current-loggers-name].[passed-in-name] + + The Subname of this logger. + The New ILogger instance. + + + + This is an abstract implementation + that deals with methods that can be abstracted away + from underlying implementations. + + + AbstractConfiguration makes easier to implementers + to create a new version of + + + + + is a interface encapsulating a configuration node + used to retrieve configuration values. + + + + + Gets the value of the node and converts it + into specified . + + The + + The Default value returned if the conversion fails. + + The Value converted into the specified type. + + + + Gets the name of the node. + + + The Name of the node. + + + + + Gets the value of the node. + + + The Value of the node. + + + + + Gets an of + elements containing all node children. + + The Collection of child nodes. + + + + Gets an of the configuration attributes. + + + + + Gets the value of the node and converts it + into specified . + + The + + The Default value returned if the convertion fails. + + The Value converted into the specified type. + + + + Gets the name of the . + + + The Name of the . + + + + + Gets the value of . + + + The Value of the . + + + + + Gets all child nodes. + + The of child nodes. + + + + Gets node attributes. + + + All attributes of the node. + + + + + A collection of objects. + + + + + Creates a new instance of ConfigurationCollection. + + + + + Creates a new instance of ConfigurationCollection. + + + + + Summary description for MutableConfiguration. + + + + + Initializes a new instance of the class. + + The name. + + + + Gets the value of . + + + The Value of the . + + + + + Pendent + + + + + Deserializes the specified node into an abstract representation of configuration. + + The node. + + + + + If a config value is an empty string we return null, this is to keep + backward compability with old code + + + + + General purpose class to represent a standard pair of values. + + Type of the first value + Type of the second value + + + + Constructs a pair with its values + + + + + + + List of utility methods related to dynamic proxy operations + + + + + Determines whether the specified type is a proxy generated by + DynamicProxy (1 or 2). + + The type. + + true if it is a proxy; otherwise, false. + + + + + Pendent + + + + + Initializes a new instance of the class. + + The target. + + + + Determines whether the object contains an element with the specified key. + + The key to locate in the object. + + true if the contains an element with the key; otherwise, false. + + + is null. + + + + Adds an element with the provided key and value to the object. + + The to use as the key of the element to add. + The to use as the value of the element to add. + + is null. + An element with the same key already exists in the object. + The is read-only.-or- The has a fixed size. + + + + Removes all elements from the object. + + The object is read-only. + + + + Returns an object for the object. + + + An object for the object. + + + + + Removes the element with the specified key from the object. + + The key of the element to remove. + + is null. + The object is read-only.-or- The has a fixed size. + + + + Copies the elements of the to an , starting at a particular index. + + The one-dimensional that is the destination of the elements copied from . The must have zero-based indexing. + The zero-based index in at which copying begins. + + is null. + + is less than zero. + + is multidimensional.-or- is equal to or greater than the length of .-or- The number of elements in the source is greater than the available space from to the end of the destination . + The type of the source cannot be cast automatically to the type of the destination . + + + + Returns an enumerator that iterates through a collection. + + + An object that can be used to iterate through the collection. + + + + + Gets or sets the with the specified key. + + + + + + Gets an object containing the keys of the object. + + + An object containing the keys of the object. + + + + Gets an object containing the values in the object. + + + An object containing the values in the object. + + + + Gets a value indicating whether the object is read-only. + + + true if the object is read-only; otherwise, false. + + + + Gets a value indicating whether the object has a fixed size. + + + true if the object has a fixed size; otherwise, false. + + + + Gets the number of elements contained in the . + + + The number of elements contained in the . + + + + Gets an object that can be used to synchronize access to the . + + + An object that can be used to synchronize access to the . + + + + Gets a value indicating whether access to the is synchronized (thread safe). + + + true if access to the is synchronized (thread safe); otherwise, false. + + + + Represents a 'streamable' resource. Can + be a file, a resource in an assembly. + + + + + Returns a reader for the stream + + + It's up to the caller to dispose the reader. + + + + + + Returns a reader for the stream + + + It's up to the caller to dispose the reader. + + + + + + + Returns an instance of + created according to the relativePath + using itself as the root. + + + + + + + + + + Only valid for resources that + can be obtained through relative paths + + + + + + + + + + This returns a new stream instance each time it is called. + It is the responsability of the caller to dispose of this stream + + + + + Depicts the contract for resource factories. + + + + + Used to check whether the resource factory + is able to deal with the given resource + identifier. + + + Implementors should return true + only if the given identifier is supported + by the resource factory + + + + + + + Creates an instance + for the given resource identifier + + + + + + + Creates an instance + for the given resource identifier + + + + + + + + + + + + + + + + + + Adapts a static string content as an + + + + + Enable access to files on network shares + + + + + Email sender abstraction. + + + + + Sends a mail message. + + From field + To field + E-mail's subject + message's body + + + + Sends a message. + + Message instance + + + + Sends multiple messages. + + List of messages + + + + Default implementation. + + + + + Initializes a new instance of the class based on the configuration provided in the application configuration file. + + + This constructor is based on the default configuration in the application configuration file. + + + + + This service implementation + requires a host name in order to work + + The smtp server name + + + + Sends a message. + + If any of the parameters is null + From field + To field + e-mail's subject + message's body + + + + Sends a message. + + If the message is null + Message instance + + + + Configures the sender + with port information and eventual credential + informed + + Message instance + + + + Gets or sets the port used to + access the SMTP server + + + + + Gets the hostname. + + The hostname. + + + + Gets or sets a value which is used to + configure if emails are going to be sent asyncrhonously or not. + + + + + Gets or sets a value that specifies + the amount of time after which a synchronous Send call times out. + + + + + Gets or sets a value indicating whether the email should be sent using + a secure communication channel. + + true if should use SSL; otherwise, false. + + + + Gets or sets the domain. + + The domain. + + + + Gets or sets the name of the user. + + The name of the user. + + + + Gets or sets the password. + + The password. + + + + Gets a value indicating whether credentials were informed. + + + if this instance has credentials; otherwise, . + + + + diff --git a/packages/Castle.Core.2.5.2/lib/SL3/Castle.Core.dll b/packages/Castle.Core.2.5.2/lib/SL3/Castle.Core.dll new file mode 100644 index 0000000000000000000000000000000000000000..37fa6d3fd1fca4e442b5a2c0856c47f78555c77b GIT binary patch literal 244736 zcmce<37lL-)%Snr-rKjk?<`5r3_V$Z1VV;OFA);N5Re_z2$-N?zy(ABLE%Dof=JWj zD9YnPaK$BV7$0!QT@g1##T`e*6^y$+?mq5oe80a__jdPW@$r2=|NlFmq^s&w)u~gb zPMtcn-qX%`ffsn57xMp~|Ma}uaP@bb{r>BpS)#|5-9F~Mr~HKjZW}uF3kN*ni5It* zU*1YDYCZ1K<&S^dWtXL!m!E&Z^46BimS23?@{=C+@a31LPq<*!=xBUUhI+%vo_Fd{ z;LVo4cWPeRcRl}r;h~b}y$8x72R-J?_?P4VuBbiE`F%$>0Ha^7x15>)U-_kgdL8#H z&s%8!`fe7q#GdyX(mhmu@cu@qcl!&y5nz{-Zr|PF{smyU=TU>+Uy1O8dm+zTwfTap zHWNPSU0J$Cn;U1} z`;AAR`K9D@zgYj8L+<#{qb@q=yYyz{Q+WvkAH>@4#2VL{5FBCR3gUNcaupvE!#2cqblTgX1wxnGLaP|MziL15P z&yj$$0kYaUKUoZJN^dH-+V99sS1It=EO0*pL2{_zhYi3p&}u-}AK-aQYv;T44j$et zSh_|T&hneXts&&JeK^6ZeXAJNYTsY6IVr3CM$u15RlS!Bt1E;7KvX*-@H-D6 zaeJ+DOdJ||G`UAqrF|rjI10M!aQ$d!bd-`E&5xK?SC#ko(_;wNJmq^A`G}}Y4o{9u zj!sU5Q(Iy4(uqQ)Q1!Q03PFO*)hBmGv_`#sobVLzC3N+A9Nlp7L{y1R27&blb)x$6 zq{weAs%|SbN684V-ad(p!^H$iC8lKXSnyMTkCc*O{AGjEC+ckkJRU74qxdUfa||S7 z0zU-sL|6%v1%%+DHJKkI>w)`Wf@%==I;YB&0GS8CX*s|=9`z2q2SO?}tN6+3#14-S z?W`VKn%WexqZNmeGl`tqx(M%RxthgqFQ;b# zcFDl^NCM3_>=+ZVh~(0A6M*|_-VmzP_lCX4Jkf)9p0_TX+mhqlIaE6$^gE(CJ)7jU z^+D60toa?0AEf69bcA2nVi^!|QYcIxf(DoC1erG3P6AO%`~(0$l~D!^EKlZ#zPc09M*hASRCHM1wJE1{n&Q z6=a286tyoPdR8EVrxy~8=0u}QjF`E^NAwa4G^3v^vFhLwBZn^W1A2)Cn$b^|Sao!X z;kHY>wwG9-8U195#RHcZL3W90?~G=FX7rOK7LQzFTGS<`YiEfCn$b^|SUhxzD|ur2 zf0kIF8U195#bcLvJWq_C$Px=Qqn|9X+Q22A$P?3rvcv+-=*K0VmCX0_7(z*Zcp~kG z&Zq?GxA3G_5Akymjgk^U*Ep(_UW_M>#)s6MqsFiwM8)(WcwkUm& zz$N)k##c(8L`?I;JK|D648{2)h)|#`=L#dYK?&QJUfo2gT~P zjrEaW4vp!uGM-g?tUAT?Nz^JcHY8V&p>|9FCtP@=C_|f7#ayX3^PJp2Feww0ESochP8RutV)1V5x$Y|WcvmD4i~4kN_mWws$rWZ zinf>1TYyhz2(HARWk|7#P=?l`3}`gigZa%N10_W%e2b%6p?2XO$e<6${b8LU_+S9& zbz0JDJeAit^Gqe@D5jqf1!M^qs&}8jztS zD|SCpGqmilOsAu^E!rvrL^VqlaW1R_RWdt57laZ5tzlG6ZDFgrgl4p_E z;g5{0^f~~IspLNlF3gdUnLZmYJsMgAZyk6TP%6vccIwk>@$y5?JoD!0oB>qnb4a|Y z7tzO+KG!0Q^$j6B!uQkX;c3&QKDCaNg>+^adb)=MO`O#W&%5daauE zY$ca|NuMtt^eklz{m_u-F?Ln3_SzpSdXbF1psTEfbsAsC3hQ2pGa35{5*9T^ox3nt zTLwd~_FPqcr zA0Y?0zer5cDbR_c>CbBN0;neHJ(l%Wer2R)2#=)I$?!sw%p8b7+1QUHM(q~?nia_4 z3Cc`noY6zyfe!C66F=h;0YsOJwe9nqvb|*YHO3~%i^tO zRoGsMM#{~RV!um}u3RpqF9prQpwKugOPJmb@`+-^NRUAa=~7>cw9gEwum!tNQz*qt19!`G3B9>lx?JR@!(t8N>uii6G3(%fV|l&#q(NIy=( z#wl|TmYC30`p_v2i*>5vqL1W+P>0BWC;7 zqPcx?B&$ZFIn3+~PHhnjn*)ZF1zNNNsc5Ha7NzZ#0^9EEwn$w=dHn&(A+f;M6R$p_7Cph@WZQSwTB z>8tp0H>p6pjIg-SpcP(A(NTI6zw16pd?qEgn^#gYTpVcggNyw(U$vyzZ|qg0#ksiG zc2CPCi|OFcnF7&~o?Pw=box3~_nf)qd20?xMk$vJiR2Pvly%aO?m1Q9XOXMi^{P6- z#o5RwlZ9Zi9n_d6rn8q)2|9hHuwhHV7}XdnFtUgx2|6^wUPFia9-7rdFI1*t8;OQ} zP0Zub`igS;dORahBdo@>NRa*~!RcbjMi@6zm7T%*)g6=NEwssy$fj?Hu5TB6W0C9Q z3%vUs;qte5TW^RvC9pQM+Kev)Tf?@*=h>VtZi-Yrb)dIY>j zLDpJCUHV=H;;NQU9JTKQ&?q?qWi6kQC44{d>yM+O?*U@6dk#E4%7FOhp4T{Pe?sHg7?;YGJ;**C~kGS=9 zR7jZIfwz|k6AfJ^o18|M?xRsn_pQonW*(|~zZ_s50EgxP^MGivFa+JhfMe^eRy4^J zlxtx`LE-dcqTxyx2+}(Vi62VhLba)WY@67X&C%&RUSWxt5Ha{+vF78buXMNKhfG{Wc?DoFH{|x?A8v z|0QNU!=GD`%V4mw8BO=&ZdOE%85;Wbq0pf}KlvrO(ixhnF*y*>H1<1czp#g6p`XQT zW)`3vET@?cnvOw-6%{1NR-Ix@*7n1llB^BTBC2CFQ5dD4pcXa{4zOb}>Fm#+>aL}> zxzgnMY$2 zIW?{^URsT{rVxyK=_jGRF^P-~a^hxjVp44#d8d*ODcobe`;#x{w^$gaZ{~NnxJA`$ zjQGXPR^Kszel%H34!~0cvFv^Ebcyk_n*Ii=nOeszEbgP`E!LvEnT`Kw0*|o<8_b91 zWEeC}x};S^Aq0v2Nj~a2gQ7os&kYZW_qIOVSs5^R=RhzJo zj0oAh%J^0p^j0aNvshmwk9ejwba`P!n2ajxeuI4IWi8Sc%sgVP(@Z9Ra#G<|?O8ow zX!#=(m_SouO?0&8ggAQpLs$FbSp6fVu&WdUQWoqoQ)(XCx)&*lV(;RgS(RZjb%$;rJd0yG#&X2NfUHW-PXcJ>j#(J zT9_Z%DvfI=1YrToN}3~#52fFs_S2ae@ueL!NmQPsuKwr5pMRXn?_k z5+ZexNvYaKHqJ7&>lRwrN17!dLGoGXZTM5Q0lq|iPOefSSJP`i*O(XxP^0ex6OyNb zB-ce3P|kA7$x>cU5*Fl> ceFAB(teDZna8$j9EXCUCy`@cuRCL1STAYs-&qW0Yc z(kqCOCP}y9QQ4A_SKwkB7OrKs#}T_8et(6;->=PyPX08dEN5V}Wzi zFOj0U)3>FE&aq0Vl%t<0z8vyrH3*1A7S%D0mFxJ&gXm{y^GbiV{4(+v@KnAyV^LIvvDe7w= zOc-wJvS8{nr{wuoEAksEO(26Oi~{xAEg5r`XLMr1dZcYEbo92rNgl18X6rJc_xK^t zW2`_HRj(u2&Gr1w5g=_mz_}^vDV``+Crb74O0iNxL^bt`D@^z%N|jQjh-m&eOZ#mi z{G>#Q6JaHhDn(vdQ`4#q_hIdv^qdPejl$G%VBBveRgn_O;F;blvt)E{Rsf<1!+t9y4 zKNI12*b%mgf{$;Pa+t&wn4bMm#jMEV4W!{}dLCpyAeB+rFj^U{jKGGM(vMCXTb0y}E}E1_tFM-!B~Z9(Ac3 zHyFODrcDzH&TX%idyK!*w8PYBEevPy288rd;EIK%o{IJvP}E7e#-v97*kK!C%b(0%|Ur9T6Q=7m>hi6#dV zr9UTjTG6*=(FZzSHHZB+%02F?gE1g2097Lj(q94tmG!$IMFbe@7}2uuuL-jP;B1#e zaHp-FM}Z^8SPPQ>Cc$PJ&mZxx5wuiHFmKo@FRuB{zsmQ!e={G`F!*}({PLQpQOXmP z@-TUJFK^d;R^Hz7VQn7=E>qg(Im1sT#UB*N1Bh_r0jV?{uvF&Z1jD*qMwAR0kz+Dq z;j>*>;}^o?CDbKIUqzNC40b$hEO*L3EVO@4#BjtY`4g6dis^3%s^BSX?Z`Wn{O~`| ze{jYVvp;2%Gi$<Cxt9{@?|LH)B5%Igee4PK6)jZw0+|3EUA_OdKNUPu}2?FWL& z?0w%`4h^(vj;A`aj@mXC`0b-f6GyWOy0oEpEotjY+c{E+5WbI7PFI1jakPW7jGq1x zs75r4NdH7=I@~fw`!=S+&2kxzR)D_!XOa0AehQ7IOI}F-O0c=Ckfkr|p8jtn=&y4% zj2<;zW4y=z5>rUyct4%-%Gz4#GG19aV<~cQJUC1a%(E)+Q%r4ZEwwc{G)K@}Cpids zgBkS$RVp)Txe=zu&S;Hl^>+x2qhuM(Qd_(9@*N1yKaqkBTU!_rOmm?N!M$n__gNY4 z(`A_;ul)iJR{=X+0m~_1=0TM0P7Ejp1ryH-WbotwQY2Vdb=%{s%`kM^dI(HonT+!{ zf7WE815IIycOGHTB-*aWWt2lctkyFbWmitd?N4I(4;THeA?ceWLGc{5f` z&gd>p7Y1wa;JgM$^lBi`jDGf91NhkfyvRMlQKMCaWChj4mNQ;SG>52bSB!I@AoT%E z*R<|=Ds`go<#jqStJ9&*O#>1R*T;$}g9i=ir+=ZWqO)v&wj(Y!2yCKq_xY`dW40#y zixg+y?&~c%!i_!0U@JaErH5u|)Go|d9J&uRn)I8Nm6L@c3&aZalR+e;>o;AJC9}X% z1#8EvMgUF;FJzVVWTF;D`f2#*}4a|fyr$Hq9N-vVYWeH;0(jeMxZ80Cz9LQ z{sI}?Y{(hR2AAR_r6^MLtUv~L;(xLtWMd-!7!vjF2I6Zkg(PVcSaCXG)_5O=Ll5m+ zV+#XEZ|K1@(=n!p{57MKrh)wASP;~FzatD*!8i-}9bt=-<4Dk0=+qZeC#AO`6MWh) zJQsI0d|C@l5s&yKLysCQ0b&^-E*tLiST=Ps@P+xa8#|j7 zrfx|ho98U>9&m~?xh`WZ!HhpFW-(qTHDu>$G?$%0+hjV`Vh4Bl zPhw0?huLyt9pykju>}mKI{i6ukeo_dH~nRX8crriXm&uvdFQ9b!l}E|(s31NSp$zk zJH&^mL|J}Yt=K3`=!D2)9Mssyka7ua-5hQ`o^FtDpohsBB#f6Y3fX{;TAw7UI5|0) zvMLg9#!m6w*|KMW13SKt<12j}orjB23?!^j#m)2l&Laq~oG8e?q50;;u1yvKWX&dl zh-f4zmXb%{8TA9UmoRXni7?=_-Nm9Q%NnH>vg{~T3duO0`>e0H{(G3WzT=M3iXRiu zScOJED7Z@bVIfK`0hJq9mJ?5n;MW9r;()0I76!ADFlAZLMCnW=7A{6g@vXvw-V=Z^ zm09SeRb@lLOyNdz3;}M#F6p3V(!1R{7M{EkGyYN?dIn=Cch~i4EOE#E!8c zr0z=(EqQlPA4c8EvT7V!BhRUAZ4EU_(NXbmm^_k-2IIka$ePDv@J|%NnX_ohVzP-4 zdvHvF;)%Fk9gh?GL_86N>j4 zdobQ|ni%+y9E<|gc-x{xY_7`kA5*v3Z(T|w1nD;XcBTg7elz~bv_?LrzZ_ z6#}a2%3gzic==rr$W}TQN!%!ds+2s698qdxk^?*%KyBy1mVSDFQcn*Y9m@bSjQy-p zzL@ms1MmhjYxy2yTkuOjDwF^HdBoxt9SbE~SjUq!<9703a)nk(D?` zPg>v7l~P7bK&S9acX*Hmn62-g0co=wBe2iP>w4+dDQYEPx7 z^IM!T9&hUN_+db^p3{?8YO(<^%b#w^oMq5Qv7(^mP^80L3v0apPawxgjuU3L_2fJn zT-$$jw6r@R7$ph8k0 zl#v;QKfxdvIM`B*5|~||+WI&&mX@@tLCQD~C(NDd=w}gMPu~DV(9A5AcH5^MD=8ie$du&aU7fTZz2E<9jC7ZkKe)kWlusXXuOc3nB&G#2&>eCPAFvO zC#4y5lFQV=lE7&JW?KEs#gxv+y7xQ~DkImy>%ILh%GZVq-dm8cw@0Et_5sHqoC{6t<0#FCTRV7!kAm%s9kCX2O=&~1iHPRpk(VC zBO;7PXCrwg1W%?~jz%4u2`cB37-}x9|K9r<47M_l_ZvE&bnMQl_n!wB8H1b z#osJ9MPEhcVy;FaFx=F@HY=B71JjwzEGWr>JwUn+%_7pPXmlI zCY#ill>&=uKO#3qPTc$e18=yq`XnfD6CP-BcG5xKL(_b`ENK16J6<})cJ>?l`BPgl zCE0ALI!OC=YQ8;6-$E6qO%J&};uF+AZ5U3UM0v{^DcnbS?{gTZunxd$;3@~{@W*uy zN}{s3wnEjSk*M`LLZ#Nt{3e%?07E!M55xxd6Ic-?cOaF(6BvMTcDZ6dr}T`n*&4zH z&>kD@R}kBP;*SDo{hCyE6xp3m_1zKZweG~GE61H}n4%3-s-23lqTTrzKT2RW!yy_3 zp*O5l-S!LN)h=aj+k2UlS(&@wQx1nO^stP)6U9rmg?2}j(c=zpbM|Ugku~?gRqk4n zN5)Shy%qRP{d|M$VeE7*eA#%G_rBdqrHVx zT}@#8wr1nqN670&v)|?`1S%u)3khi>PS_+*ksGGZ!$~^M{~z){)%?lRanLy(q`<9T znFqjQa)5aNJT?cI2LO{|m&H5)&dUMj0l*OEQkVw-1C;}q2LJ<+1DNL$zrzsRUmH}w zfoKek%UJFn3slGu42zmWEQQHqwmW<4O!1Se2v3;`*CC~9lztQd_I6*PyQpgI zIq8)!ccQTN7Q~1F3bxs-Uh@fzn)VC9QcAZQa%!{Gj@P-;4XRUg8krM~%%v0q0xGEG zQtdWWvxI^&3G0u`rS$cdklMSkK1(R5#`@lP%mL)9fw87Q{V)J&J=uIH*LdCOoZ-QS zD6qLx$TY3fv*&mpm~dxf*#norFwcD^SUA1(Y&nJGxpEMa>&z`A*PB}$i;^4gNiNWE zu7S)0;KCeW9smrAE`@mjJTV8D2f)QSz&tea69DuUfE92c&5H}RzV=|+AZ#2=b3O+; zrflFHE@E2VL2!GqKL)!RSSoE=FSJc-G}-q_*W0T8S#5n*{~0D{Ve(qlZKt0+9~YLq zRE`}c>PP!?s4CZ;-JHobW|NmIX>z;rvk&XrITYlDl#ab-*Eobh`Wlj1SuB^mOn%E9 z*f5v8PMF-%fAVVccP@ptu6}@TQ+gRtVdEe_=sa0b`oVvR{QAL9`-ffq=(ylHej>BV zF0z@=^!XmZvbNN=jAO3l%mbjE1I$B1iJD$R8EFPmW{|kd<^ixJ2bc%Il{vsX0G^Tq z%)|1lYNX}YnN%?VR22hUkpWas16(cuIv~^-qIEv@5tO~b0XMlRx{Y<$33|vi_}E+H zoXe?L4hwxiT|mtrVvumj5lopu5@z%FNpJb#&K}{w+Gh1`>&3O#1dRh7_U0JdA~PVd zMyQWCXplY)kR2B=Qbt)5H(I0vrv2Kj@UGQFi)ZJi9l;Y>sxUbYec>#5mbIu`6JHwW}#nL*(^=7-uZ1+hP+})nA)E`^n7!jRQnWm(;?1&;}x>Mm%IqDfrcjUd%s9yi_CL)|Tv z>Mjq9u&TRCf={Y@!ILfZQ0mSa>p<^_VD)W7`dw1mrcAH?2YM?`?$=*>IMMtktG~*$`lByn>u9RKph1de za`jiRq52zzHhbDb{VkR1FHe}9p!#QNC3SR~rOA6$vg~#AzVsmH$?8Fhl6E@^jNu&U ziP8^{Y>zt%nLNkdl7rkn0(09ERj$3u4`!}XU356)gJf@`>El^}44#~*p-aWn9A}^t z--tIz-)6t>;+G!p>X$6qtYr8QcNJ2}a&3Xom8_tZEKjQ3dn(ydsbqP= z@|4%H}$(18@k|!Jzztyf*MUN z?Bt7igU#>U%q?mi%K+jgRIH{b{q+aH=KKcVqXuJz<=?*Fx6$g&%D~|LKH-n7l==7j zggG)Q_k6$ath-OTpm&Y$Su!;plIP&v)Qk8Jix95#xfY@QOJ^sYLW64iv5k=w*IIt3 z3*UnD6-vweB1#@44TW7;R~9Uz*w%ZoZaPmVB{%fUWv26cFuV4R=!%|q2KAhbCx>$z ztt-ql0W}YOzawXt8`(3@0A{N48#HSBRTMTWkiloJ%_G05NNl%wRv?2X7$$YMoB1up zVreoc>ppjV=9ziEdlhq&@(E<{VjN{wygS|S zj7;wI#zoy$d>0O(bCk}V8OZDQb&;ICyRzOT$oTyi@%tQx&_Cc|ru8ETW2W^J9Ch^T zKxOAd%maWv;Q;1Y=O;`OHBtLnmf_iXym^H9zl1SNe(4bZI!i}Sb9l@HVtSYZmoKkIJ-&-og_P(tylse!%WYKk=)Z-%)`YkpPN;j@5^iAT~-50`8u zXcdlLUB7~KTpO_kMorA7n3y4_^u=Cm+?${MAk)Xbor!vc;Sp`R^w*s3BiY9xIVy{) z9@{#|p%$X$?^Lmvw8ndIl`TVerzU7o&26r{-@_ zWhQq9%pyB)CO)_s!CI>I$V|@^yax4WS*Oy*qLmfi#d3;$Y%MBNZ)3c~STk?OF@I8G z6MjzxaET04BQF5!P$%tVM+rZxLzOnRnBm9zG5l1vhyOjm_JF??Y!SUWxP*b1BRA@+ zs?z&*0jj(;l!xtBX}_OH)#oXO}u`#@LG zyxg-@?nj7KxgW))T&De2E`xEeT<9f z&Y}yR*zc&FWfpL0apicBd;*^iaxkK^ZG~~crYJ$Ihb%ZvqE8cQewmqMu(SFii2-bi z@5>(GxOvB9X%F`qYu?blm;&5bS$(=U208eP-nkdLJB?>JLO59W8E~hc<;T|;_c=T^ z)YoJe4C!pG_bBS&V(4Sms$=6ki)8YMerKszdrtj5F4W2Ag)iuS0SBxdx#`^swEWH& zahntDde7nMeu*D0I0;CR)~``gS|4W2P$V}Q%uU}*8GfQ)ch}+l_~56~r1B5fkK;xU zn%-3aCieVxcS6@F1`})<)eux_umj4V5$lvX(O*%KWirdtytT?H%BoT4Pa3TpFSiCCM_VuYDD$+^=Qs8_A*Y*RwEPjN65blh_#c2RaVRn6Yh3%3X#0 zPLbar#W09h9W)rS1tNB9ER#!M3(K{$m`5>MaC0h1-;SqC?{|th&OK#$v<_ZJL|JdG zw7nNqXsMt|C&2x)wMqIjL(JF2$N-1Nl0IG*>;>D4p$#Up= zOWb;@tkN&4DUWuD+^$Yk4()W5xSg=39Q8g5lYhj~PzKf} z>4C7l{X-JgeifvcVchQE$L}nV-2ND^JuuYRH;a@EW|0_cE|Oz*ETLd*)~w|12HS?^cziUXVj0F)nZFT>3V)RD|oBFPxlpo z^G?-$l>*FROVWvRRz2ZvC@*hOSF(6G{X-cU7>$Dw64g%bsimM>a;5sq^_(=Mw=! zJBevC*Qd<`zzD55Hwd?5FBmA;=Fa8a3694Lhmplay7XZxfVr2Lz=?k2g#}!a8!lec zOEeFB*d=*_sl%4FzDh64!}f4o>%W1>jJMtC(U9HgrM5oA(o^eTg1lnE(^HFDPbkR0 z*j0CXX-R9F0g_*lb-396H4fJ`tU0XwZGO5m%6Jlb8pEH^s}B}+sr4)JYe)Qu2-l%? zx8HvQs>ad`^4|)KwVp|$;nu789jTAB?zGSjg<5gZyF7br!nWGjWt+-~tb~h-1Q+u# zMQD$FjF#KK6`idh{hjdgI?L~IUE8LAz*`GyGc&J&#i66+B4F%2VAR2W9d@tQ-sKLG zw0=~AaaW+c8jAv*vyUxDf97I|^|sj=0e432u?|0ZE$J;Y5ax=Eh6m(FO3x z9b#hnr;lrUG%KQzB)0&11`EkO2}edj6>?h!rE@NHT9kx7IfhUkz1l7t`bG%jystCy zZZEu}>`nHRHYmA;{Eo!j*-1mS)}N>=Cs?eJO}DFmp9HM|E2z&H&NmlOee<%tl$bml zGH+C3{>e2$W%(=M+ABfC)Q7aEbu#$%=R2$CbxJgYF&cKa%iI1F{O)2wM0Y72 z0!Gx6kOe~!v5Oixqn;xtLg15v^IJ!$BE0Jk zaT~O|-f2A?9&-bT8TbhG#(%MwyfF8_8T&c+k9j+O;rvSvEqa*U-bLb_vA`HKT0f|4 z?15_sLK|0t+5ZZ5Mjr?mEbgTi$rb!$*QM{7e{D|HaFq<}6-ZVkIT2k9laxGJ9hyI; zY6BJUJ7S+>Zh>qC$6P-sg~?^g=Juv7+u+7Dv=1e!>xg&g(Qc2zXXRl3EAqNN*W3S% z&dC&Rli zT_+AMBlEF%g!>rWoze00GKc9=d9vf?B|C9mGRn~2mh7=7n!HPSq?f}XE|U+{cniSq z+$2uk1ZX%&4+2+mEv=SDlC}C+S=KmbQA_FlK%BK8_ecgVyo1~A_aEvlS?_py4#w_9 zU_=4k0(J)LH{fV|^KE`}F|;HY_;HF&jS?QmKv}bo->Kj(+qq_#d6T?;T%V}6e~&G~ zVX@8xkgk64?<4=D{8Eg+BnA6ck$3)(=Urm5sqDkWlS7Cr@IU4MS|XS7f9)E6uqmtr zW?4e1CuqXmqlt5_a70 zuH*{ZU1SN|?;yE?IC2+f3B5aZ)$(b@KDF}XbbuL-$|;pyB=o)&rj5{EL!cXdy@ zTjTXbs4EGoU6%9O7|B~0j-i`upq1<`q9DoMvYok9Ie`kg5~zr0j9L?8OprdW9`F)= zpk)G`cNO`nM!V$Lb(0jU+6?R<-Jf35Ec3ir`^z**jVaevxJ_o<>Tb!E4#-`ar{ar) zu(dKTB${Czz!}yZ;@aQgXI3DCkA;)%Cb(<22X=(7Ims|9Nu|Ya!fD?i%mIlR9@|%{ z=f6~tJypZ%fe!F!RqgK=lBbZARjnY|f(Kp+aWGjewtoSlTrngEiWPVBGcrhbY35C& zwh6&Cuy`Atd8_-vioJAYIRLi*1o`IAe;ZGyr2#?TS9TJynt24Yv zk5oE5DR_^-y|ho?;C%@e>fIR}tjJ6`&O8QI7ab8J9JCS-HI=PoN8Q9o+3%o?nz7@yK zBNkI88@+b_=UT|pPUJIiab|HO+E)Ju;-Vf&mvBNA@ob%lbS`K8(Sxr-+i#fUGl)i% z@}fSgLn(8FXmLu<>+$kg;JRG62J)#5dGYL1j8r6&&QExmnsK9A@0?D0&) z-hVppM@6Na+GJ@F5Wl0!ZPx=~OSv>NwJE?l7|fa9Ti4zC9p$`!$3YXedL>x26$?<4 z%sD?7!S-2HVS90E4ino6Wd=$4&;Wx@`X`*lDSFkN6J_BRTF4tVPJeAem z+K`E3Y>(9phw0BLs+j(i-;uz&LP>X_T&ebYc?vEzZSjw_gK9F%q@MTTc8-mx-6nc;g9{B3UclbsOlhNr)21Too`O``GXt#9p(A;Ptn zF-dgB(bOKsB;nr6m}L0+W0EmqU`$d=*qCGy#sQ5<#)0lDQg|qFhN%hqkW~K z-C5N5vxlJurSl)wZ3jmczatsx4IlLLNb9=ZW^iPB*l8A1XOnx>ssFwf8tE(86SNER zOz2@@=2nU64H?M`7#;nNK<({Bo3_-!Px*VxrQNp^j}m)_oI>}Va#-16aoyxSv^U}q zJ?W~KsM5TXrj9xswq8sp^gGI*eh3Jcr~Zgj;u{F<*VEQ7 zXo}bb%Zue8wZluvgFV4{_l_#oy4fgKT^+|wXP{(a(-m2r_%=xtPtLII87|(ca!enJ zsP_AyaC>=b<^CXOb5kDNmHy*RZ4 zv9Q#v!X28;cD33G2})k6hGMzm6}VxqafD-_apLSgc4TkJbdtl2=jqpe#kYZ|Pk_IfE_4KvQsyQ=DQ+ za}m~|wMWs&j)Q_@hBbwD#@;6qG-~t$YQupMUJ2mT`*HHI?Xi^GwfYH~;b@R8^VZ}| zUM+g>6X!H7FQl)-%W)I~e?)?Yn&!|S#A)v
dqF#z0z1xYmJdhI+J@6U~aCp_1W{ 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

xcRxU5ksBh zQBtT?|Cn1+O+B=-9@^6CurC(M>xkh;Cx)*PW(@rukI>_+jBzFnu#Wit6ZMxg*6MG> z&~)o?oZEc3{S@W&Tx|6SI4EhA)j#mF<954sN(?3KvL*)(N8OU%v8Kn6r#8Pb4(+#Q z27ZZhdJb8+=5G%A%?by8cTk}91%V?DYTUXm@TY@Xw7xumBTePE)3ZD85zIZt(5gW6 zlVPW)N9$iP*cCYEP?;-Fx_V|1!ws0WRQiqirLu5h zDQKrUt#wzd`g+?&XSDtkC&`cCMsD2FJ*Gutqp9KVPP9tRX#G&2sd2WTg8{xP`Nl

dMtmEa8Q0l}Z(}p#4na$mQE~w||FBVd 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 + + + Castle.Core + + + +

+ Assignes a specific dictionary key. + + + + + Defines the contract for customizing dictionary access. + + + + + Determines relative order to apply related behaviors. + + + + + Determines relative order to apply related behaviors. + + + + + Defines the contract for updating dictionary values. + + + + + Sets the stored dictionary value. + + The dictionary adapter. + The key. + The stored value. + The property. + true if the property should be stored. + + + + Defines the contract for building s. + + + + + Builds the dictionary behaviors. + + + + + + Abstract adapter for the support + needed by the + + + + + Adds an element with the provided key and value to the object. + + The to use as the key of the element to add. + The to use as the value of the element to add. + An element with the same key already exists in the object. + key is null. + The is read-only.-or- The has a fixed size. + + + + Removes all elements from the object. + + The object is read-only. + + + + Determines whether the object contains an element with the specified key. + + The key to locate in the object. + + true if the contains an element with the key; otherwise, false. + + key is null. + + + + Returns an object for the object. + + + An object for the object. + + + + + Removes the element with the specified key from the object. + + The key of the element to remove. + The object is read-only.-or- The has a fixed size. + key is null. + + + + Copies the elements of the to an , starting at a particular index. + + The one-dimensional that is the destination of the elements copied from . The must have zero-based indexing. + The zero-based index in array at which copying begins. + array is null. + The type of the source cannot be cast automatically to the type of the destination array. + index is less than zero. + array is multidimensional.-or- index is equal to or greater than the length of array.-or- The number of elements in the source is greater than the available space from index to the end of the destination array. + + + + Returns an enumerator that iterates through a collection. + + + An object that can be used to iterate through the collection. + + + + + Gets a value indicating whether the object has a fixed size. + + + true if the object has a fixed size; otherwise, false. + + + + Gets a value indicating whether the object is read-only. + + + true if the object is read-only; otherwise, false. + + + + Gets an object containing the keys of the object. + + + An object containing the keys of the object. + + + + Gets an object containing the values in the object. + + + An object containing the values in the object. + + + + Gets or sets the with the specified key. + + + + + + Gets the number of elements contained in the . + + + The number of elements contained in the . + + + + Gets a value indicating whether access to the is synchronized (thread safe). + + + true if access to the is synchronized (thread safe); otherwise, false. + + + + Gets an object that can be used to synchronize access to the . + + + An object that can be used to synchronize access to the . + + + + Constant to use when making assembly internals visible to Castle.Core + [assembly: InternalsVisibleTo(CoreInternalsVisible.ToCastleCore)] + + + + + Constant to use when making assembly internals visible to proxy types generated by DynamicProxy. Required when proxying internal types. + [assembly: InternalsVisibleTo(CoreInternalsVisible.ToDynamicProxyGenAssembly2)] + + + + + Abstract implementation of . + + + + + Conract for traversing a . + + + + + Identifies a property should be represented as a nested component. + + + + + Defines the contract for building typed dictionary keys. + + + + + Builds the specified key. + + The dictionary adapter. + The current key. + The property. + The updated key + + + + Defines the contract for retrieving dictionary values. + + + + + Gets the effective dictionary value. + + The dictionary adapter. + The key. + The stored value. + The property. + true if return only existing. + The effective property value. + + + + Applies no prefix. + + + + + Gets or sets the prefix. + + The prefix. + + + + Identifies the dictionary adapter types. + + + + + Identifies an interface or property to be pre-feteched. + + + + + Instructs fetching to occur. + + + + + Instructs fetching according to + + + + + + Gets whether or not fetching should occur. + + + + + Assigns a property to a group. + + + + + Constructs a group assignment. + + The group name. + + + + Constructs a group assignment. + + The group name. + + + + Gets the group the property is assigned to. + + + + + Assigns a specific dictionary key. + + + + + Initializes a new instance of the class. + + The key. + + + + Initializes a new instance of the class. + + The compound key. + + + + Assigns a prefix to the keyed properties of an interface. + + + + + Initializes a default instance of the class. + + + + + Initializes a new instance of the class. + + The prefix for the keyed properties of the interface. + + + + Gets the prefix key added to the properties of the interface. + + + + + Substitutes part of key with another string. + + + + + Initializes a new instance of the class. + + The old value. + The new value. + + + + Requests support for multi-level editing. + + + + + Contract for dictionary initialization. + + + + + Performs any initialization of the + + The dictionary adapter. + The dictionary behaviors. + + + + Generates a new GUID on demand. + + + + + Support for on-demand value resolution. + + + + + Suppress property change notifications. + + + + + Provides simple string formatting from existing properties. + + + + + Gets the string format. + + + + + Gets the format properties. + + + + + Identifies a property should be represented as a delimited string value. + + + + + Gets the separator. + + + + + Converts all properties to strings. + + + + + Gets or sets the format. + + The format. + + + + Suppress property change notifications. + + + + + Contract for property descriptor initialization. + + + + + Performs any initialization of the + + The property descriptor. + The property behaviors. + + + + Assigns a prefix to the keyed properties using the interface name. + + + + + Manages conversion between property values. + + + + + Initializes a new instance of the class. + + The converter. + + + + Gets the effective dictionary value. + + The dictionary adapter. + The key. + The stored value. + The property. + true if return only existing. + The effective property value. + + + + + + + + + Contract for creating additional Dictionary adapters. + + + + + Contract for manipulating the Dictionary adapter. + + + + + Contract for editing the Dictionary adapter. + + + + + Contract for managing Dictionary adapter notifications. + + + + + Contract for validating Dictionary adapter. + + + + + Uses Reflection.Emit to expose the properties of a dictionary + through a dynamic implementation of a typed interface. + + + + + Defines the contract for building typed dictionary adapters. + + + + + Gets a typed adapter bound to the . + + The typed interface. + The underlying source of properties. + An implementation of the typed interface bound to the dictionary. + + The type represented by T must be an interface with properties. + + + + + Gets a typed adapter bound to the . + + The typed interface. + The underlying source of properties. + An implementation of the typed interface bound to the dictionary. + + The type represented by T must be an interface with properties. + + + + + Gets a typed adapter bound to the . + + The typed interface. + The underlying source of properties. + The property descriptor. + An implementation of the typed interface bound to the dictionary. + + The type represented by T must be an interface with properties. + + + + + Gets the associated with the type. + + The typed interface. + The adapter meta-data. + + + + Gets the associated with the type. + + The typed interface. + The property descriptor. + The adapter meta-data. + + + + + + + + + + + + + + + + + + + + + + + + + Describes a dictionary property. + + + + + Initializes an empty class. + + + + + Initializes a new instance of the class. + + The property. + The property behaviors. + + + + Copies an existinginstance of the class. + + + + + + + Gets the key. + + The dictionary adapter. + The key. + The descriptor. + + + + + Adds the key builder. + + The builder. + + + + Adds the key builders. + + The builders. + + + + Copies the key builders to the other + + + + + + + Copies the selected key builders to the other + + + + + + + + Gets the property value. + + The dictionary adapter. + The key. + The stored value. + The descriptor. + true if return only existing. + + + + + Adds the dictionary getter. + + The getter. + + + + Adds the dictionary getters. + + The getters. + + + + Copies the property getters to the other + + + + + + + Copies the selected property getters to the other + + + + + + + + Sets the property value. + + The dictionary adapter. + The key. + The value. + The descriptor. + + + + + Adds the dictionary setter. + + The setter. + + + + Adds the dictionary setters. + + The setters. + + + + Copies the property setters to the other + + + + + + + Copies the selected property setters to the other + + + + + + + + Adds the behaviors. + + + + + + + Adds the behaviors. + + + + + + + Adds the behaviors from the builders. + + + + + + + Copies the behaviors to the other + + + + + + + Copies the behaviors to the other + + + + + + + + + + + + + Gets the property name. + + + + + Gets the property type. + + + + + Gets the property. + + The property. + + + + Returns true if the property is dynamic. + + + + + Gets additional state. + + + + + Determines if property should be fetched. + + + + + Determines if notifications should occur. + + + + + Gets the property behaviors. + + + + + Gets the type converter. + + The type converter. + + + + Gets the key builders. + + The key builders. + + + + Gets the setter. + + The setter. + + + + Gets the getter. + + The getter. + + + + Adds the dictionary initializers. + + The initializers. + + + + Adds the dictionary initializers. + + The initializers. + + + + Copies the initializers to the other + + + + + + + Copies the filtered initializers to the other + + + + + + + + Adds the dictionary meta-data initializers. + + The meta-data initializers. + + + + Adds the dictionary meta-data initializers. + + The meta-data initializers. + + + + Copies the meta-initializers to the other + + + + + + + Copies the filtered meta-initializers to the other + + + + + + + + Gets the initializers. + + The initializers. + + + + Gets the meta-data initializers. + + The meta-data initializers. + + + + Contract for dictionary meta-data initialization. + + + + + Performs any initialization of the dictionary adapter meta-data. + + The dictionary adapter factory. + The dictionary adapter meta. + + + + + Contract for dictionary validation. + + + + + Determines if is valid. + + The dictionary adapter. + true if valid. + + + + Validates the . + + The dictionary adapter. + The error summary information. + + + + Validates the for a property. + + The dictionary adapter. + The property to validate. + The property summary information. + + + + Invalidates any results cached by the validator. + + The dictionary adapter. + + + + Helper class for retrieving attributes. + + + + + Gets the attribute. + + The member. + The member attribute. + + + + Gets the attributes. Does not consider inherited attributes! + + The member. + The member attributes. + + + + Gets the type attribute. + + The type. + The type attribute. + + + + Gets the type attributes. + + The type. + The type attributes. + + + + Gets the type converter. + + The member. + + + + + Gets the attribute. + + The member. + The member attribute. + + + + Contract for typed dynamic value resolution. + + + + + + Contract for dynamic value resolution. + + + + + Encapsulates an invocation of a proxied method. + + + + + Overrides the value of an argument at the given with the + new provided. + + + This method accepts an , however the value provided must be compatible + with the type of the argument defined on the method, otherwise an exception will be thrown. + + The index of the argument to override. + The new value for the argument. + + + + Gets the value of the argument at the specified . + + The index. + The value of the argument at the specified . + + + + Returns the concrete instantiation of the on the proxy, with any generic + parameters bound to real types. + + + The concrete instantiation of the on the proxy, or the if + not a generic method. + + Can be slower than calling . + + + + Returns the concrete instantiation of , with any + generic parameters bound to real types. + For interface proxies, this will point to the on the target class. + + The concrete instantiation of , or + if not a generic method. + In debug builds this can be slower than calling . + + + + Proceeds the call to the next interceptor in line, and ultimately to the target method. + + + Since interface proxies without a target don't have the target implementation to proceed to, + it is important, that the last interceptor does not call this method, otherwise a + will be thrown. + + + + + Gets the proxy object on which the intercepted method is invoked. + + Proxy object on which the intercepted method is invoked. + + + + Gets the object on which the invocation is performed. This is different from proxy object + because most of the time this will be the proxy target object. + + + The invocation target. + + + + Gets the type of the target object for the intercepted method. + + The type of the target object. + + + + Gets the arguments that the has been invoked with. + + The arguments the method was invoked with. + + + + Gets the generic arguments of the method. + + The generic arguments, or null if not a generic method. + + + + Gets the representing the method being invoked on the proxy. + + The representing the method being invoked. + + + + For interface proxies, this will point to the on the target class. + + The method invocation target. + + + + Gets or sets the return value of the method. + + The return value of the method. + + + + Used during the target type inspection process. Implementors have a chance to customize the + proxy generation process. + + + + + Invoked by the generation process to determine if the specified method should be proxied. + + The type which declares the given method. + The method to inspect. + True if the given method should be proxied; false otherwise. + + + + Invoked by the generation process to notify that a member was not marked as virtual. + + The type which declares the non-virtual member. + The non-virtual member. + + This method gives an opportunity to inspect any non-proxyable member of a type that has + been requested to be proxied, and if appropriate - throw an exception to notify the caller. + + + + + Invoked by the generation process to notify that the whole process has completed. + + + + + Interface describing elements composing generated type + + + + + Checks if the method is public or protected. + + + + + + + Performs some basic screening and invokes the + to select methods. + + + + + + + + + Provides functionality for disassembling instances of attributes to CustomAttributeBuilder form, during the process of emiting new types by Dynamic Proxy. + + + + + Disassembles given attribute instance back to corresponding CustomAttributeBuilder. + + An instance of attribute to disassemble + corresponding 1 to 1 to given attribute instance, or null reference. + + Implementers should return that corresponds to given attribute instance 1 to 1, + that is after calling specified constructor with specified arguments, and setting specified properties and fields with values specified + we should be able to get an attribute instance identical to the one passed in . Implementer can return null + if it wishes to opt out of replicating the attribute. Notice however, that for some cases, like attributes passed explicitly by the user + it is illegal to return null, and doing so will result in exception. + + + + + Handles error during disassembly process + + Type of the attribute being disassembled + Exception thrown during the process + usually null, or (re)throws the exception + + + + Here we try to match a constructor argument to its value. + Since we can't get the values from the assembly, we use some heuristics to get it. + a/ we first try to match all the properties on the attributes by name (case insensitive) to the argument + b/ if we fail we try to match them by property type, with some smarts about convertions (i,e: can use Guid for string). + + + + + We have the following rules here. + Try to find a matching type, failing that, if the parameter is string, get the first property (under the assumption that + we can convert it. + + + + + Attributes can only accept simple types, so we return null for null, + if the value is passed as string we call to string (should help with converting), + otherwise, we use the value as is (enums, integer, etc). + + + + + Base class that exposes the common functionalities + to proxy generation. + + + + + Generates a parameters constructor that initializes the proxy + state with just to make it non-null. + + This constructor is important to allow proxies to be XML serializable + + + + + + It is safe to add mapping (no mapping for the interface exists) + + + + + + + + Generates the constructor for the class that extends + + + + + + + + + Default implementation of interface producing in-memory proxy assemblies. + + + + + Abstracts the implementation of proxy type construction. + + + + + Creates a proxy type for given , using provided. + + The class type to proxy. + The proxy generation options. + The generated proxy type. + Thrown when is a generic type definition. + Thrown when is not public. + Note that to avoid this exception, you can mark offending type internal, and define + pointing to Castle Dynamic Proxy assembly, in assembly containing that type, if this is appropriate. + + + + + Creates a proxy type for given , implementing , using provided. + + The class type to proxy. + Additional interface types to proxy. + The proxy generation options. + The generated proxy type. + + Implementers should return a proxy type for the specified class and interfaces. + Additional interfaces should be only 'mark' interfaces, that is, they should work like interface proxy without target. (See method.) + + Thrown when or any of is a generic type definition. + Thrown when or any of is not public. + Note that to avoid this exception, you can mark offending type internal, and define + pointing to Castle Dynamic Proxy assembly, in assembly containing that type, if this is appropriate. + + + + + Creates a proxy type for given , implementing , using provided. + + The class type to proxy. + Additional interface types to proxy. + The proxy generation options. + The generated proxy type. + + Implementers should return a proxy type for the specified class and interfaces. + Additional interfaces should be only 'mark' interfaces, that is, they should work like interface proxy without target. (See method.) + + Thrown when or any of is a generic type definition. + Thrown when or any of is not public. + Note that to avoid this exception, you can mark offending type internal, and define + pointing to Castle Dynamic Proxy assembly, in assembly containing that type, if this is appropriate. + + + + + Creates a proxy type that proxies calls to members on , implementing , using provided. + + The interface type to proxy. + Additional interface types to proxy. + Type implementing on which calls to the interface members should be intercepted. + The proxy generation options. + The generated proxy type. + + Implementers should return a proxy type for the specified interface that 'proceeds' executions to the specified target. + Additional interfaces should be only 'mark' interfaces, that is, they should work like interface proxy without target. (See method.) + + Thrown when or any of is a generic type definition. + Thrown when or any of is not public. + Note that to avoid this exception, you can mark offending type internal, and define + pointing to Castle Dynamic Proxy assembly, in assembly containing that type, if this is appropriate. + + + + + Creates a proxy type for given that delegates all calls to the provided interceptors. + + The interface type to proxy. + Additional interface types to proxy. + The proxy generation options. + The generated proxy type. + + Implementers should return a proxy type for the specified interface and additional interfaces that delegate all executions to the specified interceptors. + + Thrown when or any of is a generic type definition. + Thrown when or any of is not public. + Note that to avoid this exception, you can mark offending type internal, and define + pointing to Castle Dynamic Proxy assembly, in assembly containing that type, if this is appropriate. + + + + + Creates a proxy type for given and that delegates all calls to the provided interceptors and allows interceptors to switch the actual target of invocation. + + The interface type to proxy. + Additional interface types to proxy. + The proxy generation options. + The generated proxy type. + + Implementers should return a proxy type for the specified interface(s) that delegate all executions to the specified interceptors + and uses an instance of the interface as their targets (i.e. ), rather than a class. All classes should then implement interface, + to allow interceptors to switch invocation target with instance of another type implementing called interface. + + Thrown when or any of is a generic type definition. + Thrown when or any of is not public. + Note that to avoid this exception, you can mark offending type internal, and define + pointing to Castle Dynamic Proxy assembly, in assembly containing that type, if this is appropriate. + + + + + Gets or sets the that this logs to. + + + + + Gets the associated with this builder. + + The module scope associated with this builder. + + + + Initializes a new instance of the class with new . + + + + + Initializes a new instance of the class. + + The module scope for generated proxy types. + + + + Registers custom disassembler to handle disassembly of specified type of attributes. + + Type of attributes to handle + Disassembler converting existing instances of Attributes to CustomAttributeBuilders + + When disassembling an attribute Dynamic Proxy will first check if an custom disassembler has been registered to handle attributes of that type, + and if none is found, it'll use the . + + + + + Attributes should be replicated if they are non-inheritable, + but there are some special cases where the attributes means + something to the CLR, where they should be skipped. + + + + + Initializes a new instance of the class. + + Target element. This is either target type or target method for invocation types. + The type of the proxy. This is base type for invocation types. + The interfaces. + The options. + + + + Initializes a new instance of the class. + + Type of the target. + The interfaces. + The options. + + + s + Provides appropriate Ldc.X opcode for the type of primitive value to be loaded. + + + + + Provides appropriate Ldind.X opcode for + the type of primitive value to be loaded indirectly. + + + + + Emits a load opcode of the appropriate kind for a constant string or + primitive value. + + + + + + + Emits a load opcode of the appropriate kind for the constant default value of a + type, such as 0 for value types and null for reference types. + + + + + Emits a load indirect opcode of the appropriate type for a value or object reference. + Pops a pointer off the evaluation stack, dereferences it and loads + a value of the specified type. + + + + + + + Emits a store indirectopcode of the appropriate type for a value or object reference. + Pops a value of the specified type and a pointer off the evaluation stack, and + stores the value. + + + + + + + Summary description for PropertiesCollection. + + + + + Wraps a reference that is passed + ByRef and provides indirect load/store support. + + + + + Summary description for NewArrayExpression. + + + + + + + + + + Provides appropriate Stind.X opcode + for the type of primitive value to be stored indirectly. + + + + + Returns list of all unique interfaces implemented given types, including their base interfaces. + + + + + + + Initializes a new instance of the class. + + The name. + Type declaring the original event being overriten, or null. + + The add method. + The remove method. + The attributes. + + + + Represents the scope of uniquenes of names for types and their members + + + + + Gets a unique name based on + + Name suggested by the caller + Unique name based on . + + Implementers should provide name as closely resembling as possible. + Generally if no collision occurs it is suggested to return suggested name, otherwise append sequential suffix. + Implementers must return deterministic names, that is when is called twice + with the same suggested name, the same returned name should be provided each time. Non-deterministic return + values, like appending random suffices will break serialization of proxies. + + + + + Returns new, disposable naming scope. It is responsibilty of the caller to make sure that no naming collision + with enclosing scope, or other subscopes is possible. + + New naming scope. + + + + Returns the methods implemented by a type. Use this instead of Type.GetMethods() to work around a CLR issue + where duplicate MethodInfos are returned by Type.GetMethods() after a token of a generic type's method was loaded. + + + + + Determines whether this assembly has internals visible to dynamic proxy. + + The assembly to inspect. + + + + Determines whether the specified method is internal. + + The method. + + true if the specified method is internal; otherwise, false. + + + + + Because we need to cache the types based on the mixed in mixins, we do the following here: + - Get all the mixin interfaces + - Sort them by full name + - Return them by position + + The idea is to have reproducable behavior for the case that mixins are registered in different orders. + This method is here because it is required + + + + + Summary description for ModuleScope. + + + + + The default file name used when the assembly is saved using . + + + + + The default assembly (simple) name used for the assemblies generated by a instance. + + + + + Initializes a new instance of the class; assemblies created by this instance will not be saved. + + + + + Initializes a new instance of the class, allowing to specify whether the assemblies generated by this instance + should be saved. + + If set to true saves the generated module. + + + + Initializes a new instance of the class, allowing to specify whether the assemblies generated by this instance + should be saved. + + If set to true saves the generated module. + If set to true disables ability to generate signed module. This should be used in cases where ran under constrained permissions. + + + + Initializes a new instance of the class, allowing to specify whether the assemblies generated by this instance + should be saved and what simple names are to be assigned to them. + + If set to true saves the generated module. + If set to true disables ability to generate signed module. This should be used in cases where ran under constrained permissions. + The simple name of the strong-named assembly generated by this . + The path and file name of the manifest module of the strong-named assembly generated by this . + The simple name of the weak-named assembly generated by this . + The path and file name of the manifest module of the weak-named assembly generated by this . + + + + Initializes a new instance of the class, allowing to specify whether the assemblies generated by this instance + should be saved and what simple names are to be assigned to them. + + If set to true saves the generated module. + If set to true disables ability to generate signed module. This should be used in cases where ran under constrained permissions. + Naming scope used to provide unique names to generated types and their members (usually via sub-scopes). + The simple name of the strong-named assembly generated by this . + The path and file name of the manifest module of the strong-named assembly generated by this . + The simple name of the weak-named assembly generated by this . + The path and file name of the manifest module of the weak-named assembly generated by this . + + + + Returns a type from this scope's type cache, or null if the key cannot be found. + + The key to be looked up in the cache. + The type from this scope's type cache matching the key, or null if the key cannot be found + + + + Registers a type in this scope's type cache. + + The key to be associated with the type. + The type to be stored in the cache. + + + + Gets the key pair used to sign the strong-named assembly generated by this . + + + + + + Gets the specified module generated by this scope, creating a new one if none has yet been generated. + + If set to true, a strong-named module is returned; otherwise, a weak-named module is returned. + A strong-named or weak-named module generated by this scope, as specified by the parameter. + + + + Gets the strong-named module generated by this scope, creating a new one if none has yet been generated. + + A strong-named module generated by this scope. + + + + Gets the weak-named module generated by this scope, creating a new one if none has yet been generated. + + A weak-named module generated by this scope. + + + + Users of this should use this lock when accessing the cache. + + + + + Gets the strong-named module generated by this scope, or if none has yet been generated. + + The strong-named module generated by this scope, or if none has yet been generated. + + + + Gets the file name of the strongly named module generated by this scope. + + The file name of the strongly named module generated by this scope. + + + + Gets the weak-named module generated by this scope, or if none has yet been generated. + + The weak-named module generated by this scope, or if none has yet been generated. + + + + Gets the file name of the weakly named module generated by this scope. + + The file name of the weakly named module generated by this scope. + + + + Initializes a new instance of the class. + + The hook. + + + + Initializes a new instance of the class. + + + + + Provides proxy objects for classes and interfaces. + + + + + Initializes a new instance of the class. + + Proxy types builder. + + + + Initializes a new instance of the class. + + + + + Creates proxy object intercepting calls to members of interface on object with given . + + Type of the interface implemented by which will be proxied. + The target object, calls to which will be intercepted. + The interceptors called during the invocation of proxied methods. + Object proxying calls to members of on object. + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given array is a null reference (Nothing in Visual Basic). + Thrown when given is not an interface type. + Thrown when no default constructor exists on actual type of object. + Thrown when default constructor of actual type of throws an exception. + + This method generates new proxy type for each type of , which affects performance. If you don't want to proxy types differently depending on the type of the target + use method. + This method uses implementation to generate a proxy type. + As such caller should expect any type of exception that given implementation may throw. + + + + + Creates proxy object intercepting calls to members of interface on object with given . + + Type of the interface implemented by which will be proxied. + The target object, calls to which will be intercepted. + The proxy generation options used to influence generated proxy type and object. + The interceptors called during the invocation of proxied methods. + + Object proxying calls to members of on object. + + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given array is a null reference (Nothing in Visual Basic). + Thrown when given is not an interface type. + Thrown when no default constructor exists on actual type of object. + Thrown when default constructor of actual type of throws an exception. + + This method generates new proxy type for each type of , which affects performance. If you don't want to proxy types differently depending on the type of the target + use method. + This method uses implementation to generate a proxy type. + As such caller should expect any type of exception that given implementation may throw. + + + + + Creates proxy object intercepting calls to members of interface on object with given . + + Type of the interface implemented by which will be proxied. + The target object, calls to which will be intercepted. + The interceptors called during the invocation of proxied methods. + + Object proxying calls to members of type on object. + + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given array is a null reference (Nothing in Visual Basic). + Thrown when given is a generic type definition. + Thrown when given is not an interface type. + Thrown when given does not implement interface. + Thrown when no default constructor exists on actual type of object. + Thrown when default constructor of actual type of throws an exception. + + This method generates new proxy type for each type of , which affects performance. If you don't want to proxy types differently depending on the type of the target + use method. + This method uses implementation to generate a proxy type. + As such caller should expect any type of exception that given implementation may throw. + + + + + Creates proxy object intercepting calls to members of interface on object with given . + + Type of the interface implemented by which will be proxied. + The target object, calls to which will be intercepted. + The proxy generation options used to influence generated proxy type and object. + The interceptors called during the invocation of proxied methods. + + Object proxying calls to members of type on object. + + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given array is a null reference (Nothing in Visual Basic). + Thrown when given is a generic type definition. + Thrown when given is not an interface type. + Thrown when given does not implement interface. + Thrown when no default constructor exists on actual type of object. + Thrown when default constructor of actual type of throws an exception. + + This method generates new proxy type for each type of , which affects performance. If you don't want to proxy types differently depending on the type of the target + use method. + This method uses implementation to generate a proxy type. + As such caller should expect any type of exception that given implementation may throw. + + + + + Creates proxy object intercepting calls to members of interface on object with given . + + Type of the interface implemented by which will be proxied. + The target object, calls to which will be intercepted. + Additional interface types. Calls to their members will be proxied as well. + The interceptors called during the invocation of proxied methods. + + Object proxying calls to members of and types on object. + + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given array is a null reference (Nothing in Visual Basic). + Thrown when given or any of is a generic type definition. + Thrown when given is not an interface type. + Thrown when given does not implement interface. + Thrown when no default constructor exists on actual type of object. + Thrown when default constructor of actual type of throws an exception. + + This method generates new proxy type for each type of , which affects performance. If you don't want to proxy types differently depending on the type of the target + use method. + This method uses implementation to generate a proxy type. + As such caller should expect any type of exception that given implementation may throw. + + + + + Creates proxy object intercepting calls to members of interface on object with given . + + Type of the interface implemented by which will be proxied. + The target object, calls to which will be intercepted. + The proxy generation options used to influence generated proxy type and object. + Additional interface types. Calls to their members will be proxied as well. + The interceptors called during the invocation of proxied methods. + + Object proxying calls to members of and types on object. + + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given array is a null reference (Nothing in Visual Basic). + Thrown when given or any of is a generic type definition. + Thrown when given is not an interface type. + Thrown when given does not implement interface. + Thrown when no default constructor exists on actual type of object. + Thrown when default constructor of actual type of throws an exception. + + This method generates new proxy type for each type of , which affects performance. If you don't want to proxy types differently depending on the type of the target + use method. + This method uses implementation to generate a proxy type. + As such caller should expect any type of exception that given implementation may throw. + + + + + Creates proxy object intercepting calls to members of interface on object with given . + Interceptors can use interface to provide other target for method invocation than default . + + Type of the interface implemented by which will be proxied. + The target object, calls to which will be intercepted. + The interceptors called during the invocation of proxied methods. + + Object proxying calls to members of type on object or alternative implementation swapped at runtime by an interceptor. + + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given array is a null reference (Nothing in Visual Basic). + Thrown when given is a generic type definition. + Thrown when given is not an interface type. + Thrown when given does not implement interface. + Thrown when no default constructor exists on actual type of object. + Thrown when default constructor of actual type of throws an exception. + + This method uses implementation to generate a proxy type. + As such caller should expect any type of exception that given implementation may throw. + + + + + Creates proxy object intercepting calls to members of interface on object with given . + Interceptors can use interface to provide other target for method invocation than default . + + Type of the interface implemented by which will be proxied. + The target object, calls to which will be intercepted. + The interceptors called during the invocation of proxied methods. + + Object proxying calls to members of type on object or alternative implementation swapped at runtime by an interceptor. + + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given array is a null reference (Nothing in Visual Basic). + Thrown when given is not an interface type. + Thrown when no default constructor exists on actual type of object. + Thrown when default constructor of actual type of throws an exception. + + This method uses implementation to generate a proxy type. + As such caller should expect any type of exception that given implementation may throw. + + + + + Creates proxy object intercepting calls to members of interface on object with given . + Interceptors can use interface to provide other target for method invocation than default . + + Type of the interface implemented by which will be proxied. + The target object, calls to which will be intercepted. + The proxy generation options used to influence generated proxy type and object. + The interceptors called during the invocation of proxied methods. + + Object proxying calls to members of type on object or alternative implementation swapped at runtime by an interceptor. + + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given array is a null reference (Nothing in Visual Basic). + Thrown when given is not an interface type. + Thrown when no default constructor exists on actual type of object. + Thrown when default constructor of actual type of throws an exception. + + This method uses implementation to generate a proxy type. + As such caller should expect any type of exception that given implementation may throw. + + + + + Creates proxy object intercepting calls to members of interface on object with given . + Interceptors can use interface to provide other target for method invocation than default . + + Type of the interface implemented by which will be proxied. + The target object, calls to which will be intercepted. + Additional interface types. Calls to their members will be proxied as well. + The interceptors called during the invocation of proxied methods. + + Object proxying calls to members of and types on object or alternative implementation swapped at runtime by an interceptor. + + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given array is a null reference (Nothing in Visual Basic). + Thrown when given or any of is a generic type definition. + Thrown when given is not an interface type. + Thrown when given does not implement interface. + Thrown when no default constructor exists on actual type of object. + Thrown when default constructor of actual type of throws an exception. + + This method uses implementation to generate a proxy type. + As such caller should expect any type of exception that given implementation may throw. + + + + + Creates proxy object intercepting calls to members of interface on object with given . + Interceptors can use interface to provide other target for method invocation than default . + + Type of the interface implemented by which will be proxied. + The target object, calls to which will be intercepted. + The proxy generation options used to influence generated proxy type and object. + The interceptors called during the invocation of proxied methods. + + Object proxying calls to members of type on object or alternative implementation swapped at runtime by an interceptor. + + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given array is a null reference (Nothing in Visual Basic). + Thrown when given is a generic type definition. + Thrown when given is not an interface type. + Thrown when given does not implement interface. + Thrown when no default constructor exists on actual type of object. + Thrown when default constructor of actual type of throws an exception. + + This method uses implementation to generate a proxy type. + As such caller should expect any type of exception that given implementation may throw. + + + + + Creates proxy object intercepting calls to members of interface on object with given . + Interceptors can use interface to provide other target for method invocation than default . + + Type of the interface implemented by which will be proxied. + The target object, calls to which will be intercepted. + The proxy generation options used to influence generated proxy type and object. + Additional interface types. Calls to their members will be proxied as well. + The interceptors called during the invocation of proxied methods. + + Object proxying calls to members of and types on object or alternative implementation swapped at runtime by an interceptor. + + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given array is a null reference (Nothing in Visual Basic). + Thrown when given or any of is a generic type definition. + Thrown when given is not an interface type. + Thrown when given does not implement interface. + Thrown when no default constructor exists on actual type of object. + Thrown when default constructor of actual type of throws an exception. + + This method uses implementation to generate a proxy type. + As such caller should expect any type of exception that given implementation may throw. + + + + + Creates proxy object intercepting calls to members of interface on target object generated at runtime with given . + + Type of the interface which will be proxied. + The interceptors called during the invocation of proxied methods. + + Object proxying calls to members of types on generated target object. + + Thrown when given array is a null reference (Nothing in Visual Basic). + Thrown when given is not an interface type. + + Since this method uses an empty-shell implementation of interfaces to proxy generated at runtime, the actual implementation of proxied methods must be provided by given implementations. + They are responsible for setting return value (and out parameters) on proxied methods. It is also illegal for an interceptor to call , since there's no actual implementation to proceed with. + As a result of that also at least one implementation must be provided. + This method uses implementation to generate a proxy type. + As such caller should expect any type of exception that given implementation may throw. + + + + + Creates proxy object intercepting calls to members of interface on target object generated at runtime with given . + + Type of the interface which will be proxied. + The interceptors called during the invocation of proxied methods. + + Object proxying calls to members of types on generated target object. + + Thrown when given array is a null reference (Nothing in Visual Basic). + Thrown when given is not an interface type. + + Since this method uses an empty-shell implementation of interfaces to proxy generated at runtime, the actual implementation of proxied methods must be provided by given implementations. + They are responsible for setting return value (and out parameters) on proxied methods. It is also illegal for an interceptor to call , since there's no actual implementation to proceed with. + As a result of that also at least one implementation must be provided. + This method uses implementation to generate a proxy type. + As such caller should expect any type of exception that given implementation may throw. + + + + + Creates proxy object intercepting calls to members of interface on target object generated at runtime with given . + + Type of the interface which will be proxied. + The proxy generation options used to influence generated proxy type and object. + The interceptors called during the invocation of proxied methods. + + Object proxying calls to members of types on generated target object. + + Thrown when given array is a null reference (Nothing in Visual Basic). + Thrown when given is not an interface type. + + Since this method uses an empty-shell implementation of interfaces to proxy generated at runtime, the actual implementation of proxied methods must be provided by given implementations. + They are responsible for setting return value (and out parameters) on proxied methods. It is also illegal for an interceptor to call , since there's no actual implementation to proceed with. + As a result of that also at least one implementation must be provided. + This method uses implementation to generate a proxy type. + As such caller should expect any type of exception that given implementation may throw. + + + + + Creates proxy object intercepting calls to members of interface on target object generated at runtime with given . + + Type of the interface which will be proxied. + The interceptors called during the invocation of proxied methods. + + Object proxying calls to members of type on generated target object. + + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given array is a null reference (Nothing in Visual Basic). + Thrown when given is a generic type definition. + Thrown when given is not an interface type. + + Since this method uses an empty-shell implementation of interfaces to proxy generated at runtime, the actual implementation of proxied methods must be provided by given implementations. + They are responsible for setting return value (and out parameters) on proxied methods. It is also illegal for an interceptor to call , since there's no actual implementation to proceed with. + This method uses implementation to generate a proxy type. + As such caller should expect any type of exception that given implementation may throw. + + + + + Creates proxy object intercepting calls to members of interface on target object generated at runtime with given . + + Type of the interface which will be proxied. + The interceptors called during the invocation of proxied methods. + + Object proxying calls to members of type on generated target object. + + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given array is a null reference (Nothing in Visual Basic). + Thrown when given is a generic type definition. + Thrown when given is not an interface type. + + Since this method uses an empty-shell implementation of interfaces to proxy generated at runtime, the actual implementation of proxied methods must be provided by given implementations. + They are responsible for setting return value (and out parameters) on proxied methods. It is also illegal for an interceptor to call , since there's no actual implementation to proceed with. + This method uses implementation to generate a proxy type. + As such caller should expect any type of exception that given implementation may throw. + + + + + Creates proxy object intercepting calls to members of interface on target object generated at runtime with given . + + Type of the interface which will be proxied. + Additional interface types. Calls to their members will be proxied as well. + The interceptors called during the invocation of proxied methods. + + Object proxying calls to members of and types on generated target object. + + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given array is a null reference (Nothing in Visual Basic). + Thrown when given or any of is a generic type definition. + Thrown when given is not an interface type. + + Since this method uses an empty-shell implementation of interfaces to proxy generated at runtime, the actual implementation of proxied methods must be provided by given implementations. + They are responsible for setting return value (and out parameters) on proxied methods. It is also illegal for an interceptor to call , since there's no actual implementation to proceed with. + This method uses implementation to generate a proxy type. + As such caller should expect any type of exception that given implementation may throw. + + + + + Creates proxy object intercepting calls to members of interface on target object generated at runtime with given . + + Type of the interface which will be proxied. + The proxy generation options used to influence generated proxy type and object. + The interceptors called during the invocation of proxied methods. + + Object proxying calls to members of on generated target object. + + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given array is a null reference (Nothing in Visual Basic). + Thrown when given is a generic type definition. + Thrown when given is not an interface type. + + They are responsible for setting return value (and out parameters) on proxied methods. It is also illegal for an interceptor to call , since there's no actual implementation to proceed with. + This method uses implementation to generate a proxy type. + As such caller should expect any type of exception that given implementation may throw. + + + + + Creates proxy object intercepting calls to members of interface on target object generated at runtime with given . + + Type of the interface which will be proxied. + The proxy generation options used to influence generated proxy type and object. + Additional interface types. Calls to their members will be proxied as well. + The interceptors called during the invocation of proxied methods. + + Object proxying calls to members of and types on generated target object. + + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given array is a null reference (Nothing in Visual Basic). + Thrown when given or any of is a generic type definition. + Thrown when given is not an interface type. + + Since this method uses an empty-shell implementation of to proxy generated at runtime, the actual implementation of proxied methods must be provided by given implementations. + They are responsible for setting return value (and out parameters) on proxied methods. It is also illegal for an interceptor to call , since there's no actual implementation to proceed with. + This method uses implementation to generate a proxy type. + As such caller should expect any type of exception that given implementation may throw. + + + + + Creates proxy object intercepting calls to virtual members of type on newly created instance of that type with given . + + Type of class which will be proxied. + The target object, calls to which will be intercepted. + The interceptors called during the invocation of proxied methods. + + New object of type proxying calls to virtual members of type. + + Thrown when given is not a class type. + Thrown when no default constructor exists on type . + Thrown when default constructor of type throws an exception. + + This method uses implementation to generate a proxy type. + As such caller should expect any type of exception that given implementation may throw. + + + + + Creates proxy object intercepting calls to virtual members of type on newly created instance of that type with given . + + Type of class which will be proxied. + The target object, calls to which will be intercepted. + The proxy generation options used to influence generated proxy type and object. + The interceptors called during the invocation of proxied methods. + + New object of type proxying calls to virtual members of type. + + Thrown when given is not a class type. + Thrown when no default constructor exists on type . + Thrown when default constructor of type throws an exception. + + This method uses implementation to generate a proxy type. + As such caller should expect any type of exception that given implementation may throw. + + + + + Creates proxy object intercepting calls to virtual members of type on newly created instance of that type with given . + + Type of class which will be proxied. + Additional interface types. Calls to their members will be proxied as well. + The target object, calls to which will be intercepted. + The interceptors called during the invocation of proxied methods. + + New object of type proxying calls to virtual members of and types. + + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given or any of is a generic type definition. + Thrown when given is not a class type. + Thrown when no default constructor exists on type . + Thrown when default constructor of type throws an exception. + + This method uses implementation to generate a proxy type. + As such caller should expect any type of exception that given implementation may throw. + + + + + Creates proxy object intercepting calls to virtual members of type on newly created instance of that type with given . + + Type of class which will be proxied. + The target object, calls to which will be intercepted. + The proxy generation options used to influence generated proxy type and object. + Arguments of constructor of type which should be used to create a new instance of that type. + The interceptors called during the invocation of proxied methods. + + New object of type proxying calls to virtual members of type. + + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given is a generic type definition. + Thrown when given is not a class type. + Thrown when no constructor exists on type with parameters matching . + Thrown when constructor of type throws an exception. + + This method uses implementation to generate a proxy type. + As such caller should expect any type of exception that given implementation may throw. + + + + + Creates proxy object intercepting calls to virtual members of type on newly created instance of that type with given . + + Type of class which will be proxied. + The target object, calls to which will be intercepted. + Arguments of constructor of type which should be used to create a new instance of that type. + The interceptors called during the invocation of proxied methods. + + New object of type proxying calls to virtual members of type. + + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given is a generic type definition. + Thrown when given is not a class type. + Thrown when no constructor exists on type with parameters matching . + Thrown when constructor of type throws an exception. + + This method uses implementation to generate a proxy type. + As such caller should expect any type of exception that given implementation may throw. + + + + + Creates proxy object intercepting calls to virtual members of type on newly created instance of that type with given . + + Type of class which will be proxied. + The target object, calls to which will be intercepted. + The interceptors called during the invocation of proxied methods. + + New object of type proxying calls to virtual members of type. + + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given is a generic type definition. + Thrown when given is not a class type. + Thrown when no parameterless constructor exists on type . + Thrown when constructor of type throws an exception. + + This method uses implementation to generate a proxy type. + As such caller should expect any type of exception that given implementation may throw. + + + + + Creates proxy object intercepting calls to virtual members of type on newly created instance of that type with given . + + Type of class which will be proxied. + The target object, calls to which will be intercepted. + The proxy generation options used to influence generated proxy type and object. + The interceptors called during the invocation of proxied methods. + + New object of type proxying calls to virtual members of type. + + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given is a generic type definition. + Thrown when given is not a class type. + Thrown when no default constructor exists on type . + Thrown when default constructor of type throws an exception. + + This method uses implementation to generate a proxy type. + As such caller should expect any type of exception that given implementation may throw. + + + + + Creates proxy object intercepting calls to virtual members of type on newly created instance of that type with given . + + Type of class which will be proxied. + Additional interface types. Calls to their members will be proxied as well. + The target object, calls to which will be intercepted. + The proxy generation options used to influence generated proxy type and object. + The interceptors called during the invocation of proxied methods. + + New object of type proxying calls to virtual members of and types. + + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given or any of is a generic type definition. + Thrown when given is not a class type. + Thrown when no default constructor exists on type . + Thrown when default constructor of type throws an exception. + + This method uses implementation to generate a proxy type. + As such caller should expect any type of exception that given implementation may throw. + + + + + Creates proxy object intercepting calls to virtual members of type on newly created instance of that type with given . + + Type of class which will be proxied. + Additional interface types. Calls to their members will be proxied as well. + The target object, calls to which will be intercepted. + The proxy generation options used to influence generated proxy type and object. + Arguments of constructor of type which should be used to create a new instance of that type. + The interceptors called during the invocation of proxied methods. + + New object of type proxying calls to virtual members of and types. + + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given or any of is a generic type definition. + Thrown when given is not a class type. + Thrown when no constructor exists on type with parameters matching . + Thrown when constructor of type throws an exception. + + This method uses implementation to generate a proxy type. + As such caller should expect any type of exception that given implementation may throw. + + + + + Creates proxy object intercepting calls to virtual members of type on newly created instance of that type with given . + + Type of class which will be proxied. + The interceptors called during the invocation of proxied methods. + + New object of type proxying calls to virtual members of type. + + Thrown when given is not a class type. + Thrown when no default constructor exists on type . + Thrown when default constructor of type throws an exception. + + This method uses implementation to generate a proxy type. + As such caller should expect any type of exception that given implementation may throw. + + + + + Creates proxy object intercepting calls to virtual members of type on newly created instance of that type with given . + + Type of class which will be proxied. + The proxy generation options used to influence generated proxy type and object. + The interceptors called during the invocation of proxied methods. + + New object of type proxying calls to virtual members of type. + + Thrown when given is not a class type. + Thrown when no default constructor exists on type . + Thrown when default constructor of type throws an exception. + + This method uses implementation to generate a proxy type. + As such caller should expect any type of exception that given implementation may throw. + + + + + Creates proxy object intercepting calls to virtual members of type on newly created instance of that type with given . + + Type of class which will be proxied. + Additional interface types. Calls to their members will be proxied as well. + The interceptors called during the invocation of proxied methods. + + New object of type proxying calls to virtual members of and types. + + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given or any of is a generic type definition. + Thrown when given is not a class type. + Thrown when no default constructor exists on type . + Thrown when default constructor of type throws an exception. + + This method uses implementation to generate a proxy type. + As such caller should expect any type of exception that given implementation may throw. + + + + + Creates proxy object intercepting calls to virtual members of type on newly created instance of that type with given . + + Type of class which will be proxied. + The proxy generation options used to influence generated proxy type and object. + Arguments of constructor of type which should be used to create a new instance of that type. + The interceptors called during the invocation of proxied methods. + + New object of type proxying calls to virtual members of type. + + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given is a generic type definition. + Thrown when given is not a class type. + Thrown when no constructor exists on type with parameters matching . + Thrown when constructor of type throws an exception. + + This method uses implementation to generate a proxy type. + As such caller should expect any type of exception that given implementation may throw. + + + + + Creates proxy object intercepting calls to virtual members of type on newly created instance of that type with given . + + Type of class which will be proxied. + Arguments of constructor of type which should be used to create a new instance of that type. + The interceptors called during the invocation of proxied methods. + + New object of type proxying calls to virtual members of type. + + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given is a generic type definition. + Thrown when given is not a class type. + Thrown when no constructor exists on type with parameters matching . + Thrown when constructor of type throws an exception. + + This method uses implementation to generate a proxy type. + As such caller should expect any type of exception that given implementation may throw. + + + + + Creates proxy object intercepting calls to virtual members of type on newly created instance of that type with given . + + Type of class which will be proxied. + The interceptors called during the invocation of proxied methods. + + New object of type proxying calls to virtual members of type. + + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given is a generic type definition. + Thrown when given is not a class type. + Thrown when no parameterless constructor exists on type . + Thrown when constructor of type throws an exception. + + This method uses implementation to generate a proxy type. + As such caller should expect any type of exception that given implementation may throw. + + + + + Creates proxy object intercepting calls to virtual members of type on newly created instance of that type with given . + + Type of class which will be proxied. + The proxy generation options used to influence generated proxy type and object. + The interceptors called during the invocation of proxied methods. + + New object of type proxying calls to virtual members of type. + + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given is a generic type definition. + Thrown when given is not a class type. + Thrown when no default constructor exists on type . + Thrown when default constructor of type throws an exception. + + This method uses implementation to generate a proxy type. + As such caller should expect any type of exception that given implementation may throw. + + + + + Creates proxy object intercepting calls to virtual members of type on newly created instance of that type with given . + + Type of class which will be proxied. + Additional interface types. Calls to their members will be proxied as well. + The proxy generation options used to influence generated proxy type and object. + The interceptors called during the invocation of proxied methods. + + New object of type proxying calls to virtual members of and types. + + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given or any of is a generic type definition. + Thrown when given is not a class type. + Thrown when no default constructor exists on type . + Thrown when default constructor of type throws an exception. + + This method uses implementation to generate a proxy type. + As such caller should expect any type of exception that given implementation may throw. + + + + + Creates proxy object intercepting calls to virtual members of type on newly created instance of that type with given . + + Type of class which will be proxied. + Additional interface types. Calls to their members will be proxied as well. + The proxy generation options used to influence generated proxy type and object. + Arguments of constructor of type which should be used to create a new instance of that type. + The interceptors called during the invocation of proxied methods. + + New object of type proxying calls to virtual members of and types. + + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given or any of is a generic type definition. + Thrown when given is not a class type. + Thrown when no constructor exists on type with parameters matching . + Thrown when constructor of type throws an exception. + + This method uses implementation to generate a proxy type. + As such caller should expect any type of exception that given implementation may throw. + + + + + Creates the proxy type for class proxy with given class, implementing given and using provided . + + The base class for proxy type. + The interfaces that proxy type should implement. + The options for proxy generation process. + of proxy. + + + + Creates the proxy type for interface proxy with target for given interface, implementing given on given and using provided . + + The interface proxy type should implement. + The additional interfaces proxy type should implement. + Actual type that the proxy type will encompass. + The options for proxy generation process. + of proxy. + + + + Creates the proxy type for interface proxy with target interface for given interface, implementing given on given and using provided . + + The interface proxy type should implement. + The additional interfaces proxy type should implement. + The options for proxy generation process. + of proxy. + + + + Creates the proxy type for interface proxy without target for given interface, implementing given and using provided . + + The interface proxy type should implement. + The additional interfaces proxy type should implement. + The options for proxy generation process. + of proxy. + + + + Gets or sets the that this log to. + + + + + Gets the proxy builder instance used to generate proxy types. + + The proxy builder. + + + + The silverlight System.Type is missing the IsNested property so this exposes similar functionality. + + + + + + + http://www.dolittle.com/blogs/einar/archive/2008/01/13/missing-enum-getvalues-when-doing-silverlight-for-instance.aspx + + + + + Holds objects representing methods of class. + + + + + Provides an extension point that allows proxies to choose specific interceptors on + a per method basis. + + + + + Selects the interceptors that should intercept calls to the given . + + The type declaring the method to intercept. + The method that will be intercepted. + All interceptors registered with the proxy. + An array of interceptors to invoke upon calling the . + + This method is called only once per proxy instance, upon the first call to the + . Either an empty array or null are valid return values to indicate + that no interceptor should intercept calls to the method. Although it is not advised, it is + legal to return other implementations than these provided in + . + + + + + Creates a new lock. + + + + + + This interface should be implemented by classes + that are available in a bigger context, exposing + the container to different areas in the same application. + + For example, in Web application, the (global) HttpApplication + subclasses should implement this interface to expose + the configured container + + + + + + Exposes means to change target objects of proxies and invocations + + + + + Changes the target object () of current . + + The new value of target of invocation. + + Although the method takes the actual instance must be of type assignable to , otherwise an will be thrown. + Also while it's technically legal to pass null reference (Nothing in Visual Basic) as , for obvious reasons Dynamic Proxy will not be able to call the intercepted method on such target. + In this case last interceptor in the pipeline mustn't call or a will be throws. + Also while it's technically legal to pass proxy itself as , this would create stack overflow. + In this case last interceptor in the pipeline mustn't call or a will be throws. + + Thrown when is not assignable to the proxied type. + + + + Permanently changes the target object of the proxy. This does not affect target of the current invocation. + + The new value of target of the proxy. + + Although the method takes the actual instance must be of type assignable to proxy's target type, otherwise an will be thrown. + Also while it's technically legal to pass null reference (Nothing in Visual Basic) as , for obvious reasons Dynamic Proxy will not be able to call the intercepted method on such target. + In this case last interceptor in the pipeline mustn't call or a will be throws. + Also while it's technically legal to pass proxy itself as , this would create stack overflow. + In this case last interceptor in the pipeline mustn't call or a will be throws. + + Thrown when is not assignable to the proxied type. + + + + New interface that is going to be used by DynamicProxy 2 + + + + + Get the proxy target (note that null is a valid target!) + + + + + + Gets the interceptors for the proxy + + + + + + Defines that the implementation wants a + in order to + access other components. The creator must be aware + that the component might (or might not) implement + the interface. + + + Used by Castle Project components to, for example, + gather logging factories + + + + + Increments IServiceProvider with a generic service resolution operation. + + + + + Provides a factory that can produce either or + classes. + + + + + Manages the instantiation of s. + + + + + Creates a new logger, getting the logger name from the specified type. + + + + + Creates a new logger. + + + + + Creates a new logger, getting the logger name from the specified type. + + + + + Creates a new logger. + + + + + Creates a new extended logger, getting the logger name from the specified type. + + + + + Creates a new extended logger. + + + + + Creates a new extended logger, getting the logger name from the specified type. + + + + + Creates a new extended logger. + + + + + Creates a new extended logger, getting the logger name from the specified type. + + + + + Creates a new extended logger. + + + + + Creates a new extended logger, getting the logger name from the specified type. + + + + + Creates a new extended logger. + + + + + Creates a new logger, getting the logger name from the specified type. + + + + + Creates a new logger. + + + + + Creates a new logger, getting the logger name from the specified type. + + + + + Creates a new logger. + + + + + Gets the configuration file. + + i.e. log4net.config + + + + + Interface for Context Properties implementations + + + + This interface defines a basic property get set accessor. + + + Based on the ContextPropertiesBase of log4net, by Nicko Cadell. + + + + + + Gets or sets the value of a property + + + The value for the property with the specified key + + + + Gets or sets the value of a property + + + + + + Gets the configuration file. + + i.e. log4net.config + + + + + NullLogFactory used when logging is turned off. + + + + + Creates an instance of ILogger with the specified name. + + Name. + + + + + Creates an instance of ILogger with the specified name and LoggerLevel. + + Name. + Level. + + + + + Provides an interface that supports and + allows the storage and retrieval of Contexts. These are supported in + both log4net and NLog. + + + + + Manages logging. + + + This is a facade for the different logging subsystems. + It offers a simplified interface that follows IOC patterns + and a simplified priority/level/severity abstraction. + + + + + Logs a debug message. + + The message to log + + + + Logs a debug message. + + The exception to log + The message to log + + + + Logs a debug message. + + Format string for the message to log + Format arguments for the message to log + + + + Logs a debug message. + + Format string for the message to log + Format arguments for the message to log + + + + Logs a debug message. + + The exception to log + Format string for the message to log + Format arguments for the message to log + + + + Logs a debug message. + + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs a debug message. + + The exception to log + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs an info message. + + The message to log + + + + Logs an info message. + + The exception to log + The message to log + + + + Logs an info message. + + Format string for the message to log + Format arguments for the message to log + + + + Logs an info message. + + Format string for the message to log + Format arguments for the message to log + + + + Logs an info message. + + The exception to log + Format string for the message to log + Format arguments for the message to log + + + + Logs an info message. + + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs an info message. + + The exception to log + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs a warn message. + + The message to log + + + + Logs a warn message. + + The exception to log + The message to log + + + + Logs a warn message. + + Format string for the message to log + Format arguments for the message to log + + + + Logs a warn message. + + Format string for the message to log + Format arguments for the message to log + + + + Logs a warn message. + + The exception to log + Format string for the message to log + Format arguments for the message to log + + + + Logs a warn message. + + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs a warn message. + + The exception to log + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs an error message. + + The message to log + + + + Logs an error message. + + The exception to log + The message to log + + + + Logs an error message. + + Format string for the message to log + Format arguments for the message to log + + + + Logs an error message. + + Format string for the message to log + Format arguments for the message to log + + + + Logs an error message. + + The exception to log + Format string for the message to log + Format arguments for the message to log + + + + Logs an error message. + + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs an error message. + + The exception to log + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs a fatal message. + + The message to log + + + + Logs a fatal message. + + The exception to log + The message to log + + + + Logs a fatal message. + + Format string for the message to log + Format arguments for the message to log + + + + Logs a fatal message. + + Format string for the message to log + Format arguments for the message to log + + + + Logs a fatal message. + + The exception to log + Format string for the message to log + Format arguments for the message to log + + + + Logs a fatal message. + + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs a fatal message. + + The exception to log + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs a fatal error message. + + The Message + + + + Logs a fatal error message. + + The Message + The Exception + + + + Logs a fatal error message. + + Message format + Array of objects to write using format + + + + Create a new child logger. + The name of the child logger is [current-loggers-name].[passed-in-name] + + The Subname of this logger. + The New ILogger instance. + If the name has an empty element name. + + + + Determines if messages of priority "debug" will be logged. + + True if "debug" messages will be logged. + + + + Determines if messages of priority "info" will be logged. + + True if "info" messages will be logged. + + + + Determines if messages of priority "warn" will be logged. + + True if "warn" messages will be logged. + + + + Determines if messages of priority "error" will be logged. + + True if "error" messages will be logged. + + + + Determines if messages of priority "fatal" will be logged. + + True if "fatal" messages will be logged. + + + + Determines if messages of priority "fatalError" will be logged. + + True if "fatalError" messages will be logged. + + + + Exposes the Global Context of the extended logger. + + + + + Exposes the Thread Context of the extended logger. + + + + + Exposes the Thread Stack of the extended logger. + + + + + Supporting Logger levels. + + + + + Logging will be off + + + + + Fatal logging level + + + + + Error logging level + + + + + Warn logging level + + + + + Info logging level + + + + + Debug logging level + + + + + The Logger sending everything to the standard output streams. + This is mainly for the cases when you have a utility that + does not have a logger to supply. + + + + + The Level Filtered Logger class. This is a base clase which + provides a LogLevel attribute and reroutes all functions into + one Log method. + + + + + Creates a new LevelFilteredLogger. + + + + + Logs a debug message. + + The message to log + + + + Logs a debug message. + + The exception to log + The message to log + + + + Logs a debug message. + + Format string for the message to log + Format arguments for the message to log + + + + Logs a debug message. + + The exception to log + Format string for the message to log + Format arguments for the message to log + + + + Logs a debug message. + + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs a debug message. + + The exception to log + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs a debug message. + + Message format + Array of objects to write using format + + + + Logs an info message. + + The message to log + + + + Logs an info message. + + The exception to log + The message to log + + + + Logs an info message. + + Format string for the message to log + Format arguments for the message to log + + + + Logs an info message. + + The exception to log + Format string for the message to log + Format arguments for the message to log + + + + Logs an info message. + + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs an info message. + + The exception to log + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs an info message. + + Message format + Array of objects to write using format + + + + Logs a warn message. + + The message to log + + + + Logs a warn message. + + The exception to log + The message to log + + + + Logs a warn message. + + Format string for the message to log + Format arguments for the message to log + + + + Logs a warn message. + + The exception to log + Format string for the message to log + Format arguments for the message to log + + + + Logs a warn message. + + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs a warn message. + + The exception to log + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs a warn message. + + Message format + Array of objects to write using format + + + + Logs an error message. + + The message to log + + + + Logs an error message. + + The exception to log + The message to log + + + + Logs an error message. + + Format string for the message to log + Format arguments for the message to log + + + + Logs an error message. + + The exception to log + Format string for the message to log + Format arguments for the message to log + + + + Logs an error message. + + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs an error message. + + The exception to log + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs an error message. + + Message format + Array of objects to write using format + + + + Logs a fatal message. + + The message to log + + + + Logs a fatal message. + + The exception to log + The message to log + + + + Logs a fatal message. + + Format string for the message to log + Format arguments for the message to log + + + + Logs a fatal message. + + The exception to log + Format string for the message to log + Format arguments for the message to log + + + + Logs a fatal message. + + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs a fatal message. + + The exception to log + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs a fatal message. + + Message format + Array of objects to write using format + + + + Logs a fatal error message. + + The Message + + + + Logs a fatal error message. + + The Message + The Exception + + + + Logs a fatal error message. + + Message format + Array of objects to write using format + + + + Implementors output the log content by implementing this method only. + Note that exception can be null + + + + + + + + + The LoggerLevel that this logger + will be using. Defaults to LoggerLevel.Off + + + + + The name that this logger will be using. + Defaults to String.Empty + + + + + Determines if messages of priority "debug" will be logged. + + true if log level flags include the bit + + + + Determines if messages of priority "info" will be logged. + + true if log level flags include the bit + + + + Determines if messages of priority "warn" will be logged. + + true if log level flags include the bit + + + + Determines if messages of priority "error" will be logged. + + true if log level flags include the bit + + + + Determines if messages of priority "fatal" will be logged. + + true if log level flags include the bit + + + + Determines if messages of priority "fatal" will be logged. + + true if log level flags include the bit + + + + Creates a new ConsoleLogger with the Level + set to LoggerLevel.Debug and the Name + set to String.Empty. + + + + + Creates a new ConsoleLogger with the Name + set to String.Empty. + + The logs Level. + + + + Creates a new ConsoleLogger with the Level + set to LoggerLevel.Debug. + + The logs Name. + + + + Creates a new ConsoleLogger. + + The logs Name. + The logs Level. + + + + A Common method to log. + + The level of logging + The name of the logger + The Message + The Exception + + + + Returns a new ConsoleLogger with the name + added after this loggers name, with a dot in between. + + The added hierarchical name. + A new ConsoleLogger. + + + + The Null Logger class. This is useful for implementations where you need + to provide a logger to a utility class, but do not want any output from it. + It also helps when you have a utility that does not have a logger to supply. + + + + + Creates a new NullLogger. + + + + + No-op. + + Ignored + + + + No-op. + + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + Ignored + Ignored + + + + No-op. + + Ignored + + + + No-op. + + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + Ignored + Ignored + + + + No-op. + + Ignored + + + + No-op. + + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + Ignored + Ignored + + + + No-op. + + Ignored + + + + No-op. + + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + Ignored + Ignored + + + + No-op. + + Ignored + + + + No-op. + + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + Ignored + Ignored + + + + No-op. + + Ignored + + + + No-op. + + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + + + + Returns this NullLogger. + + Ignored + This ILogger instance. + + + + No-op. + + false + + + + No-op. + + false + + + + No-op. + + false + + + + No-op. + + false + + + + No-op. + + false + + + + No-op. + + false + + + + Returns empty context properties. + + + + + Returns empty context properties. + + + + + Returns empty context stacks. + + + + + The Stream Logger class. This class can stream log information + to any stream, it is suitable for storing a log file to disk, + or to a MemoryStream for testing your components. + + + This logger is not thread safe. + + + + + Creates a new StreamLogger with default encoding + and buffer size. Initial Level is set to Debug. + + + The name of the log. + + + The stream that will be used for logging, + seeking while the logger is alive + + + + + Creates a new StreamLogger with default buffer size. + Initial Level is set to Debug. + + + The name of the log. + + + The stream that will be used for logging, + seeking while the logger is alive + + + The encoding that will be used for this stream. + + + + + + Creates a new StreamLogger. + Initial Level is set to Debug. + + + The name of the log. + + + The stream that will be used for logging, + seeking while the logger is alive + + + The encoding that will be used for this stream. + + + + The buffer size that will be used for this stream. + + + + + + Creates a new StreamLogger with + Debug as default Level. + + The name of the log. + The StreamWriter the log will write to. + + + + This is an abstract implementation + that deals with methods that can be abstracted away + from underlying implementations. + + + AbstractConfiguration makes easier to implementers + to create a new version of + + + + + is a interface encapsulating a configuration node + used to retrieve configuration values. + + + + + Gets the value of the node and converts it + into specified . + + The + + The Default value returned if the conversion fails. + + The Value converted into the specified type. + + + + Gets the name of the node. + + + The Name of the node. + + + + + Gets the value of the node. + + + The Value of the node. + + + + + Gets an of + elements containing all node children. + + The Collection of child nodes. + + + + Gets an of the configuration attributes. + + + + + Gets the value of the node and converts it + into specified . + + The + + The Default value returned if the convertion fails. + + The Value converted into the specified type. + + + + Gets the name of the . + + + The Name of the . + + + + + Gets the value of . + + + The Value of the . + + + + + Gets all child nodes. + + The of child nodes. + + + + Gets node attributes. + + + All attributes of the node. + + + + + A collection of objects. + + + + + Creates a new instance of ConfigurationCollection. + + + + + Creates a new instance of ConfigurationCollection. + + + + + Summary description for MutableConfiguration. + + + + + Initializes a new instance of the class. + + The name. + + + + Gets the value of . + + + The Value of the . + + + + + General purpose class to represent a standard pair of values. + + Type of the first value + Type of the second value + + + + Constructs a pair with its values + + + + + + + List of utility methods related to dynamic proxy operations + + + + + Determines whether the specified type is a proxy generated by + DynamicProxy (1 or 2). + + The type. + + true if it is a proxy; otherwise, false. + + + + + Pendent + + + + + Initializes a new instance of the class. + + The target. + + + + Determines whether the object contains an element with the specified key. + + The key to locate in the object. + + true if the contains an element with the key; otherwise, false. + + + is null. + + + + Adds an element with the provided key and value to the object. + + The to use as the key of the element to add. + The to use as the value of the element to add. + + is null. + An element with the same key already exists in the object. + The is read-only.-or- The has a fixed size. + + + + Removes all elements from the object. + + The object is read-only. + + + + Returns an object for the object. + + + An object for the object. + + + + + Removes the element with the specified key from the object. + + The key of the element to remove. + + is null. + The object is read-only.-or- The has a fixed size. + + + + Copies the elements of the to an , starting at a particular index. + + The one-dimensional that is the destination of the elements copied from . The must have zero-based indexing. + The zero-based index in at which copying begins. + + is null. + + is less than zero. + + is multidimensional.-or- is equal to or greater than the length of .-or- The number of elements in the source is greater than the available space from to the end of the destination . + The type of the source cannot be cast automatically to the type of the destination . + + + + Returns an enumerator that iterates through a collection. + + + An object that can be used to iterate through the collection. + + + + + Gets or sets the with the specified key. + + + + + + Gets an object containing the keys of the object. + + + An object containing the keys of the object. + + + + Gets an object containing the values in the object. + + + An object containing the values in the object. + + + + Gets a value indicating whether the object is read-only. + + + true if the object is read-only; otherwise, false. + + + + Gets a value indicating whether the object has a fixed size. + + + true if the object has a fixed size; otherwise, false. + + + + Gets the number of elements contained in the . + + + The number of elements contained in the . + + + + Gets an object that can be used to synchronize access to the . + + + An object that can be used to synchronize access to the . + + + + Gets a value indicating whether access to the is synchronized (thread safe). + + + true if access to the is synchronized (thread safe); otherwise, false. + + + + Represents a 'streamable' resource. Can + be a file, a resource in an assembly. + + + + + Returns a reader for the stream + + + It's up to the caller to dispose the reader. + + + + + + Returns a reader for the stream + + + It's up to the caller to dispose the reader. + + + + + + + Returns an instance of + created according to the relativePath + using itself as the root. + + + + + + + + + + Only valid for resources that + can be obtained through relative paths + + + + + + + + + + This returns a new stream instance each time it is called. + It is the responsability of the caller to dispose of this stream + + + + + Depicts the contract for resource factories. + + + + + Used to check whether the resource factory + is able to deal with the given resource + identifier. + + + Implementors should return true + only if the given identifier is supported + by the resource factory + + + + + + + Creates an instance + for the given resource identifier + + + + + + + Creates an instance + for the given resource identifier + + + + + + + + + + + + + Adapts a static string content as an + + + + + Enable access to files on network shares + + + + diff --git a/packages/Castle.Core.2.5.2/lib/SL4/Castle.Core.dll b/packages/Castle.Core.2.5.2/lib/SL4/Castle.Core.dll new file mode 100644 index 0000000000000000000000000000000000000000..c9a4060b78bbef436f5e7c7602878c9a50e0c202 GIT binary patch literal 244736 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 (B%(Z#tN`~)fABgKsu{l(4|XKryTJe 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 VKd*HFIefCaE&ty={{I34|2O!9m+t@o literal 0 HcmV?d00001 diff --git a/packages/Castle.Core.2.5.2/lib/SL4/Castle.Core.xml b/packages/Castle.Core.2.5.2/lib/SL4/Castle.Core.xml new file mode 100644 index 000000000..a44f335f3 --- /dev/null +++ b/packages/Castle.Core.2.5.2/lib/SL4/Castle.Core.xml @@ -0,0 +1,4443 @@ + + + + Castle.Core + + + + + Assignes a specific dictionary key. + + + + + Defines the contract for customizing dictionary access. + + + + + Determines relative order to apply related behaviors. + + + + + Determines relative order to apply related behaviors. + + + + + Defines the contract for updating dictionary values. + + + + + Sets the stored dictionary value. + + The dictionary adapter. + The key. + The stored value. + The property. + true if the property should be stored. + + + + Defines the contract for building s. + + + + + Builds the dictionary behaviors. + + + + + + Abstract adapter for the support + needed by the + + + + + Adds an element with the provided key and value to the object. + + The to use as the key of the element to add. + The to use as the value of the element to add. + An element with the same key already exists in the object. + key is null. + The is read-only.-or- The has a fixed size. + + + + Removes all elements from the object. + + The object is read-only. + + + + Determines whether the object contains an element with the specified key. + + The key to locate in the object. + + true if the contains an element with the key; otherwise, false. + + key is null. + + + + Returns an object for the object. + + + An object for the object. + + + + + Removes the element with the specified key from the object. + + The key of the element to remove. + The object is read-only.-or- The has a fixed size. + key is null. + + + + Copies the elements of the to an , starting at a particular index. + + The one-dimensional that is the destination of the elements copied from . The must have zero-based indexing. + The zero-based index in array at which copying begins. + array is null. + The type of the source cannot be cast automatically to the type of the destination array. + index is less than zero. + array is multidimensional.-or- index is equal to or greater than the length of array.-or- The number of elements in the source is greater than the available space from index to the end of the destination array. + + + + Returns an enumerator that iterates through a collection. + + + An object that can be used to iterate through the collection. + + + + + Gets a value indicating whether the object has a fixed size. + + + true if the object has a fixed size; otherwise, false. + + + + Gets a value indicating whether the object is read-only. + + + true if the object is read-only; otherwise, false. + + + + Gets an object containing the keys of the object. + + + An object containing the keys of the object. + + + + Gets an object containing the values in the object. + + + An object containing the values in the object. + + + + Gets or sets the with the specified key. + + + + + + Gets the number of elements contained in the . + + + The number of elements contained in the . + + + + Gets a value indicating whether access to the is synchronized (thread safe). + + + true if access to the is synchronized (thread safe); otherwise, false. + + + + Gets an object that can be used to synchronize access to the . + + + An object that can be used to synchronize access to the . + + + + Constant to use when making assembly internals visible to Castle.Core + [assembly: InternalsVisibleTo(CoreInternalsVisible.ToCastleCore)] + + + + + Constant to use when making assembly internals visible to proxy types generated by DynamicProxy. Required when proxying internal types. + [assembly: InternalsVisibleTo(CoreInternalsVisible.ToDynamicProxyGenAssembly2)] + + + + + Abstract implementation of . + + + + + Conract for traversing a . + + + + + Identifies a property should be represented as a nested component. + + + + + Defines the contract for building typed dictionary keys. + + + + + Builds the specified key. + + The dictionary adapter. + The current key. + The property. + The updated key + + + + Defines the contract for retrieving dictionary values. + + + + + Gets the effective dictionary value. + + The dictionary adapter. + The key. + The stored value. + The property. + true if return only existing. + The effective property value. + + + + Applies no prefix. + + + + + Gets or sets the prefix. + + The prefix. + + + + Identifies the dictionary adapter types. + + + + + Identifies an interface or property to be pre-feteched. + + + + + Instructs fetching to occur. + + + + + Instructs fetching according to + + + + + + Gets whether or not fetching should occur. + + + + + Assigns a property to a group. + + + + + Constructs a group assignment. + + The group name. + + + + Constructs a group assignment. + + The group name. + + + + Gets the group the property is assigned to. + + + + + Assigns a specific dictionary key. + + + + + Initializes a new instance of the class. + + The key. + + + + Initializes a new instance of the class. + + The compound key. + + + + Assigns a prefix to the keyed properties of an interface. + + + + + Initializes a default instance of the class. + + + + + Initializes a new instance of the class. + + The prefix for the keyed properties of the interface. + + + + Gets the prefix key added to the properties of the interface. + + + + + Substitutes part of key with another string. + + + + + Initializes a new instance of the class. + + The old value. + The new value. + + + + Requests support for multi-level editing. + + + + + Contract for dictionary initialization. + + + + + Performs any initialization of the + + The dictionary adapter. + The dictionary behaviors. + + + + Generates a new GUID on demand. + + + + + Support for on-demand value resolution. + + + + + Suppress property change notifications. + + + + + Provides simple string formatting from existing properties. + + + + + Gets the string format. + + + + + Gets the format properties. + + + + + Identifies a property should be represented as a delimited string value. + + + + + Gets the separator. + + + + + Converts all properties to strings. + + + + + Gets or sets the format. + + The format. + + + + Suppress property change notifications. + + + + + Contract for property descriptor initialization. + + + + + Performs any initialization of the + + The property descriptor. + The property behaviors. + + + + Assigns a prefix to the keyed properties using the interface name. + + + + + Manages conversion between property values. + + + + + Initializes a new instance of the class. + + The converter. + + + + Gets the effective dictionary value. + + The dictionary adapter. + The key. + The stored value. + The property. + true if return only existing. + The effective property value. + + + + + + + + + Contract for creating additional Dictionary adapters. + + + + + Contract for manipulating the Dictionary adapter. + + + + + Contract for editing the Dictionary adapter. + + + + + Contract for managing Dictionary adapter notifications. + + + + + Contract for validating Dictionary adapter. + + + + + Uses Reflection.Emit to expose the properties of a dictionary + through a dynamic implementation of a typed interface. + + + + + Defines the contract for building typed dictionary adapters. + + + + + Gets a typed adapter bound to the . + + The typed interface. + The underlying source of properties. + An implementation of the typed interface bound to the dictionary. + + The type represented by T must be an interface with properties. + + + + + Gets a typed adapter bound to the . + + The typed interface. + The underlying source of properties. + An implementation of the typed interface bound to the dictionary. + + The type represented by T must be an interface with properties. + + + + + Gets a typed adapter bound to the . + + The typed interface. + The underlying source of properties. + The property descriptor. + An implementation of the typed interface bound to the dictionary. + + The type represented by T must be an interface with properties. + + + + + Gets the associated with the type. + + The typed interface. + The adapter meta-data. + + + + Gets the associated with the type. + + The typed interface. + The property descriptor. + The adapter meta-data. + + + + + + + + + + + + + + + + + + + + + + + + + Describes a dictionary property. + + + + + Initializes an empty class. + + + + + Initializes a new instance of the class. + + The property. + The property behaviors. + + + + Copies an existinginstance of the class. + + + + + + + Gets the key. + + The dictionary adapter. + The key. + The descriptor. + + + + + Adds the key builder. + + The builder. + + + + Adds the key builders. + + The builders. + + + + Copies the key builders to the other + + + + + + + Copies the selected key builders to the other + + + + + + + + Gets the property value. + + The dictionary adapter. + The key. + The stored value. + The descriptor. + true if return only existing. + + + + + Adds the dictionary getter. + + The getter. + + + + Adds the dictionary getters. + + The getters. + + + + Copies the property getters to the other + + + + + + + Copies the selected property getters to the other + + + + + + + + Sets the property value. + + The dictionary adapter. + The key. + The value. + The descriptor. + + + + + Adds the dictionary setter. + + The setter. + + + + Adds the dictionary setters. + + The setters. + + + + Copies the property setters to the other + + + + + + + Copies the selected property setters to the other + + + + + + + + Adds the behaviors. + + + + + + + Adds the behaviors. + + + + + + + Adds the behaviors from the builders. + + + + + + + Copies the behaviors to the other + + + + + + + Copies the behaviors to the other + + + + + + + + + + + + + Gets the property name. + + + + + Gets the property type. + + + + + Gets the property. + + The property. + + + + Returns true if the property is dynamic. + + + + + Gets additional state. + + + + + Determines if property should be fetched. + + + + + Determines if notifications should occur. + + + + + Gets the property behaviors. + + + + + Gets the type converter. + + The type converter. + + + + Gets the key builders. + + The key builders. + + + + Gets the setter. + + The setter. + + + + Gets the getter. + + The getter. + + + + Adds the dictionary initializers. + + The initializers. + + + + Adds the dictionary initializers. + + The initializers. + + + + Copies the initializers to the other + + + + + + + Copies the filtered initializers to the other + + + + + + + + Adds the dictionary meta-data initializers. + + The meta-data initializers. + + + + Adds the dictionary meta-data initializers. + + The meta-data initializers. + + + + Copies the meta-initializers to the other + + + + + + + Copies the filtered meta-initializers to the other + + + + + + + + Gets the initializers. + + The initializers. + + + + Gets the meta-data initializers. + + The meta-data initializers. + + + + Contract for dictionary meta-data initialization. + + + + + Performs any initialization of the dictionary adapter meta-data. + + The dictionary adapter factory. + The dictionary adapter meta. + + + + + Contract for dictionary validation. + + + + + Determines if is valid. + + The dictionary adapter. + true if valid. + + + + Validates the . + + The dictionary adapter. + The error summary information. + + + + Validates the for a property. + + The dictionary adapter. + The property to validate. + The property summary information. + + + + Invalidates any results cached by the validator. + + The dictionary adapter. + + + + Helper class for retrieving attributes. + + + + + Gets the attribute. + + The member. + The member attribute. + + + + Gets the attributes. Does not consider inherited attributes! + + The member. + The member attributes. + + + + Gets the type attribute. + + The type. + The type attribute. + + + + Gets the type attributes. + + The type. + The type attributes. + + + + Gets the type converter. + + The member. + + + + + Gets the attribute. + + The member. + The member attribute. + + + + Contract for typed dynamic value resolution. + + + + + + Contract for dynamic value resolution. + + + + + Encapsulates an invocation of a proxied method. + + + + + Overrides the value of an argument at the given with the + new provided. + + + This method accepts an , however the value provided must be compatible + with the type of the argument defined on the method, otherwise an exception will be thrown. + + The index of the argument to override. + The new value for the argument. + + + + Gets the value of the argument at the specified . + + The index. + The value of the argument at the specified . + + + + Returns the concrete instantiation of the on the proxy, with any generic + parameters bound to real types. + + + The concrete instantiation of the on the proxy, or the if + not a generic method. + + Can be slower than calling . + + + + Returns the concrete instantiation of , with any + generic parameters bound to real types. + For interface proxies, this will point to the on the target class. + + The concrete instantiation of , or + if not a generic method. + In debug builds this can be slower than calling . + + + + Proceeds the call to the next interceptor in line, and ultimately to the target method. + + + Since interface proxies without a target don't have the target implementation to proceed to, + it is important, that the last interceptor does not call this method, otherwise a + will be thrown. + + + + + Gets the proxy object on which the intercepted method is invoked. + + Proxy object on which the intercepted method is invoked. + + + + Gets the object on which the invocation is performed. This is different from proxy object + because most of the time this will be the proxy target object. + + + The invocation target. + + + + Gets the type of the target object for the intercepted method. + + The type of the target object. + + + + Gets the arguments that the has been invoked with. + + The arguments the method was invoked with. + + + + Gets the generic arguments of the method. + + The generic arguments, or null if not a generic method. + + + + Gets the representing the method being invoked on the proxy. + + The representing the method being invoked. + + + + For interface proxies, this will point to the on the target class. + + The method invocation target. + + + + Gets or sets the return value of the method. + + The return value of the method. + + + + Used during the target type inspection process. Implementors have a chance to customize the + proxy generation process. + + + + + Invoked by the generation process to determine if the specified method should be proxied. + + The type which declares the given method. + The method to inspect. + True if the given method should be proxied; false otherwise. + + + + Invoked by the generation process to notify that a member was not marked as virtual. + + The type which declares the non-virtual member. + The non-virtual member. + + This method gives an opportunity to inspect any non-proxyable member of a type that has + been requested to be proxied, and if appropriate - throw an exception to notify the caller. + + + + + Invoked by the generation process to notify that the whole process has completed. + + + + + Interface describing elements composing generated type + + + + + Checks if the method is public or protected. + + + + + + + Performs some basic screening and invokes the + to select methods. + + + + + + + + + Provides functionality for disassembling instances of attributes to CustomAttributeBuilder form, during the process of emiting new types by Dynamic Proxy. + + + + + Disassembles given attribute instance back to corresponding CustomAttributeBuilder. + + An instance of attribute to disassemble + corresponding 1 to 1 to given attribute instance, or null reference. + + Implementers should return that corresponds to given attribute instance 1 to 1, + that is after calling specified constructor with specified arguments, and setting specified properties and fields with values specified + we should be able to get an attribute instance identical to the one passed in . Implementer can return null + if it wishes to opt out of replicating the attribute. Notice however, that for some cases, like attributes passed explicitly by the user + it is illegal to return null, and doing so will result in exception. + + + + + Handles error during disassembly process + + Type of the attribute being disassembled + Exception thrown during the process + usually null, or (re)throws the exception + + + + Here we try to match a constructor argument to its value. + Since we can't get the values from the assembly, we use some heuristics to get it. + a/ we first try to match all the properties on the attributes by name (case insensitive) to the argument + b/ if we fail we try to match them by property type, with some smarts about convertions (i,e: can use Guid for string). + + + + + We have the following rules here. + Try to find a matching type, failing that, if the parameter is string, get the first property (under the assumption that + we can convert it. + + + + + Attributes can only accept simple types, so we return null for null, + if the value is passed as string we call to string (should help with converting), + otherwise, we use the value as is (enums, integer, etc). + + + + + Base class that exposes the common functionalities + to proxy generation. + + + + + Generates a parameters constructor that initializes the proxy + state with just to make it non-null. + + This constructor is important to allow proxies to be XML serializable + + + + + + It is safe to add mapping (no mapping for the interface exists) + + + + + + + + Generates the constructor for the class that extends + + + + + + + + + Default implementation of interface producing in-memory proxy assemblies. + + + + + Abstracts the implementation of proxy type construction. + + + + + Creates a proxy type for given , using provided. + + The class type to proxy. + The proxy generation options. + The generated proxy type. + Thrown when is a generic type definition. + Thrown when is not public. + Note that to avoid this exception, you can mark offending type internal, and define + pointing to Castle Dynamic Proxy assembly, in assembly containing that type, if this is appropriate. + + + + + Creates a proxy type for given , implementing , using provided. + + The class type to proxy. + Additional interface types to proxy. + The proxy generation options. + The generated proxy type. + + Implementers should return a proxy type for the specified class and interfaces. + Additional interfaces should be only 'mark' interfaces, that is, they should work like interface proxy without target. (See method.) + + Thrown when or any of is a generic type definition. + Thrown when or any of is not public. + Note that to avoid this exception, you can mark offending type internal, and define + pointing to Castle Dynamic Proxy assembly, in assembly containing that type, if this is appropriate. + + + + + Creates a proxy type for given , implementing , using provided. + + The class type to proxy. + Additional interface types to proxy. + The proxy generation options. + The generated proxy type. + + Implementers should return a proxy type for the specified class and interfaces. + Additional interfaces should be only 'mark' interfaces, that is, they should work like interface proxy without target. (See method.) + + Thrown when or any of is a generic type definition. + Thrown when or any of is not public. + Note that to avoid this exception, you can mark offending type internal, and define + pointing to Castle Dynamic Proxy assembly, in assembly containing that type, if this is appropriate. + + + + + Creates a proxy type that proxies calls to members on , implementing , using provided. + + The interface type to proxy. + Additional interface types to proxy. + Type implementing on which calls to the interface members should be intercepted. + The proxy generation options. + The generated proxy type. + + Implementers should return a proxy type for the specified interface that 'proceeds' executions to the specified target. + Additional interfaces should be only 'mark' interfaces, that is, they should work like interface proxy without target. (See method.) + + Thrown when or any of is a generic type definition. + Thrown when or any of is not public. + Note that to avoid this exception, you can mark offending type internal, and define + pointing to Castle Dynamic Proxy assembly, in assembly containing that type, if this is appropriate. + + + + + Creates a proxy type for given that delegates all calls to the provided interceptors. + + The interface type to proxy. + Additional interface types to proxy. + The proxy generation options. + The generated proxy type. + + Implementers should return a proxy type for the specified interface and additional interfaces that delegate all executions to the specified interceptors. + + Thrown when or any of is a generic type definition. + Thrown when or any of is not public. + Note that to avoid this exception, you can mark offending type internal, and define + pointing to Castle Dynamic Proxy assembly, in assembly containing that type, if this is appropriate. + + + + + Creates a proxy type for given and that delegates all calls to the provided interceptors and allows interceptors to switch the actual target of invocation. + + The interface type to proxy. + Additional interface types to proxy. + The proxy generation options. + The generated proxy type. + + Implementers should return a proxy type for the specified interface(s) that delegate all executions to the specified interceptors + and uses an instance of the interface as their targets (i.e. ), rather than a class. All classes should then implement interface, + to allow interceptors to switch invocation target with instance of another type implementing called interface. + + Thrown when or any of is a generic type definition. + Thrown when or any of is not public. + Note that to avoid this exception, you can mark offending type internal, and define + pointing to Castle Dynamic Proxy assembly, in assembly containing that type, if this is appropriate. + + + + + Gets or sets the that this logs to. + + + + + Gets the associated with this builder. + + The module scope associated with this builder. + + + + Initializes a new instance of the class with new . + + + + + Initializes a new instance of the class. + + The module scope for generated proxy types. + + + + Registers custom disassembler to handle disassembly of specified type of attributes. + + Type of attributes to handle + Disassembler converting existing instances of Attributes to CustomAttributeBuilders + + When disassembling an attribute Dynamic Proxy will first check if an custom disassembler has been registered to handle attributes of that type, + and if none is found, it'll use the . + + + + + Attributes should be replicated if they are non-inheritable, + but there are some special cases where the attributes means + something to the CLR, where they should be skipped. + + + + + Initializes a new instance of the class. + + Target element. This is either target type or target method for invocation types. + The type of the proxy. This is base type for invocation types. + The interfaces. + The options. + + + + Initializes a new instance of the class. + + Type of the target. + The interfaces. + The options. + + + s + Provides appropriate Ldc.X opcode for the type of primitive value to be loaded. + + + + + Provides appropriate Ldind.X opcode for + the type of primitive value to be loaded indirectly. + + + + + Emits a load opcode of the appropriate kind for a constant string or + primitive value. + + + + + + + Emits a load opcode of the appropriate kind for the constant default value of a + type, such as 0 for value types and null for reference types. + + + + + Emits a load indirect opcode of the appropriate type for a value or object reference. + Pops a pointer off the evaluation stack, dereferences it and loads + a value of the specified type. + + + + + + + Emits a store indirectopcode of the appropriate type for a value or object reference. + Pops a value of the specified type and a pointer off the evaluation stack, and + stores the value. + + + + + + + Summary description for PropertiesCollection. + + + + + Wraps a reference that is passed + ByRef and provides indirect load/store support. + + + + + Summary description for NewArrayExpression. + + + + + + + + + + Provides appropriate Stind.X opcode + for the type of primitive value to be stored indirectly. + + + + + Returns list of all unique interfaces implemented given types, including their base interfaces. + + + + + + + Initializes a new instance of the class. + + The name. + Type declaring the original event being overriten, or null. + + The add method. + The remove method. + The attributes. + + + + Represents the scope of uniquenes of names for types and their members + + + + + Gets a unique name based on + + Name suggested by the caller + Unique name based on . + + Implementers should provide name as closely resembling as possible. + Generally if no collision occurs it is suggested to return suggested name, otherwise append sequential suffix. + Implementers must return deterministic names, that is when is called twice + with the same suggested name, the same returned name should be provided each time. Non-deterministic return + values, like appending random suffices will break serialization of proxies. + + + + + Returns new, disposable naming scope. It is responsibilty of the caller to make sure that no naming collision + with enclosing scope, or other subscopes is possible. + + New naming scope. + + + + Returns the methods implemented by a type. Use this instead of Type.GetMethods() to work around a CLR issue + where duplicate MethodInfos are returned by Type.GetMethods() after a token of a generic type's method was loaded. + + + + + Determines whether this assembly has internals visible to dynamic proxy. + + The assembly to inspect. + + + + Determines whether the specified method is internal. + + The method. + + true if the specified method is internal; otherwise, false. + + + + + Because we need to cache the types based on the mixed in mixins, we do the following here: + - Get all the mixin interfaces + - Sort them by full name + - Return them by position + + The idea is to have reproducable behavior for the case that mixins are registered in different orders. + This method is here because it is required + + + + + Summary description for ModuleScope. + + + + + The default file name used when the assembly is saved using . + + + + + The default assembly (simple) name used for the assemblies generated by a instance. + + + + + Initializes a new instance of the class; assemblies created by this instance will not be saved. + + + + + Initializes a new instance of the class, allowing to specify whether the assemblies generated by this instance + should be saved. + + If set to true saves the generated module. + + + + Initializes a new instance of the class, allowing to specify whether the assemblies generated by this instance + should be saved. + + If set to true saves the generated module. + If set to true disables ability to generate signed module. This should be used in cases where ran under constrained permissions. + + + + Initializes a new instance of the class, allowing to specify whether the assemblies generated by this instance + should be saved and what simple names are to be assigned to them. + + If set to true saves the generated module. + If set to true disables ability to generate signed module. This should be used in cases where ran under constrained permissions. + The simple name of the strong-named assembly generated by this . + The path and file name of the manifest module of the strong-named assembly generated by this . + The simple name of the weak-named assembly generated by this . + The path and file name of the manifest module of the weak-named assembly generated by this . + + + + Initializes a new instance of the class, allowing to specify whether the assemblies generated by this instance + should be saved and what simple names are to be assigned to them. + + If set to true saves the generated module. + If set to true disables ability to generate signed module. This should be used in cases where ran under constrained permissions. + Naming scope used to provide unique names to generated types and their members (usually via sub-scopes). + The simple name of the strong-named assembly generated by this . + The path and file name of the manifest module of the strong-named assembly generated by this . + The simple name of the weak-named assembly generated by this . + The path and file name of the manifest module of the weak-named assembly generated by this . + + + + Returns a type from this scope's type cache, or null if the key cannot be found. + + The key to be looked up in the cache. + The type from this scope's type cache matching the key, or null if the key cannot be found + + + + Registers a type in this scope's type cache. + + The key to be associated with the type. + The type to be stored in the cache. + + + + Gets the key pair used to sign the strong-named assembly generated by this . + + + + + + Gets the specified module generated by this scope, creating a new one if none has yet been generated. + + If set to true, a strong-named module is returned; otherwise, a weak-named module is returned. + A strong-named or weak-named module generated by this scope, as specified by the parameter. + + + + Gets the strong-named module generated by this scope, creating a new one if none has yet been generated. + + A strong-named module generated by this scope. + + + + Gets the weak-named module generated by this scope, creating a new one if none has yet been generated. + + A weak-named module generated by this scope. + + + + Users of this should use this lock when accessing the cache. + + + + + Gets the strong-named module generated by this scope, or if none has yet been generated. + + The strong-named module generated by this scope, or if none has yet been generated. + + + + Gets the file name of the strongly named module generated by this scope. + + The file name of the strongly named module generated by this scope. + + + + Gets the weak-named module generated by this scope, or if none has yet been generated. + + The weak-named module generated by this scope, or if none has yet been generated. + + + + Gets the file name of the weakly named module generated by this scope. + + The file name of the weakly named module generated by this scope. + + + + Initializes a new instance of the class. + + The hook. + + + + Initializes a new instance of the class. + + + + + Provides proxy objects for classes and interfaces. + + + + + Initializes a new instance of the class. + + Proxy types builder. + + + + Initializes a new instance of the class. + + + + + Creates proxy object intercepting calls to members of interface on object with given . + + Type of the interface implemented by which will be proxied. + The target object, calls to which will be intercepted. + The interceptors called during the invocation of proxied methods. + Object proxying calls to members of on object. + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given array is a null reference (Nothing in Visual Basic). + Thrown when given is not an interface type. + Thrown when no default constructor exists on actual type of object. + Thrown when default constructor of actual type of throws an exception. + + This method generates new proxy type for each type of , which affects performance. If you don't want to proxy types differently depending on the type of the target + use method. + This method uses implementation to generate a proxy type. + As such caller should expect any type of exception that given implementation may throw. + + + + + Creates proxy object intercepting calls to members of interface on object with given . + + Type of the interface implemented by which will be proxied. + The target object, calls to which will be intercepted. + The proxy generation options used to influence generated proxy type and object. + The interceptors called during the invocation of proxied methods. + + Object proxying calls to members of on object. + + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given array is a null reference (Nothing in Visual Basic). + Thrown when given is not an interface type. + Thrown when no default constructor exists on actual type of object. + Thrown when default constructor of actual type of throws an exception. + + This method generates new proxy type for each type of , which affects performance. If you don't want to proxy types differently depending on the type of the target + use method. + This method uses implementation to generate a proxy type. + As such caller should expect any type of exception that given implementation may throw. + + + + + Creates proxy object intercepting calls to members of interface on object with given . + + Type of the interface implemented by which will be proxied. + The target object, calls to which will be intercepted. + The interceptors called during the invocation of proxied methods. + + Object proxying calls to members of type on object. + + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given array is a null reference (Nothing in Visual Basic). + Thrown when given is a generic type definition. + Thrown when given is not an interface type. + Thrown when given does not implement interface. + Thrown when no default constructor exists on actual type of object. + Thrown when default constructor of actual type of throws an exception. + + This method generates new proxy type for each type of , which affects performance. If you don't want to proxy types differently depending on the type of the target + use method. + This method uses implementation to generate a proxy type. + As such caller should expect any type of exception that given implementation may throw. + + + + + Creates proxy object intercepting calls to members of interface on object with given . + + Type of the interface implemented by which will be proxied. + The target object, calls to which will be intercepted. + The proxy generation options used to influence generated proxy type and object. + The interceptors called during the invocation of proxied methods. + + Object proxying calls to members of type on object. + + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given array is a null reference (Nothing in Visual Basic). + Thrown when given is a generic type definition. + Thrown when given is not an interface type. + Thrown when given does not implement interface. + Thrown when no default constructor exists on actual type of object. + Thrown when default constructor of actual type of throws an exception. + + This method generates new proxy type for each type of , which affects performance. If you don't want to proxy types differently depending on the type of the target + use method. + This method uses implementation to generate a proxy type. + As such caller should expect any type of exception that given implementation may throw. + + + + + Creates proxy object intercepting calls to members of interface on object with given . + + Type of the interface implemented by which will be proxied. + The target object, calls to which will be intercepted. + Additional interface types. Calls to their members will be proxied as well. + The interceptors called during the invocation of proxied methods. + + Object proxying calls to members of and types on object. + + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given array is a null reference (Nothing in Visual Basic). + Thrown when given or any of is a generic type definition. + Thrown when given is not an interface type. + Thrown when given does not implement interface. + Thrown when no default constructor exists on actual type of object. + Thrown when default constructor of actual type of throws an exception. + + This method generates new proxy type for each type of , which affects performance. If you don't want to proxy types differently depending on the type of the target + use method. + This method uses implementation to generate a proxy type. + As such caller should expect any type of exception that given implementation may throw. + + + + + Creates proxy object intercepting calls to members of interface on object with given . + + Type of the interface implemented by which will be proxied. + The target object, calls to which will be intercepted. + The proxy generation options used to influence generated proxy type and object. + Additional interface types. Calls to their members will be proxied as well. + The interceptors called during the invocation of proxied methods. + + Object proxying calls to members of and types on object. + + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given array is a null reference (Nothing in Visual Basic). + Thrown when given or any of is a generic type definition. + Thrown when given is not an interface type. + Thrown when given does not implement interface. + Thrown when no default constructor exists on actual type of object. + Thrown when default constructor of actual type of throws an exception. + + This method generates new proxy type for each type of , which affects performance. If you don't want to proxy types differently depending on the type of the target + use method. + This method uses implementation to generate a proxy type. + As such caller should expect any type of exception that given implementation may throw. + + + + + Creates proxy object intercepting calls to members of interface on object with given . + Interceptors can use interface to provide other target for method invocation than default . + + Type of the interface implemented by which will be proxied. + The target object, calls to which will be intercepted. + The interceptors called during the invocation of proxied methods. + + Object proxying calls to members of type on object or alternative implementation swapped at runtime by an interceptor. + + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given array is a null reference (Nothing in Visual Basic). + Thrown when given is a generic type definition. + Thrown when given is not an interface type. + Thrown when given does not implement interface. + Thrown when no default constructor exists on actual type of object. + Thrown when default constructor of actual type of throws an exception. + + This method uses implementation to generate a proxy type. + As such caller should expect any type of exception that given implementation may throw. + + + + + Creates proxy object intercepting calls to members of interface on object with given . + Interceptors can use interface to provide other target for method invocation than default . + + Type of the interface implemented by which will be proxied. + The target object, calls to which will be intercepted. + The interceptors called during the invocation of proxied methods. + + Object proxying calls to members of type on object or alternative implementation swapped at runtime by an interceptor. + + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given array is a null reference (Nothing in Visual Basic). + Thrown when given is not an interface type. + Thrown when no default constructor exists on actual type of object. + Thrown when default constructor of actual type of throws an exception. + + This method uses implementation to generate a proxy type. + As such caller should expect any type of exception that given implementation may throw. + + + + + Creates proxy object intercepting calls to members of interface on object with given . + Interceptors can use interface to provide other target for method invocation than default . + + Type of the interface implemented by which will be proxied. + The target object, calls to which will be intercepted. + The proxy generation options used to influence generated proxy type and object. + The interceptors called during the invocation of proxied methods. + + Object proxying calls to members of type on object or alternative implementation swapped at runtime by an interceptor. + + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given array is a null reference (Nothing in Visual Basic). + Thrown when given is not an interface type. + Thrown when no default constructor exists on actual type of object. + Thrown when default constructor of actual type of throws an exception. + + This method uses implementation to generate a proxy type. + As such caller should expect any type of exception that given implementation may throw. + + + + + Creates proxy object intercepting calls to members of interface on object with given . + Interceptors can use interface to provide other target for method invocation than default . + + Type of the interface implemented by which will be proxied. + The target object, calls to which will be intercepted. + Additional interface types. Calls to their members will be proxied as well. + The interceptors called during the invocation of proxied methods. + + Object proxying calls to members of and types on object or alternative implementation swapped at runtime by an interceptor. + + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given array is a null reference (Nothing in Visual Basic). + Thrown when given or any of is a generic type definition. + Thrown when given is not an interface type. + Thrown when given does not implement interface. + Thrown when no default constructor exists on actual type of object. + Thrown when default constructor of actual type of throws an exception. + + This method uses implementation to generate a proxy type. + As such caller should expect any type of exception that given implementation may throw. + + + + + Creates proxy object intercepting calls to members of interface on object with given . + Interceptors can use interface to provide other target for method invocation than default . + + Type of the interface implemented by which will be proxied. + The target object, calls to which will be intercepted. + The proxy generation options used to influence generated proxy type and object. + The interceptors called during the invocation of proxied methods. + + Object proxying calls to members of type on object or alternative implementation swapped at runtime by an interceptor. + + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given array is a null reference (Nothing in Visual Basic). + Thrown when given is a generic type definition. + Thrown when given is not an interface type. + Thrown when given does not implement interface. + Thrown when no default constructor exists on actual type of object. + Thrown when default constructor of actual type of throws an exception. + + This method uses implementation to generate a proxy type. + As such caller should expect any type of exception that given implementation may throw. + + + + + Creates proxy object intercepting calls to members of interface on object with given . + Interceptors can use interface to provide other target for method invocation than default . + + Type of the interface implemented by which will be proxied. + The target object, calls to which will be intercepted. + The proxy generation options used to influence generated proxy type and object. + Additional interface types. Calls to their members will be proxied as well. + The interceptors called during the invocation of proxied methods. + + Object proxying calls to members of and types on object or alternative implementation swapped at runtime by an interceptor. + + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given array is a null reference (Nothing in Visual Basic). + Thrown when given or any of is a generic type definition. + Thrown when given is not an interface type. + Thrown when given does not implement interface. + Thrown when no default constructor exists on actual type of object. + Thrown when default constructor of actual type of throws an exception. + + This method uses implementation to generate a proxy type. + As such caller should expect any type of exception that given implementation may throw. + + + + + Creates proxy object intercepting calls to members of interface on target object generated at runtime with given . + + Type of the interface which will be proxied. + The interceptors called during the invocation of proxied methods. + + Object proxying calls to members of types on generated target object. + + Thrown when given array is a null reference (Nothing in Visual Basic). + Thrown when given is not an interface type. + + Since this method uses an empty-shell implementation of interfaces to proxy generated at runtime, the actual implementation of proxied methods must be provided by given implementations. + They are responsible for setting return value (and out parameters) on proxied methods. It is also illegal for an interceptor to call , since there's no actual implementation to proceed with. + As a result of that also at least one implementation must be provided. + This method uses implementation to generate a proxy type. + As such caller should expect any type of exception that given implementation may throw. + + + + + Creates proxy object intercepting calls to members of interface on target object generated at runtime with given . + + Type of the interface which will be proxied. + The interceptors called during the invocation of proxied methods. + + Object proxying calls to members of types on generated target object. + + Thrown when given array is a null reference (Nothing in Visual Basic). + Thrown when given is not an interface type. + + Since this method uses an empty-shell implementation of interfaces to proxy generated at runtime, the actual implementation of proxied methods must be provided by given implementations. + They are responsible for setting return value (and out parameters) on proxied methods. It is also illegal for an interceptor to call , since there's no actual implementation to proceed with. + As a result of that also at least one implementation must be provided. + This method uses implementation to generate a proxy type. + As such caller should expect any type of exception that given implementation may throw. + + + + + Creates proxy object intercepting calls to members of interface on target object generated at runtime with given . + + Type of the interface which will be proxied. + The proxy generation options used to influence generated proxy type and object. + The interceptors called during the invocation of proxied methods. + + Object proxying calls to members of types on generated target object. + + Thrown when given array is a null reference (Nothing in Visual Basic). + Thrown when given is not an interface type. + + Since this method uses an empty-shell implementation of interfaces to proxy generated at runtime, the actual implementation of proxied methods must be provided by given implementations. + They are responsible for setting return value (and out parameters) on proxied methods. It is also illegal for an interceptor to call , since there's no actual implementation to proceed with. + As a result of that also at least one implementation must be provided. + This method uses implementation to generate a proxy type. + As such caller should expect any type of exception that given implementation may throw. + + + + + Creates proxy object intercepting calls to members of interface on target object generated at runtime with given . + + Type of the interface which will be proxied. + The interceptors called during the invocation of proxied methods. + + Object proxying calls to members of type on generated target object. + + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given array is a null reference (Nothing in Visual Basic). + Thrown when given is a generic type definition. + Thrown when given is not an interface type. + + Since this method uses an empty-shell implementation of interfaces to proxy generated at runtime, the actual implementation of proxied methods must be provided by given implementations. + They are responsible for setting return value (and out parameters) on proxied methods. It is also illegal for an interceptor to call , since there's no actual implementation to proceed with. + This method uses implementation to generate a proxy type. + As such caller should expect any type of exception that given implementation may throw. + + + + + Creates proxy object intercepting calls to members of interface on target object generated at runtime with given . + + Type of the interface which will be proxied. + The interceptors called during the invocation of proxied methods. + + Object proxying calls to members of type on generated target object. + + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given array is a null reference (Nothing in Visual Basic). + Thrown when given is a generic type definition. + Thrown when given is not an interface type. + + Since this method uses an empty-shell implementation of interfaces to proxy generated at runtime, the actual implementation of proxied methods must be provided by given implementations. + They are responsible for setting return value (and out parameters) on proxied methods. It is also illegal for an interceptor to call , since there's no actual implementation to proceed with. + This method uses implementation to generate a proxy type. + As such caller should expect any type of exception that given implementation may throw. + + + + + Creates proxy object intercepting calls to members of interface on target object generated at runtime with given . + + Type of the interface which will be proxied. + Additional interface types. Calls to their members will be proxied as well. + The interceptors called during the invocation of proxied methods. + + Object proxying calls to members of and types on generated target object. + + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given array is a null reference (Nothing in Visual Basic). + Thrown when given or any of is a generic type definition. + Thrown when given is not an interface type. + + Since this method uses an empty-shell implementation of interfaces to proxy generated at runtime, the actual implementation of proxied methods must be provided by given implementations. + They are responsible for setting return value (and out parameters) on proxied methods. It is also illegal for an interceptor to call , since there's no actual implementation to proceed with. + This method uses implementation to generate a proxy type. + As such caller should expect any type of exception that given implementation may throw. + + + + + Creates proxy object intercepting calls to members of interface on target object generated at runtime with given . + + Type of the interface which will be proxied. + The proxy generation options used to influence generated proxy type and object. + The interceptors called during the invocation of proxied methods. + + Object proxying calls to members of on generated target object. + + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given array is a null reference (Nothing in Visual Basic). + Thrown when given is a generic type definition. + Thrown when given is not an interface type. + + They are responsible for setting return value (and out parameters) on proxied methods. It is also illegal for an interceptor to call , since there's no actual implementation to proceed with. + This method uses implementation to generate a proxy type. + As such caller should expect any type of exception that given implementation may throw. + + + + + Creates proxy object intercepting calls to members of interface on target object generated at runtime with given . + + Type of the interface which will be proxied. + The proxy generation options used to influence generated proxy type and object. + Additional interface types. Calls to their members will be proxied as well. + The interceptors called during the invocation of proxied methods. + + Object proxying calls to members of and types on generated target object. + + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given array is a null reference (Nothing in Visual Basic). + Thrown when given or any of is a generic type definition. + Thrown when given is not an interface type. + + Since this method uses an empty-shell implementation of to proxy generated at runtime, the actual implementation of proxied methods must be provided by given implementations. + They are responsible for setting return value (and out parameters) on proxied methods. It is also illegal for an interceptor to call , since there's no actual implementation to proceed with. + This method uses implementation to generate a proxy type. + As such caller should expect any type of exception that given implementation may throw. + + + + + Creates proxy object intercepting calls to virtual members of type on newly created instance of that type with given . + + Type of class which will be proxied. + The target object, calls to which will be intercepted. + The interceptors called during the invocation of proxied methods. + + New object of type proxying calls to virtual members of type. + + Thrown when given is not a class type. + Thrown when no default constructor exists on type . + Thrown when default constructor of type throws an exception. + + This method uses implementation to generate a proxy type. + As such caller should expect any type of exception that given implementation may throw. + + + + + Creates proxy object intercepting calls to virtual members of type on newly created instance of that type with given . + + Type of class which will be proxied. + The target object, calls to which will be intercepted. + The proxy generation options used to influence generated proxy type and object. + The interceptors called during the invocation of proxied methods. + + New object of type proxying calls to virtual members of type. + + Thrown when given is not a class type. + Thrown when no default constructor exists on type . + Thrown when default constructor of type throws an exception. + + This method uses implementation to generate a proxy type. + As such caller should expect any type of exception that given implementation may throw. + + + + + Creates proxy object intercepting calls to virtual members of type on newly created instance of that type with given . + + Type of class which will be proxied. + Additional interface types. Calls to their members will be proxied as well. + The target object, calls to which will be intercepted. + The interceptors called during the invocation of proxied methods. + + New object of type proxying calls to virtual members of and types. + + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given or any of is a generic type definition. + Thrown when given is not a class type. + Thrown when no default constructor exists on type . + Thrown when default constructor of type throws an exception. + + This method uses implementation to generate a proxy type. + As such caller should expect any type of exception that given implementation may throw. + + + + + Creates proxy object intercepting calls to virtual members of type on newly created instance of that type with given . + + Type of class which will be proxied. + The target object, calls to which will be intercepted. + The proxy generation options used to influence generated proxy type and object. + Arguments of constructor of type which should be used to create a new instance of that type. + The interceptors called during the invocation of proxied methods. + + New object of type proxying calls to virtual members of type. + + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given is a generic type definition. + Thrown when given is not a class type. + Thrown when no constructor exists on type with parameters matching . + Thrown when constructor of type throws an exception. + + This method uses implementation to generate a proxy type. + As such caller should expect any type of exception that given implementation may throw. + + + + + Creates proxy object intercepting calls to virtual members of type on newly created instance of that type with given . + + Type of class which will be proxied. + The target object, calls to which will be intercepted. + Arguments of constructor of type which should be used to create a new instance of that type. + The interceptors called during the invocation of proxied methods. + + New object of type proxying calls to virtual members of type. + + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given is a generic type definition. + Thrown when given is not a class type. + Thrown when no constructor exists on type with parameters matching . + Thrown when constructor of type throws an exception. + + This method uses implementation to generate a proxy type. + As such caller should expect any type of exception that given implementation may throw. + + + + + Creates proxy object intercepting calls to virtual members of type on newly created instance of that type with given . + + Type of class which will be proxied. + The target object, calls to which will be intercepted. + The interceptors called during the invocation of proxied methods. + + New object of type proxying calls to virtual members of type. + + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given is a generic type definition. + Thrown when given is not a class type. + Thrown when no parameterless constructor exists on type . + Thrown when constructor of type throws an exception. + + This method uses implementation to generate a proxy type. + As such caller should expect any type of exception that given implementation may throw. + + + + + Creates proxy object intercepting calls to virtual members of type on newly created instance of that type with given . + + Type of class which will be proxied. + The target object, calls to which will be intercepted. + The proxy generation options used to influence generated proxy type and object. + The interceptors called during the invocation of proxied methods. + + New object of type proxying calls to virtual members of type. + + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given is a generic type definition. + Thrown when given is not a class type. + Thrown when no default constructor exists on type . + Thrown when default constructor of type throws an exception. + + This method uses implementation to generate a proxy type. + As such caller should expect any type of exception that given implementation may throw. + + + + + Creates proxy object intercepting calls to virtual members of type on newly created instance of that type with given . + + Type of class which will be proxied. + Additional interface types. Calls to their members will be proxied as well. + The target object, calls to which will be intercepted. + The proxy generation options used to influence generated proxy type and object. + The interceptors called during the invocation of proxied methods. + + New object of type proxying calls to virtual members of and types. + + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given or any of is a generic type definition. + Thrown when given is not a class type. + Thrown when no default constructor exists on type . + Thrown when default constructor of type throws an exception. + + This method uses implementation to generate a proxy type. + As such caller should expect any type of exception that given implementation may throw. + + + + + Creates proxy object intercepting calls to virtual members of type on newly created instance of that type with given . + + Type of class which will be proxied. + Additional interface types. Calls to their members will be proxied as well. + The target object, calls to which will be intercepted. + The proxy generation options used to influence generated proxy type and object. + Arguments of constructor of type which should be used to create a new instance of that type. + The interceptors called during the invocation of proxied methods. + + New object of type proxying calls to virtual members of and types. + + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given or any of is a generic type definition. + Thrown when given is not a class type. + Thrown when no constructor exists on type with parameters matching . + Thrown when constructor of type throws an exception. + + This method uses implementation to generate a proxy type. + As such caller should expect any type of exception that given implementation may throw. + + + + + Creates proxy object intercepting calls to virtual members of type on newly created instance of that type with given . + + Type of class which will be proxied. + The interceptors called during the invocation of proxied methods. + + New object of type proxying calls to virtual members of type. + + Thrown when given is not a class type. + Thrown when no default constructor exists on type . + Thrown when default constructor of type throws an exception. + + This method uses implementation to generate a proxy type. + As such caller should expect any type of exception that given implementation may throw. + + + + + Creates proxy object intercepting calls to virtual members of type on newly created instance of that type with given . + + Type of class which will be proxied. + The proxy generation options used to influence generated proxy type and object. + The interceptors called during the invocation of proxied methods. + + New object of type proxying calls to virtual members of type. + + Thrown when given is not a class type. + Thrown when no default constructor exists on type . + Thrown when default constructor of type throws an exception. + + This method uses implementation to generate a proxy type. + As such caller should expect any type of exception that given implementation may throw. + + + + + Creates proxy object intercepting calls to virtual members of type on newly created instance of that type with given . + + Type of class which will be proxied. + Additional interface types. Calls to their members will be proxied as well. + The interceptors called during the invocation of proxied methods. + + New object of type proxying calls to virtual members of and types. + + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given or any of is a generic type definition. + Thrown when given is not a class type. + Thrown when no default constructor exists on type . + Thrown when default constructor of type throws an exception. + + This method uses implementation to generate a proxy type. + As such caller should expect any type of exception that given implementation may throw. + + + + + Creates proxy object intercepting calls to virtual members of type on newly created instance of that type with given . + + Type of class which will be proxied. + The proxy generation options used to influence generated proxy type and object. + Arguments of constructor of type which should be used to create a new instance of that type. + The interceptors called during the invocation of proxied methods. + + New object of type proxying calls to virtual members of type. + + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given is a generic type definition. + Thrown when given is not a class type. + Thrown when no constructor exists on type with parameters matching . + Thrown when constructor of type throws an exception. + + This method uses implementation to generate a proxy type. + As such caller should expect any type of exception that given implementation may throw. + + + + + Creates proxy object intercepting calls to virtual members of type on newly created instance of that type with given . + + Type of class which will be proxied. + Arguments of constructor of type which should be used to create a new instance of that type. + The interceptors called during the invocation of proxied methods. + + New object of type proxying calls to virtual members of type. + + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given is a generic type definition. + Thrown when given is not a class type. + Thrown when no constructor exists on type with parameters matching . + Thrown when constructor of type throws an exception. + + This method uses implementation to generate a proxy type. + As such caller should expect any type of exception that given implementation may throw. + + + + + Creates proxy object intercepting calls to virtual members of type on newly created instance of that type with given . + + Type of class which will be proxied. + The interceptors called during the invocation of proxied methods. + + New object of type proxying calls to virtual members of type. + + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given is a generic type definition. + Thrown when given is not a class type. + Thrown when no parameterless constructor exists on type . + Thrown when constructor of type throws an exception. + + This method uses implementation to generate a proxy type. + As such caller should expect any type of exception that given implementation may throw. + + + + + Creates proxy object intercepting calls to virtual members of type on newly created instance of that type with given . + + Type of class which will be proxied. + The proxy generation options used to influence generated proxy type and object. + The interceptors called during the invocation of proxied methods. + + New object of type proxying calls to virtual members of type. + + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given is a generic type definition. + Thrown when given is not a class type. + Thrown when no default constructor exists on type . + Thrown when default constructor of type throws an exception. + + This method uses implementation to generate a proxy type. + As such caller should expect any type of exception that given implementation may throw. + + + + + Creates proxy object intercepting calls to virtual members of type on newly created instance of that type with given . + + Type of class which will be proxied. + Additional interface types. Calls to their members will be proxied as well. + The proxy generation options used to influence generated proxy type and object. + The interceptors called during the invocation of proxied methods. + + New object of type proxying calls to virtual members of and types. + + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given or any of is a generic type definition. + Thrown when given is not a class type. + Thrown when no default constructor exists on type . + Thrown when default constructor of type throws an exception. + + This method uses implementation to generate a proxy type. + As such caller should expect any type of exception that given implementation may throw. + + + + + Creates proxy object intercepting calls to virtual members of type on newly created instance of that type with given . + + Type of class which will be proxied. + Additional interface types. Calls to their members will be proxied as well. + The proxy generation options used to influence generated proxy type and object. + Arguments of constructor of type which should be used to create a new instance of that type. + The interceptors called during the invocation of proxied methods. + + New object of type proxying calls to virtual members of and types. + + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given object is a null reference (Nothing in Visual Basic). + Thrown when given or any of is a generic type definition. + Thrown when given is not a class type. + Thrown when no constructor exists on type with parameters matching . + Thrown when constructor of type throws an exception. + + This method uses implementation to generate a proxy type. + As such caller should expect any type of exception that given implementation may throw. + + + + + Creates the proxy type for class proxy with given class, implementing given and using provided . + + The base class for proxy type. + The interfaces that proxy type should implement. + The options for proxy generation process. + of proxy. + + + + Creates the proxy type for interface proxy with target for given interface, implementing given on given and using provided . + + The interface proxy type should implement. + The additional interfaces proxy type should implement. + Actual type that the proxy type will encompass. + The options for proxy generation process. + of proxy. + + + + Creates the proxy type for interface proxy with target interface for given interface, implementing given on given and using provided . + + The interface proxy type should implement. + The additional interfaces proxy type should implement. + The options for proxy generation process. + of proxy. + + + + Creates the proxy type for interface proxy without target for given interface, implementing given and using provided . + + The interface proxy type should implement. + The additional interfaces proxy type should implement. + The options for proxy generation process. + of proxy. + + + + Gets or sets the that this log to. + + + + + Gets the proxy builder instance used to generate proxy types. + + The proxy builder. + + + + The silverlight System.Type is missing the IsNested property so this exposes similar functionality. + + + + + + + http://www.dolittle.com/blogs/einar/archive/2008/01/13/missing-enum-getvalues-when-doing-silverlight-for-instance.aspx + + + + + Holds objects representing methods of class. + + + + + Provides an extension point that allows proxies to choose specific interceptors on + a per method basis. + + + + + Selects the interceptors that should intercept calls to the given . + + The type declaring the method to intercept. + The method that will be intercepted. + All interceptors registered with the proxy. + An array of interceptors to invoke upon calling the . + + This method is called only once per proxy instance, upon the first call to the + . Either an empty array or null are valid return values to indicate + that no interceptor should intercept calls to the method. Although it is not advised, it is + legal to return other implementations than these provided in + . + + + + + Creates a new lock. + + + + + + This interface should be implemented by classes + that are available in a bigger context, exposing + the container to different areas in the same application. + + For example, in Web application, the (global) HttpApplication + subclasses should implement this interface to expose + the configured container + + + + + + Exposes means to change target objects of proxies and invocations + + + + + Changes the target object () of current . + + The new value of target of invocation. + + Although the method takes the actual instance must be of type assignable to , otherwise an will be thrown. + Also while it's technically legal to pass null reference (Nothing in Visual Basic) as , for obvious reasons Dynamic Proxy will not be able to call the intercepted method on such target. + In this case last interceptor in the pipeline mustn't call or a will be throws. + Also while it's technically legal to pass proxy itself as , this would create stack overflow. + In this case last interceptor in the pipeline mustn't call or a will be throws. + + Thrown when is not assignable to the proxied type. + + + + Permanently changes the target object of the proxy. This does not affect target of the current invocation. + + The new value of target of the proxy. + + Although the method takes the actual instance must be of type assignable to proxy's target type, otherwise an will be thrown. + Also while it's technically legal to pass null reference (Nothing in Visual Basic) as , for obvious reasons Dynamic Proxy will not be able to call the intercepted method on such target. + In this case last interceptor in the pipeline mustn't call or a will be throws. + Also while it's technically legal to pass proxy itself as , this would create stack overflow. + In this case last interceptor in the pipeline mustn't call or a will be throws. + + Thrown when is not assignable to the proxied type. + + + + New interface that is going to be used by DynamicProxy 2 + + + + + Get the proxy target (note that null is a valid target!) + + + + + + Gets the interceptors for the proxy + + + + + + Defines that the implementation wants a + in order to + access other components. The creator must be aware + that the component might (or might not) implement + the interface. + + + Used by Castle Project components to, for example, + gather logging factories + + + + + Increments IServiceProvider with a generic service resolution operation. + + + + + Provides a factory that can produce either or + classes. + + + + + Manages the instantiation of s. + + + + + Creates a new logger, getting the logger name from the specified type. + + + + + Creates a new logger. + + + + + Creates a new logger, getting the logger name from the specified type. + + + + + Creates a new logger. + + + + + Creates a new extended logger, getting the logger name from the specified type. + + + + + Creates a new extended logger. + + + + + Creates a new extended logger, getting the logger name from the specified type. + + + + + Creates a new extended logger. + + + + + Creates a new extended logger, getting the logger name from the specified type. + + + + + Creates a new extended logger. + + + + + Creates a new extended logger, getting the logger name from the specified type. + + + + + Creates a new extended logger. + + + + + Creates a new logger, getting the logger name from the specified type. + + + + + Creates a new logger. + + + + + Creates a new logger, getting the logger name from the specified type. + + + + + Creates a new logger. + + + + + Gets the configuration file. + + i.e. log4net.config + + + + + Interface for Context Properties implementations + + + + This interface defines a basic property get set accessor. + + + Based on the ContextPropertiesBase of log4net, by Nicko Cadell. + + + + + + Gets or sets the value of a property + + + The value for the property with the specified key + + + + Gets or sets the value of a property + + + + + + Gets the configuration file. + + i.e. log4net.config + + + + + NullLogFactory used when logging is turned off. + + + + + Creates an instance of ILogger with the specified name. + + Name. + + + + + Creates an instance of ILogger with the specified name and LoggerLevel. + + Name. + Level. + + + + + Provides an interface that supports and + allows the storage and retrieval of Contexts. These are supported in + both log4net and NLog. + + + + + Manages logging. + + + This is a facade for the different logging subsystems. + It offers a simplified interface that follows IOC patterns + and a simplified priority/level/severity abstraction. + + + + + Logs a debug message. + + The message to log + + + + Logs a debug message. + + The exception to log + The message to log + + + + Logs a debug message. + + Format string for the message to log + Format arguments for the message to log + + + + Logs a debug message. + + Format string for the message to log + Format arguments for the message to log + + + + Logs a debug message. + + The exception to log + Format string for the message to log + Format arguments for the message to log + + + + Logs a debug message. + + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs a debug message. + + The exception to log + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs an info message. + + The message to log + + + + Logs an info message. + + The exception to log + The message to log + + + + Logs an info message. + + Format string for the message to log + Format arguments for the message to log + + + + Logs an info message. + + Format string for the message to log + Format arguments for the message to log + + + + Logs an info message. + + The exception to log + Format string for the message to log + Format arguments for the message to log + + + + Logs an info message. + + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs an info message. + + The exception to log + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs a warn message. + + The message to log + + + + Logs a warn message. + + The exception to log + The message to log + + + + Logs a warn message. + + Format string for the message to log + Format arguments for the message to log + + + + Logs a warn message. + + Format string for the message to log + Format arguments for the message to log + + + + Logs a warn message. + + The exception to log + Format string for the message to log + Format arguments for the message to log + + + + Logs a warn message. + + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs a warn message. + + The exception to log + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs an error message. + + The message to log + + + + Logs an error message. + + The exception to log + The message to log + + + + Logs an error message. + + Format string for the message to log + Format arguments for the message to log + + + + Logs an error message. + + Format string for the message to log + Format arguments for the message to log + + + + Logs an error message. + + The exception to log + Format string for the message to log + Format arguments for the message to log + + + + Logs an error message. + + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs an error message. + + The exception to log + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs a fatal message. + + The message to log + + + + Logs a fatal message. + + The exception to log + The message to log + + + + Logs a fatal message. + + Format string for the message to log + Format arguments for the message to log + + + + Logs a fatal message. + + Format string for the message to log + Format arguments for the message to log + + + + Logs a fatal message. + + The exception to log + Format string for the message to log + Format arguments for the message to log + + + + Logs a fatal message. + + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs a fatal message. + + The exception to log + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs a fatal error message. + + The Message + + + + Logs a fatal error message. + + The Message + The Exception + + + + Logs a fatal error message. + + Message format + Array of objects to write using format + + + + Create a new child logger. + The name of the child logger is [current-loggers-name].[passed-in-name] + + The Subname of this logger. + The New ILogger instance. + If the name has an empty element name. + + + + Determines if messages of priority "debug" will be logged. + + True if "debug" messages will be logged. + + + + Determines if messages of priority "info" will be logged. + + True if "info" messages will be logged. + + + + Determines if messages of priority "warn" will be logged. + + True if "warn" messages will be logged. + + + + Determines if messages of priority "error" will be logged. + + True if "error" messages will be logged. + + + + Determines if messages of priority "fatal" will be logged. + + True if "fatal" messages will be logged. + + + + Determines if messages of priority "fatalError" will be logged. + + True if "fatalError" messages will be logged. + + + + Exposes the Global Context of the extended logger. + + + + + Exposes the Thread Context of the extended logger. + + + + + Exposes the Thread Stack of the extended logger. + + + + + Supporting Logger levels. + + + + + Logging will be off + + + + + Fatal logging level + + + + + Error logging level + + + + + Warn logging level + + + + + Info logging level + + + + + Debug logging level + + + + + The Logger sending everything to the standard output streams. + This is mainly for the cases when you have a utility that + does not have a logger to supply. + + + + + The Level Filtered Logger class. This is a base clase which + provides a LogLevel attribute and reroutes all functions into + one Log method. + + + + + Creates a new LevelFilteredLogger. + + + + + Logs a debug message. + + The message to log + + + + Logs a debug message. + + The exception to log + The message to log + + + + Logs a debug message. + + Format string for the message to log + Format arguments for the message to log + + + + Logs a debug message. + + The exception to log + Format string for the message to log + Format arguments for the message to log + + + + Logs a debug message. + + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs a debug message. + + The exception to log + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs a debug message. + + Message format + Array of objects to write using format + + + + Logs an info message. + + The message to log + + + + Logs an info message. + + The exception to log + The message to log + + + + Logs an info message. + + Format string for the message to log + Format arguments for the message to log + + + + Logs an info message. + + The exception to log + Format string for the message to log + Format arguments for the message to log + + + + Logs an info message. + + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs an info message. + + The exception to log + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs an info message. + + Message format + Array of objects to write using format + + + + Logs a warn message. + + The message to log + + + + Logs a warn message. + + The exception to log + The message to log + + + + Logs a warn message. + + Format string for the message to log + Format arguments for the message to log + + + + Logs a warn message. + + The exception to log + Format string for the message to log + Format arguments for the message to log + + + + Logs a warn message. + + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs a warn message. + + The exception to log + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs a warn message. + + Message format + Array of objects to write using format + + + + Logs an error message. + + The message to log + + + + Logs an error message. + + The exception to log + The message to log + + + + Logs an error message. + + Format string for the message to log + Format arguments for the message to log + + + + Logs an error message. + + The exception to log + Format string for the message to log + Format arguments for the message to log + + + + Logs an error message. + + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs an error message. + + The exception to log + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs an error message. + + Message format + Array of objects to write using format + + + + Logs a fatal message. + + The message to log + + + + Logs a fatal message. + + The exception to log + The message to log + + + + Logs a fatal message. + + Format string for the message to log + Format arguments for the message to log + + + + Logs a fatal message. + + The exception to log + Format string for the message to log + Format arguments for the message to log + + + + Logs a fatal message. + + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs a fatal message. + + The exception to log + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs a fatal message. + + Message format + Array of objects to write using format + + + + Logs a fatal error message. + + The Message + + + + Logs a fatal error message. + + The Message + The Exception + + + + Logs a fatal error message. + + Message format + Array of objects to write using format + + + + Implementors output the log content by implementing this method only. + Note that exception can be null + + + + + + + + + The LoggerLevel that this logger + will be using. Defaults to LoggerLevel.Off + + + + + The name that this logger will be using. + Defaults to String.Empty + + + + + Determines if messages of priority "debug" will be logged. + + true if log level flags include the bit + + + + Determines if messages of priority "info" will be logged. + + true if log level flags include the bit + + + + Determines if messages of priority "warn" will be logged. + + true if log level flags include the bit + + + + Determines if messages of priority "error" will be logged. + + true if log level flags include the bit + + + + Determines if messages of priority "fatal" will be logged. + + true if log level flags include the bit + + + + Determines if messages of priority "fatal" will be logged. + + true if log level flags include the bit + + + + Creates a new ConsoleLogger with the Level + set to LoggerLevel.Debug and the Name + set to String.Empty. + + + + + Creates a new ConsoleLogger with the Name + set to String.Empty. + + The logs Level. + + + + Creates a new ConsoleLogger with the Level + set to LoggerLevel.Debug. + + The logs Name. + + + + Creates a new ConsoleLogger. + + The logs Name. + The logs Level. + + + + A Common method to log. + + The level of logging + The name of the logger + The Message + The Exception + + + + Returns a new ConsoleLogger with the name + added after this loggers name, with a dot in between. + + The added hierarchical name. + A new ConsoleLogger. + + + + The Null Logger class. This is useful for implementations where you need + to provide a logger to a utility class, but do not want any output from it. + It also helps when you have a utility that does not have a logger to supply. + + + + + Creates a new NullLogger. + + + + + No-op. + + Ignored + + + + No-op. + + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + Ignored + Ignored + + + + No-op. + + Ignored + + + + No-op. + + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + Ignored + Ignored + + + + No-op. + + Ignored + + + + No-op. + + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + Ignored + Ignored + + + + No-op. + + Ignored + + + + No-op. + + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + Ignored + Ignored + + + + No-op. + + Ignored + + + + No-op. + + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + Ignored + Ignored + + + + No-op. + + Ignored + + + + No-op. + + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + + + + Returns this NullLogger. + + Ignored + This ILogger instance. + + + + No-op. + + false + + + + No-op. + + false + + + + No-op. + + false + + + + No-op. + + false + + + + No-op. + + false + + + + No-op. + + false + + + + Returns empty context properties. + + + + + Returns empty context properties. + + + + + Returns empty context stacks. + + + + + The Stream Logger class. This class can stream log information + to any stream, it is suitable for storing a log file to disk, + or to a MemoryStream for testing your components. + + + This logger is not thread safe. + + + + + Creates a new StreamLogger with default encoding + and buffer size. Initial Level is set to Debug. + + + The name of the log. + + + The stream that will be used for logging, + seeking while the logger is alive + + + + + Creates a new StreamLogger with default buffer size. + Initial Level is set to Debug. + + + The name of the log. + + + The stream that will be used for logging, + seeking while the logger is alive + + + The encoding that will be used for this stream. + + + + + + Creates a new StreamLogger. + Initial Level is set to Debug. + + + The name of the log. + + + The stream that will be used for logging, + seeking while the logger is alive + + + The encoding that will be used for this stream. + + + + The buffer size that will be used for this stream. + + + + + + Creates a new StreamLogger with + Debug as default Level. + + The name of the log. + The StreamWriter the log will write to. + + + + This is an abstract implementation + that deals with methods that can be abstracted away + from underlying implementations. + + + AbstractConfiguration makes easier to implementers + to create a new version of + + + + + is a interface encapsulating a configuration node + used to retrieve configuration values. + + + + + Gets the value of the node and converts it + into specified . + + The + + The Default value returned if the conversion fails. + + The Value converted into the specified type. + + + + Gets the name of the node. + + + The Name of the node. + + + + + Gets the value of the node. + + + The Value of the node. + + + + + Gets an of + elements containing all node children. + + The Collection of child nodes. + + + + Gets an of the configuration attributes. + + + + + Gets the value of the node and converts it + into specified . + + The + + The Default value returned if the convertion fails. + + The Value converted into the specified type. + + + + Gets the name of the . + + + The Name of the . + + + + + Gets the value of . + + + The Value of the . + + + + + Gets all child nodes. + + The of child nodes. + + + + Gets node attributes. + + + All attributes of the node. + + + + + A collection of objects. + + + + + Creates a new instance of ConfigurationCollection. + + + + + Creates a new instance of ConfigurationCollection. + + + + + Summary description for MutableConfiguration. + + + + + Initializes a new instance of the class. + + The name. + + + + Gets the value of . + + + The Value of the . + + + + + General purpose class to represent a standard pair of values. + + Type of the first value + Type of the second value + + + + Constructs a pair with its values + + + + + + + List of utility methods related to dynamic proxy operations + + + + + Determines whether the specified type is a proxy generated by + DynamicProxy (1 or 2). + + The type. + + true if it is a proxy; otherwise, false. + + + + + Pendent + + + + + Initializes a new instance of the class. + + The target. + + + + Determines whether the object contains an element with the specified key. + + The key to locate in the object. + + true if the contains an element with the key; otherwise, false. + + + is null. + + + + Adds an element with the provided key and value to the object. + + The to use as the key of the element to add. + The to use as the value of the element to add. + + is null. + An element with the same key already exists in the object. + The is read-only.-or- The has a fixed size. + + + + Removes all elements from the object. + + The object is read-only. + + + + Returns an object for the object. + + + An object for the object. + + + + + Removes the element with the specified key from the object. + + The key of the element to remove. + + is null. + The object is read-only.-or- The has a fixed size. + + + + Copies the elements of the to an , starting at a particular index. + + The one-dimensional that is the destination of the elements copied from . The must have zero-based indexing. + The zero-based index in at which copying begins. + + is null. + + is less than zero. + + is multidimensional.-or- is equal to or greater than the length of .-or- The number of elements in the source is greater than the available space from to the end of the destination . + The type of the source cannot be cast automatically to the type of the destination . + + + + Returns an enumerator that iterates through a collection. + + + An object that can be used to iterate through the collection. + + + + + Gets or sets the with the specified key. + + + + + + Gets an object containing the keys of the object. + + + An object containing the keys of the object. + + + + Gets an object containing the values in the object. + + + An object containing the values in the object. + + + + Gets a value indicating whether the object is read-only. + + + true if the object is read-only; otherwise, false. + + + + Gets a value indicating whether the object has a fixed size. + + + true if the object has a fixed size; otherwise, false. + + + + Gets the number of elements contained in the . + + + The number of elements contained in the . + + + + Gets an object that can be used to synchronize access to the . + + + An object that can be used to synchronize access to the . + + + + Gets a value indicating whether access to the is synchronized (thread safe). + + + true if access to the is synchronized (thread safe); otherwise, false. + + + + Represents a 'streamable' resource. Can + be a file, a resource in an assembly. + + + + + Returns a reader for the stream + + + It's up to the caller to dispose the reader. + + + + + + Returns a reader for the stream + + + It's up to the caller to dispose the reader. + + + + + + + Returns an instance of + created according to the relativePath + using itself as the root. + + + + + + + + + + Only valid for resources that + can be obtained through relative paths + + + + + + + + + + This returns a new stream instance each time it is called. + It is the responsability of the caller to dispose of this stream + + + + + Depicts the contract for resource factories. + + + + + Used to check whether the resource factory + is able to deal with the given resource + identifier. + + + Implementors should return true + only if the given identifier is supported + by the resource factory + + + + + + + Creates an instance + for the given resource identifier + + + + + + + Creates an instance + for the given resource identifier + + + + + + + + + + + + + Adapts a static string content as an + + + + + Enable access to files on network shares + + + + diff --git a/packages/Castle.Core.2.5.2/lib/releaseNotes.txt b/packages/Castle.Core.2.5.2/lib/releaseNotes.txt new file mode 100644 index 000000000..30485eebb --- /dev/null +++ b/packages/Castle.Core.2.5.2/lib/releaseNotes.txt @@ -0,0 +1,8 @@ +You can find full list of changes in changes.txt, list of breaking changes in breakingchanges.txt (there are no known breaking changes between 2.5.1 and 2.5.2 release). + +Issue tracker: - http://issues.castleproject.org/dashboard +Documentation (work in progress): +Dictionary Adapter - http://stw.castleproject.org/Tools.Castle-DictionaryAdapter.ashx +DynamicProxy - http://stw.castleproject.org/Tools.DynamicProxy.ashx +Discusssion group: - http://groups.google.com/group/castle-project-users +StackOverflow tags: - castle-dynamicproxy, castle-dictionaryadapter, castle \ No newline at end of file diff --git a/packages/PetaPoco.4.0.2/Content/Models/Generated/Database.tt b/packages/PetaPoco.4.0.2/Content/Models/Generated/Database.tt new file mode 100644 index 000000000..464641a44 --- /dev/null +++ b/packages/PetaPoco.4.0.2/Content/Models/Generated/Database.tt @@ -0,0 +1,32 @@ +<#@ include file="PetaPoco.Core.ttinclude" #> +<# + // Settings + ConnectionStringName = ""; // Uses last connection string in config if not specified + Namespace = ""; + RepoName = ""; + GenerateOperations = true; + GeneratePocos = true; + GenerateCommon = true; + ClassPrefix = ""; + ClassSuffix = ""; + + // Read schema + var tables = LoadTables(); + + +/* + // Tweak Schema + tables["tablename"].Ignore = true; // To ignore a table + tables["tablename"].ClassName = "newname"; // To change the class name of a table + tables["tablename"]["columnname"].Ignore = true; // To ignore a column + tables["tablename"]["columnname"].PropertyName="newname"; // To change the property name of a column + tables["tablename"]["columnname"].PropertyType="bool"; // To change the property type of a column +*/ + + // Generate output + if (tables.Count>0) + { +#> +<#@ include file="PetaPoco.Generator.ttinclude" #> +<# } #> + diff --git a/packages/PetaPoco.4.0.2/Content/Models/Generated/PetaPoco.Core.ttinclude b/packages/PetaPoco.4.0.2/Content/Models/Generated/PetaPoco.Core.ttinclude new file mode 100644 index 000000000..e50730354 --- /dev/null +++ b/packages/PetaPoco.4.0.2/Content/Models/Generated/PetaPoco.Core.ttinclude @@ -0,0 +1,1615 @@ +<#@ template language="C#v3.5" hostspecific="True" #> +<#@ assembly name="EnvDTE" #> +<#@ assembly name="System.Core.dll" #> +<#@ assembly name="System.Data" #> +<#@ assembly name="System.Xml" #> +<#@ assembly name="System.Configuration" #> +<#@ assembly name="System.Windows.Forms" #> +<#@ import namespace="System.Collections.Generic" #> +<#@ import namespace="System.Data" #> +<#@ import namespace="System.Data.SqlClient" #> +<#@ import namespace="System.Data.Common" #> +<#@ import namespace="System.Diagnostics" #> +<#@ import namespace="System.Globalization" #> +<#@ import namespace="System.IO" #> +<#@ import namespace="System.Linq" #> +<#@ import namespace="System.Text" #> +<#@ import namespace="System.Text.RegularExpressions" #> +<#@ import namespace="System.Configuration" #> +<#@ import namespace="System.Windows.Forms" #> +<#+ + +/* + This code is part of the PetaPoco project (http://www.toptensoftware.com/petapoco). + It is based on the SubSonic T4 templates but has been considerably re-organized and reduced + + ----------------------------------------------------------------------------------------- + + This template can read minimal schema information from the following databases: + + * SQL Server + * SQL Server CE + * MySQL + * PostGreSQL + * Oracle + + For connection and provider settings the template will look for the web.config or app.config file of the + containing Visual Studio project. It will not however read DbProvider settings from this file. + + In order to work, the appropriate driver must be registered in the system machine.config file. If you're + using Visual Studio 2010 the file you want is here: + + C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config\machine.config + + After making changes to machine.config you will also need to restart Visual Studio. + + Here's a typical set of entries that might help if you're stuck: + + + + + + + + + + + + + + Also, the providers and their dependencies need to be installed to GAC. + + Eg; this is how I installed the drivers for PostgreSQL + + gacutil /i Npgsql.dll + gacutil /i Mono.Security.dll + + ----------------------------------------------------------------------------------------- + + SubSonic - http://subsonicproject.com + + The contents of this file are subject to the New BSD + License (the "License"); you may not use this file + except in compliance with the License. You may obtain a copy of + the License at http://www.opensource.org/licenses/bsd-license.php + + Software distributed under the License is distributed on an + "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or + implied. See the License for the specific language governing + rights and limitations under the License. +*/ + +string ConnectionStringName = ""; +string Namespace = ""; +string RepoName = ""; +string ClassPrefix = ""; +string ClassSuffix = ""; +string SchemaName = null; +bool IncludeViews = false; +bool GenerateOperations = false; +bool GenerateCommon = true; +bool GeneratePocos = true; + + + +public class Table +{ + public List Columns; + public string Name; + public string Schema; + public bool IsView; + public string CleanName; + public string ClassName; + public string SequenceName; + public bool Ignore; + + public Column PK + { + get + { + return this.Columns.SingleOrDefault(x=>x.IsPK); + } + } + + public Column GetColumn(string columnName) + { + return Columns.Single(x=>string.Compare(x.Name, columnName, true)==0); + } + + public Column this[string columnName] + { + get + { + return GetColumn(columnName); + } + } + +} + +public class Column +{ + public string Name; + public string PropertyName; + public string PropertyType; + public bool IsPK; + public bool IsNullable; + public bool IsAutoIncrement; + public bool Ignore; +} + +public class Tables : List +{ + public Tables() + { + } + + public Table GetTable(string tableName) + { + return this.Single(x=>string.Compare(x.Name, tableName, true)==0); + } + + public Table this[string tableName] + { + get + { + return GetTable(tableName); + } + } + +} + + +static Regex rxCleanUp = new Regex(@"[^\w\d_]", RegexOptions.Compiled); + +static Func CleanUp = (str) => +{ + str = rxCleanUp.Replace(str, "_"); + if (char.IsDigit(str[0])) str = "_" + str; + + return str; +}; + +string CheckNullable(Column col) +{ + string result=""; + if(col.IsNullable && + col.PropertyType !="byte[]" && + col.PropertyType !="string" && + col.PropertyType !="Microsoft.SqlServer.Types.SqlGeography" && + col.PropertyType !="Microsoft.SqlServer.Types.SqlGeometry" + ) + result="?"; + return result; +} + +string GetConnectionString(ref string connectionStringName, out string providerName) +{ + var _CurrentProject = GetCurrentProject(); + + providerName=null; + + string result=""; + ExeConfigurationFileMap configFile = new ExeConfigurationFileMap(); + configFile.ExeConfigFilename = GetConfigPath(); + + if (string.IsNullOrEmpty(configFile.ExeConfigFilename)) + throw new ArgumentNullException("The project does not contain App.config or Web.config file."); + + + var config = System.Configuration.ConfigurationManager.OpenMappedExeConfiguration(configFile, ConfigurationUserLevel.None); + var connSection=config.ConnectionStrings; + + //if the connectionString is empty - which is the defauls + //look for count-1 - this is the last connection string + //and takes into account AppServices and LocalSqlServer + if(string.IsNullOrEmpty(connectionStringName)) + { + if(connSection.ConnectionStrings.Count>1) + { + connectionStringName = connSection.ConnectionStrings[connSection.ConnectionStrings.Count-1].Name; + result=connSection.ConnectionStrings[connSection.ConnectionStrings.Count-1].ConnectionString; + providerName=connSection.ConnectionStrings[connSection.ConnectionStrings.Count-1].ProviderName; + } + } + else + { + try + { + result=connSection.ConnectionStrings[connectionStringName].ConnectionString; + providerName=connSection.ConnectionStrings[connectionStringName].ProviderName; + } + catch + { + result="There is no connection string name called '"+connectionStringName+"'"; + } + } + +// if (String.IsNullOrEmpty(providerName)) +// providerName="System.Data.SqlClient"; + + return result; +} + +string _connectionString=""; +string _providerName=""; + +void InitConnectionString() +{ + if(String.IsNullOrEmpty(_connectionString)) + { + _connectionString=GetConnectionString(ref ConnectionStringName, out _providerName); + + if(_connectionString.Contains("|DataDirectory|")) + { + //have to replace it + string dataFilePath=GetDataDirectory(); + _connectionString=_connectionString.Replace("|DataDirectory|",dataFilePath); + } + } +} + +public string ConnectionString +{ + get + { + InitConnectionString(); + return _connectionString; + } +} + +public string ProviderName +{ + get + { + InitConnectionString(); + return _providerName; + } +} + +public EnvDTE.Project GetCurrentProject() { + + IServiceProvider _ServiceProvider = (IServiceProvider)Host; + if (_ServiceProvider == null) + throw new Exception("Host property returned unexpected value (null)"); + + EnvDTE.DTE dte = (EnvDTE.DTE)_ServiceProvider.GetService(typeof(EnvDTE.DTE)); + if (dte == null) + throw new Exception("Unable to retrieve EnvDTE.DTE"); + + Array activeSolutionProjects = (Array)dte.ActiveSolutionProjects; + if (activeSolutionProjects == null) + throw new Exception("DTE.ActiveSolutionProjects returned null"); + + EnvDTE.Project dteProject = (EnvDTE.Project)activeSolutionProjects.GetValue(0); + if (dteProject == null) + throw new Exception("DTE.ActiveSolutionProjects[0] returned null"); + + return dteProject; + +} + +private string GetProjectPath() +{ + EnvDTE.Project project = GetCurrentProject(); + System.IO.FileInfo info = new System.IO.FileInfo(project.FullName); + return info.Directory.FullName; +} + +private string GetConfigPath() +{ + EnvDTE.Project project = GetCurrentProject(); + foreach (EnvDTE.ProjectItem item in project.ProjectItems) + { + // if it is the app.config file, then open it up + if (item.Name.Equals("App.config",StringComparison.InvariantCultureIgnoreCase) || item.Name.Equals("Web.config",StringComparison.InvariantCultureIgnoreCase)) + return GetProjectPath() + "\\" + item.Name; + } + return String.Empty; +} + +public string GetDataDirectory() +{ + EnvDTE.Project project=GetCurrentProject(); + return System.IO.Path.GetDirectoryName(project.FileName)+"\\App_Data\\"; +} + +static string zap_password(string connectionString) +{ + var rx = new Regex("password=.*;", RegexOptions.Singleline | RegexOptions.Multiline | RegexOptions.IgnoreCase); + return rx.Replace(connectionString, "password=**zapped**;"); +} + + + +Tables LoadTables() +{ + InitConnectionString(); + + WriteLine("// This file was automatically generated by the PetaPoco T4 Template"); + WriteLine("// Do not make changes directly to this file - edit the template instead"); + WriteLine("// "); + WriteLine("// The following connection settings were used to generate this file"); + WriteLine("// "); + WriteLine("// Connection String Name: `{0}`", ConnectionStringName); + WriteLine("// Provider: `{0}`", ProviderName); + WriteLine("// Connection String: `{0}`", zap_password(ConnectionString)); + WriteLine("// Schema: `{0}`", SchemaName); + WriteLine("// Include Views: `{0}`", IncludeViews); + WriteLine(""); + + DbProviderFactory _factory; + try + { + _factory = DbProviderFactories.GetFactory(ProviderName); + } + catch (Exception x) + { + var error=x.Message.Replace("\r\n", "\n").Replace("\n", " "); + Warning(string.Format("Failed to load provider `{0}` - {1}", ProviderName, error)); + WriteLine(""); + WriteLine("// -----------------------------------------------------------------------------------------"); + WriteLine("// Failed to load provider `{0}` - {1}", ProviderName, error); + WriteLine("// -----------------------------------------------------------------------------------------"); + WriteLine(""); + return new Tables(); + } + + try + { + Tables result; + using(var conn=_factory.CreateConnection()) + { + conn.ConnectionString=ConnectionString; + conn.Open(); + + SchemaReader reader=null; + + if (_factory.GetType().Name == "MySqlClientFactory") + { + // MySql + reader=new MySqlSchemaReader(); + } + else if (_factory.GetType().Name == "SqlCeProviderFactory") + { + // SQL CE + reader=new SqlServerCeSchemaReader(); + } + else if (_factory.GetType().Name == "NpgsqlFactory") + { + // PostgreSQL + reader=new PostGreSqlSchemaReader(); + } + else if (_factory.GetType().Name == "OracleClientFactory") + { + // Oracle + reader=new OracleSchemaReader(); + } + else + { + // Assume SQL Server + reader=new SqlServerSchemaReader(); + } + + reader.outer=this; + result=reader.ReadSchema(conn, _factory); + + // Remove unrequired tables/views + for (int i=result.Count-1; i>=0; i--) + { + if (SchemaName!=null && string.Compare(result[i].Schema, SchemaName, true)!=0) + { + result.RemoveAt(i); + continue; + } + if (!IncludeViews && result[i].IsView) + { + result.RemoveAt(i); + continue; + } + } + + conn.Close(); + + + var rxClean = new Regex("^(Equals|GetHashCode|GetType|ToString|repo|Save|IsNew|Insert|Update|Delete|Exists|SingleOrDefault|Single|First|FirstOrDefault|Fetch|Page|Query)$"); + foreach (var t in result) + { + t.ClassName = ClassPrefix + t.ClassName + ClassSuffix; + foreach (var c in t.Columns) + { + c.PropertyName = rxClean.Replace(c.PropertyName, "_$1"); + + // Make sure property name doesn't clash with class name + if (c.PropertyName == t.ClassName) + c.PropertyName = "_" + c.PropertyName; + } + } + + return result; + } + } + catch (Exception x) + { + var error=x.Message.Replace("\r\n", "\n").Replace("\n", " "); + Warning(string.Format("Failed to read database schema - {0}", error)); + WriteLine(""); + WriteLine("// -----------------------------------------------------------------------------------------"); + WriteLine("// Failed to read database schema - {0}", error); + WriteLine("// -----------------------------------------------------------------------------------------"); + WriteLine(""); + return new Tables(); + } + + +} + +abstract class SchemaReader +{ + public abstract Tables ReadSchema(DbConnection connection, DbProviderFactory factory); + public GeneratedTextTransformation outer; + public void WriteLine(string o) + { + outer.WriteLine(o); + } + +} + +class SqlServerSchemaReader : SchemaReader +{ + // SchemaReader.ReadSchema + public override Tables ReadSchema(DbConnection connection, DbProviderFactory factory) + { + var result=new Tables(); + + _connection=connection; + _factory=factory; + + var cmd=_factory.CreateCommand(); + cmd.Connection=connection; + cmd.CommandText=TABLE_SQL; + + //pull the tables in a reader + using(cmd) + { + + using (var rdr=cmd.ExecuteReader()) + { + while(rdr.Read()) + { + Table tbl=new Table(); + tbl.Name=rdr["TABLE_NAME"].ToString(); + tbl.Schema=rdr["TABLE_SCHEMA"].ToString(); + tbl.IsView=string.Compare(rdr["TABLE_TYPE"].ToString(), "View", true)==0; + tbl.CleanName=CleanUp(tbl.Name); + tbl.ClassName=Inflector.MakeSingular(tbl.CleanName); + + result.Add(tbl); + } + } + } + + foreach (var tbl in result) + { + tbl.Columns=LoadColumns(tbl); + + // Mark the primary key + string PrimaryKey=GetPK(tbl.Name); + var pkColumn=tbl.Columns.SingleOrDefault(x=>x.Name.ToLower().Trim()==PrimaryKey.ToLower().Trim()); + if(pkColumn!=null) + { + pkColumn.IsPK=true; + } + } + + + return result; + } + + DbConnection _connection; + DbProviderFactory _factory; + + + List LoadColumns(Table tbl) + { + + using (var cmd=_factory.CreateCommand()) + { + cmd.Connection=_connection; + cmd.CommandText=COLUMN_SQL; + + var p = cmd.CreateParameter(); + p.ParameterName = "@tableName"; + p.Value=tbl.Name; + cmd.Parameters.Add(p); + + p = cmd.CreateParameter(); + p.ParameterName = "@schemaName"; + p.Value=tbl.Schema; + cmd.Parameters.Add(p); + + var result=new List(); + using (IDataReader rdr=cmd.ExecuteReader()) + { + while(rdr.Read()) + { + Column col=new Column(); + col.Name=rdr["ColumnName"].ToString(); + col.PropertyName=CleanUp(col.Name); + col.PropertyType=GetPropertyType(rdr["DataType"].ToString()); + col.IsNullable=rdr["IsNullable"].ToString()=="YES"; + col.IsAutoIncrement=((int)rdr["IsIdentity"])==1; + result.Add(col); + } + } + + return result; + } + } + + string GetPK(string table){ + + string sql=@"SELECT c.name AS ColumnName + FROM sys.indexes AS i + INNER JOIN sys.index_columns AS ic ON i.object_id = ic.object_id AND i.index_id = ic.index_id + INNER JOIN sys.objects AS o ON i.object_id = o.object_id + LEFT OUTER JOIN sys.columns AS c ON ic.object_id = c.object_id AND c.column_id = ic.column_id + WHERE (i.type = 1) AND (o.name = @tableName)"; + + using (var cmd=_factory.CreateCommand()) + { + cmd.Connection=_connection; + cmd.CommandText=sql; + + var p = cmd.CreateParameter(); + p.ParameterName = "@tableName"; + p.Value=table; + cmd.Parameters.Add(p); + + var result=cmd.ExecuteScalar(); + + if(result!=null) + return result.ToString(); + } + + return ""; + } + + string GetPropertyType(string sqlType) + { + string sysType="string"; + switch (sqlType) + { + case "bigint": + sysType = "long"; + break; + case "smallint": + sysType= "short"; + break; + case "int": + sysType= "int"; + break; + case "uniqueidentifier": + sysType= "Guid"; + break; + case "smalldatetime": + case "datetime": + case "date": + case "time": + sysType= "DateTime"; + break; + case "float": + sysType="double"; + break; + case "real": + sysType="float"; + break; + case "numeric": + case "smallmoney": + case "decimal": + case "money": + sysType= "decimal"; + break; + case "tinyint": + sysType = "byte"; + break; + case "bit": + sysType= "bool"; + break; + case "image": + case "binary": + case "varbinary": + case "timestamp": + sysType= "byte[]"; + break; + case "geography": + sysType = "Microsoft.SqlServer.Types.SqlGeography"; + break; + case "geometry": + sysType = "Microsoft.SqlServer.Types.SqlGeometry"; + break; + } + return sysType; + } + + + + const string TABLE_SQL=@"SELECT * + FROM INFORMATION_SCHEMA.TABLES + WHERE TABLE_TYPE='BASE TABLE' OR TABLE_TYPE='VIEW'"; + + const string COLUMN_SQL=@"SELECT + TABLE_CATALOG AS [Database], + TABLE_SCHEMA AS Owner, + TABLE_NAME AS TableName, + COLUMN_NAME AS ColumnName, + ORDINAL_POSITION AS OrdinalPosition, + COLUMN_DEFAULT AS DefaultSetting, + IS_NULLABLE AS IsNullable, DATA_TYPE AS DataType, + CHARACTER_MAXIMUM_LENGTH AS MaxLength, + DATETIME_PRECISION AS DatePrecision, + COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsIdentity') AS IsIdentity, + COLUMNPROPERTY(object_id('[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'), COLUMN_NAME, 'IsComputed') as IsComputed + FROM INFORMATION_SCHEMA.COLUMNS + WHERE TABLE_NAME=@tableName AND TABLE_SCHEMA=@schemaName + ORDER BY OrdinalPosition ASC"; + +} + +class SqlServerCeSchemaReader : SchemaReader +{ + // SchemaReader.ReadSchema + public override Tables ReadSchema(DbConnection connection, DbProviderFactory factory) + { + var result=new Tables(); + + _connection=connection; + _factory=factory; + + var cmd=_factory.CreateCommand(); + cmd.Connection=connection; + cmd.CommandText=TABLE_SQL; + + //pull the tables in a reader + using(cmd) + { + using (var rdr=cmd.ExecuteReader()) + { + while(rdr.Read()) + { + Table tbl=new Table(); + tbl.Name=rdr["TABLE_NAME"].ToString(); + tbl.CleanName=CleanUp(tbl.Name); + tbl.ClassName=Inflector.MakeSingular(tbl.CleanName); + tbl.Schema=null; + tbl.IsView=false; + result.Add(tbl); + } + } + } + + foreach (var tbl in result) + { + tbl.Columns=LoadColumns(tbl); + + // Mark the primary key + string PrimaryKey=GetPK(tbl.Name); + var pkColumn=tbl.Columns.SingleOrDefault(x=>x.Name.ToLower().Trim()==PrimaryKey.ToLower().Trim()); + if(pkColumn!=null) + pkColumn.IsPK=true; + } + + + return result; + } + + DbConnection _connection; + DbProviderFactory _factory; + + + List LoadColumns(Table tbl) + { + + using (var cmd=_factory.CreateCommand()) + { + cmd.Connection=_connection; + cmd.CommandText=COLUMN_SQL; + + var p = cmd.CreateParameter(); + p.ParameterName = "@tableName"; + p.Value=tbl.Name; + cmd.Parameters.Add(p); + + var result=new List(); + using (IDataReader rdr=cmd.ExecuteReader()) + { + while(rdr.Read()) + { + Column col=new Column(); + col.Name=rdr["ColumnName"].ToString(); + col.PropertyName=CleanUp(col.Name); + col.PropertyType=GetPropertyType(rdr["DataType"].ToString()); + col.IsNullable=rdr["IsNullable"].ToString()=="YES"; + col.IsAutoIncrement=rdr["AUTOINC_INCREMENT"]!=DBNull.Value; + result.Add(col); + } + } + + return result; + } + } + + string GetPK(string table){ + + string sql=@"SELECT KCU.COLUMN_NAME + FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE KCU + JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS TC + ON KCU.CONSTRAINT_NAME=TC.CONSTRAINT_NAME + WHERE TC.CONSTRAINT_TYPE='PRIMARY KEY' + AND KCU.TABLE_NAME=@tableName"; + + using (var cmd=_factory.CreateCommand()) + { + cmd.Connection=_connection; + cmd.CommandText=sql; + + var p = cmd.CreateParameter(); + p.ParameterName = "@tableName"; + p.Value=table; + cmd.Parameters.Add(p); + + var result=cmd.ExecuteScalar(); + + if(result!=null) + return result.ToString(); + } + + return ""; + } + + string GetPropertyType(string sqlType) + { + string sysType="string"; + switch (sqlType) + { + case "bigint": + sysType = "long"; + break; + case "smallint": + sysType= "short"; + break; + case "int": + sysType= "int"; + break; + case "uniqueidentifier": + sysType= "Guid"; + break; + case "smalldatetime": + case "datetime": + case "date": + case "time": + sysType= "DateTime"; + break; + case "float": + sysType="double"; + break; + case "real": + sysType="float"; + break; + case "numeric": + case "smallmoney": + case "decimal": + case "money": + sysType= "decimal"; + break; + case "tinyint": + sysType = "byte"; + break; + case "bit": + sysType= "bool"; + break; + case "image": + case "binary": + case "varbinary": + case "timestamp": + sysType= "byte[]"; + break; + } + return sysType; + } + + + + const string TABLE_SQL=@"SELECT * + FROM INFORMATION_SCHEMA.TABLES + WHERE TABLE_TYPE='TABLE'"; + + const string COLUMN_SQL=@"SELECT + TABLE_CATALOG AS [Database], + TABLE_SCHEMA AS Owner, + TABLE_NAME AS TableName, + COLUMN_NAME AS ColumnName, + ORDINAL_POSITION AS OrdinalPosition, + COLUMN_DEFAULT AS DefaultSetting, + IS_NULLABLE AS IsNullable, DATA_TYPE AS DataType, + AUTOINC_INCREMENT, + CHARACTER_MAXIMUM_LENGTH AS MaxLength, + DATETIME_PRECISION AS DatePrecision + FROM INFORMATION_SCHEMA.COLUMNS + WHERE TABLE_NAME=@tableName + ORDER BY OrdinalPosition ASC"; + +} + + +class PostGreSqlSchemaReader : SchemaReader +{ + // SchemaReader.ReadSchema + public override Tables ReadSchema(DbConnection connection, DbProviderFactory factory) + { + var result=new Tables(); + + _connection=connection; + _factory=factory; + + var cmd=_factory.CreateCommand(); + cmd.Connection=connection; + cmd.CommandText=TABLE_SQL; + + //pull the tables in a reader + using(cmd) + { + using (var rdr=cmd.ExecuteReader()) + { + while(rdr.Read()) + { + Table tbl=new Table(); + tbl.Name=rdr["table_name"].ToString(); + tbl.Schema=rdr["table_schema"].ToString(); + tbl.IsView=string.Compare(rdr["TABLE_TYPE"].ToString(), "View", true)==0; + tbl.CleanName=CleanUp(tbl.Name); + tbl.ClassName=Inflector.MakeSingular(tbl.CleanName); + result.Add(tbl); + } + } + } + + foreach (var tbl in result) + { + tbl.Columns=LoadColumns(tbl); + + // Mark the primary key + string PrimaryKey=GetPK(tbl.Name); + var pkColumn=tbl.Columns.SingleOrDefault(x=>x.Name.ToLower().Trim()==PrimaryKey.ToLower().Trim()); + if(pkColumn!=null) + pkColumn.IsPK=true; + } + + + return result; + } + + DbConnection _connection; + DbProviderFactory _factory; + + + List LoadColumns(Table tbl) + { + + using (var cmd=_factory.CreateCommand()) + { + cmd.Connection=_connection; + cmd.CommandText=COLUMN_SQL; + + var p = cmd.CreateParameter(); + p.ParameterName = "@tableName"; + p.Value=tbl.Name; + cmd.Parameters.Add(p); + + var result=new List(); + using (IDataReader rdr=cmd.ExecuteReader()) + { + while(rdr.Read()) + { + Column col=new Column(); + col.Name=rdr["column_name"].ToString(); + col.PropertyName=CleanUp(col.Name); + col.PropertyType=GetPropertyType(rdr["udt_name"].ToString()); + col.IsNullable=rdr["is_nullable"].ToString()=="YES"; + col.IsAutoIncrement = rdr["column_default"].ToString().StartsWith("nextval("); + result.Add(col); + } + } + + return result; + } + } + + string GetPK(string table){ + + string sql=@"SELECT kcu.column_name + FROM information_schema.key_column_usage kcu + JOIN information_schema.table_constraints tc + ON kcu.constraint_name=tc.constraint_name + WHERE lower(tc.constraint_type)='primary key' + AND kcu.table_name=@tablename"; + + using (var cmd=_factory.CreateCommand()) + { + cmd.Connection=_connection; + cmd.CommandText=sql; + + var p = cmd.CreateParameter(); + p.ParameterName = "@tableName"; + p.Value=table; + cmd.Parameters.Add(p); + + var result=cmd.ExecuteScalar(); + + if(result!=null) + return result.ToString(); + } + + return ""; + } + + string GetPropertyType(string sqlType) + { + switch (sqlType) + { + case "int8": + case "serial8": + return "long"; + + case "bool": + return "bool"; + + case "bytea ": + return "byte[]"; + + case "float8": + return "double"; + + case "int4": + case "serial4": + return "int"; + + case "money ": + return "decimal"; + + case "numeric": + return "decimal"; + + case "float4": + return "float"; + + case "int2": + return "short"; + + case "time": + case "timetz": + case "timestamp": + case "timestamptz": + case "date": + return "DateTime"; + + default: + return "string"; + } + } + + + + const string TABLE_SQL=@" + SELECT table_name + FROM information_schema.tables + WHERE (table_type='BASE TABLE' OR table_type='VIEW') + AND table_schema NOT IN ('pg_catalog', 'information_schema'); + "; + + const string COLUMN_SQL=@" + SELECT column_name, is_nullable, udt_name, column_default + FROM information_schema.columns + WHERE table_name=@tableName; + "; + +} + +class MySqlSchemaReader : SchemaReader +{ + // SchemaReader.ReadSchema + public override Tables ReadSchema(DbConnection connection, DbProviderFactory factory) + { + var result=new Tables(); + + + var cmd=factory.CreateCommand(); + cmd.Connection=connection; + cmd.CommandText=TABLE_SQL; + + //pull the tables in a reader + using(cmd) + { + using (var rdr=cmd.ExecuteReader()) + { + while(rdr.Read()) + { + Table tbl=new Table(); + tbl.Name=rdr["TABLE_NAME"].ToString(); + tbl.Schema=rdr["TABLE_SCHEMA"].ToString(); + tbl.IsView=string.Compare(rdr["TABLE_TYPE"].ToString(), "View", true)==0; + tbl.CleanName=CleanUp(tbl.Name); + tbl.ClassName=Inflector.MakeSingular(tbl.CleanName); + result.Add(tbl); + } + } + } + + + //this will return everything for the DB + var schema = connection.GetSchema("COLUMNS"); + + //loop again - but this time pull by table name + foreach (var item in result) + { + item.Columns=new List(); + + //pull the columns from the schema + var columns = schema.Select("TABLE_NAME='" + item.Name + "'"); + foreach (var row in columns) + { + Column col=new Column(); + col.Name=row["COLUMN_NAME"].ToString(); + col.PropertyName=CleanUp(col.Name); + col.PropertyType=GetPropertyType(row); + col.IsNullable=row["IS_NULLABLE"].ToString()=="YES"; + col.IsPK=row["COLUMN_KEY"].ToString()=="PRI"; + col.IsAutoIncrement=row["extra"].ToString().ToLower().IndexOf("auto_increment")>=0; + + item.Columns.Add(col); + } + } + + return result; + + } + + static string GetPropertyType(DataRow row) + { + bool bUnsigned = row["COLUMN_TYPE"].ToString().IndexOf("unsigned")>=0; + string propType="string"; + switch (row["DATA_TYPE"].ToString()) + { + case "bigint": + propType= bUnsigned ? "ulong" : "long"; + break; + case "int": + propType= bUnsigned ? "uint" : "int"; + break; + case "smallint": + propType= bUnsigned ? "ushort" : "short"; + break; + case "guid": + propType= "Guid"; + break; + case "smalldatetime": + case "date": + case "datetime": + case "timestamp": + propType= "DateTime"; + break; + case "float": + propType="float"; + break; + case "double": + propType="double"; + break; + case "numeric": + case "smallmoney": + case "decimal": + case "money": + propType= "decimal"; + break; + case "bit": + case "bool": + case "boolean": + case "tinyint": + propType= "bool"; + break; + case "image": + case "binary": + case "blob": + case "mediumblob": + case "longblob": + case "varbinary": + propType= "byte[]"; + break; + + } + return propType; + } + + const string TABLE_SQL=@" + SELECT * + FROM information_schema.tables + WHERE (table_type='BASE TABLE' OR table_type='VIEW') + "; + +} + +class OracleSchemaReader : SchemaReader +{ + // SchemaReader.ReadSchema + public override Tables ReadSchema(DbConnection connection, DbProviderFactory factory) + { + var result=new Tables(); + + _connection=connection; + _factory=factory; + + var cmd=_factory.CreateCommand(); + cmd.Connection=connection; + cmd.CommandText=TABLE_SQL; + cmd.GetType().GetProperty("BindByName").SetValue(cmd, true, null); + + //pull the tables in a reader + using(cmd) + { + + using (var rdr=cmd.ExecuteReader()) + { + while(rdr.Read()) + { + Table tbl=new Table(); + tbl.Name=rdr["TABLE_NAME"].ToString(); + tbl.Schema = rdr["TABLE_SCHEMA"].ToString(); + tbl.IsView=string.Compare(rdr["TABLE_TYPE"].ToString(), "View", true)==0; + tbl.CleanName=CleanUp(tbl.Name); + tbl.ClassName=Inflector.MakeSingular(tbl.CleanName); + result.Add(tbl); + } + } + } + + foreach (var tbl in result) + { + tbl.Columns=LoadColumns(tbl); + + // Mark the primary key + string PrimaryKey=GetPK(tbl.Name); + var pkColumn=tbl.Columns.SingleOrDefault(x=>x.Name.ToLower().Trim()==PrimaryKey.ToLower().Trim()); + if(pkColumn!=null) + pkColumn.IsPK=true; + } + + + return result; + } + + DbConnection _connection; + DbProviderFactory _factory; + + + List LoadColumns(Table tbl) + { + + using (var cmd=_factory.CreateCommand()) + { + cmd.Connection=_connection; + cmd.CommandText=COLUMN_SQL; + cmd.GetType().GetProperty("BindByName").SetValue(cmd, true, null); + + var p = cmd.CreateParameter(); + p.ParameterName = ":tableName"; + p.Value=tbl.Name; + cmd.Parameters.Add(p); + + var result=new List(); + using (IDataReader rdr=cmd.ExecuteReader()) + { + while(rdr.Read()) + { + Column col=new Column(); + col.Name=rdr["ColumnName"].ToString(); + col.PropertyName=CleanUp(col.Name); + col.PropertyType=GetPropertyType(rdr["DataType"].ToString(), (rdr["DataType"] == DBNull.Value ? null : rdr["DataType"].ToString())); + col.IsNullable=rdr["IsNullable"].ToString()=="YES"; + col.IsAutoIncrement=true; + result.Add(col); + } + } + + return result; + } + } + + string GetPK(string table){ + + string sql=@"select column_name from USER_CONSTRAINTS uc + inner join USER_CONS_COLUMNS ucc on uc.constraint_name = ucc.constraint_name +where uc.constraint_type = 'P' +and uc.table_name = upper(:tableName) +and ucc.position = 1"; + + using (var cmd=_factory.CreateCommand()) + { + cmd.Connection=_connection; + cmd.CommandText=sql; + cmd.GetType().GetProperty("BindByName").SetValue(cmd, true, null); + + var p = cmd.CreateParameter(); + p.ParameterName = ":tableName"; + p.Value=table; + cmd.Parameters.Add(p); + + var result=cmd.ExecuteScalar(); + + if(result!=null) + return result.ToString(); + } + + return ""; + } + + string GetPropertyType(string sqlType, string dataScale) + { + string sysType="string"; + switch (sqlType.ToLower()) + { + case "bigint": + sysType = "long"; + break; + case "smallint": + sysType= "short"; + break; + case "int": + sysType= "int"; + break; + case "uniqueidentifier": + sysType= "Guid"; + break; + case "smalldatetime": + case "datetime": + case "date": + sysType= "DateTime"; + break; + case "float": + sysType="double"; + break; + case "real": + case "numeric": + case "smallmoney": + case "decimal": + case "money": + case "number": + sysType= "decimal"; + break; + case "tinyint": + sysType = "byte"; + break; + case "bit": + sysType= "bool"; + break; + case "image": + case "binary": + case "varbinary": + case "timestamp": + sysType= "byte[]"; + break; + } + + if (sqlType == "number" && dataScale == "0") + return "long"; + + return sysType; + } + + + + const string TABLE_SQL=@"select TABLE_NAME from USER_TABLES"; + + const string COLUMN_SQL=@"select table_name TableName, + column_name ColumnName, + data_type DataType, + data_scale DataScale, + nullable IsNullable + from USER_TAB_COLS utc + where table_name = upper(:tableName) + order by column_id"; + +} + + + + +/// +/// Summary for the Inflector class +/// +public static class Inflector { + private static readonly List _plurals = new List(); + private static readonly List _singulars = new List(); + private static readonly List _uncountables = new List(); + + /// + /// Initializes the class. + /// + static Inflector() { + AddPluralRule("$", "s"); + AddPluralRule("s$", "s"); + AddPluralRule("(ax|test)is$", "$1es"); + AddPluralRule("(octop|vir)us$", "$1i"); + AddPluralRule("(alias|status)$", "$1es"); + AddPluralRule("(bu)s$", "$1ses"); + AddPluralRule("(buffal|tomat)o$", "$1oes"); + AddPluralRule("([ti])um$", "$1a"); + AddPluralRule("sis$", "ses"); + AddPluralRule("(?:([^f])fe|([lr])f)$", "$1$2ves"); + AddPluralRule("(hive)$", "$1s"); + AddPluralRule("([^aeiouy]|qu)y$", "$1ies"); + AddPluralRule("(x|ch|ss|sh)$", "$1es"); + AddPluralRule("(matr|vert|ind)ix|ex$", "$1ices"); + AddPluralRule("([m|l])ouse$", "$1ice"); + AddPluralRule("^(ox)$", "$1en"); + AddPluralRule("(quiz)$", "$1zes"); + + AddSingularRule("s$", String.Empty); + AddSingularRule("ss$", "ss"); + AddSingularRule("(n)ews$", "$1ews"); + AddSingularRule("([ti])a$", "$1um"); + AddSingularRule("((a)naly|(b)a|(d)iagno|(p)arenthe|(p)rogno|(s)ynop|(t)he)ses$", "$1$2sis"); + AddSingularRule("(^analy)ses$", "$1sis"); + AddSingularRule("([^f])ves$", "$1fe"); + AddSingularRule("(hive)s$", "$1"); + AddSingularRule("(tive)s$", "$1"); + AddSingularRule("([lr])ves$", "$1f"); + AddSingularRule("([^aeiouy]|qu)ies$", "$1y"); + AddSingularRule("(s)eries$", "$1eries"); + AddSingularRule("(m)ovies$", "$1ovie"); + AddSingularRule("(x|ch|ss|sh)es$", "$1"); + AddSingularRule("([m|l])ice$", "$1ouse"); + AddSingularRule("(bus)es$", "$1"); + AddSingularRule("(o)es$", "$1"); + AddSingularRule("(shoe)s$", "$1"); + AddSingularRule("(cris|ax|test)es$", "$1is"); + AddSingularRule("(octop|vir)i$", "$1us"); + AddSingularRule("(alias|status)$", "$1"); + AddSingularRule("(alias|status)es$", "$1"); + AddSingularRule("^(ox)en", "$1"); + AddSingularRule("(vert|ind)ices$", "$1ex"); + AddSingularRule("(matr)ices$", "$1ix"); + AddSingularRule("(quiz)zes$", "$1"); + + AddIrregularRule("person", "people"); + AddIrregularRule("man", "men"); + AddIrregularRule("child", "children"); + AddIrregularRule("sex", "sexes"); + AddIrregularRule("tax", "taxes"); + AddIrregularRule("move", "moves"); + + AddUnknownCountRule("equipment"); + AddUnknownCountRule("information"); + AddUnknownCountRule("rice"); + AddUnknownCountRule("money"); + AddUnknownCountRule("species"); + AddUnknownCountRule("series"); + AddUnknownCountRule("fish"); + AddUnknownCountRule("sheep"); + } + + /// + /// Adds the irregular rule. + /// + /// The singular. + /// The plural. + private static void AddIrregularRule(string singular, string plural) { + AddPluralRule(String.Concat("(", singular[0], ")", singular.Substring(1), "$"), String.Concat("$1", plural.Substring(1))); + AddSingularRule(String.Concat("(", plural[0], ")", plural.Substring(1), "$"), String.Concat("$1", singular.Substring(1))); + } + + /// + /// Adds the unknown count rule. + /// + /// The word. + private static void AddUnknownCountRule(string word) { + _uncountables.Add(word.ToLower()); + } + + /// + /// Adds the plural rule. + /// + /// The rule. + /// The replacement. + private static void AddPluralRule(string rule, string replacement) { + _plurals.Add(new InflectorRule(rule, replacement)); + } + + /// + /// Adds the singular rule. + /// + /// The rule. + /// The replacement. + private static void AddSingularRule(string rule, string replacement) { + _singulars.Add(new InflectorRule(rule, replacement)); + } + + /// + /// Makes the plural. + /// + /// The word. + /// + public static string MakePlural(string word) { + return ApplyRules(_plurals, word); + } + + /// + /// Makes the singular. + /// + /// The word. + /// + public static string MakeSingular(string word) { + return ApplyRules(_singulars, word); + } + + /// + /// Applies the rules. + /// + /// The rules. + /// The word. + /// + private static string ApplyRules(IList rules, string word) { + string result = word; + if (!_uncountables.Contains(word.ToLower())) { + for (int i = rules.Count - 1; i >= 0; i--) { + string currentPass = rules[i].Apply(word); + if (currentPass != null) { + result = currentPass; + break; + } + } + } + return result; + } + + /// + /// Converts the string to title case. + /// + /// The word. + /// + public static string ToTitleCase(string word) { + return Regex.Replace(ToHumanCase(AddUnderscores(word)), @"\b([a-z])", + delegate(Match match) { return match.Captures[0].Value.ToUpper(); }); + } + + /// + /// Converts the string to human case. + /// + /// The lowercase and underscored word. + /// + public static string ToHumanCase(string lowercaseAndUnderscoredWord) { + return MakeInitialCaps(Regex.Replace(lowercaseAndUnderscoredWord, @"_", " ")); + } + + + /// + /// Adds the underscores. + /// + /// The pascal cased word. + /// + public static string AddUnderscores(string pascalCasedWord) { + return Regex.Replace(Regex.Replace(Regex.Replace(pascalCasedWord, @"([A-Z]+)([A-Z][a-z])", "$1_$2"), @"([a-z\d])([A-Z])", "$1_$2"), @"[-\s]", "_").ToLower(); + } + + /// + /// Makes the initial caps. + /// + /// The word. + /// + public static string MakeInitialCaps(string word) { + return String.Concat(word.Substring(0, 1).ToUpper(), word.Substring(1).ToLower()); + } + + /// + /// Makes the initial lower case. + /// + /// The word. + /// + public static string MakeInitialLowerCase(string word) { + return String.Concat(word.Substring(0, 1).ToLower(), word.Substring(1)); + } + + + /// + /// Determine whether the passed string is numeric, by attempting to parse it to a double + /// + /// The string to evaluated for numeric conversion + /// + /// true if the string can be converted to a number; otherwise, false. + /// + public static bool IsStringNumeric(string str) { + double result; + return (double.TryParse(str, NumberStyles.Float, NumberFormatInfo.CurrentInfo, out result)); + } + + /// + /// Adds the ordinal suffix. + /// + /// The number. + /// + public static string AddOrdinalSuffix(string number) { + if (IsStringNumeric(number)) { + int n = int.Parse(number); + int nMod100 = n % 100; + + if (nMod100 >= 11 && nMod100 <= 13) + return String.Concat(number, "th"); + + switch (n % 10) { + case 1: + return String.Concat(number, "st"); + case 2: + return String.Concat(number, "nd"); + case 3: + return String.Concat(number, "rd"); + default: + return String.Concat(number, "th"); + } + } + return number; + } + + /// + /// Converts the underscores to dashes. + /// + /// The underscored word. + /// + public static string ConvertUnderscoresToDashes(string underscoredWord) { + return underscoredWord.Replace('_', '-'); + } + + + #region Nested type: InflectorRule + + /// + /// Summary for the InflectorRule class + /// + private class InflectorRule { + /// + /// + /// + public readonly Regex regex; + + /// + /// + /// + public readonly string replacement; + + /// + /// Initializes a new instance of the class. + /// + /// The regex pattern. + /// The replacement text. + public InflectorRule(string regexPattern, string replacementText) { + regex = new Regex(regexPattern, RegexOptions.IgnoreCase); + replacement = replacementText; + } + + /// + /// Applies the specified word. + /// + /// The word. + /// + public string Apply(string word) { + if (!regex.IsMatch(word)) + return null; + + string replace = regex.Replace(word, replacement); + if (word == word.ToUpper()) + replace = replace.ToUpper(); + + return replace; + } + } + + #endregion +} + +#> \ No newline at end of file diff --git a/packages/PetaPoco.4.0.2/Content/Models/Generated/PetaPoco.Generator.ttinclude b/packages/PetaPoco.4.0.2/Content/Models/Generated/PetaPoco.Generator.ttinclude new file mode 100644 index 000000000..8bb6b8756 --- /dev/null +++ b/packages/PetaPoco.4.0.2/Content/Models/Generated/PetaPoco.Generator.ttinclude @@ -0,0 +1,136 @@ +<# +if (string.IsNullOrEmpty(Namespace)) Namespace=ConnectionStringName; +if (string.IsNullOrEmpty(RepoName) && !string.IsNullOrEmpty(ConnectionStringName)) RepoName=ConnectionStringName + "DB"; +if (string.IsNullOrEmpty(Namespace)) Namespace="PetaPoco"; +if (string.IsNullOrEmpty(RepoName)) RepoName="PetaPocoDB"; +#> +using System; +using System.Collections.Generic; +using System.Linq; +using System.Web; +using PetaPoco; + +namespace <#=Namespace #> +{ +<# if (GenerateCommon) { #> + public partial class <#=RepoName#> : Database + { + public <#=RepoName#>() + : base("<#=ConnectionStringName#>") + { + CommonConstruct(); + } + + public <#=RepoName#>(string connectionStringName) + : base(connectionStringName) + { + CommonConstruct(); + } + + partial void CommonConstruct(); + + public interface IFactory + { + <#=RepoName#> GetInstance(); + } + + public static IFactory Factory { get; set; } + public static <#=RepoName#> GetInstance() + { + if (_instance!=null) + return _instance; + + if (Factory!=null) + return Factory.GetInstance(); + else + return new <#=RepoName#>(); + } + + [ThreadStatic] static <#=RepoName#> _instance; + + public override void OnBeginTransaction() + { + if (_instance==null) + _instance=this; + } + + public override void OnEndTransaction() + { + if (_instance==this) + _instance=null; + } + +<# if (GenerateOperations) { #> + public class Record where T:new() + { + public static <#=RepoName#> repo { get { return <#=RepoName#>.GetInstance(); } } + public bool IsNew() { return repo.IsNew(this); } + public void Save() { repo.Save(this); } + public object Insert() { return repo.Insert(this); } + public int Update() { return repo.Update(this); } + public int Delete() { return repo.Delete(this); } + public static int Update(string sql, params object[] args) { return repo.Update(sql, args); } + public static int Update(Sql sql) { return repo.Update(sql); } + public static int Delete(string sql, params object[] args) { return repo.Delete(sql, args); } + public static int Delete(Sql sql) { return repo.Delete(sql); } + public static int Delete(object primaryKey) { return repo.Delete(primaryKey); } + public static bool Exists(object primaryKey) { return repo.Exists(primaryKey); } + public static T SingleOrDefault(object primaryKey) { return repo.SingleOrDefault(primaryKey); } + public static T SingleOrDefault(string sql, params object[] args) { return repo.SingleOrDefault(sql, args); } + public static T SingleOrDefault(Sql sql) { return repo.SingleOrDefault(sql); } + public static T FirstOrDefault(string sql, params object[] args) { return repo.FirstOrDefault(sql, args); } + public static T FirstOrDefault(Sql sql) { return repo.FirstOrDefault(sql); } + public static T Single(object primaryKey) { return repo.Single(primaryKey); } + public static T Single(string sql, params object[] args) { return repo.Single(sql, args); } + public static T Single(Sql sql) { return repo.Single(sql); } + public static T First(string sql, params object[] args) { return repo.First(sql, args); } + public static T First(Sql sql) { return repo.First(sql); } + public static List Fetch(string sql, params object[] args) { return repo.Fetch(sql, args); } + public static List Fetch(Sql sql) { return repo.Fetch(sql); } + public static List Fetch(long page, long itemsPerPage, string sql, params object[] args) { return repo.Fetch(page, itemsPerPage, sql, args); } + public static List Fetch(long page, long itemsPerPage, Sql sql) { return repo.Fetch(page, itemsPerPage, sql); } + public static Page Page(long page, long itemsPerPage, string sql, params object[] args) { return repo.Page(page, itemsPerPage, sql, args); } + public static Page Page(long page, long itemsPerPage, Sql sql) { return repo.Page(page, itemsPerPage, sql); } + public static IEnumerable Query(string sql, params object[] args) { return repo.Query(sql, args); } + public static IEnumerable Query(Sql sql) { return repo.Query(sql); } + } +<# } #> + } +<# } #> + +<# if (GeneratePocos) { #> +<# +foreach(Table tbl in from t in tables where !t.Ignore select t) +{ +#> + + [TableName("<#=tbl.Name#>")] +<# if (tbl.PK!=null && tbl.PK.IsAutoIncrement) { #> +<# if (tbl.SequenceName==null) { #> + [PrimaryKey("<#=tbl.PK.Name#>")] +<# } else { #> + [PrimaryKey("<#=tbl.PK.Name#>", sequenceName="<#=tbl.SequenceName#>")] +<# } #> +<# } #> +<# if (tbl.PK!=null && !tbl.PK.IsAutoIncrement) { #> + [PrimaryKey("<#=tbl.PK.Name#>", autoIncrement=false)] +<# } #> + [ExplicitColumns] + public partial class <#=tbl.ClassName#> <# if (GenerateOperations) { #>: <#=RepoName#>.Record<<#=tbl.ClassName#>> <# } #> + { +<# +foreach(Column col in from c in tbl.Columns where !c.Ignore select c) +{ + // Column bindings +#> +<# if (col.Name!=col.PropertyName) { #> + [Column("<#=col.Name#>")] public <#=col.PropertyType #><#=CheckNullable(col)#> <#=col.PropertyName #> { get; set; } +<# } else { #> + [Column] public <#=col.PropertyType #><#=CheckNullable(col)#> <#=col.PropertyName #> { get; set; } +<# } #> +<# } #> + } + +<# } #> +<# } #> +} diff --git a/packages/PetaPoco.4.0.2/Content/Models/PetaPoco.cs b/packages/PetaPoco.4.0.2/Content/Models/PetaPoco.cs new file mode 100644 index 000000000..751aef848 --- /dev/null +++ b/packages/PetaPoco.4.0.2/Content/Models/PetaPoco.cs @@ -0,0 +1,2186 @@ +/* PetaPoco v4.0.2 - A Tiny ORMish thing for your POCO's. + * Copyright © 2011 Topten Software. All Rights Reserved. + * + * Apache License 2.0 - http://www.toptensoftware.com/petapoco/license + * + * Special thanks to Rob Conery (@robconery) for original inspiration (ie:Massive) and for + * use of Subsonic's T4 templates, Rob Sullivan (@DataChomp) for hard core DBA advice + * and Adam Schroder (@schotime) for lots of suggestions, improvements and Oracle support + */ + +// Define PETAPOCO_NO_DYNAMIC in your project settings on .NET 3.5 + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Configuration; +using System.Data.Common; +using System.Data; +using System.Text.RegularExpressions; +using System.Reflection; +using System.Reflection.Emit; +using System.Linq.Expressions; + + +namespace PetaPoco +{ + // Poco's marked [Explicit] require all column properties to be marked + [AttributeUsage(AttributeTargets.Class)] + public class ExplicitColumnsAttribute : Attribute + { + } + // For non-explicit pocos, causes a property to be ignored + [AttributeUsage(AttributeTargets.Property)] + public class IgnoreAttribute : Attribute + { + } + + // For explicit pocos, marks property as a column and optionally supplies column name + [AttributeUsage(AttributeTargets.Property)] + public class ColumnAttribute : Attribute + { + public ColumnAttribute() { } + public ColumnAttribute(string name) { Name = name; } + public string Name { get; set; } + } + + // For explicit pocos, marks property as a result column and optionally supplies column name + [AttributeUsage(AttributeTargets.Property)] + public class ResultColumnAttribute : ColumnAttribute + { + public ResultColumnAttribute() { } + public ResultColumnAttribute(string name) : base(name) { } + } + + // Specify the table name of a poco + [AttributeUsage(AttributeTargets.Class)] + public class TableNameAttribute : Attribute + { + public TableNameAttribute(string tableName) + { + Value = tableName; + } + public string Value { get; private set; } + } + + // Specific the primary key of a poco class (and optional sequence name for Oracle) + [AttributeUsage(AttributeTargets.Class)] + public class PrimaryKeyAttribute : Attribute + { + public PrimaryKeyAttribute(string primaryKey) + { + Value = primaryKey; + autoIncrement = true; + } + + public string Value { get; private set; } + public string sequenceName { get; set; } + public bool autoIncrement { get; set; } + } + + [AttributeUsage(AttributeTargets.Property)] + public class AutoJoinAttribute : Attribute + { + public AutoJoinAttribute() { } + } + + // Results from paged request + public class Page + { + public long CurrentPage { get; set; } + public long TotalPages { get; set; } + public long TotalItems { get; set; } + public long ItemsPerPage { get; set; } + public List Items { get; set; } + public object Context { get; set; } + } + + // Pass as parameter value to force to DBType.AnsiString + public class AnsiString + { + public AnsiString(string str) + { + Value = str; + } + public string Value { get; private set; } + } + + // Used by IMapper to override table bindings for an object + public class TableInfo + { + public string TableName { get; set; } + public string PrimaryKey { get; set; } + public bool AutoIncrement { get; set; } + public string SequenceName { get; set; } + } + + // Optionally provide and implementation of this to Database.Mapper + public interface IMapper + { + void GetTableInfo(Type t, TableInfo ti); + bool MapPropertyToColumn(PropertyInfo pi, ref string columnName, ref bool resultColumn); + Func GetFromDbConverter(PropertyInfo pi, Type SourceType); + Func GetToDbConverter(Type SourceType); + } + + // Database class ... this is where most of the action happens + public class Database : IDisposable + { + public Database(IDbConnection connection) + { + _sharedConnection = connection; + _connectionString = connection.ConnectionString; + _sharedConnectionDepth = 2; // Prevent closing external connection + CommonConstruct(); + } + + public Database(string connectionString, string providerName) + { + _connectionString = connectionString; + _providerName = providerName; + CommonConstruct(); + } + + public Database(string connectionString, DbProviderFactory provider) + { + _connectionString = connectionString; + _factory = provider; + CommonConstruct(); + } + + public Database(string connectionStringName) + { + // Use first? + if (connectionStringName == "") + connectionStringName = ConfigurationManager.ConnectionStrings[0].Name; + + // Work out connection string and provider name + var providerName = "System.Data.SqlClient"; + if (ConfigurationManager.ConnectionStrings[connectionStringName] != null) + { + if (!string.IsNullOrEmpty(ConfigurationManager.ConnectionStrings[connectionStringName].ProviderName)) + providerName = ConfigurationManager.ConnectionStrings[connectionStringName].ProviderName; + } + else + { + throw new InvalidOperationException("Can't find a connection string with the name '" + connectionStringName + "'"); + } + + // Store factory and connection string + _connectionString = ConfigurationManager.ConnectionStrings[connectionStringName].ConnectionString; + _providerName = providerName; + CommonConstruct(); + } + + enum DBType + { + SqlServer, + SqlServerCE, + MySql, + PostgreSQL, + Oracle, + } + DBType _dbType = DBType.SqlServer; + + // Common initialization + private void CommonConstruct() + { + _transactionDepth = 0; + EnableAutoSelect = true; + EnableNamedParams = true; + ForceDateTimesToUtc = true; + + if (_providerName != null) + _factory = DbProviderFactories.GetFactory(_providerName); + + string dbtype = (_factory == null ? _sharedConnection.GetType() : _factory.GetType()).Name; + if (dbtype.StartsWith("MySql")) _dbType = DBType.MySql; + else if (dbtype.StartsWith("SqlCe")) _dbType = DBType.SqlServerCE; + else if (dbtype.StartsWith("Npgsql")) _dbType = DBType.PostgreSQL; + else if (dbtype.StartsWith("Oracle")) _dbType = DBType.Oracle; + + if (_dbType == DBType.MySql && _connectionString != null && _connectionString.IndexOf("Allow User Variables=true") >= 0) + _paramPrefix = "?"; + if (_dbType == DBType.Oracle) + _paramPrefix = ":"; + } + + // Automatically close one open shared connection + public void Dispose() + { + // Automatically close one open connection reference + // (Works with KeepConnectionAlive and manually opening a shared connection) + CloseSharedConnection(); + } + + // Set to true to keep the first opened connection alive until this object is disposed + public bool KeepConnectionAlive { get; set; } + + // Open a connection (can be nested) + public void OpenSharedConnection() + { + if (_sharedConnectionDepth == 0) + { + _sharedConnection = _factory.CreateConnection(); + _sharedConnection.ConnectionString = _connectionString; + _sharedConnection.Open(); + + if (KeepConnectionAlive) + _sharedConnectionDepth++; // Make sure you call Dispose + } + _sharedConnectionDepth++; + } + + // Close a previously opened connection + public void CloseSharedConnection() + { + if (_sharedConnectionDepth > 0) + { + _sharedConnectionDepth--; + if (_sharedConnectionDepth == 0) + { + _sharedConnection.Dispose(); + _sharedConnection = null; + } + } + } + + // Access to our shared connection + public IDbConnection Connection + { + get { return _sharedConnection; } + } + + // Helper to create a transaction scope + public Transaction GetTransaction() + { + return new Transaction(this); + } + + // Use by derived repo generated by T4 templates + public virtual void OnBeginTransaction() { } + public virtual void OnEndTransaction() { } + + // Start a new transaction, can be nested, every call must be + // matched by a call to AbortTransaction or CompleteTransaction + // Use `using (var scope=db.Transaction) { scope.Complete(); }` to ensure correct semantics + public void BeginTransaction() + { + _transactionDepth++; + + if (_transactionDepth == 1) + { + OpenSharedConnection(); + _transaction = _sharedConnection.BeginTransaction(); + _transactionCancelled = false; + OnBeginTransaction(); + } + + } + + // Internal helper to cleanup transaction stuff + void CleanupTransaction() + { + OnEndTransaction(); + + if (_transactionCancelled) + _transaction.Rollback(); + else + _transaction.Commit(); + + _transaction.Dispose(); + _transaction = null; + + CloseSharedConnection(); + } + + // Abort the entire outer most transaction scope + public void AbortTransaction() + { + _transactionCancelled = true; + if ((--_transactionDepth) == 0) + CleanupTransaction(); + } + + // Complete the transaction + public void CompleteTransaction() + { + if ((--_transactionDepth) == 0) + CleanupTransaction(); + } + + // Helper to handle named parameters from object properties + static Regex rxParams = new Regex(@"(? args_dest) + { + return rxParams.Replace(_sql, m => + { + string param = m.Value.Substring(1); + + object arg_val; + + int paramIndex; + if (int.TryParse(param, out paramIndex)) + { + // Numbered parameter + if (paramIndex < 0 || paramIndex >= args_src.Length) + throw new ArgumentOutOfRangeException(string.Format("Parameter '@{0}' specified but only {1} parameters supplied (in `{2}`)", paramIndex, args_src.Length, _sql)); + arg_val = args_src[paramIndex]; + } + else + { + // Look for a property on one of the arguments with this name + bool found = false; + arg_val = null; + foreach (var o in args_src) + { + var pi = o.GetType().GetProperty(param); + if (pi != null) + { + arg_val = pi.GetValue(o, null); + found = true; + break; + } + } + + if (!found) + throw new ArgumentException(string.Format("Parameter '@{0}' specified but none of the passed arguments have a property with this name (in '{1}')", param, _sql)); + } + + // Expand collections to parameter lists + if ((arg_val as System.Collections.IEnumerable) != null && + (arg_val as string) == null && + (arg_val as byte[]) == null) + { + var sb = new StringBuilder(); + foreach (var i in arg_val as System.Collections.IEnumerable) + { + sb.Append((sb.Length == 0 ? "@" : ",@") + args_dest.Count.ToString()); + args_dest.Add(i); + } + return sb.ToString(); + } + else + { + args_dest.Add(arg_val); + return "@" + (args_dest.Count - 1).ToString(); + } + } + ); + } + + // Add a parameter to a DB command + void AddParam(IDbCommand cmd, object item, string ParameterPrefix) + { + // Convert value to from poco type to db type + if (Database.Mapper != null && item!=null) + { + var fn = Database.Mapper.GetToDbConverter(item.GetType()); + if (fn!=null) + item = fn(item); + } + + // Support passed in parameters + var idbParam = item as IDbDataParameter; + if (idbParam != null) + { + idbParam.ParameterName = string.Format("{0}{1}", ParameterPrefix, cmd.Parameters.Count); + cmd.Parameters.Add(idbParam); + return; + } + + var p = cmd.CreateParameter(); + p.ParameterName = string.Format("{0}{1}", ParameterPrefix, cmd.Parameters.Count); + if (item == null) + { + p.Value = DBNull.Value; + } + else + { + var t = item.GetType(); + if (t.IsEnum) // PostgreSQL .NET driver wont cast enum to int + { + p.Value = (int)item; + } + else if (t == typeof(Guid)) + { + p.Value = item.ToString(); + p.DbType = DbType.String; + p.Size = 40; + } + else if (t == typeof(string)) + { + p.Size = Math.Max((item as string).Length + 1, 4000); // Help query plan caching by using common size + p.Value = item; + } + else if (t == typeof(AnsiString)) + { + // Thanks @DataChomp for pointing out the SQL Server indexing performance hit of using wrong string type on varchar + p.Size = Math.Max((item as AnsiString).Value.Length + 1, 4000); + p.Value = (item as AnsiString).Value; + p.DbType = DbType.AnsiString; + } + else if (t == typeof(bool) && _dbType != DBType.PostgreSQL) + { + p.Value = ((bool)item) ? 1 : 0; + } + else if (item.GetType().Name == "SqlGeography") //SqlGeography is a CLR Type + { + p.GetType().GetProperty("UdtTypeName").SetValue(p, "geography", null); //geography is the equivalent SQL Server Type + p.Value = item; + } + + else if (item.GetType().Name == "SqlGeometry") //SqlGeometry is a CLR Type + { + p.GetType().GetProperty("UdtTypeName").SetValue(p, "geometry", null); //geography is the equivalent SQL Server Type + p.Value = item; + } + else + { + p.Value = item; + } + } + + cmd.Parameters.Add(p); + } + + // Create a command + static Regex rxParamsPrefix = new Regex(@"(?(); + sql = ProcessParams(sql, args, new_args); + args = new_args.ToArray(); + } + + // Perform parameter prefix replacements + if (_paramPrefix != "@") + sql = rxParamsPrefix.Replace(sql, m => _paramPrefix + m.Value.Substring(1)); + sql = sql.Replace("@@", "@"); // <- double @@ escapes a single @ + + // Create the command and add parameters + IDbCommand cmd = _factory == null ? connection.CreateCommand() : _factory.CreateCommand(); + cmd.Connection = connection; + cmd.CommandText = sql; + cmd.Transaction = _transaction; + foreach (var item in args) + { + AddParam(cmd, item, _paramPrefix); + } + + if (_dbType == DBType.Oracle) + { + cmd.GetType().GetProperty("BindByName").SetValue(cmd, true, null); + } + + if (!String.IsNullOrEmpty(sql)) + DoPreExecute(cmd); + + return cmd; + } + + // Override this to log/capture exceptions + public virtual void OnException(Exception x) + { + System.Diagnostics.Debug.WriteLine(x.ToString()); + System.Diagnostics.Debug.WriteLine(LastCommand); + } + + // Override this to log commands, or modify command before execution + public virtual void OnExecutingCommand(IDbCommand cmd) { } + public virtual void OnExecutedCommand(IDbCommand cmd) { } + + // Execute a non-query command + public int Execute(string sql, params object[] args) + { + try + { + OpenSharedConnection(); + try + { + using (var cmd = CreateCommand(_sharedConnection, sql, args)) + { + var retv=cmd.ExecuteNonQuery(); + OnExecutedCommand(cmd); + return retv; + } + } + finally + { + CloseSharedConnection(); + } + } + catch (Exception x) + { + OnException(x); + throw; + } + } + + public int Execute(Sql sql) + { + return Execute(sql.SQL, sql.Arguments); + } + + // Execute and cast a scalar property + public T ExecuteScalar(string sql, params object[] args) + { + try + { + OpenSharedConnection(); + try + { + using (var cmd = CreateCommand(_sharedConnection, sql, args)) + { + object val = cmd.ExecuteScalar(); + OnExecutedCommand(cmd); + return (T)Convert.ChangeType(val, typeof(T)); + } + } + finally + { + CloseSharedConnection(); + } + } + catch (Exception x) + { + OnException(x); + throw; + } + } + + public T ExecuteScalar(Sql sql) + { + return ExecuteScalar(sql.SQL, sql.Arguments); + } + + Regex rxSelect = new Regex(@"\A\s*(SELECT|EXECUTE|CALL)\s", RegexOptions.Compiled | RegexOptions.Singleline | RegexOptions.IgnoreCase | RegexOptions.Multiline); + Regex rxFrom = new Regex(@"\A\s*FROM\s", RegexOptions.Compiled | RegexOptions.Singleline | RegexOptions.IgnoreCase | RegexOptions.Multiline); + string AddSelectClause(string sql) + { + if (sql.StartsWith(";")) + return sql.Substring(1); + + if (!rxSelect.IsMatch(sql)) + { + var pd = PocoData.ForType(typeof(T)); + var tableName = EscapeTableName(pd.TableInfo.TableName); + string cols = string.Join(", ", (from c in pd.QueryColumns select tableName + "." + EscapeSqlIdentifier(c)).ToArray()); + if (!rxFrom.IsMatch(sql)) + sql = string.Format("SELECT {0} FROM {1} {2}", cols, tableName, sql); + else + sql = string.Format("SELECT {0} {1}", cols, sql); + } + return sql; + } + + public bool EnableAutoSelect { get; set; } + public bool EnableNamedParams { get; set; } + public bool ForceDateTimesToUtc { get; set; } + + // Return a typed list of pocos + public List Fetch(string sql, params object[] args) + { + return Query(sql, args).ToList(); + } + + public List Fetch(Sql sql) + { + return Fetch(sql.SQL, sql.Arguments); + } + + static Regex rxColumns = new Regex(@"\A\s*SELECT\s+((?:\((?>\((?)|\)(?<-depth>)|.?)*(?(depth)(?!))\)|.)*?)(?\((?)|\)(?<-depth>)|.?)*(?(depth)(?!))\)|[\w\(\)\.])+(?:\s+(?:ASC|DESC))?(?:\s*,\s*(?:\((?>\((?)|\)(?<-depth>)|.?)*(?(depth)(?!))\)|[\w\(\)\.])+(?:\s+(?:ASC|DESC))?)*", RegexOptions.IgnoreCase | RegexOptions.Multiline | RegexOptions.Singleline | RegexOptions.Compiled); + public static bool SplitSqlForPaging(string sql, out string sqlCount, out string sqlSelectRemoved, out string sqlOrderBy) + { + sqlSelectRemoved = null; + sqlCount = null; + sqlOrderBy = null; + + // Extract the columns from "SELECT FROM" + var m = rxColumns.Match(sql); + if (!m.Success) + return false; + + // Save column list and replace with COUNT(*) + Group g = m.Groups[1]; + sqlCount = sql.Substring(0, g.Index) + "COUNT(*) " + sql.Substring(g.Index + g.Length); + sqlSelectRemoved = sql.Substring(g.Index); + + // Look for an "ORDER BY " clause + m = rxOrderBy.Match(sqlCount); + if (!m.Success) + return false; + + g = m.Groups[0]; + sqlOrderBy = g.ToString(); + sqlCount = sqlCount.Substring(0, g.Index) + sqlCount.Substring(g.Index + g.Length); + + return true; + } + + public void BuildPageQueries(long page, long itemsPerPage, string sql, ref object[] args, out string sqlCount, out string sqlPage) + { + // Add auto select clause + if (EnableAutoSelect) + sql = AddSelectClause(sql); + + // Split the SQL into the bits we need + string sqlSelectRemoved, sqlOrderBy; + if (!SplitSqlForPaging(sql, out sqlCount, out sqlSelectRemoved, out sqlOrderBy)) + throw new Exception("Unable to parse SQL statement for paged query"); + if (_dbType == DBType.Oracle && sqlSelectRemoved.StartsWith("*")) + throw new Exception("Query must alias '*' when performing a paged query.\neg. select t.* from table t order by t.id"); + + // Build the SQL for the actual final result + if (_dbType == DBType.SqlServer || _dbType == DBType.Oracle) + { + sqlSelectRemoved = rxOrderBy.Replace(sqlSelectRemoved, ""); + sqlPage = string.Format("SELECT * FROM (SELECT ROW_NUMBER() OVER ({0}) peta_rn, {1}) peta_paged WHERE peta_rn>@{2} AND peta_rn<=@{3}", + sqlOrderBy, sqlSelectRemoved, args.Length, args.Length + 1); + args = args.Concat(new object[] { (page - 1) * itemsPerPage, page * itemsPerPage }).ToArray(); + } + else if (_dbType == DBType.SqlServerCE) + { + sqlPage = string.Format("{0}\nOFFSET @{1} ROWS FETCH NEXT @{2} ROWS ONLY", sql, args.Length, args.Length + 1); + args = args.Concat(new object[] { (page - 1) * itemsPerPage, itemsPerPage }).ToArray(); + } + else + { + sqlPage = string.Format("{0}\nLIMIT @{1} OFFSET @{2}", sql, args.Length, args.Length + 1); + args = args.Concat(new object[] { itemsPerPage, (page - 1) * itemsPerPage }).ToArray(); + } + + } + + // Fetch a page + public Page Page(long page, long itemsPerPage, string sql, params object[] args) + { + string sqlCount, sqlPage; + BuildPageQueries(page, itemsPerPage, sql, ref args, out sqlCount, out sqlPage); + + // Save the one-time command time out and use it for both queries + int saveTimeout = OneTimeCommandTimeout; + + // Setup the paged result + var result = new Page(); + result.CurrentPage = page; + result.ItemsPerPage = itemsPerPage; + result.TotalItems = ExecuteScalar(sqlCount, args); + result.TotalPages = result.TotalItems / itemsPerPage; + if ((result.TotalItems % itemsPerPage) != 0) + result.TotalPages++; + + OneTimeCommandTimeout = saveTimeout; + + // Get the records + result.Items = Fetch(sqlPage, args); + + // Done + return result; + } + + public Page Page(long page, long itemsPerPage, Sql sql) + { + return Page(page, itemsPerPage, sql.SQL, sql.Arguments); + } + + + public List Fetch(long page, long itemsPerPage, string sql, params object[] args) + { + string sqlCount, sqlPage; + BuildPageQueries(page, itemsPerPage, sql, ref args, out sqlCount, out sqlPage); + return Fetch(sqlPage, args); + } + + public List Fetch(long page, long itemsPerPage, Sql sql) + { + return Fetch(page, itemsPerPage, sql.SQL, sql.Arguments); + } + + // Return an enumerable collection of pocos + public IEnumerable Query(string sql, params object[] args) + { + if (EnableAutoSelect) + sql = AddSelectClause(sql); + + OpenSharedConnection(); + try + { + using (var cmd = CreateCommand(_sharedConnection, sql, args)) + { + IDataReader r; + var pd = PocoData.ForType(typeof(T)); + try + { + r = cmd.ExecuteReader(); + OnExecutedCommand(cmd); + } + catch (Exception x) + { + OnException(x); + throw; + } + var factory = pd.GetFactory(cmd.CommandText, _sharedConnection.ConnectionString, ForceDateTimesToUtc, 0, r.FieldCount, r) as Func; + using (r) + { + while (true) + { + T poco; + try + { + if (!r.Read()) + yield break; + poco = factory(r); + } + catch (Exception x) + { + OnException(x); + throw; + } + + yield return poco; + } + } + } + } + finally + { + CloseSharedConnection(); + } + } + + // Multi Fetch + public List Fetch(Func cb, string sql, params object[] args) { return Query(cb, sql, args).ToList(); } + public List Fetch(Func cb, string sql, params object[] args) { return Query(cb, sql, args).ToList(); } + public List Fetch(Func cb, string sql, params object[] args) { return Query(cb, sql, args).ToList(); } + + // Multi Query + public IEnumerable Query(Func cb, string sql, params object[] args) { return Query(new Type[] { typeof(T1), typeof(T2) }, cb, sql, args); } + public IEnumerable Query(Func cb, string sql, params object[] args) { return Query(new Type[] { typeof(T1), typeof(T2), typeof(T3)}, cb, sql, args); } + public IEnumerable Query(Func cb, string sql, params object[] args) { return Query(new Type[] { typeof(T1), typeof(T2), typeof(T3), typeof(T4)}, cb, sql, args); } + + // Multi Fetch (SQL builder) + public List Fetch(Func cb, Sql sql) { return Query(cb, sql.SQL, sql.Arguments).ToList(); } + public List Fetch(Func cb, Sql sql) { return Query(cb, sql.SQL, sql.Arguments).ToList(); } + public List Fetch(Func cb, Sql sql) { return Query(cb, sql.SQL, sql.Arguments).ToList(); } + + // Multi Query (SQL builder) + public IEnumerable Query(Func cb, Sql sql) { return Query(new Type[] { typeof(T1), typeof(T2) }, cb, sql.SQL, sql.Arguments); } + public IEnumerable Query(Func cb, Sql sql) { return Query(new Type[] { typeof(T1), typeof(T2), typeof(T3) }, cb, sql.SQL, sql.Arguments); } + public IEnumerable Query(Func cb, Sql sql) { return Query(new Type[] { typeof(T1), typeof(T2), typeof(T3), typeof(T4) }, cb, sql.SQL, sql.Arguments); } + + // Multi Fetch (Simple) + public List Fetch(string sql, params object[] args) { return Query(sql, args).ToList(); } + public List Fetch(string sql, params object[] args) { return Query(sql, args).ToList(); } + public List Fetch(string sql, params object[] args) { return Query(sql, args).ToList(); } + + // Multi Query (Simple) + public IEnumerable Query(string sql, params object[] args) { return Query(new Type[] { typeof(T1), typeof(T2) }, null, sql, args); } + public IEnumerable Query(string sql, params object[] args) { return Query(new Type[] { typeof(T1), typeof(T2), typeof(T3) }, null, sql, args); } + public IEnumerable Query(string sql, params object[] args) { return Query(new Type[] { typeof(T1), typeof(T2), typeof(T3), typeof(T4) }, null, sql, args); } + + // Multi Fetch (Simple) (SQL builder) + public List Fetch(Sql sql) { return Query(sql.SQL, sql.Arguments).ToList(); } + public List Fetch(Sql sql) { return Query(sql.SQL, sql.Arguments).ToList(); } + public List Fetch(Sql sql) { return Query(sql.SQL, sql.Arguments).ToList(); } + + // Multi Query (Simple) (SQL builder) + public IEnumerable Query(Sql sql) { return Query(new Type[] { typeof(T1), typeof(T2) }, null, sql.SQL, sql.Arguments); } + public IEnumerable Query(Sql sql) { return Query(new Type[] { typeof(T1), typeof(T2), typeof(T3) }, null, sql.SQL, sql.Arguments); } + public IEnumerable Query(Sql sql) { return Query(new Type[] { typeof(T1), typeof(T2), typeof(T3), typeof(T4) }, null, sql.SQL, sql.Arguments); } + + // Automagically guess the property relationships between various POCOs and create a delegate that will set them up + object GetAutoMapper(Type[] types) + { + // Build a key + var kb = new StringBuilder(); + foreach (var t in types) + { + kb.Append(t.ToString()); + kb.Append(":"); + } + var key = kb.ToString(); + + // Check cache + RWLock.EnterReadLock(); + try + { + object mapper; + if (AutoMappers.TryGetValue(key, out mapper)) + return mapper; + } + finally + { + RWLock.ExitReadLock(); + } + + // Create it + RWLock.EnterWriteLock(); + try + { + // Try again + object mapper; + if (AutoMappers.TryGetValue(key, out mapper)) + return mapper; + + // Create a method + var m = new DynamicMethod("petapoco_automapper", types[0], types, true); + var il = m.GetILGenerator(); + + for (int i = 1; i < types.Length; i++) + { + bool handled = false; + for (int j = i - 1; j >= 0; j--) + { + // Find the property + var candidates = from p in types[j].GetProperties() where p.PropertyType == types[i] select p; + if (candidates.Count() == 0) + continue; + if (candidates.Count() > 1) + throw new InvalidOperationException(string.Format("Can't auto join {0} as {1} has more than one property of type {0}", types[i], types[j])); + + // Generate code + il.Emit(OpCodes.Ldarg_S, j); + il.Emit(OpCodes.Ldarg_S, i); + il.Emit(OpCodes.Callvirt, candidates.First().GetSetMethod(true)); + handled = true; + } + + if (!handled) + throw new InvalidOperationException(string.Format("Can't auto join {0}", types[i])); + } + + il.Emit(OpCodes.Ldarg_0); + il.Emit(OpCodes.Ret); + + // Cache it + var del = m.CreateDelegate(Expression.GetFuncType(types.Concat(types.Take(1)).ToArray())); + AutoMappers.Add(key, del); + return del; + } + finally + { + RWLock.ExitWriteLock(); + } + } + + // Find the split point in a result set for two different pocos and return the poco factory for the first + Delegate FindSplitPoint(Type typeThis, Type typeNext, string sql, IDataReader r, ref int pos) + { + // Last? + if (typeNext == null) + return PocoData.ForType(typeThis).GetFactory(sql, _sharedConnection.ConnectionString, ForceDateTimesToUtc, pos, r.FieldCount - pos, r); + + // Get PocoData for the two types + PocoData pdThis = PocoData.ForType(typeThis); + PocoData pdNext = PocoData.ForType(typeNext); + + // Find split point + int firstColumn = pos; + var usedColumns = new Dictionary(); + for (; pos < r.FieldCount; pos++) + { + // Split if field name has already been used, or if the field doesn't exist in current poco but does in the next + string fieldName = r.GetName(pos); + if (usedColumns.ContainsKey(fieldName) || (!pdThis.Columns.ContainsKey(fieldName) && pdNext.Columns.ContainsKey(fieldName))) + { + return pdThis.GetFactory(sql, _sharedConnection.ConnectionString, ForceDateTimesToUtc, firstColumn, pos - firstColumn, r); + } + usedColumns.Add(fieldName, true); + } + + throw new InvalidOperationException(string.Format("Couldn't find split point between {0} and {1}", typeThis, typeNext)); + } + + // Instance data used by the Multipoco factory delegate - essentially a list of the nested poco factories to call + class MultiPocoFactory + { + public List m_Delegates; + public Delegate GetItem(int index) { return m_Delegates[index]; } + } + + // Create a multi-poco factory + Func CreateMultiPocoFactory(Type[] types, string sql, IDataReader r) + { + var m = new DynamicMethod("petapoco_multipoco_factory", typeof(TRet), new Type[] { typeof(MultiPocoFactory), typeof(IDataReader), typeof(object) }, typeof(MultiPocoFactory)); + var il = m.GetILGenerator(); + + // Load the callback + il.Emit(OpCodes.Ldarg_2); + + // Call each delegate + var dels = new List(); + int pos = 0; + for (int i=0; i)m.CreateDelegate(typeof(Func), new MultiPocoFactory() { m_Delegates = dels }); + } + + // Various cached stuff + static Dictionary MultiPocoFactories = new Dictionary(); + static Dictionary AutoMappers = new Dictionary(); + static System.Threading.ReaderWriterLockSlim RWLock = new System.Threading.ReaderWriterLockSlim(); + + // Get (or create) the multi-poco factory for a query + Func GetMultiPocoFactory(Type[] types, string sql, IDataReader r) + { + // Build a key string (this is crap, should address this at some point) + var kb = new StringBuilder(); + kb.Append(typeof(TRet).ToString()); + kb.Append(":"); + foreach (var t in types) + { + kb.Append(":"); + kb.Append(t.ToString()); + } + kb.Append(":"); kb.Append(_sharedConnection.ConnectionString); + kb.Append(":"); kb.Append(ForceDateTimesToUtc); + kb.Append(":"); kb.Append(sql); + string key = kb.ToString(); + + // Check cache + RWLock.EnterReadLock(); + try + { + object oFactory; + if (MultiPocoFactories.TryGetValue(key, out oFactory)) + return (Func)oFactory; + } + finally + { + RWLock.ExitReadLock(); + } + + // Cache it + RWLock.EnterWriteLock(); + try + { + // Check again + object oFactory; + if (MultiPocoFactories.TryGetValue(key, out oFactory)) + return (Func)oFactory; + + // Create the factory + var Factory = CreateMultiPocoFactory(types, sql, r); + + MultiPocoFactories.Add(key, Factory); + return Factory; + } + finally + { + RWLock.ExitWriteLock(); + } + + } + + // Actual implementation of the multi-poco query + public IEnumerable Query(Type[] types, object cb, string sql, params object[] args) + { + OpenSharedConnection(); + try + { + using (var cmd = CreateCommand(_sharedConnection, sql, args)) + { + IDataReader r; + try + { + r = cmd.ExecuteReader(); + OnExecutedCommand(cmd); + } + catch (Exception x) + { + OnException(x); + throw; + } + var factory = GetMultiPocoFactory(types, sql, r); + if (cb == null) + cb = GetAutoMapper(types.ToArray()); + bool bNeedTerminator=false; + using (r) + { + while (true) + { + TRet poco; + try + { + if (!r.Read()) + break; + poco = factory(r, cb); + } + catch (Exception x) + { + OnException(x); + throw; + } + + if (poco != null) + yield return poco; + else + bNeedTerminator = true; + } + if (bNeedTerminator) + { + var poco = (TRet)(cb as Delegate).DynamicInvoke(new object[types.Length]); + if (poco != null) + yield return poco; + else + yield break; + } + } + } + } + finally + { + CloseSharedConnection(); + } + } + + + public IEnumerable Query(Sql sql) + { + return Query(sql.SQL, sql.Arguments); + } + + public bool Exists(object primaryKey) + { + return FirstOrDefault(string.Format("WHERE {0}=@0", EscapeSqlIdentifier(PocoData.ForType(typeof(T)).TableInfo.PrimaryKey)), primaryKey) != null; + } + public T Single(object primaryKey) + { + return Single(string.Format("WHERE {0}=@0", EscapeSqlIdentifier(PocoData.ForType(typeof(T)).TableInfo.PrimaryKey)), primaryKey); + } + public T SingleOrDefault(object primaryKey) + { + return SingleOrDefault(string.Format("WHERE {0}=@0", EscapeSqlIdentifier(PocoData.ForType(typeof(T)).TableInfo.PrimaryKey)), primaryKey); + } + public T Single(string sql, params object[] args) + { + return Query(sql, args).Single(); + } + public T SingleOrDefault(string sql, params object[] args) + { + return Query(sql, args).SingleOrDefault(); + } + public T First(string sql, params object[] args) + { + return Query(sql, args).First(); + } + public T FirstOrDefault(string sql, params object[] args) + { + return Query(sql, args).FirstOrDefault(); + } + + public T Single(Sql sql) + { + return Query(sql).Single(); + } + public T SingleOrDefault(Sql sql) + { + return Query(sql).SingleOrDefault(); + } + public T First(Sql sql) + { + return Query(sql).First(); + } + public T FirstOrDefault(Sql sql) + { + return Query(sql).FirstOrDefault(); + } + + public string EscapeTableName(string str) + { + // Assume table names with "dot", or opening sq is already escaped + return str.IndexOf('.') >= 0 ? str : EscapeSqlIdentifier(str); + } + public string EscapeSqlIdentifier(string str) + { + switch (_dbType) + { + case DBType.MySql: + return string.Format("`{0}`", str); + + case DBType.PostgreSQL: + case DBType.Oracle: + return string.Format("\"{0}\"", str); + + default: + return string.Format("[{0}]", str); + } + } + + public object Insert(string tableName, string primaryKeyName, object poco) + { + return Insert(tableName, primaryKeyName, true, poco); + } + + // Insert a poco into a table. If the poco has a property with the same name + // as the primary key the id of the new record is assigned to it. Either way, + // the new id is returned. + public object Insert(string tableName, string primaryKeyName, bool autoIncrement, object poco) + { + try + { + OpenSharedConnection(); + try + { + using (var cmd = CreateCommand(_sharedConnection, "")) + { + var pd = PocoData.ForObject(poco, primaryKeyName); + var names = new List(); + var values = new List(); + var index = 0; + foreach (var i in pd.Columns) + { + // Don't insert result columns + if (i.Value.ResultColumn) + continue; + + // Don't insert the primary key (except under oracle where we need bring in the next sequence value) + if (autoIncrement && primaryKeyName != null && string.Compare(i.Key, primaryKeyName, true)==0) + { + if (_dbType == DBType.Oracle && !string.IsNullOrEmpty(pd.TableInfo.SequenceName)) + { + names.Add(i.Key); + values.Add(string.Format("{0}.nextval", pd.TableInfo.SequenceName)); + } + continue; + } + + names.Add(EscapeSqlIdentifier(i.Key)); + values.Add(string.Format("{0}{1}", _paramPrefix, index++)); + AddParam(cmd, i.Value.GetValue(poco), _paramPrefix); + } + + cmd.CommandText = string.Format("INSERT INTO {0} ({1}) VALUES ({2})", + EscapeTableName(tableName), + string.Join(",", names.ToArray()), + string.Join(",", values.ToArray()) + ); + + if (!autoIncrement) + { + DoPreExecute(cmd); + cmd.ExecuteNonQuery(); + OnExecutedCommand(cmd); + return true; + } + + + object id; + switch (_dbType) + { + case DBType.SqlServerCE: + DoPreExecute(cmd); + cmd.ExecuteNonQuery(); + OnExecutedCommand(cmd); + id = ExecuteScalar("SELECT @@@IDENTITY AS NewID;"); + break; + case DBType.SqlServer: + cmd.CommandText += ";\nSELECT SCOPE_IDENTITY() AS NewID;"; + DoPreExecute(cmd); + id = cmd.ExecuteScalar(); + OnExecutedCommand(cmd); + break; + case DBType.PostgreSQL: + if (primaryKeyName != null) + { + cmd.CommandText += string.Format("returning {0} as NewID", EscapeSqlIdentifier(primaryKeyName)); + DoPreExecute(cmd); + id = cmd.ExecuteScalar(); + } + else + { + id = -1; + DoPreExecute(cmd); + cmd.ExecuteNonQuery(); + } + OnExecutedCommand(cmd); + break; + case DBType.Oracle: + if (primaryKeyName != null) + { + cmd.CommandText += string.Format(" returning {0} into :newid", EscapeSqlIdentifier(primaryKeyName)); + var param = cmd.CreateParameter(); + param.ParameterName = ":newid"; + param.Value = DBNull.Value; + param.Direction = ParameterDirection.ReturnValue; + param.DbType = DbType.Int64; + cmd.Parameters.Add(param); + DoPreExecute(cmd); + cmd.ExecuteNonQuery(); + id = param.Value; + } + else + { + id = -1; + DoPreExecute(cmd); + cmd.ExecuteNonQuery(); + } + OnExecutedCommand(cmd); + break; + default: + cmd.CommandText += ";\nSELECT @@IDENTITY AS NewID;"; + DoPreExecute(cmd); + id = cmd.ExecuteScalar(); + OnExecutedCommand(cmd); + break; + } + + + // Assign the ID back to the primary key property + if (primaryKeyName != null) + { + PocoColumn pc; + if (pd.Columns.TryGetValue(primaryKeyName, out pc)) + { + pc.SetValue(poco, pc.ChangeType(id)); + } + } + + return id; + } + } + finally + { + CloseSharedConnection(); + } + } + catch (Exception x) + { + OnException(x); + throw; + } + } + + // Insert an annotated poco object + public object Insert(object poco) + { + var pd = PocoData.ForType(poco.GetType()); + return Insert(pd.TableInfo.TableName, pd.TableInfo.PrimaryKey, pd.TableInfo.AutoIncrement, poco); + } + + // Update a record with values from a poco. primary key value can be either supplied or read from the poco + public int Update(string tableName, string primaryKeyName, object poco, object primaryKeyValue) + { + try + { + OpenSharedConnection(); + try + { + using (var cmd = CreateCommand(_sharedConnection, "")) + { + var sb = new StringBuilder(); + var index = 0; + var pd = PocoData.ForObject(poco,primaryKeyName); + foreach (var i in pd.Columns) + { + // Don't update the primary key, but grab the value if we don't have it + if (string.Compare(i.Key, primaryKeyName, true)==0) + { + if (primaryKeyValue == null) + primaryKeyValue = i.Value.GetValue(poco); + continue; + } + + // Dont update result only columns + if (i.Value.ResultColumn) + continue; + + // Build the sql + if (index > 0) + sb.Append(", "); + sb.AppendFormat("{0} = {1}{2}", EscapeSqlIdentifier(i.Key), _paramPrefix, index++); + + // Store the parameter in the command + AddParam(cmd, i.Value.GetValue(poco), _paramPrefix); + } + + cmd.CommandText = string.Format("UPDATE {0} SET {1} WHERE {2} = {3}{4}", + EscapeTableName(tableName), sb.ToString(), EscapeSqlIdentifier(primaryKeyName), _paramPrefix, index++); + AddParam(cmd, primaryKeyValue, _paramPrefix); + + DoPreExecute(cmd); + + // Do it + var retv=cmd.ExecuteNonQuery(); + OnExecutedCommand(cmd); + return retv; + } + } + finally + { + CloseSharedConnection(); + } + } + catch (Exception x) + { + OnException(x); + throw; + } + } + + public int Update(string tableName, string primaryKeyName, object poco) + { + return Update(tableName, primaryKeyName, poco, null); + } + + public int Update(object poco) + { + return Update(poco, null); + } + + public int Update(object poco, object primaryKeyValue) + { + var pd = PocoData.ForType(poco.GetType()); + return Update(pd.TableInfo.TableName, pd.TableInfo.PrimaryKey, poco, primaryKeyValue); + } + + public int Update(string sql, params object[] args) + { + var pd = PocoData.ForType(typeof(T)); + return Execute(string.Format("UPDATE {0} {1}", EscapeTableName(pd.TableInfo.TableName), sql), args); + } + + public int Update(Sql sql) + { + var pd = PocoData.ForType(typeof(T)); + return Execute(new Sql(string.Format("UPDATE {0}", EscapeTableName(pd.TableInfo.TableName))).Append(sql)); + } + + public int Delete(string tableName, string primaryKeyName, object poco) + { + return Delete(tableName, primaryKeyName, poco, null); + } + + public int Delete(string tableName, string primaryKeyName, object poco, object primaryKeyValue) + { + // If primary key value not specified, pick it up from the object + if (primaryKeyValue == null) + { + var pd = PocoData.ForObject(poco,primaryKeyName); + PocoColumn pc; + if (pd.Columns.TryGetValue(primaryKeyName, out pc)) + { + primaryKeyValue = pc.GetValue(poco); + } + } + + // Do it + var sql = string.Format("DELETE FROM {0} WHERE {1}=@0", EscapeTableName(tableName), EscapeSqlIdentifier(primaryKeyName)); + return Execute(sql, primaryKeyValue); + } + + public int Delete(object poco) + { + var pd = PocoData.ForType(poco.GetType()); + return Delete(pd.TableInfo.TableName, pd.TableInfo.PrimaryKey, poco); + } + + public int Delete(object pocoOrPrimaryKey) + { + if (pocoOrPrimaryKey.GetType() == typeof(T)) + return Delete(pocoOrPrimaryKey); + var pd = PocoData.ForType(typeof(T)); + return Delete(pd.TableInfo.TableName, pd.TableInfo.PrimaryKey, null, pocoOrPrimaryKey); + } + + public int Delete(string sql, params object[] args) + { + var pd = PocoData.ForType(typeof(T)); + return Execute(string.Format("DELETE FROM {0} {1}", EscapeTableName(pd.TableInfo.TableName), sql), args); + } + + public int Delete(Sql sql) + { + var pd = PocoData.ForType(typeof(T)); + return Execute(new Sql(string.Format("DELETE FROM {0}", EscapeTableName(pd.TableInfo.TableName))).Append(sql)); + } + + // Check if a poco represents a new record + public bool IsNew(string primaryKeyName, object poco) + { + var pd = PocoData.ForObject(poco, primaryKeyName); + object pk; + PocoColumn pc; + if (pd.Columns.TryGetValue(primaryKeyName, out pc)) + { + pk = pc.GetValue(poco); + } +#if !PETAPOCO_NO_DYNAMIC + else if (poco.GetType() == typeof(System.Dynamic.ExpandoObject)) + { + return true; + } +#endif + else + { + var pi = poco.GetType().GetProperty(primaryKeyName); + if (pi == null) + throw new ArgumentException(string.Format("The object doesn't have a property matching the primary key column name '{0}'", primaryKeyName)); + pk = pi.GetValue(poco, null); + } + + if (pk == null) + return true; + + var type = pk.GetType(); + + if (type.IsValueType) + { + // Common primary key types + if (type == typeof(long)) + return (long)pk == 0; + else if (type == typeof(ulong)) + return (ulong)pk == 0; + else if (type == typeof(int)) + return (int)pk == 0; + else if (type == typeof(uint)) + return (uint)pk == 0; + + // Create a default instance and compare + return pk == Activator.CreateInstance(pk.GetType()); + } + else + { + return pk == null; + } + } + + public bool IsNew(object poco) + { + var pd = PocoData.ForType(poco.GetType()); + if (!pd.TableInfo.AutoIncrement) + throw new InvalidOperationException("IsNew() and Save() are only supported on tables with auto-increment/identity primary key columns"); + return IsNew(pd.TableInfo.PrimaryKey, poco); + } + + // Insert new record or Update existing record + public void Save(string tableName, string primaryKeyName, object poco) + { + if (IsNew(primaryKeyName, poco)) + { + Insert(tableName, primaryKeyName, true, poco); + } + else + { + Update(tableName, primaryKeyName, poco); + } + } + + public void Save(object poco) + { + var pd = PocoData.ForType(poco.GetType()); + Save(pd.TableInfo.TableName, pd.TableInfo.PrimaryKey, poco); + } + + public int CommandTimeout { get; set; } + public int OneTimeCommandTimeout { get; set; } + + void DoPreExecute(IDbCommand cmd) + { + // Setup command timeout + if (OneTimeCommandTimeout != 0) + { + cmd.CommandTimeout = OneTimeCommandTimeout; + OneTimeCommandTimeout = 0; + } + else if (CommandTimeout!=0) + { + cmd.CommandTimeout = CommandTimeout; + } + + // Call hook + OnExecutingCommand(cmd); + + // Save it + _lastSql = cmd.CommandText; + _lastArgs = (from IDataParameter parameter in cmd.Parameters select parameter.Value).ToArray(); + } + + public string LastSQL { get { return _lastSql; } } + public object[] LastArgs { get { return _lastArgs; } } + public string LastCommand + { + get { return FormatCommand(_lastSql, _lastArgs); } + } + + public string FormatCommand(IDbCommand cmd) + { + return FormatCommand(cmd.CommandText, (from IDataParameter parameter in cmd.Parameters select parameter.Value).ToArray()); + } + + public string FormatCommand(string sql, object[] args) + { + var sb = new StringBuilder(); + if (sql == null) + return ""; + sb.Append(sql); + if (args != null && args.Length > 0) + { + sb.Append("\n"); + for (int i = 0; i < args.Length; i++) + { + sb.AppendFormat("\t -> {0}{1} [{2}] = \"{3}\"\n", _paramPrefix, i, args[i].GetType().Name, args[i]); + } + sb.Remove(sb.Length - 1, 1); + } + return sb.ToString(); + } + + + public static IMapper Mapper + { + get; + set; + } + + internal class PocoColumn + { + public string ColumnName; + public PropertyInfo PropertyInfo; + public bool ResultColumn; + public virtual void SetValue(object target, object val) { PropertyInfo.SetValue(target, val, null); } + public virtual object GetValue(object target) { return PropertyInfo.GetValue(target, null); } + public virtual object ChangeType(object val) { return Convert.ChangeType(val, PropertyInfo.PropertyType); } + } + internal class ExpandoColumn : PocoColumn + { + public override void SetValue(object target, object val) { (target as IDictionary)[ColumnName]=val; } + public override object GetValue(object target) + { + object val=null; + (target as IDictionary).TryGetValue(ColumnName, out val); + return val; + } + public override object ChangeType(object val) { return val; } + } + internal class PocoData + { + public static PocoData ForObject(object o, string primaryKeyName) + { + var t = o.GetType(); +#if !PETAPOCO_NO_DYNAMIC + if (t == typeof(System.Dynamic.ExpandoObject)) + { + var pd = new PocoData(); + pd.TableInfo = new TableInfo(); + pd.Columns = new Dictionary(StringComparer.OrdinalIgnoreCase); + pd.Columns.Add(primaryKeyName, new ExpandoColumn() { ColumnName = primaryKeyName }); + pd.TableInfo.PrimaryKey = primaryKeyName; + pd.TableInfo.AutoIncrement = true; + foreach (var col in (o as IDictionary).Keys) + { + if (col!=primaryKeyName) + pd.Columns.Add(col, new ExpandoColumn() { ColumnName = col }); + } + return pd; + } + else +#endif + return ForType(t); + } + static System.Threading.ReaderWriterLockSlim RWLock = new System.Threading.ReaderWriterLockSlim(); + public static PocoData ForType(Type t) + { +#if !PETAPOCO_NO_DYNAMIC + if (t == typeof(System.Dynamic.ExpandoObject)) + throw new InvalidOperationException("Can't use dynamic types with this method"); +#endif + // Check cache + RWLock.EnterReadLock(); + PocoData pd; + try + { + if (m_PocoDatas.TryGetValue(t, out pd)) + return pd; + } + finally + { + RWLock.ExitReadLock(); + } + + + // Cache it + RWLock.EnterWriteLock(); + try + { + // Check again + if (m_PocoDatas.TryGetValue(t, out pd)) + return pd; + + // Create it + pd = new PocoData(t); + + m_PocoDatas.Add(t, pd); + } + finally + { + RWLock.ExitWriteLock(); + } + + return pd; + } + + public PocoData() + { + } + + public PocoData(Type t) + { + type = t; + TableInfo=new TableInfo(); + + // Get the table name + var a = t.GetCustomAttributes(typeof(TableNameAttribute), true); + TableInfo.TableName = a.Length == 0 ? t.Name : (a[0] as TableNameAttribute).Value; + + // Get the primary key + a = t.GetCustomAttributes(typeof(PrimaryKeyAttribute), true); + TableInfo.PrimaryKey = a.Length == 0 ? "ID" : (a[0] as PrimaryKeyAttribute).Value; + TableInfo.SequenceName = a.Length == 0 ? null : (a[0] as PrimaryKeyAttribute).sequenceName; + TableInfo.AutoIncrement = a.Length == 0 ? false : (a[0] as PrimaryKeyAttribute).autoIncrement; + + // Call column mapper + if (Database.Mapper != null) + Database.Mapper.GetTableInfo(t, TableInfo); + + // Work out bound properties + bool ExplicitColumns = t.GetCustomAttributes(typeof(ExplicitColumnsAttribute), true).Length > 0; + Columns = new Dictionary(StringComparer.OrdinalIgnoreCase); + foreach (var pi in t.GetProperties()) + { + // Work out if properties is to be included + var ColAttrs = pi.GetCustomAttributes(typeof(ColumnAttribute), true); + if (ExplicitColumns) + { + if (ColAttrs.Length == 0) + continue; + } + else + { + if (pi.GetCustomAttributes(typeof(IgnoreAttribute), true).Length != 0) + continue; + } + + var pc = new PocoColumn(); + pc.PropertyInfo = pi; + + // Work out the DB column name + if (ColAttrs.Length > 0) + { + var colattr = (ColumnAttribute)ColAttrs[0]; + pc.ColumnName = colattr.Name; + if ((colattr as ResultColumnAttribute) != null) + pc.ResultColumn = true; + } + if (pc.ColumnName == null) + { + pc.ColumnName = pi.Name; + if (Database.Mapper != null && !Database.Mapper.MapPropertyToColumn(pi, ref pc.ColumnName, ref pc.ResultColumn)) + continue; + } + + // Store it + Columns.Add(pc.ColumnName, pc); + } + + // Build column list for automatic select + QueryColumns = (from c in Columns where !c.Value.ResultColumn select c.Key).ToArray(); + + } + + bool IsIntegralType(Type t) + { + var tc=Type.GetTypeCode(t); + return tc >= TypeCode.SByte && tc <= TypeCode.UInt64; + } + + // Create factory function that can convert a IDataReader record into a POCO + public Delegate GetFactory(string sql, string connString, bool ForceDateTimesToUtc, int firstColumn, int countColumns, IDataReader r) + { + // Check cache + var key = string.Format("{0}:{1}:{2}:{3}:{4}", sql, connString, ForceDateTimesToUtc, firstColumn, countColumns); + RWLock.EnterReadLock(); + try + { + // Have we already created it? + Delegate factory; + if (PocoFactories.TryGetValue(key, out factory)) + return factory; + } + finally + { + RWLock.ExitReadLock(); + } + + // Take the writer lock + RWLock.EnterWriteLock(); + + try + { + // Check again, just in case + Delegate factory; + if (PocoFactories.TryGetValue(key, out factory)) + return factory; + + // Create the method + var m = new DynamicMethod("petapoco_factory_" + PocoFactories.Count.ToString(), type, new Type[] { typeof(IDataReader) }, true); + var il = m.GetILGenerator(); + +#if !PETAPOCO_NO_DYNAMIC + if (type == typeof(object)) + { + // var poco=new T() + il.Emit(OpCodes.Newobj, typeof(System.Dynamic.ExpandoObject).GetConstructor(Type.EmptyTypes)); // obj + + MethodInfo fnAdd = typeof(IDictionary).GetMethod("Add"); + + // Enumerate all fields generating a set assignment for the column + for (int i = firstColumn; i < firstColumn + countColumns; i++) + { + var srcType = r.GetFieldType(i); + + il.Emit(OpCodes.Dup); // obj, obj + il.Emit(OpCodes.Ldstr, r.GetName(i)); // obj, obj, fieldname + + // Get the converter + Func converter = null; + if (Database.Mapper != null) + converter = Database.Mapper.GetFromDbConverter(null, srcType); + if (ForceDateTimesToUtc && converter == null && srcType == typeof(DateTime)) + converter = delegate(object src) { return new DateTime(((DateTime)src).Ticks, DateTimeKind.Utc); }; + + // Setup stack for call to converter + int converterIndex = -1; + if (converter != null) + { + // Add the converter + converterIndex = m_Converters.Count; + m_Converters.Add(converter); + + // Generate IL to push the converter onto the stack + il.Emit(OpCodes.Ldsfld, fldConverters); + il.Emit(OpCodes.Ldc_I4, converterIndex); + il.Emit(OpCodes.Callvirt, fnListGetItem); // obj, obj, fieldname, Converter + } + + + // r[i] + il.Emit(OpCodes.Ldarg_0); // obj, obj, fieldname, converter?, rdr + il.Emit(OpCodes.Ldc_I4, i); // obj, obj, fieldname, converter?, rdr,i + il.Emit(OpCodes.Callvirt, fnGetValue); // obj, obj, fieldname, converter?, value + + // Convert DBNull to null + il.Emit(OpCodes.Dup); // obj, obj, fieldname, converter?, value, value + il.Emit(OpCodes.Isinst, typeof(DBNull)); // obj, obj, fieldname, converter?, value, (value or null) + var lblNotNull = il.DefineLabel(); + il.Emit(OpCodes.Brfalse_S, lblNotNull); // obj, obj, fieldname, converter?, value + il.Emit(OpCodes.Pop); // obj, obj, fieldname, converter? + if (converter != null) + il.Emit(OpCodes.Pop); // obj, obj, fieldname, + il.Emit(OpCodes.Ldnull); // obj, obj, fieldname, null + if (converter != null) + { + var lblReady = il.DefineLabel(); + il.Emit(OpCodes.Br_S, lblReady); + il.MarkLabel(lblNotNull); + il.Emit(OpCodes.Callvirt, fnInvoke); + il.MarkLabel(lblReady); + } + else + { + il.MarkLabel(lblNotNull); + } + + il.Emit(OpCodes.Callvirt, fnAdd); + } + } + else +#endif + if (type.IsValueType) + { + il.Emit(OpCodes.Ldarg_0); // rdr + il.Emit(OpCodes.Ldc_I4_0); // rdr,0 + il.Emit(OpCodes.Callvirt, fnGetValue); // value + il.Emit(OpCodes.Unbox_Any, type); // value converted + } + else if (type == typeof(string) || type == typeof(byte[])) + { + // "if (!rdr.IsDBNull(i))" + il.Emit(OpCodes.Ldarg_0); // rdr + il.Emit(OpCodes.Ldc_I4_0); // rdr,0 + il.Emit(OpCodes.Callvirt, fnIsDBNull); // bool + var lblCont = il.DefineLabel(); + il.Emit(OpCodes.Brfalse_S, lblCont); + il.Emit(OpCodes.Ldnull); // null + var lblFin = il.DefineLabel(); + il.Emit(OpCodes.Br_S, lblFin); + + il.MarkLabel(lblCont); + il.Emit(OpCodes.Ldarg_0); // rdr + il.Emit(OpCodes.Ldc_I4_0); // rdr,0 + il.Emit(OpCodes.Callvirt, fnGetValue); // value + + il.Emit(OpCodes.Unbox_Any, type); // value converted + + il.MarkLabel(lblFin); + } + else + { + // var poco=new T() + il.Emit(OpCodes.Newobj, type.GetConstructor(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic, null, new Type[0], null)); + + // Enumerate all fields generating a set assignment for the column + for (int i = firstColumn; i < firstColumn + countColumns; i++) + { + // Get the PocoColumn for this db column, ignore if not known + PocoColumn pc; + if (!Columns.TryGetValue(r.GetName(i), out pc)) + continue; + + // Get the source type for this column + var srcType = r.GetFieldType(i); + var dstType = pc.PropertyInfo.PropertyType; + + // "if (!rdr.IsDBNull(i))" + il.Emit(OpCodes.Ldarg_0); // poco,rdr + il.Emit(OpCodes.Ldc_I4, i); // poco,rdr,i + il.Emit(OpCodes.Callvirt, fnIsDBNull); // poco,bool + var lblNext = il.DefineLabel(); + il.Emit(OpCodes.Brtrue_S, lblNext); // poco + + il.Emit(OpCodes.Dup); // poco,poco + + // Do we need to install a converter? + Func converter = null; + + // Get converter from the mapper + if (Database.Mapper != null) + { + converter = Database.Mapper.GetFromDbConverter(pc.PropertyInfo, srcType); + } + + // Standard DateTime->Utc mapper + if (ForceDateTimesToUtc && converter == null && srcType == typeof(DateTime) && (dstType == typeof(DateTime) || dstType == typeof(DateTime?))) + { + converter = delegate(object src) { return new DateTime(((DateTime)src).Ticks, DateTimeKind.Utc); }; + } + + // Forced type conversion including integral types -> enum + if (converter == null) + { + if (dstType.IsEnum && IsIntegralType(srcType)) + { + if (srcType != typeof(int)) + { + converter = delegate(object src) { return Convert.ChangeType(src, typeof(int), null); }; + } + } + else if (!dstType.IsAssignableFrom(srcType)) + { + converter = delegate(object src) { return Convert.ChangeType(src, dstType, null); }; + } + } + + // Fast + bool Handled = false; + if (converter == null) + { + var valuegetter = typeof(IDataRecord).GetMethod("Get" + srcType.Name, new Type[] { typeof(int) }); + if (valuegetter != null + && valuegetter.ReturnType == srcType + && (valuegetter.ReturnType == dstType || valuegetter.ReturnType == Nullable.GetUnderlyingType(dstType))) + { + il.Emit(OpCodes.Ldarg_0); // *,rdr + il.Emit(OpCodes.Ldc_I4, i); // *,rdr,i + il.Emit(OpCodes.Callvirt, valuegetter); // *,value + + // Convert to Nullable + if (Nullable.GetUnderlyingType(dstType) != null) + { + il.Emit(OpCodes.Newobj, dstType.GetConstructor(new Type[] { Nullable.GetUnderlyingType(dstType) })); + } + + il.Emit(OpCodes.Callvirt, pc.PropertyInfo.GetSetMethod(true)); // poco + Handled = true; + } + } + + // Not so fast + if (!Handled) + { + // Setup stack for call to converter + int converterIndex = -1; + if (converter != null) + { + // Add the converter + converterIndex = m_Converters.Count; + m_Converters.Add(converter); + + // Generate IL to push the converter onto the stack + il.Emit(OpCodes.Ldsfld, fldConverters); + il.Emit(OpCodes.Ldc_I4, converterIndex); + il.Emit(OpCodes.Callvirt, fnListGetItem); // Converter + } + + // "value = rdr.GetValue(i)" + il.Emit(OpCodes.Ldarg_0); // *,rdr + il.Emit(OpCodes.Ldc_I4, i); // *,rdr,i + il.Emit(OpCodes.Callvirt, fnGetValue); // *,value + + // Call the converter + if (converter != null) + il.Emit(OpCodes.Callvirt, fnInvoke); + + // Assign it + il.Emit(OpCodes.Unbox_Any, pc.PropertyInfo.PropertyType); // poco,poco,value + il.Emit(OpCodes.Callvirt, pc.PropertyInfo.GetSetMethod(true)); // poco + } + + il.MarkLabel(lblNext); + } + } + + il.Emit(OpCodes.Ret); + + // Cache it, return it + var del = m.CreateDelegate(Expression.GetFuncType(typeof(IDataReader), type)); + PocoFactories.Add(key, del); + return del; + } + finally + { + RWLock.ExitWriteLock(); + } + } + + + static Dictionary m_PocoDatas = new Dictionary(); + static List> m_Converters = new List>(); + static MethodInfo fnGetValue = typeof(IDataRecord).GetMethod("GetValue", new Type[] { typeof(int) }); + static MethodInfo fnIsDBNull = typeof(IDataRecord).GetMethod("IsDBNull"); + static FieldInfo fldConverters = typeof(PocoData).GetField("m_Converters", BindingFlags.Static | BindingFlags.GetField | BindingFlags.NonPublic); + static MethodInfo fnListGetItem = typeof(List>).GetProperty("Item").GetGetMethod(); + static MethodInfo fnInvoke = typeof(Func).GetMethod("Invoke"); + public Type type; + public string[] QueryColumns { get; private set; } + public TableInfo TableInfo { get; private set; } + public Dictionary Columns { get; private set; } + Dictionary PocoFactories = new Dictionary(); + } + + + // Member variables + string _connectionString; + string _providerName; + DbProviderFactory _factory; + IDbConnection _sharedConnection; + IDbTransaction _transaction; + int _sharedConnectionDepth; + int _transactionDepth; + bool _transactionCancelled; + string _lastSql; + object[] _lastArgs; + string _paramPrefix = "@"; + } + + // Transaction object helps maintain transaction depth counts + public class Transaction : IDisposable + { + public Transaction(Database db) + { + _db = db; + _db.BeginTransaction(); + } + + public void Complete() + { + _db.CompleteTransaction(); + _db = null; + } + + public void Dispose() + { + if (_db != null) + _db.AbortTransaction(); + } + + Database _db; + } + + // Simple helper class for building SQL statments + public class Sql + { + public Sql() + { + } + + public Sql(string sql, params object[] args) + { + _sql = sql; + _args = args; + } + + public static Sql Builder + { + get { return new Sql(); } + } + + string _sql; + object[] _args; + Sql _rhs; + string _sqlFinal; + object[] _argsFinal; + + private void Build() + { + // already built? + if (_sqlFinal != null) + return; + + // Build it + var sb = new StringBuilder(); + var args = new List(); + Build(sb, args, null); + _sqlFinal = sb.ToString(); + _argsFinal = args.ToArray(); + } + + public string SQL + { + get + { + Build(); + return _sqlFinal; + } + } + + public object[] Arguments + { + get + { + Build(); + return _argsFinal; + } + } + + public Sql Append(Sql sql) + { + if (_rhs != null) + _rhs.Append(sql); + else + _rhs = sql; + + return this; + } + + public Sql Append(string sql, params object[] args) + { + return Append(new Sql(sql, args)); + } + + static bool Is(Sql sql, string sqltype) + { + return sql != null && sql._sql != null && sql._sql.StartsWith(sqltype, StringComparison.InvariantCultureIgnoreCase); + } + + private void Build(StringBuilder sb, List args, Sql lhs) + { + if (!String.IsNullOrEmpty(_sql)) + { + // Add SQL to the string + if (sb.Length > 0) + { + sb.Append("\n"); + } + + var sql = Database.ProcessParams(_sql, _args, args); + + if (Is(lhs, "WHERE ") && Is(this, "WHERE ")) + sql = "AND " + sql.Substring(6); + if (Is(lhs, "ORDER BY ") && Is(this, "ORDER BY ")) + sql = ", " + sql.Substring(9); + + sb.Append(sql); + } + + // Now do rhs + if (_rhs != null) + _rhs.Build(sb, args, this); + } + + public Sql Where(string sql, params object[] args) + { + return Append(new Sql("WHERE (" + sql + ")", args)); + } + + public Sql OrderBy(params object[] columns) + { + return Append(new Sql("ORDER BY " + String.Join(", ", (from x in columns select x.ToString()).ToArray()))); + } + + public Sql Select(params object[] columns) + { + return Append(new Sql("SELECT " + String.Join(", ", (from x in columns select x.ToString()).ToArray()))); + } + + public Sql From(params object[] tables) + { + return Append(new Sql("FROM " + String.Join(", ", (from x in tables select x.ToString()).ToArray()))); + } + + public Sql GroupBy(params object[] columns) + { + return Append(new Sql("GROUP BY " + String.Join(", ", (from x in columns select x.ToString()).ToArray()))); + } + + private SqlJoinClause Join(string JoinType, string table) + { + return new SqlJoinClause(Append(new Sql(JoinType + table))); + } + + public SqlJoinClause InnerJoin(string table) { return Join("INNER JOIN ", table); } + public SqlJoinClause LeftJoin(string table) { return Join("LEFT JOIN ", table); } + + public class SqlJoinClause + { + private readonly Sql _sql; + + public SqlJoinClause(Sql sql) + { + _sql = sql; + } + + public Sql On(string onClause, params object[] args) + { + return _sql.Append("ON " + onClause, args); + } + } + } + +} diff --git a/packages/PetaPoco.4.0.2/PetaPoco.4.0.2.nupkg b/packages/PetaPoco.4.0.2/PetaPoco.4.0.2.nupkg new file mode 100644 index 0000000000000000000000000000000000000000..893d03ef6c5b1a7682c1fdaa5365847a2ea36346 GIT binary patch literal 33299 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 F{{z7^qptt} literal 0 HcmV?d00001 diff --git a/packages/PetaPoco.Core.4.0.2/Content/Models/PetaPoco.cs b/packages/PetaPoco.Core.4.0.2/Content/Models/PetaPoco.cs new file mode 100644 index 000000000..751aef848 --- /dev/null +++ b/packages/PetaPoco.Core.4.0.2/Content/Models/PetaPoco.cs @@ -0,0 +1,2186 @@ +/* PetaPoco v4.0.2 - A Tiny ORMish thing for your POCO's. + * Copyright © 2011 Topten Software. All Rights Reserved. + * + * Apache License 2.0 - http://www.toptensoftware.com/petapoco/license + * + * Special thanks to Rob Conery (@robconery) for original inspiration (ie:Massive) and for + * use of Subsonic's T4 templates, Rob Sullivan (@DataChomp) for hard core DBA advice + * and Adam Schroder (@schotime) for lots of suggestions, improvements and Oracle support + */ + +// Define PETAPOCO_NO_DYNAMIC in your project settings on .NET 3.5 + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Configuration; +using System.Data.Common; +using System.Data; +using System.Text.RegularExpressions; +using System.Reflection; +using System.Reflection.Emit; +using System.Linq.Expressions; + + +namespace PetaPoco +{ + // Poco's marked [Explicit] require all column properties to be marked + [AttributeUsage(AttributeTargets.Class)] + public class ExplicitColumnsAttribute : Attribute + { + } + // For non-explicit pocos, causes a property to be ignored + [AttributeUsage(AttributeTargets.Property)] + public class IgnoreAttribute : Attribute + { + } + + // For explicit pocos, marks property as a column and optionally supplies column name + [AttributeUsage(AttributeTargets.Property)] + public class ColumnAttribute : Attribute + { + public ColumnAttribute() { } + public ColumnAttribute(string name) { Name = name; } + public string Name { get; set; } + } + + // For explicit pocos, marks property as a result column and optionally supplies column name + [AttributeUsage(AttributeTargets.Property)] + public class ResultColumnAttribute : ColumnAttribute + { + public ResultColumnAttribute() { } + public ResultColumnAttribute(string name) : base(name) { } + } + + // Specify the table name of a poco + [AttributeUsage(AttributeTargets.Class)] + public class TableNameAttribute : Attribute + { + public TableNameAttribute(string tableName) + { + Value = tableName; + } + public string Value { get; private set; } + } + + // Specific the primary key of a poco class (and optional sequence name for Oracle) + [AttributeUsage(AttributeTargets.Class)] + public class PrimaryKeyAttribute : Attribute + { + public PrimaryKeyAttribute(string primaryKey) + { + Value = primaryKey; + autoIncrement = true; + } + + public string Value { get; private set; } + public string sequenceName { get; set; } + public bool autoIncrement { get; set; } + } + + [AttributeUsage(AttributeTargets.Property)] + public class AutoJoinAttribute : Attribute + { + public AutoJoinAttribute() { } + } + + // Results from paged request + public class Page + { + public long CurrentPage { get; set; } + public long TotalPages { get; set; } + public long TotalItems { get; set; } + public long ItemsPerPage { get; set; } + public List Items { get; set; } + public object Context { get; set; } + } + + // Pass as parameter value to force to DBType.AnsiString + public class AnsiString + { + public AnsiString(string str) + { + Value = str; + } + public string Value { get; private set; } + } + + // Used by IMapper to override table bindings for an object + public class TableInfo + { + public string TableName { get; set; } + public string PrimaryKey { get; set; } + public bool AutoIncrement { get; set; } + public string SequenceName { get; set; } + } + + // Optionally provide and implementation of this to Database.Mapper + public interface IMapper + { + void GetTableInfo(Type t, TableInfo ti); + bool MapPropertyToColumn(PropertyInfo pi, ref string columnName, ref bool resultColumn); + Func GetFromDbConverter(PropertyInfo pi, Type SourceType); + Func GetToDbConverter(Type SourceType); + } + + // Database class ... this is where most of the action happens + public class Database : IDisposable + { + public Database(IDbConnection connection) + { + _sharedConnection = connection; + _connectionString = connection.ConnectionString; + _sharedConnectionDepth = 2; // Prevent closing external connection + CommonConstruct(); + } + + public Database(string connectionString, string providerName) + { + _connectionString = connectionString; + _providerName = providerName; + CommonConstruct(); + } + + public Database(string connectionString, DbProviderFactory provider) + { + _connectionString = connectionString; + _factory = provider; + CommonConstruct(); + } + + public Database(string connectionStringName) + { + // Use first? + if (connectionStringName == "") + connectionStringName = ConfigurationManager.ConnectionStrings[0].Name; + + // Work out connection string and provider name + var providerName = "System.Data.SqlClient"; + if (ConfigurationManager.ConnectionStrings[connectionStringName] != null) + { + if (!string.IsNullOrEmpty(ConfigurationManager.ConnectionStrings[connectionStringName].ProviderName)) + providerName = ConfigurationManager.ConnectionStrings[connectionStringName].ProviderName; + } + else + { + throw new InvalidOperationException("Can't find a connection string with the name '" + connectionStringName + "'"); + } + + // Store factory and connection string + _connectionString = ConfigurationManager.ConnectionStrings[connectionStringName].ConnectionString; + _providerName = providerName; + CommonConstruct(); + } + + enum DBType + { + SqlServer, + SqlServerCE, + MySql, + PostgreSQL, + Oracle, + } + DBType _dbType = DBType.SqlServer; + + // Common initialization + private void CommonConstruct() + { + _transactionDepth = 0; + EnableAutoSelect = true; + EnableNamedParams = true; + ForceDateTimesToUtc = true; + + if (_providerName != null) + _factory = DbProviderFactories.GetFactory(_providerName); + + string dbtype = (_factory == null ? _sharedConnection.GetType() : _factory.GetType()).Name; + if (dbtype.StartsWith("MySql")) _dbType = DBType.MySql; + else if (dbtype.StartsWith("SqlCe")) _dbType = DBType.SqlServerCE; + else if (dbtype.StartsWith("Npgsql")) _dbType = DBType.PostgreSQL; + else if (dbtype.StartsWith("Oracle")) _dbType = DBType.Oracle; + + if (_dbType == DBType.MySql && _connectionString != null && _connectionString.IndexOf("Allow User Variables=true") >= 0) + _paramPrefix = "?"; + if (_dbType == DBType.Oracle) + _paramPrefix = ":"; + } + + // Automatically close one open shared connection + public void Dispose() + { + // Automatically close one open connection reference + // (Works with KeepConnectionAlive and manually opening a shared connection) + CloseSharedConnection(); + } + + // Set to true to keep the first opened connection alive until this object is disposed + public bool KeepConnectionAlive { get; set; } + + // Open a connection (can be nested) + public void OpenSharedConnection() + { + if (_sharedConnectionDepth == 0) + { + _sharedConnection = _factory.CreateConnection(); + _sharedConnection.ConnectionString = _connectionString; + _sharedConnection.Open(); + + if (KeepConnectionAlive) + _sharedConnectionDepth++; // Make sure you call Dispose + } + _sharedConnectionDepth++; + } + + // Close a previously opened connection + public void CloseSharedConnection() + { + if (_sharedConnectionDepth > 0) + { + _sharedConnectionDepth--; + if (_sharedConnectionDepth == 0) + { + _sharedConnection.Dispose(); + _sharedConnection = null; + } + } + } + + // Access to our shared connection + public IDbConnection Connection + { + get { return _sharedConnection; } + } + + // Helper to create a transaction scope + public Transaction GetTransaction() + { + return new Transaction(this); + } + + // Use by derived repo generated by T4 templates + public virtual void OnBeginTransaction() { } + public virtual void OnEndTransaction() { } + + // Start a new transaction, can be nested, every call must be + // matched by a call to AbortTransaction or CompleteTransaction + // Use `using (var scope=db.Transaction) { scope.Complete(); }` to ensure correct semantics + public void BeginTransaction() + { + _transactionDepth++; + + if (_transactionDepth == 1) + { + OpenSharedConnection(); + _transaction = _sharedConnection.BeginTransaction(); + _transactionCancelled = false; + OnBeginTransaction(); + } + + } + + // Internal helper to cleanup transaction stuff + void CleanupTransaction() + { + OnEndTransaction(); + + if (_transactionCancelled) + _transaction.Rollback(); + else + _transaction.Commit(); + + _transaction.Dispose(); + _transaction = null; + + CloseSharedConnection(); + } + + // Abort the entire outer most transaction scope + public void AbortTransaction() + { + _transactionCancelled = true; + if ((--_transactionDepth) == 0) + CleanupTransaction(); + } + + // Complete the transaction + public void CompleteTransaction() + { + if ((--_transactionDepth) == 0) + CleanupTransaction(); + } + + // Helper to handle named parameters from object properties + static Regex rxParams = new Regex(@"(? args_dest) + { + return rxParams.Replace(_sql, m => + { + string param = m.Value.Substring(1); + + object arg_val; + + int paramIndex; + if (int.TryParse(param, out paramIndex)) + { + // Numbered parameter + if (paramIndex < 0 || paramIndex >= args_src.Length) + throw new ArgumentOutOfRangeException(string.Format("Parameter '@{0}' specified but only {1} parameters supplied (in `{2}`)", paramIndex, args_src.Length, _sql)); + arg_val = args_src[paramIndex]; + } + else + { + // Look for a property on one of the arguments with this name + bool found = false; + arg_val = null; + foreach (var o in args_src) + { + var pi = o.GetType().GetProperty(param); + if (pi != null) + { + arg_val = pi.GetValue(o, null); + found = true; + break; + } + } + + if (!found) + throw new ArgumentException(string.Format("Parameter '@{0}' specified but none of the passed arguments have a property with this name (in '{1}')", param, _sql)); + } + + // Expand collections to parameter lists + if ((arg_val as System.Collections.IEnumerable) != null && + (arg_val as string) == null && + (arg_val as byte[]) == null) + { + var sb = new StringBuilder(); + foreach (var i in arg_val as System.Collections.IEnumerable) + { + sb.Append((sb.Length == 0 ? "@" : ",@") + args_dest.Count.ToString()); + args_dest.Add(i); + } + return sb.ToString(); + } + else + { + args_dest.Add(arg_val); + return "@" + (args_dest.Count - 1).ToString(); + } + } + ); + } + + // Add a parameter to a DB command + void AddParam(IDbCommand cmd, object item, string ParameterPrefix) + { + // Convert value to from poco type to db type + if (Database.Mapper != null && item!=null) + { + var fn = Database.Mapper.GetToDbConverter(item.GetType()); + if (fn!=null) + item = fn(item); + } + + // Support passed in parameters + var idbParam = item as IDbDataParameter; + if (idbParam != null) + { + idbParam.ParameterName = string.Format("{0}{1}", ParameterPrefix, cmd.Parameters.Count); + cmd.Parameters.Add(idbParam); + return; + } + + var p = cmd.CreateParameter(); + p.ParameterName = string.Format("{0}{1}", ParameterPrefix, cmd.Parameters.Count); + if (item == null) + { + p.Value = DBNull.Value; + } + else + { + var t = item.GetType(); + if (t.IsEnum) // PostgreSQL .NET driver wont cast enum to int + { + p.Value = (int)item; + } + else if (t == typeof(Guid)) + { + p.Value = item.ToString(); + p.DbType = DbType.String; + p.Size = 40; + } + else if (t == typeof(string)) + { + p.Size = Math.Max((item as string).Length + 1, 4000); // Help query plan caching by using common size + p.Value = item; + } + else if (t == typeof(AnsiString)) + { + // Thanks @DataChomp for pointing out the SQL Server indexing performance hit of using wrong string type on varchar + p.Size = Math.Max((item as AnsiString).Value.Length + 1, 4000); + p.Value = (item as AnsiString).Value; + p.DbType = DbType.AnsiString; + } + else if (t == typeof(bool) && _dbType != DBType.PostgreSQL) + { + p.Value = ((bool)item) ? 1 : 0; + } + else if (item.GetType().Name == "SqlGeography") //SqlGeography is a CLR Type + { + p.GetType().GetProperty("UdtTypeName").SetValue(p, "geography", null); //geography is the equivalent SQL Server Type + p.Value = item; + } + + else if (item.GetType().Name == "SqlGeometry") //SqlGeometry is a CLR Type + { + p.GetType().GetProperty("UdtTypeName").SetValue(p, "geometry", null); //geography is the equivalent SQL Server Type + p.Value = item; + } + else + { + p.Value = item; + } + } + + cmd.Parameters.Add(p); + } + + // Create a command + static Regex rxParamsPrefix = new Regex(@"(?(); + sql = ProcessParams(sql, args, new_args); + args = new_args.ToArray(); + } + + // Perform parameter prefix replacements + if (_paramPrefix != "@") + sql = rxParamsPrefix.Replace(sql, m => _paramPrefix + m.Value.Substring(1)); + sql = sql.Replace("@@", "@"); // <- double @@ escapes a single @ + + // Create the command and add parameters + IDbCommand cmd = _factory == null ? connection.CreateCommand() : _factory.CreateCommand(); + cmd.Connection = connection; + cmd.CommandText = sql; + cmd.Transaction = _transaction; + foreach (var item in args) + { + AddParam(cmd, item, _paramPrefix); + } + + if (_dbType == DBType.Oracle) + { + cmd.GetType().GetProperty("BindByName").SetValue(cmd, true, null); + } + + if (!String.IsNullOrEmpty(sql)) + DoPreExecute(cmd); + + return cmd; + } + + // Override this to log/capture exceptions + public virtual void OnException(Exception x) + { + System.Diagnostics.Debug.WriteLine(x.ToString()); + System.Diagnostics.Debug.WriteLine(LastCommand); + } + + // Override this to log commands, or modify command before execution + public virtual void OnExecutingCommand(IDbCommand cmd) { } + public virtual void OnExecutedCommand(IDbCommand cmd) { } + + // Execute a non-query command + public int Execute(string sql, params object[] args) + { + try + { + OpenSharedConnection(); + try + { + using (var cmd = CreateCommand(_sharedConnection, sql, args)) + { + var retv=cmd.ExecuteNonQuery(); + OnExecutedCommand(cmd); + return retv; + } + } + finally + { + CloseSharedConnection(); + } + } + catch (Exception x) + { + OnException(x); + throw; + } + } + + public int Execute(Sql sql) + { + return Execute(sql.SQL, sql.Arguments); + } + + // Execute and cast a scalar property + public T ExecuteScalar(string sql, params object[] args) + { + try + { + OpenSharedConnection(); + try + { + using (var cmd = CreateCommand(_sharedConnection, sql, args)) + { + object val = cmd.ExecuteScalar(); + OnExecutedCommand(cmd); + return (T)Convert.ChangeType(val, typeof(T)); + } + } + finally + { + CloseSharedConnection(); + } + } + catch (Exception x) + { + OnException(x); + throw; + } + } + + public T ExecuteScalar(Sql sql) + { + return ExecuteScalar(sql.SQL, sql.Arguments); + } + + Regex rxSelect = new Regex(@"\A\s*(SELECT|EXECUTE|CALL)\s", RegexOptions.Compiled | RegexOptions.Singleline | RegexOptions.IgnoreCase | RegexOptions.Multiline); + Regex rxFrom = new Regex(@"\A\s*FROM\s", RegexOptions.Compiled | RegexOptions.Singleline | RegexOptions.IgnoreCase | RegexOptions.Multiline); + string AddSelectClause(string sql) + { + if (sql.StartsWith(";")) + return sql.Substring(1); + + if (!rxSelect.IsMatch(sql)) + { + var pd = PocoData.ForType(typeof(T)); + var tableName = EscapeTableName(pd.TableInfo.TableName); + string cols = string.Join(", ", (from c in pd.QueryColumns select tableName + "." + EscapeSqlIdentifier(c)).ToArray()); + if (!rxFrom.IsMatch(sql)) + sql = string.Format("SELECT {0} FROM {1} {2}", cols, tableName, sql); + else + sql = string.Format("SELECT {0} {1}", cols, sql); + } + return sql; + } + + public bool EnableAutoSelect { get; set; } + public bool EnableNamedParams { get; set; } + public bool ForceDateTimesToUtc { get; set; } + + // Return a typed list of pocos + public List Fetch(string sql, params object[] args) + { + return Query(sql, args).ToList(); + } + + public List Fetch(Sql sql) + { + return Fetch(sql.SQL, sql.Arguments); + } + + static Regex rxColumns = new Regex(@"\A\s*SELECT\s+((?:\((?>\((?)|\)(?<-depth>)|.?)*(?(depth)(?!))\)|.)*?)(?\((?)|\)(?<-depth>)|.?)*(?(depth)(?!))\)|[\w\(\)\.])+(?:\s+(?:ASC|DESC))?(?:\s*,\s*(?:\((?>\((?)|\)(?<-depth>)|.?)*(?(depth)(?!))\)|[\w\(\)\.])+(?:\s+(?:ASC|DESC))?)*", RegexOptions.IgnoreCase | RegexOptions.Multiline | RegexOptions.Singleline | RegexOptions.Compiled); + public static bool SplitSqlForPaging(string sql, out string sqlCount, out string sqlSelectRemoved, out string sqlOrderBy) + { + sqlSelectRemoved = null; + sqlCount = null; + sqlOrderBy = null; + + // Extract the columns from "SELECT FROM" + var m = rxColumns.Match(sql); + if (!m.Success) + return false; + + // Save column list and replace with COUNT(*) + Group g = m.Groups[1]; + sqlCount = sql.Substring(0, g.Index) + "COUNT(*) " + sql.Substring(g.Index + g.Length); + sqlSelectRemoved = sql.Substring(g.Index); + + // Look for an "ORDER BY " clause + m = rxOrderBy.Match(sqlCount); + if (!m.Success) + return false; + + g = m.Groups[0]; + sqlOrderBy = g.ToString(); + sqlCount = sqlCount.Substring(0, g.Index) + sqlCount.Substring(g.Index + g.Length); + + return true; + } + + public void BuildPageQueries(long page, long itemsPerPage, string sql, ref object[] args, out string sqlCount, out string sqlPage) + { + // Add auto select clause + if (EnableAutoSelect) + sql = AddSelectClause(sql); + + // Split the SQL into the bits we need + string sqlSelectRemoved, sqlOrderBy; + if (!SplitSqlForPaging(sql, out sqlCount, out sqlSelectRemoved, out sqlOrderBy)) + throw new Exception("Unable to parse SQL statement for paged query"); + if (_dbType == DBType.Oracle && sqlSelectRemoved.StartsWith("*")) + throw new Exception("Query must alias '*' when performing a paged query.\neg. select t.* from table t order by t.id"); + + // Build the SQL for the actual final result + if (_dbType == DBType.SqlServer || _dbType == DBType.Oracle) + { + sqlSelectRemoved = rxOrderBy.Replace(sqlSelectRemoved, ""); + sqlPage = string.Format("SELECT * FROM (SELECT ROW_NUMBER() OVER ({0}) peta_rn, {1}) peta_paged WHERE peta_rn>@{2} AND peta_rn<=@{3}", + sqlOrderBy, sqlSelectRemoved, args.Length, args.Length + 1); + args = args.Concat(new object[] { (page - 1) * itemsPerPage, page * itemsPerPage }).ToArray(); + } + else if (_dbType == DBType.SqlServerCE) + { + sqlPage = string.Format("{0}\nOFFSET @{1} ROWS FETCH NEXT @{2} ROWS ONLY", sql, args.Length, args.Length + 1); + args = args.Concat(new object[] { (page - 1) * itemsPerPage, itemsPerPage }).ToArray(); + } + else + { + sqlPage = string.Format("{0}\nLIMIT @{1} OFFSET @{2}", sql, args.Length, args.Length + 1); + args = args.Concat(new object[] { itemsPerPage, (page - 1) * itemsPerPage }).ToArray(); + } + + } + + // Fetch a page + public Page Page(long page, long itemsPerPage, string sql, params object[] args) + { + string sqlCount, sqlPage; + BuildPageQueries(page, itemsPerPage, sql, ref args, out sqlCount, out sqlPage); + + // Save the one-time command time out and use it for both queries + int saveTimeout = OneTimeCommandTimeout; + + // Setup the paged result + var result = new Page(); + result.CurrentPage = page; + result.ItemsPerPage = itemsPerPage; + result.TotalItems = ExecuteScalar(sqlCount, args); + result.TotalPages = result.TotalItems / itemsPerPage; + if ((result.TotalItems % itemsPerPage) != 0) + result.TotalPages++; + + OneTimeCommandTimeout = saveTimeout; + + // Get the records + result.Items = Fetch(sqlPage, args); + + // Done + return result; + } + + public Page Page(long page, long itemsPerPage, Sql sql) + { + return Page(page, itemsPerPage, sql.SQL, sql.Arguments); + } + + + public List Fetch(long page, long itemsPerPage, string sql, params object[] args) + { + string sqlCount, sqlPage; + BuildPageQueries(page, itemsPerPage, sql, ref args, out sqlCount, out sqlPage); + return Fetch(sqlPage, args); + } + + public List Fetch(long page, long itemsPerPage, Sql sql) + { + return Fetch(page, itemsPerPage, sql.SQL, sql.Arguments); + } + + // Return an enumerable collection of pocos + public IEnumerable Query(string sql, params object[] args) + { + if (EnableAutoSelect) + sql = AddSelectClause(sql); + + OpenSharedConnection(); + try + { + using (var cmd = CreateCommand(_sharedConnection, sql, args)) + { + IDataReader r; + var pd = PocoData.ForType(typeof(T)); + try + { + r = cmd.ExecuteReader(); + OnExecutedCommand(cmd); + } + catch (Exception x) + { + OnException(x); + throw; + } + var factory = pd.GetFactory(cmd.CommandText, _sharedConnection.ConnectionString, ForceDateTimesToUtc, 0, r.FieldCount, r) as Func; + using (r) + { + while (true) + { + T poco; + try + { + if (!r.Read()) + yield break; + poco = factory(r); + } + catch (Exception x) + { + OnException(x); + throw; + } + + yield return poco; + } + } + } + } + finally + { + CloseSharedConnection(); + } + } + + // Multi Fetch + public List Fetch(Func cb, string sql, params object[] args) { return Query(cb, sql, args).ToList(); } + public List Fetch(Func cb, string sql, params object[] args) { return Query(cb, sql, args).ToList(); } + public List Fetch(Func cb, string sql, params object[] args) { return Query(cb, sql, args).ToList(); } + + // Multi Query + public IEnumerable Query(Func cb, string sql, params object[] args) { return Query(new Type[] { typeof(T1), typeof(T2) }, cb, sql, args); } + public IEnumerable Query(Func cb, string sql, params object[] args) { return Query(new Type[] { typeof(T1), typeof(T2), typeof(T3)}, cb, sql, args); } + public IEnumerable Query(Func cb, string sql, params object[] args) { return Query(new Type[] { typeof(T1), typeof(T2), typeof(T3), typeof(T4)}, cb, sql, args); } + + // Multi Fetch (SQL builder) + public List Fetch(Func cb, Sql sql) { return Query(cb, sql.SQL, sql.Arguments).ToList(); } + public List Fetch(Func cb, Sql sql) { return Query(cb, sql.SQL, sql.Arguments).ToList(); } + public List Fetch(Func cb, Sql sql) { return Query(cb, sql.SQL, sql.Arguments).ToList(); } + + // Multi Query (SQL builder) + public IEnumerable Query(Func cb, Sql sql) { return Query(new Type[] { typeof(T1), typeof(T2) }, cb, sql.SQL, sql.Arguments); } + public IEnumerable Query(Func cb, Sql sql) { return Query(new Type[] { typeof(T1), typeof(T2), typeof(T3) }, cb, sql.SQL, sql.Arguments); } + public IEnumerable Query(Func cb, Sql sql) { return Query(new Type[] { typeof(T1), typeof(T2), typeof(T3), typeof(T4) }, cb, sql.SQL, sql.Arguments); } + + // Multi Fetch (Simple) + public List Fetch(string sql, params object[] args) { return Query(sql, args).ToList(); } + public List Fetch(string sql, params object[] args) { return Query(sql, args).ToList(); } + public List Fetch(string sql, params object[] args) { return Query(sql, args).ToList(); } + + // Multi Query (Simple) + public IEnumerable Query(string sql, params object[] args) { return Query(new Type[] { typeof(T1), typeof(T2) }, null, sql, args); } + public IEnumerable Query(string sql, params object[] args) { return Query(new Type[] { typeof(T1), typeof(T2), typeof(T3) }, null, sql, args); } + public IEnumerable Query(string sql, params object[] args) { return Query(new Type[] { typeof(T1), typeof(T2), typeof(T3), typeof(T4) }, null, sql, args); } + + // Multi Fetch (Simple) (SQL builder) + public List Fetch(Sql sql) { return Query(sql.SQL, sql.Arguments).ToList(); } + public List Fetch(Sql sql) { return Query(sql.SQL, sql.Arguments).ToList(); } + public List Fetch(Sql sql) { return Query(sql.SQL, sql.Arguments).ToList(); } + + // Multi Query (Simple) (SQL builder) + public IEnumerable Query(Sql sql) { return Query(new Type[] { typeof(T1), typeof(T2) }, null, sql.SQL, sql.Arguments); } + public IEnumerable Query(Sql sql) { return Query(new Type[] { typeof(T1), typeof(T2), typeof(T3) }, null, sql.SQL, sql.Arguments); } + public IEnumerable Query(Sql sql) { return Query(new Type[] { typeof(T1), typeof(T2), typeof(T3), typeof(T4) }, null, sql.SQL, sql.Arguments); } + + // Automagically guess the property relationships between various POCOs and create a delegate that will set them up + object GetAutoMapper(Type[] types) + { + // Build a key + var kb = new StringBuilder(); + foreach (var t in types) + { + kb.Append(t.ToString()); + kb.Append(":"); + } + var key = kb.ToString(); + + // Check cache + RWLock.EnterReadLock(); + try + { + object mapper; + if (AutoMappers.TryGetValue(key, out mapper)) + return mapper; + } + finally + { + RWLock.ExitReadLock(); + } + + // Create it + RWLock.EnterWriteLock(); + try + { + // Try again + object mapper; + if (AutoMappers.TryGetValue(key, out mapper)) + return mapper; + + // Create a method + var m = new DynamicMethod("petapoco_automapper", types[0], types, true); + var il = m.GetILGenerator(); + + for (int i = 1; i < types.Length; i++) + { + bool handled = false; + for (int j = i - 1; j >= 0; j--) + { + // Find the property + var candidates = from p in types[j].GetProperties() where p.PropertyType == types[i] select p; + if (candidates.Count() == 0) + continue; + if (candidates.Count() > 1) + throw new InvalidOperationException(string.Format("Can't auto join {0} as {1} has more than one property of type {0}", types[i], types[j])); + + // Generate code + il.Emit(OpCodes.Ldarg_S, j); + il.Emit(OpCodes.Ldarg_S, i); + il.Emit(OpCodes.Callvirt, candidates.First().GetSetMethod(true)); + handled = true; + } + + if (!handled) + throw new InvalidOperationException(string.Format("Can't auto join {0}", types[i])); + } + + il.Emit(OpCodes.Ldarg_0); + il.Emit(OpCodes.Ret); + + // Cache it + var del = m.CreateDelegate(Expression.GetFuncType(types.Concat(types.Take(1)).ToArray())); + AutoMappers.Add(key, del); + return del; + } + finally + { + RWLock.ExitWriteLock(); + } + } + + // Find the split point in a result set for two different pocos and return the poco factory for the first + Delegate FindSplitPoint(Type typeThis, Type typeNext, string sql, IDataReader r, ref int pos) + { + // Last? + if (typeNext == null) + return PocoData.ForType(typeThis).GetFactory(sql, _sharedConnection.ConnectionString, ForceDateTimesToUtc, pos, r.FieldCount - pos, r); + + // Get PocoData for the two types + PocoData pdThis = PocoData.ForType(typeThis); + PocoData pdNext = PocoData.ForType(typeNext); + + // Find split point + int firstColumn = pos; + var usedColumns = new Dictionary(); + for (; pos < r.FieldCount; pos++) + { + // Split if field name has already been used, or if the field doesn't exist in current poco but does in the next + string fieldName = r.GetName(pos); + if (usedColumns.ContainsKey(fieldName) || (!pdThis.Columns.ContainsKey(fieldName) && pdNext.Columns.ContainsKey(fieldName))) + { + return pdThis.GetFactory(sql, _sharedConnection.ConnectionString, ForceDateTimesToUtc, firstColumn, pos - firstColumn, r); + } + usedColumns.Add(fieldName, true); + } + + throw new InvalidOperationException(string.Format("Couldn't find split point between {0} and {1}", typeThis, typeNext)); + } + + // Instance data used by the Multipoco factory delegate - essentially a list of the nested poco factories to call + class MultiPocoFactory + { + public List m_Delegates; + public Delegate GetItem(int index) { return m_Delegates[index]; } + } + + // Create a multi-poco factory + Func CreateMultiPocoFactory(Type[] types, string sql, IDataReader r) + { + var m = new DynamicMethod("petapoco_multipoco_factory", typeof(TRet), new Type[] { typeof(MultiPocoFactory), typeof(IDataReader), typeof(object) }, typeof(MultiPocoFactory)); + var il = m.GetILGenerator(); + + // Load the callback + il.Emit(OpCodes.Ldarg_2); + + // Call each delegate + var dels = new List(); + int pos = 0; + for (int i=0; i)m.CreateDelegate(typeof(Func), new MultiPocoFactory() { m_Delegates = dels }); + } + + // Various cached stuff + static Dictionary MultiPocoFactories = new Dictionary(); + static Dictionary AutoMappers = new Dictionary(); + static System.Threading.ReaderWriterLockSlim RWLock = new System.Threading.ReaderWriterLockSlim(); + + // Get (or create) the multi-poco factory for a query + Func GetMultiPocoFactory(Type[] types, string sql, IDataReader r) + { + // Build a key string (this is crap, should address this at some point) + var kb = new StringBuilder(); + kb.Append(typeof(TRet).ToString()); + kb.Append(":"); + foreach (var t in types) + { + kb.Append(":"); + kb.Append(t.ToString()); + } + kb.Append(":"); kb.Append(_sharedConnection.ConnectionString); + kb.Append(":"); kb.Append(ForceDateTimesToUtc); + kb.Append(":"); kb.Append(sql); + string key = kb.ToString(); + + // Check cache + RWLock.EnterReadLock(); + try + { + object oFactory; + if (MultiPocoFactories.TryGetValue(key, out oFactory)) + return (Func)oFactory; + } + finally + { + RWLock.ExitReadLock(); + } + + // Cache it + RWLock.EnterWriteLock(); + try + { + // Check again + object oFactory; + if (MultiPocoFactories.TryGetValue(key, out oFactory)) + return (Func)oFactory; + + // Create the factory + var Factory = CreateMultiPocoFactory(types, sql, r); + + MultiPocoFactories.Add(key, Factory); + return Factory; + } + finally + { + RWLock.ExitWriteLock(); + } + + } + + // Actual implementation of the multi-poco query + public IEnumerable Query(Type[] types, object cb, string sql, params object[] args) + { + OpenSharedConnection(); + try + { + using (var cmd = CreateCommand(_sharedConnection, sql, args)) + { + IDataReader r; + try + { + r = cmd.ExecuteReader(); + OnExecutedCommand(cmd); + } + catch (Exception x) + { + OnException(x); + throw; + } + var factory = GetMultiPocoFactory(types, sql, r); + if (cb == null) + cb = GetAutoMapper(types.ToArray()); + bool bNeedTerminator=false; + using (r) + { + while (true) + { + TRet poco; + try + { + if (!r.Read()) + break; + poco = factory(r, cb); + } + catch (Exception x) + { + OnException(x); + throw; + } + + if (poco != null) + yield return poco; + else + bNeedTerminator = true; + } + if (bNeedTerminator) + { + var poco = (TRet)(cb as Delegate).DynamicInvoke(new object[types.Length]); + if (poco != null) + yield return poco; + else + yield break; + } + } + } + } + finally + { + CloseSharedConnection(); + } + } + + + public IEnumerable Query(Sql sql) + { + return Query(sql.SQL, sql.Arguments); + } + + public bool Exists(object primaryKey) + { + return FirstOrDefault(string.Format("WHERE {0}=@0", EscapeSqlIdentifier(PocoData.ForType(typeof(T)).TableInfo.PrimaryKey)), primaryKey) != null; + } + public T Single(object primaryKey) + { + return Single(string.Format("WHERE {0}=@0", EscapeSqlIdentifier(PocoData.ForType(typeof(T)).TableInfo.PrimaryKey)), primaryKey); + } + public T SingleOrDefault(object primaryKey) + { + return SingleOrDefault(string.Format("WHERE {0}=@0", EscapeSqlIdentifier(PocoData.ForType(typeof(T)).TableInfo.PrimaryKey)), primaryKey); + } + public T Single(string sql, params object[] args) + { + return Query(sql, args).Single(); + } + public T SingleOrDefault(string sql, params object[] args) + { + return Query(sql, args).SingleOrDefault(); + } + public T First(string sql, params object[] args) + { + return Query(sql, args).First(); + } + public T FirstOrDefault(string sql, params object[] args) + { + return Query(sql, args).FirstOrDefault(); + } + + public T Single(Sql sql) + { + return Query(sql).Single(); + } + public T SingleOrDefault(Sql sql) + { + return Query(sql).SingleOrDefault(); + } + public T First(Sql sql) + { + return Query(sql).First(); + } + public T FirstOrDefault(Sql sql) + { + return Query(sql).FirstOrDefault(); + } + + public string EscapeTableName(string str) + { + // Assume table names with "dot", or opening sq is already escaped + return str.IndexOf('.') >= 0 ? str : EscapeSqlIdentifier(str); + } + public string EscapeSqlIdentifier(string str) + { + switch (_dbType) + { + case DBType.MySql: + return string.Format("`{0}`", str); + + case DBType.PostgreSQL: + case DBType.Oracle: + return string.Format("\"{0}\"", str); + + default: + return string.Format("[{0}]", str); + } + } + + public object Insert(string tableName, string primaryKeyName, object poco) + { + return Insert(tableName, primaryKeyName, true, poco); + } + + // Insert a poco into a table. If the poco has a property with the same name + // as the primary key the id of the new record is assigned to it. Either way, + // the new id is returned. + public object Insert(string tableName, string primaryKeyName, bool autoIncrement, object poco) + { + try + { + OpenSharedConnection(); + try + { + using (var cmd = CreateCommand(_sharedConnection, "")) + { + var pd = PocoData.ForObject(poco, primaryKeyName); + var names = new List(); + var values = new List(); + var index = 0; + foreach (var i in pd.Columns) + { + // Don't insert result columns + if (i.Value.ResultColumn) + continue; + + // Don't insert the primary key (except under oracle where we need bring in the next sequence value) + if (autoIncrement && primaryKeyName != null && string.Compare(i.Key, primaryKeyName, true)==0) + { + if (_dbType == DBType.Oracle && !string.IsNullOrEmpty(pd.TableInfo.SequenceName)) + { + names.Add(i.Key); + values.Add(string.Format("{0}.nextval", pd.TableInfo.SequenceName)); + } + continue; + } + + names.Add(EscapeSqlIdentifier(i.Key)); + values.Add(string.Format("{0}{1}", _paramPrefix, index++)); + AddParam(cmd, i.Value.GetValue(poco), _paramPrefix); + } + + cmd.CommandText = string.Format("INSERT INTO {0} ({1}) VALUES ({2})", + EscapeTableName(tableName), + string.Join(",", names.ToArray()), + string.Join(",", values.ToArray()) + ); + + if (!autoIncrement) + { + DoPreExecute(cmd); + cmd.ExecuteNonQuery(); + OnExecutedCommand(cmd); + return true; + } + + + object id; + switch (_dbType) + { + case DBType.SqlServerCE: + DoPreExecute(cmd); + cmd.ExecuteNonQuery(); + OnExecutedCommand(cmd); + id = ExecuteScalar("SELECT @@@IDENTITY AS NewID;"); + break; + case DBType.SqlServer: + cmd.CommandText += ";\nSELECT SCOPE_IDENTITY() AS NewID;"; + DoPreExecute(cmd); + id = cmd.ExecuteScalar(); + OnExecutedCommand(cmd); + break; + case DBType.PostgreSQL: + if (primaryKeyName != null) + { + cmd.CommandText += string.Format("returning {0} as NewID", EscapeSqlIdentifier(primaryKeyName)); + DoPreExecute(cmd); + id = cmd.ExecuteScalar(); + } + else + { + id = -1; + DoPreExecute(cmd); + cmd.ExecuteNonQuery(); + } + OnExecutedCommand(cmd); + break; + case DBType.Oracle: + if (primaryKeyName != null) + { + cmd.CommandText += string.Format(" returning {0} into :newid", EscapeSqlIdentifier(primaryKeyName)); + var param = cmd.CreateParameter(); + param.ParameterName = ":newid"; + param.Value = DBNull.Value; + param.Direction = ParameterDirection.ReturnValue; + param.DbType = DbType.Int64; + cmd.Parameters.Add(param); + DoPreExecute(cmd); + cmd.ExecuteNonQuery(); + id = param.Value; + } + else + { + id = -1; + DoPreExecute(cmd); + cmd.ExecuteNonQuery(); + } + OnExecutedCommand(cmd); + break; + default: + cmd.CommandText += ";\nSELECT @@IDENTITY AS NewID;"; + DoPreExecute(cmd); + id = cmd.ExecuteScalar(); + OnExecutedCommand(cmd); + break; + } + + + // Assign the ID back to the primary key property + if (primaryKeyName != null) + { + PocoColumn pc; + if (pd.Columns.TryGetValue(primaryKeyName, out pc)) + { + pc.SetValue(poco, pc.ChangeType(id)); + } + } + + return id; + } + } + finally + { + CloseSharedConnection(); + } + } + catch (Exception x) + { + OnException(x); + throw; + } + } + + // Insert an annotated poco object + public object Insert(object poco) + { + var pd = PocoData.ForType(poco.GetType()); + return Insert(pd.TableInfo.TableName, pd.TableInfo.PrimaryKey, pd.TableInfo.AutoIncrement, poco); + } + + // Update a record with values from a poco. primary key value can be either supplied or read from the poco + public int Update(string tableName, string primaryKeyName, object poco, object primaryKeyValue) + { + try + { + OpenSharedConnection(); + try + { + using (var cmd = CreateCommand(_sharedConnection, "")) + { + var sb = new StringBuilder(); + var index = 0; + var pd = PocoData.ForObject(poco,primaryKeyName); + foreach (var i in pd.Columns) + { + // Don't update the primary key, but grab the value if we don't have it + if (string.Compare(i.Key, primaryKeyName, true)==0) + { + if (primaryKeyValue == null) + primaryKeyValue = i.Value.GetValue(poco); + continue; + } + + // Dont update result only columns + if (i.Value.ResultColumn) + continue; + + // Build the sql + if (index > 0) + sb.Append(", "); + sb.AppendFormat("{0} = {1}{2}", EscapeSqlIdentifier(i.Key), _paramPrefix, index++); + + // Store the parameter in the command + AddParam(cmd, i.Value.GetValue(poco), _paramPrefix); + } + + cmd.CommandText = string.Format("UPDATE {0} SET {1} WHERE {2} = {3}{4}", + EscapeTableName(tableName), sb.ToString(), EscapeSqlIdentifier(primaryKeyName), _paramPrefix, index++); + AddParam(cmd, primaryKeyValue, _paramPrefix); + + DoPreExecute(cmd); + + // Do it + var retv=cmd.ExecuteNonQuery(); + OnExecutedCommand(cmd); + return retv; + } + } + finally + { + CloseSharedConnection(); + } + } + catch (Exception x) + { + OnException(x); + throw; + } + } + + public int Update(string tableName, string primaryKeyName, object poco) + { + return Update(tableName, primaryKeyName, poco, null); + } + + public int Update(object poco) + { + return Update(poco, null); + } + + public int Update(object poco, object primaryKeyValue) + { + var pd = PocoData.ForType(poco.GetType()); + return Update(pd.TableInfo.TableName, pd.TableInfo.PrimaryKey, poco, primaryKeyValue); + } + + public int Update(string sql, params object[] args) + { + var pd = PocoData.ForType(typeof(T)); + return Execute(string.Format("UPDATE {0} {1}", EscapeTableName(pd.TableInfo.TableName), sql), args); + } + + public int Update(Sql sql) + { + var pd = PocoData.ForType(typeof(T)); + return Execute(new Sql(string.Format("UPDATE {0}", EscapeTableName(pd.TableInfo.TableName))).Append(sql)); + } + + public int Delete(string tableName, string primaryKeyName, object poco) + { + return Delete(tableName, primaryKeyName, poco, null); + } + + public int Delete(string tableName, string primaryKeyName, object poco, object primaryKeyValue) + { + // If primary key value not specified, pick it up from the object + if (primaryKeyValue == null) + { + var pd = PocoData.ForObject(poco,primaryKeyName); + PocoColumn pc; + if (pd.Columns.TryGetValue(primaryKeyName, out pc)) + { + primaryKeyValue = pc.GetValue(poco); + } + } + + // Do it + var sql = string.Format("DELETE FROM {0} WHERE {1}=@0", EscapeTableName(tableName), EscapeSqlIdentifier(primaryKeyName)); + return Execute(sql, primaryKeyValue); + } + + public int Delete(object poco) + { + var pd = PocoData.ForType(poco.GetType()); + return Delete(pd.TableInfo.TableName, pd.TableInfo.PrimaryKey, poco); + } + + public int Delete(object pocoOrPrimaryKey) + { + if (pocoOrPrimaryKey.GetType() == typeof(T)) + return Delete(pocoOrPrimaryKey); + var pd = PocoData.ForType(typeof(T)); + return Delete(pd.TableInfo.TableName, pd.TableInfo.PrimaryKey, null, pocoOrPrimaryKey); + } + + public int Delete(string sql, params object[] args) + { + var pd = PocoData.ForType(typeof(T)); + return Execute(string.Format("DELETE FROM {0} {1}", EscapeTableName(pd.TableInfo.TableName), sql), args); + } + + public int Delete(Sql sql) + { + var pd = PocoData.ForType(typeof(T)); + return Execute(new Sql(string.Format("DELETE FROM {0}", EscapeTableName(pd.TableInfo.TableName))).Append(sql)); + } + + // Check if a poco represents a new record + public bool IsNew(string primaryKeyName, object poco) + { + var pd = PocoData.ForObject(poco, primaryKeyName); + object pk; + PocoColumn pc; + if (pd.Columns.TryGetValue(primaryKeyName, out pc)) + { + pk = pc.GetValue(poco); + } +#if !PETAPOCO_NO_DYNAMIC + else if (poco.GetType() == typeof(System.Dynamic.ExpandoObject)) + { + return true; + } +#endif + else + { + var pi = poco.GetType().GetProperty(primaryKeyName); + if (pi == null) + throw new ArgumentException(string.Format("The object doesn't have a property matching the primary key column name '{0}'", primaryKeyName)); + pk = pi.GetValue(poco, null); + } + + if (pk == null) + return true; + + var type = pk.GetType(); + + if (type.IsValueType) + { + // Common primary key types + if (type == typeof(long)) + return (long)pk == 0; + else if (type == typeof(ulong)) + return (ulong)pk == 0; + else if (type == typeof(int)) + return (int)pk == 0; + else if (type == typeof(uint)) + return (uint)pk == 0; + + // Create a default instance and compare + return pk == Activator.CreateInstance(pk.GetType()); + } + else + { + return pk == null; + } + } + + public bool IsNew(object poco) + { + var pd = PocoData.ForType(poco.GetType()); + if (!pd.TableInfo.AutoIncrement) + throw new InvalidOperationException("IsNew() and Save() are only supported on tables with auto-increment/identity primary key columns"); + return IsNew(pd.TableInfo.PrimaryKey, poco); + } + + // Insert new record or Update existing record + public void Save(string tableName, string primaryKeyName, object poco) + { + if (IsNew(primaryKeyName, poco)) + { + Insert(tableName, primaryKeyName, true, poco); + } + else + { + Update(tableName, primaryKeyName, poco); + } + } + + public void Save(object poco) + { + var pd = PocoData.ForType(poco.GetType()); + Save(pd.TableInfo.TableName, pd.TableInfo.PrimaryKey, poco); + } + + public int CommandTimeout { get; set; } + public int OneTimeCommandTimeout { get; set; } + + void DoPreExecute(IDbCommand cmd) + { + // Setup command timeout + if (OneTimeCommandTimeout != 0) + { + cmd.CommandTimeout = OneTimeCommandTimeout; + OneTimeCommandTimeout = 0; + } + else if (CommandTimeout!=0) + { + cmd.CommandTimeout = CommandTimeout; + } + + // Call hook + OnExecutingCommand(cmd); + + // Save it + _lastSql = cmd.CommandText; + _lastArgs = (from IDataParameter parameter in cmd.Parameters select parameter.Value).ToArray(); + } + + public string LastSQL { get { return _lastSql; } } + public object[] LastArgs { get { return _lastArgs; } } + public string LastCommand + { + get { return FormatCommand(_lastSql, _lastArgs); } + } + + public string FormatCommand(IDbCommand cmd) + { + return FormatCommand(cmd.CommandText, (from IDataParameter parameter in cmd.Parameters select parameter.Value).ToArray()); + } + + public string FormatCommand(string sql, object[] args) + { + var sb = new StringBuilder(); + if (sql == null) + return ""; + sb.Append(sql); + if (args != null && args.Length > 0) + { + sb.Append("\n"); + for (int i = 0; i < args.Length; i++) + { + sb.AppendFormat("\t -> {0}{1} [{2}] = \"{3}\"\n", _paramPrefix, i, args[i].GetType().Name, args[i]); + } + sb.Remove(sb.Length - 1, 1); + } + return sb.ToString(); + } + + + public static IMapper Mapper + { + get; + set; + } + + internal class PocoColumn + { + public string ColumnName; + public PropertyInfo PropertyInfo; + public bool ResultColumn; + public virtual void SetValue(object target, object val) { PropertyInfo.SetValue(target, val, null); } + public virtual object GetValue(object target) { return PropertyInfo.GetValue(target, null); } + public virtual object ChangeType(object val) { return Convert.ChangeType(val, PropertyInfo.PropertyType); } + } + internal class ExpandoColumn : PocoColumn + { + public override void SetValue(object target, object val) { (target as IDictionary)[ColumnName]=val; } + public override object GetValue(object target) + { + object val=null; + (target as IDictionary).TryGetValue(ColumnName, out val); + return val; + } + public override object ChangeType(object val) { return val; } + } + internal class PocoData + { + public static PocoData ForObject(object o, string primaryKeyName) + { + var t = o.GetType(); +#if !PETAPOCO_NO_DYNAMIC + if (t == typeof(System.Dynamic.ExpandoObject)) + { + var pd = new PocoData(); + pd.TableInfo = new TableInfo(); + pd.Columns = new Dictionary(StringComparer.OrdinalIgnoreCase); + pd.Columns.Add(primaryKeyName, new ExpandoColumn() { ColumnName = primaryKeyName }); + pd.TableInfo.PrimaryKey = primaryKeyName; + pd.TableInfo.AutoIncrement = true; + foreach (var col in (o as IDictionary).Keys) + { + if (col!=primaryKeyName) + pd.Columns.Add(col, new ExpandoColumn() { ColumnName = col }); + } + return pd; + } + else +#endif + return ForType(t); + } + static System.Threading.ReaderWriterLockSlim RWLock = new System.Threading.ReaderWriterLockSlim(); + public static PocoData ForType(Type t) + { +#if !PETAPOCO_NO_DYNAMIC + if (t == typeof(System.Dynamic.ExpandoObject)) + throw new InvalidOperationException("Can't use dynamic types with this method"); +#endif + // Check cache + RWLock.EnterReadLock(); + PocoData pd; + try + { + if (m_PocoDatas.TryGetValue(t, out pd)) + return pd; + } + finally + { + RWLock.ExitReadLock(); + } + + + // Cache it + RWLock.EnterWriteLock(); + try + { + // Check again + if (m_PocoDatas.TryGetValue(t, out pd)) + return pd; + + // Create it + pd = new PocoData(t); + + m_PocoDatas.Add(t, pd); + } + finally + { + RWLock.ExitWriteLock(); + } + + return pd; + } + + public PocoData() + { + } + + public PocoData(Type t) + { + type = t; + TableInfo=new TableInfo(); + + // Get the table name + var a = t.GetCustomAttributes(typeof(TableNameAttribute), true); + TableInfo.TableName = a.Length == 0 ? t.Name : (a[0] as TableNameAttribute).Value; + + // Get the primary key + a = t.GetCustomAttributes(typeof(PrimaryKeyAttribute), true); + TableInfo.PrimaryKey = a.Length == 0 ? "ID" : (a[0] as PrimaryKeyAttribute).Value; + TableInfo.SequenceName = a.Length == 0 ? null : (a[0] as PrimaryKeyAttribute).sequenceName; + TableInfo.AutoIncrement = a.Length == 0 ? false : (a[0] as PrimaryKeyAttribute).autoIncrement; + + // Call column mapper + if (Database.Mapper != null) + Database.Mapper.GetTableInfo(t, TableInfo); + + // Work out bound properties + bool ExplicitColumns = t.GetCustomAttributes(typeof(ExplicitColumnsAttribute), true).Length > 0; + Columns = new Dictionary(StringComparer.OrdinalIgnoreCase); + foreach (var pi in t.GetProperties()) + { + // Work out if properties is to be included + var ColAttrs = pi.GetCustomAttributes(typeof(ColumnAttribute), true); + if (ExplicitColumns) + { + if (ColAttrs.Length == 0) + continue; + } + else + { + if (pi.GetCustomAttributes(typeof(IgnoreAttribute), true).Length != 0) + continue; + } + + var pc = new PocoColumn(); + pc.PropertyInfo = pi; + + // Work out the DB column name + if (ColAttrs.Length > 0) + { + var colattr = (ColumnAttribute)ColAttrs[0]; + pc.ColumnName = colattr.Name; + if ((colattr as ResultColumnAttribute) != null) + pc.ResultColumn = true; + } + if (pc.ColumnName == null) + { + pc.ColumnName = pi.Name; + if (Database.Mapper != null && !Database.Mapper.MapPropertyToColumn(pi, ref pc.ColumnName, ref pc.ResultColumn)) + continue; + } + + // Store it + Columns.Add(pc.ColumnName, pc); + } + + // Build column list for automatic select + QueryColumns = (from c in Columns where !c.Value.ResultColumn select c.Key).ToArray(); + + } + + bool IsIntegralType(Type t) + { + var tc=Type.GetTypeCode(t); + return tc >= TypeCode.SByte && tc <= TypeCode.UInt64; + } + + // Create factory function that can convert a IDataReader record into a POCO + public Delegate GetFactory(string sql, string connString, bool ForceDateTimesToUtc, int firstColumn, int countColumns, IDataReader r) + { + // Check cache + var key = string.Format("{0}:{1}:{2}:{3}:{4}", sql, connString, ForceDateTimesToUtc, firstColumn, countColumns); + RWLock.EnterReadLock(); + try + { + // Have we already created it? + Delegate factory; + if (PocoFactories.TryGetValue(key, out factory)) + return factory; + } + finally + { + RWLock.ExitReadLock(); + } + + // Take the writer lock + RWLock.EnterWriteLock(); + + try + { + // Check again, just in case + Delegate factory; + if (PocoFactories.TryGetValue(key, out factory)) + return factory; + + // Create the method + var m = new DynamicMethod("petapoco_factory_" + PocoFactories.Count.ToString(), type, new Type[] { typeof(IDataReader) }, true); + var il = m.GetILGenerator(); + +#if !PETAPOCO_NO_DYNAMIC + if (type == typeof(object)) + { + // var poco=new T() + il.Emit(OpCodes.Newobj, typeof(System.Dynamic.ExpandoObject).GetConstructor(Type.EmptyTypes)); // obj + + MethodInfo fnAdd = typeof(IDictionary).GetMethod("Add"); + + // Enumerate all fields generating a set assignment for the column + for (int i = firstColumn; i < firstColumn + countColumns; i++) + { + var srcType = r.GetFieldType(i); + + il.Emit(OpCodes.Dup); // obj, obj + il.Emit(OpCodes.Ldstr, r.GetName(i)); // obj, obj, fieldname + + // Get the converter + Func converter = null; + if (Database.Mapper != null) + converter = Database.Mapper.GetFromDbConverter(null, srcType); + if (ForceDateTimesToUtc && converter == null && srcType == typeof(DateTime)) + converter = delegate(object src) { return new DateTime(((DateTime)src).Ticks, DateTimeKind.Utc); }; + + // Setup stack for call to converter + int converterIndex = -1; + if (converter != null) + { + // Add the converter + converterIndex = m_Converters.Count; + m_Converters.Add(converter); + + // Generate IL to push the converter onto the stack + il.Emit(OpCodes.Ldsfld, fldConverters); + il.Emit(OpCodes.Ldc_I4, converterIndex); + il.Emit(OpCodes.Callvirt, fnListGetItem); // obj, obj, fieldname, Converter + } + + + // r[i] + il.Emit(OpCodes.Ldarg_0); // obj, obj, fieldname, converter?, rdr + il.Emit(OpCodes.Ldc_I4, i); // obj, obj, fieldname, converter?, rdr,i + il.Emit(OpCodes.Callvirt, fnGetValue); // obj, obj, fieldname, converter?, value + + // Convert DBNull to null + il.Emit(OpCodes.Dup); // obj, obj, fieldname, converter?, value, value + il.Emit(OpCodes.Isinst, typeof(DBNull)); // obj, obj, fieldname, converter?, value, (value or null) + var lblNotNull = il.DefineLabel(); + il.Emit(OpCodes.Brfalse_S, lblNotNull); // obj, obj, fieldname, converter?, value + il.Emit(OpCodes.Pop); // obj, obj, fieldname, converter? + if (converter != null) + il.Emit(OpCodes.Pop); // obj, obj, fieldname, + il.Emit(OpCodes.Ldnull); // obj, obj, fieldname, null + if (converter != null) + { + var lblReady = il.DefineLabel(); + il.Emit(OpCodes.Br_S, lblReady); + il.MarkLabel(lblNotNull); + il.Emit(OpCodes.Callvirt, fnInvoke); + il.MarkLabel(lblReady); + } + else + { + il.MarkLabel(lblNotNull); + } + + il.Emit(OpCodes.Callvirt, fnAdd); + } + } + else +#endif + if (type.IsValueType) + { + il.Emit(OpCodes.Ldarg_0); // rdr + il.Emit(OpCodes.Ldc_I4_0); // rdr,0 + il.Emit(OpCodes.Callvirt, fnGetValue); // value + il.Emit(OpCodes.Unbox_Any, type); // value converted + } + else if (type == typeof(string) || type == typeof(byte[])) + { + // "if (!rdr.IsDBNull(i))" + il.Emit(OpCodes.Ldarg_0); // rdr + il.Emit(OpCodes.Ldc_I4_0); // rdr,0 + il.Emit(OpCodes.Callvirt, fnIsDBNull); // bool + var lblCont = il.DefineLabel(); + il.Emit(OpCodes.Brfalse_S, lblCont); + il.Emit(OpCodes.Ldnull); // null + var lblFin = il.DefineLabel(); + il.Emit(OpCodes.Br_S, lblFin); + + il.MarkLabel(lblCont); + il.Emit(OpCodes.Ldarg_0); // rdr + il.Emit(OpCodes.Ldc_I4_0); // rdr,0 + il.Emit(OpCodes.Callvirt, fnGetValue); // value + + il.Emit(OpCodes.Unbox_Any, type); // value converted + + il.MarkLabel(lblFin); + } + else + { + // var poco=new T() + il.Emit(OpCodes.Newobj, type.GetConstructor(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic, null, new Type[0], null)); + + // Enumerate all fields generating a set assignment for the column + for (int i = firstColumn; i < firstColumn + countColumns; i++) + { + // Get the PocoColumn for this db column, ignore if not known + PocoColumn pc; + if (!Columns.TryGetValue(r.GetName(i), out pc)) + continue; + + // Get the source type for this column + var srcType = r.GetFieldType(i); + var dstType = pc.PropertyInfo.PropertyType; + + // "if (!rdr.IsDBNull(i))" + il.Emit(OpCodes.Ldarg_0); // poco,rdr + il.Emit(OpCodes.Ldc_I4, i); // poco,rdr,i + il.Emit(OpCodes.Callvirt, fnIsDBNull); // poco,bool + var lblNext = il.DefineLabel(); + il.Emit(OpCodes.Brtrue_S, lblNext); // poco + + il.Emit(OpCodes.Dup); // poco,poco + + // Do we need to install a converter? + Func converter = null; + + // Get converter from the mapper + if (Database.Mapper != null) + { + converter = Database.Mapper.GetFromDbConverter(pc.PropertyInfo, srcType); + } + + // Standard DateTime->Utc mapper + if (ForceDateTimesToUtc && converter == null && srcType == typeof(DateTime) && (dstType == typeof(DateTime) || dstType == typeof(DateTime?))) + { + converter = delegate(object src) { return new DateTime(((DateTime)src).Ticks, DateTimeKind.Utc); }; + } + + // Forced type conversion including integral types -> enum + if (converter == null) + { + if (dstType.IsEnum && IsIntegralType(srcType)) + { + if (srcType != typeof(int)) + { + converter = delegate(object src) { return Convert.ChangeType(src, typeof(int), null); }; + } + } + else if (!dstType.IsAssignableFrom(srcType)) + { + converter = delegate(object src) { return Convert.ChangeType(src, dstType, null); }; + } + } + + // Fast + bool Handled = false; + if (converter == null) + { + var valuegetter = typeof(IDataRecord).GetMethod("Get" + srcType.Name, new Type[] { typeof(int) }); + if (valuegetter != null + && valuegetter.ReturnType == srcType + && (valuegetter.ReturnType == dstType || valuegetter.ReturnType == Nullable.GetUnderlyingType(dstType))) + { + il.Emit(OpCodes.Ldarg_0); // *,rdr + il.Emit(OpCodes.Ldc_I4, i); // *,rdr,i + il.Emit(OpCodes.Callvirt, valuegetter); // *,value + + // Convert to Nullable + if (Nullable.GetUnderlyingType(dstType) != null) + { + il.Emit(OpCodes.Newobj, dstType.GetConstructor(new Type[] { Nullable.GetUnderlyingType(dstType) })); + } + + il.Emit(OpCodes.Callvirt, pc.PropertyInfo.GetSetMethod(true)); // poco + Handled = true; + } + } + + // Not so fast + if (!Handled) + { + // Setup stack for call to converter + int converterIndex = -1; + if (converter != null) + { + // Add the converter + converterIndex = m_Converters.Count; + m_Converters.Add(converter); + + // Generate IL to push the converter onto the stack + il.Emit(OpCodes.Ldsfld, fldConverters); + il.Emit(OpCodes.Ldc_I4, converterIndex); + il.Emit(OpCodes.Callvirt, fnListGetItem); // Converter + } + + // "value = rdr.GetValue(i)" + il.Emit(OpCodes.Ldarg_0); // *,rdr + il.Emit(OpCodes.Ldc_I4, i); // *,rdr,i + il.Emit(OpCodes.Callvirt, fnGetValue); // *,value + + // Call the converter + if (converter != null) + il.Emit(OpCodes.Callvirt, fnInvoke); + + // Assign it + il.Emit(OpCodes.Unbox_Any, pc.PropertyInfo.PropertyType); // poco,poco,value + il.Emit(OpCodes.Callvirt, pc.PropertyInfo.GetSetMethod(true)); // poco + } + + il.MarkLabel(lblNext); + } + } + + il.Emit(OpCodes.Ret); + + // Cache it, return it + var del = m.CreateDelegate(Expression.GetFuncType(typeof(IDataReader), type)); + PocoFactories.Add(key, del); + return del; + } + finally + { + RWLock.ExitWriteLock(); + } + } + + + static Dictionary m_PocoDatas = new Dictionary(); + static List> m_Converters = new List>(); + static MethodInfo fnGetValue = typeof(IDataRecord).GetMethod("GetValue", new Type[] { typeof(int) }); + static MethodInfo fnIsDBNull = typeof(IDataRecord).GetMethod("IsDBNull"); + static FieldInfo fldConverters = typeof(PocoData).GetField("m_Converters", BindingFlags.Static | BindingFlags.GetField | BindingFlags.NonPublic); + static MethodInfo fnListGetItem = typeof(List>).GetProperty("Item").GetGetMethod(); + static MethodInfo fnInvoke = typeof(Func).GetMethod("Invoke"); + public Type type; + public string[] QueryColumns { get; private set; } + public TableInfo TableInfo { get; private set; } + public Dictionary Columns { get; private set; } + Dictionary PocoFactories = new Dictionary(); + } + + + // Member variables + string _connectionString; + string _providerName; + DbProviderFactory _factory; + IDbConnection _sharedConnection; + IDbTransaction _transaction; + int _sharedConnectionDepth; + int _transactionDepth; + bool _transactionCancelled; + string _lastSql; + object[] _lastArgs; + string _paramPrefix = "@"; + } + + // Transaction object helps maintain transaction depth counts + public class Transaction : IDisposable + { + public Transaction(Database db) + { + _db = db; + _db.BeginTransaction(); + } + + public void Complete() + { + _db.CompleteTransaction(); + _db = null; + } + + public void Dispose() + { + if (_db != null) + _db.AbortTransaction(); + } + + Database _db; + } + + // Simple helper class for building SQL statments + public class Sql + { + public Sql() + { + } + + public Sql(string sql, params object[] args) + { + _sql = sql; + _args = args; + } + + public static Sql Builder + { + get { return new Sql(); } + } + + string _sql; + object[] _args; + Sql _rhs; + string _sqlFinal; + object[] _argsFinal; + + private void Build() + { + // already built? + if (_sqlFinal != null) + return; + + // Build it + var sb = new StringBuilder(); + var args = new List(); + Build(sb, args, null); + _sqlFinal = sb.ToString(); + _argsFinal = args.ToArray(); + } + + public string SQL + { + get + { + Build(); + return _sqlFinal; + } + } + + public object[] Arguments + { + get + { + Build(); + return _argsFinal; + } + } + + public Sql Append(Sql sql) + { + if (_rhs != null) + _rhs.Append(sql); + else + _rhs = sql; + + return this; + } + + public Sql Append(string sql, params object[] args) + { + return Append(new Sql(sql, args)); + } + + static bool Is(Sql sql, string sqltype) + { + return sql != null && sql._sql != null && sql._sql.StartsWith(sqltype, StringComparison.InvariantCultureIgnoreCase); + } + + private void Build(StringBuilder sb, List args, Sql lhs) + { + if (!String.IsNullOrEmpty(_sql)) + { + // Add SQL to the string + if (sb.Length > 0) + { + sb.Append("\n"); + } + + var sql = Database.ProcessParams(_sql, _args, args); + + if (Is(lhs, "WHERE ") && Is(this, "WHERE ")) + sql = "AND " + sql.Substring(6); + if (Is(lhs, "ORDER BY ") && Is(this, "ORDER BY ")) + sql = ", " + sql.Substring(9); + + sb.Append(sql); + } + + // Now do rhs + if (_rhs != null) + _rhs.Build(sb, args, this); + } + + public Sql Where(string sql, params object[] args) + { + return Append(new Sql("WHERE (" + sql + ")", args)); + } + + public Sql OrderBy(params object[] columns) + { + return Append(new Sql("ORDER BY " + String.Join(", ", (from x in columns select x.ToString()).ToArray()))); + } + + public Sql Select(params object[] columns) + { + return Append(new Sql("SELECT " + String.Join(", ", (from x in columns select x.ToString()).ToArray()))); + } + + public Sql From(params object[] tables) + { + return Append(new Sql("FROM " + String.Join(", ", (from x in tables select x.ToString()).ToArray()))); + } + + public Sql GroupBy(params object[] columns) + { + return Append(new Sql("GROUP BY " + String.Join(", ", (from x in columns select x.ToString()).ToArray()))); + } + + private SqlJoinClause Join(string JoinType, string table) + { + return new SqlJoinClause(Append(new Sql(JoinType + table))); + } + + public SqlJoinClause InnerJoin(string table) { return Join("INNER JOIN ", table); } + public SqlJoinClause LeftJoin(string table) { return Join("LEFT JOIN ", table); } + + public class SqlJoinClause + { + private readonly Sql _sql; + + public SqlJoinClause(Sql sql) + { + _sql = sql; + } + + public Sql On(string onClause, params object[] args) + { + return _sql.Append("ON " + onClause, args); + } + } + } + +} diff --git a/packages/PetaPoco.Core.4.0.2/PetaPoco.Core.4.0.2.nupkg b/packages/PetaPoco.Core.4.0.2/PetaPoco.Core.4.0.2.nupkg new file mode 100644 index 0000000000000000000000000000000000000000..bbc3f4d6094773e182abc1ea7013453252e8a6d1 GIT binary patch literal 20358 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�&A?Ts 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 - \ No newline at end of file From cb8cb1691f3234ca09d36ca7906efdaef4bb0000 Mon Sep 17 00:00:00 2001 From: "kay.one" Date: Wed, 15 Jun 2011 23:33:01 -0700 Subject: [PATCH 2/2] SeriesProvider is now Subsonic free. --- NzbDrone.Core.Test/EpisodeProviderTest.cs | 147 ++++++++++-------- NzbDrone.Core.Test/SeriesProviderTest.cs | Bin 6648 -> 6589 bytes NzbDrone.Core.Test/dbBenchmark.cs | 5 +- NzbDrone.Core/CentralDispatch.cs | 37 +---- NzbDrone.Core/Datastore/CustomeMapper.cs | 17 +- .../Datastore/Migrations/MigrationExport.cs | 19 +++ .../PetaPoco}/PetaPoco.cs | 14 +- NzbDrone.Core/NzbDrone.Core.csproj | 5 +- NzbDrone.Core/Providers/EpisodeProvider.cs | 88 +++++++---- NzbDrone.Core/Repository/Episode.cs | 3 +- 10 files changed, 195 insertions(+), 140 deletions(-) rename NzbDrone.Core/{Models => Datastore/PetaPoco}/PetaPoco.cs (99%) diff --git a/NzbDrone.Core.Test/EpisodeProviderTest.cs b/NzbDrone.Core.Test/EpisodeProviderTest.cs index abd537fca..2cbc2bb00 100644 --- a/NzbDrone.Core.Test/EpisodeProviderTest.cs +++ b/NzbDrone.Core.Test/EpisodeProviderTest.cs @@ -13,6 +13,7 @@ using NzbDrone.Core.Repository; using NzbDrone.Core.Repository.Quality; using NzbDrone.Core.Test.Framework; +using PetaPoco; using SubSonic.Repository; using TvdbLib.Data; @@ -22,6 +23,29 @@ namespace NzbDrone.Core.Test // ReSharper disable InconsistentNaming public class EpisodeProviderTest : TestBase { + + [Test] + public void GetEpisodesBySeason_success() + { + var episodes = Builder.CreateListOfSize(10) + .WhereAll().Have(c => c.SeriesId = 12) + .WhereTheFirst(5).Have(c => c.SeasonNumber = 1) + .AndTheRemaining().Have(c => c.SeasonNumber = 2).Build(); + + var db = MockLib.GetEmptyDatabase(); + var mocker = new AutoMoqer(); + mocker.SetConstant(db); + + episodes.ToList().ForEach(c => db.Insert(c)); + + //Act + var seasonEposodes = mocker.Resolve().GetEpisodesBySeason(12, 2); + + //Assert + db.Fetch().Should().HaveCount(10); + seasonEposodes.Should().HaveCount(5); + } + [Test] public void RefreshEpisodeInfo_emptyRepo() { @@ -42,7 +66,7 @@ public void RefreshEpisodeInfo_emptyRepo() var mocker = new AutoMoqer(); - mocker.SetConstant(MockLib.GetEmptyRepository()); + mocker.SetConstant(MockLib.GetEmptyDatabase()); mocker.GetMock() .Setup(c => c.GetSeries(seriesId, true)) @@ -61,65 +85,72 @@ public void RefreshEpisodeInfo_emptyRepo() [Test] - public void new_episodes_only_calls_AddMany() + public void new_episodes_only_calls_Insert() { const int seriesId = 71663; - var fakeEpisodes = Builder.CreateNew() + var tvdbSeries = Builder.CreateNew() .With(c => c.Episodes = new List(Builder.CreateListOfSize(5).Build()) ).With(c => c.Id = seriesId).Build(); var fakeSeries = Builder.CreateNew().With(c => c.SeriesId = seriesId).Build(); + var currentEpisodes = new List(); + var mocker = new AutoMoqer(); mocker.GetMock(MockBehavior.Strict) .Setup(c => c.GetSeries(seriesId, true)) - .Returns(fakeEpisodes); + .Returns(tvdbSeries); + + mocker.GetMock() + .Setup(d => d.Fetch(It.IsAny(), It.IsAny())) + .Returns(currentEpisodes); //Act mocker.Resolve().RefreshEpisodeInfo(fakeSeries); //Assert - mocker.GetMock().Verify( - c => c.AddMany(It.Is>(e => e.Count() == fakeEpisodes.Episodes.Count)), Times.Once()); - mocker.GetMock().Verify(c => c.UpdateMany(It.Is>(e => e.Count() == 0)), - Times.AtMostOnce()); + mocker.GetMock().Verify(c => c.Insert(It.IsAny()), Times.Exactly(tvdbSeries.Episodes.Count)); + mocker.GetMock().Verify(c => c.Update(It.IsAny()), Times.Never()); + mocker.VerifyAllMocks(); } [Test] - public void existing_episodes_only_calls_UpdateMany() + public void existing_episodes_only_calls_Update() { const int seriesId = 71663; - var fakeEpisodes = Builder.CreateNew() + var tvdbSeries = Builder.CreateNew() .With(c => c.Episodes = new List(Builder.CreateListOfSize(5).Build()) ).With(c => c.Id = seriesId).Build(); var fakeSeries = Builder.CreateNew().With(c => c.SeriesId = seriesId).Build(); + var currentEpisodes = new List(); + foreach (var tvDbEpisode in tvdbSeries.Episodes) + { + currentEpisodes.Add(new Episode { TvDbEpisodeId = tvDbEpisode.Id }); + } var mocker = new AutoMoqer(); mocker.GetMock(MockBehavior.Strict) .Setup(c => c.GetSeries(seriesId, true)) - .Returns(fakeEpisodes); + .Returns(tvdbSeries); - mocker.GetMock() - .Setup(c => c.Single(It.IsAny>>())) - .Returns(Builder.CreateNew().Build); + mocker.GetMock() + .Setup(d => d.Fetch(It.IsAny(), It.IsAny())) + .Returns(currentEpisodes); //Act mocker.Resolve().RefreshEpisodeInfo(fakeSeries); //Assert - mocker.GetMock().Verify(c => c.AddMany(It.Is>(e => e.Count() == 0)), - Times.AtMostOnce()); - mocker.GetMock().Verify( - c => c.UpdateMany(It.Is>(e => e.Count() == fakeEpisodes.Episodes.Count)), - Times.Once()); + mocker.GetMock().Verify(c => c.Insert(It.IsAny()), Times.Never()); + mocker.GetMock().Verify(c => c.Update(It.IsAny()), Times.Exactly(tvdbSeries.Episodes.Count)); mocker.VerifyAllMocks(); } @@ -128,7 +159,7 @@ public void existing_episodes_only_calls_UpdateMany() public void should_try_to_get_existing_episode_using_tvdbid_first() { const int seriesId = 71663; - var fakeEpisodes = Builder.CreateNew() + var fakeTvDbResult = Builder.CreateNew() .With(c => c.Id = seriesId) .With(c => c.Episodes = new List( Builder.CreateListOfSize(1) @@ -137,33 +168,31 @@ public void should_try_to_get_existing_episode_using_tvdbid_first() ) .Build(); + var fakeEpisodeList = new List { new Episode { TvDbEpisodeId = 99, SeasonNumber = 10, EpisodeNumber = 10 } }; var fakeSeries = Builder.CreateNew().With(c => c.SeriesId = seriesId).Build(); - var mocker = new AutoMoqer(); + mocker.GetMock() + .Setup(d => d.Fetch(It.IsAny(), It.IsAny())) + .Returns(fakeEpisodeList); - var repo = MockLib.GetEmptyRepository(); - repo.Add( - Builder.CreateNew().With(c => c.TvDbEpisodeId = fakeEpisodes.Episodes[0].Id).Build()); - mocker.SetConstant(repo); - - mocker.GetMock(MockBehavior.Strict) + mocker.GetMock() .Setup(c => c.GetSeries(seriesId, true)) - .Returns(fakeEpisodes); + .Returns(fakeTvDbResult); //Act mocker.Resolve().RefreshEpisodeInfo(fakeSeries); //Assert mocker.VerifyAllMocks(); - repo.All().Should().HaveCount(1); + mocker.GetMock().Verify(c => c.Update(fakeEpisodeList[0]), Times.Once()); } [Test] public void should_try_to_get_existing_episode_using_tvdbid_first_then_season_episode() { const int seriesId = 71663; - var fakeEpisodes = Builder.CreateNew() + var tvdbSeries = Builder.CreateNew() .With(c => c.Id = seriesId) .With(c => c.Episodes = new List{ Builder.CreateNew() @@ -187,20 +216,20 @@ public void should_try_to_get_existing_episode_using_tvdbid_first_then_season_ep var mocker = new AutoMoqer(); - var repo = MockLib.GetEmptyRepository(); - repo.Add(localEpisode); - mocker.SetConstant(repo); - mocker.GetMock(MockBehavior.Strict) .Setup(c => c.GetSeries(seriesId, true)) - .Returns(fakeEpisodes); + .Returns(tvdbSeries); + + mocker.GetMock() + .Setup(d => d.Fetch(It.IsAny(), It.IsAny())) + .Returns(new List { localEpisode }); //Act mocker.Resolve().RefreshEpisodeInfo(fakeSeries); //Assert mocker.VerifyAllMocks(); - repo.All().Should().HaveCount(1); + mocker.GetMock().Verify(c => c.Update(localEpisode), Times.Once()); } @@ -208,51 +237,43 @@ public void should_try_to_get_existing_episode_using_tvdbid_first_then_season_ep public void existing_episodes_keep_their_episodeId_file_id() { const int seriesId = 71663; - var faketvDbResponse = Builder.CreateNew() + var tvdbSeries = Builder.CreateNew() .With(c => c.Episodes = new List(Builder.CreateListOfSize(5).Build()) ).With(c => c.Id = seriesId).Build(); var fakeSeries = Builder.CreateNew().With(c => c.SeriesId = seriesId).Build(); - var fakeEpisode = - Builder.CreateNew().With(c => c.EpisodeFileId = 69).And(c => c.EpisodeId = 99).Build(); + + var currentEpisodes = new List(); + foreach (var tvDbEpisode in tvdbSeries.Episodes) + { + currentEpisodes.Add(new Episode { TvDbEpisodeId = tvDbEpisode.Id, EpisodeId = 99, EpisodeFileId = 69, Ignored = true }); + } var mocker = new AutoMoqer(); mocker.GetMock(MockBehavior.Strict) .Setup(c => c.GetSeries(seriesId, true)) - .Returns(faketvDbResponse); + .Returns(tvdbSeries); - IEnumerable updatedEpisodes = null; + var updatedEpisodes = new List(); - mocker.GetMock() - .Setup(c => c.Single(It.IsAny>>())) - .Returns(fakeEpisode); + mocker.GetMock() + .Setup(d => d.Fetch(It.IsAny(), It.IsAny())) + .Returns(currentEpisodes); - mocker.GetMock() - .Setup(c => c.UpdateMany(It.IsAny>())) - .Returns(faketvDbResponse.Episodes.Count) - .Callback>(r => updatedEpisodes = r); + mocker.GetMock() + .Setup(c => c.Update(It.IsAny())) + .Returns(1) + .Callback(ep => updatedEpisodes.Add(ep)); //Act mocker.Resolve().RefreshEpisodeInfo(fakeSeries); //Assert - mocker.GetMock().Verify(c => c.AddMany(It.Is>(e => e.Count() == 0)), - Times.AtMostOnce()); - mocker.GetMock().Verify( - c => c.UpdateMany(It.Is>(e => e.Count() == faketvDbResponse.Episodes.Count)), - Times.Once()); - mocker.GetMock().Verify( - c => - c.UpdateMany( - It.Is>( - e => e.Where(g => g.EpisodeFileId == 69).Count() == faketvDbResponse.Episodes.Count)), - Times.Once()); - - - updatedEpisodes.Should().HaveSameCount(faketvDbResponse.Episodes); + updatedEpisodes.Should().HaveSameCount(tvdbSeries.Episodes); updatedEpisodes.Should().OnlyContain(c => c.EpisodeId == 99); updatedEpisodes.Should().OnlyContain(c => c.EpisodeFileId == 69); + updatedEpisodes.Should().OnlyContain(c => c.Ignored == true); } @@ -347,7 +368,7 @@ public void IsSeasonIgnored_should_return_true_if_invalid_series() public void Add_daily_show_episodes() { var mocker = new AutoMoqer(); - mocker.SetConstant(MockLib.GetEmptyRepository()); + mocker.SetConstant(MockLib.GetEmptyDatabase()); mocker.Resolve(); const int tvDbSeriesId = 71256; //act diff --git a/NzbDrone.Core.Test/SeriesProviderTest.cs b/NzbDrone.Core.Test/SeriesProviderTest.cs index d8f4a283a58e6138ed1208a421791ffb08e2f20b..f9c77840ab9098f055c0a05de0461d5db5be72e7 100644 GIT binary patch delta 106 zcmexiyw`Yx3diIc7TL+Z9I=yGMMNjB7vPz^Q%GQPzW~={MShXZf}B%1*~$`&6jG8V v*9h3lrX*=v^K$WWDIkHABt6f(;?$y&%^bqqj9fsaQ2t~N;mpl*MWR^&aO)kh delta 157 zcmdmM{KI&I3diKNygZZFv&v3(().ToSelf().InSingletonScope(); - _kernel.Bind().ToSelf().InTransientScope(); - _kernel.Bind().ToSelf().InSingletonScope(); - _kernel.Bind().ToSelf().InSingletonScope(); - _kernel.Bind().ToSelf().InSingletonScope(); - _kernel.Bind().ToSelf().InSingletonScope(); - _kernel.Bind().ToSelf().InSingletonScope(); - _kernel.Bind().ToSelf().InSingletonScope(); - _kernel.Bind().ToSelf().InSingletonScope(); - _kernel.Bind().ToSelf().InSingletonScope(); - _kernel.Bind().ToSelf().InSingletonScope(); - _kernel.Bind().ToSelf().InSingletonScope(); - _kernel.Bind().To().InSingletonScope(); - _kernel.Bind().ToSelf().InSingletonScope(); - _kernel.Bind().ToSelf().InSingletonScope(); - _kernel.Bind().ToSelf().InSingletonScope(); - _kernel.Bind().ToSelf().InSingletonScope(); - _kernel.Bind().ToSelf().InSingletonScope(); - _kernel.Bind().ToSelf().InSingletonScope(); - _kernel.Bind().ToSelf().InSingletonScope(); - + _kernel.Bind().ToMethod(c => Connection.GetPetaPocoDb(Connection.MainConnectionString)).InRequestScope(); _kernel.Bind().ToConstant(Connection.CreateSimpleRepository(Connection.MainConnectionString)).InSingletonScope(); - _kernel.Bind().ToConstant(Connection.GetPetaPocoDb(Connection.MainConnectionString)).InRequestScope(); _kernel.Bind().ToConstant(Connection.CreateSimpleRepository(Connection.LogConnectionString)).WhenInjectedInto().InSingletonScope(); _kernel.Bind().ToConstant(Connection.CreateSimpleRepository(Connection.LogConnectionString)).WhenInjectedInto().InSingletonScope(); } @@ -104,10 +77,10 @@ public static void BindKernel() private static void BindIndexers() { - _kernel.Bind().To().InSingletonScope(); - _kernel.Bind().To().InSingletonScope(); - _kernel.Bind().To().InSingletonScope(); - _kernel.Bind().To().InSingletonScope(); + _kernel.Bind().To().InTransientScope(); + _kernel.Bind().To().InTransientScope(); + _kernel.Bind().To().InTransientScope(); + _kernel.Bind().To().InTransientScope(); var indexers = _kernel.GetAll(); _kernel.Get().InitializeIndexers(indexers.ToList()); diff --git a/NzbDrone.Core/Datastore/CustomeMapper.cs b/NzbDrone.Core/Datastore/CustomeMapper.cs index cb993927a..4e3362aaa 100644 --- a/NzbDrone.Core/Datastore/CustomeMapper.cs +++ b/NzbDrone.Core/Datastore/CustomeMapper.cs @@ -11,7 +11,8 @@ public override Func GetFromDbConverter(DestinationInfo destinat if ((SourceType == typeof(Int32) || SourceType == typeof(Int64)) && destinationInfo.Type.IsGenericType && destinationInfo.Type.GetGenericTypeDefinition() == typeof(Nullable<>)) { // If it is NULLABLE, then get the underlying type. eg if "Nullable" then this will return just "int" - if (destinationInfo.Type.GetGenericArguments()[0].IsEnum) + Type genericArgument = destinationInfo.Type.GetGenericArguments()[0]; + if (genericArgument == typeof(DayOfWeek)) { return delegate(object s) { @@ -25,6 +26,20 @@ public override Func GetFromDbConverter(DestinationInfo destinat return (Nullable)value; }; } + else + { + return delegate(object s) + { + int value; + Int32.TryParse(s.ToString(), out value); + if (value == 0) + { + return null; + } + + return value; + }; + } } return base.GetFromDbConverter(destinationInfo, SourceType); diff --git a/NzbDrone.Core/Datastore/Migrations/MigrationExport.cs b/NzbDrone.Core/Datastore/Migrations/MigrationExport.cs index 74fef9048..524415601 100644 --- a/NzbDrone.Core/Datastore/Migrations/MigrationExport.cs +++ b/NzbDrone.Core/Datastore/Migrations/MigrationExport.cs @@ -27,6 +27,25 @@ public void Up(IDatabase db) .WithNotNullableColumn("SeasonFolder", DbType.Boolean) .WithNullableColumn("LastInfoSync", DbType.DateTime) .WithNullableColumn("LastDiskSync", DbType.DateTime); + + + db.CreateTable("Episodes") + .WithPrimaryKeyColumn("EpisodeId", DbType.Int32).AsIdentity() + .WithNullableColumn("TvDbEpisodeId", DbType.Int32) + + .WithNotNullableColumn("SeriesId", DbType.Int32) + .WithNotNullableColumn("SeasonNumber", DbType.Int16) + .WithNotNullableColumn("EpisodeNumber", DbType.Int16) + .WithNotNullableColumn("Title", DbType.String).HavingDefault(String.Empty) + + .WithNotNullableColumn("Overview", DbType.String).HavingDefault(String.Empty) + .WithNotNullableColumn("Ignored", DbType.Boolean).HavingDefault(false) + .WithNullableColumn("EpisodeFileId", DbType.Int32) + .WithNullableColumn("AirDate", DbType.DateTime) + .WithNullableColumn("GrabDate", DbType.DateTime); + + + } } } diff --git a/NzbDrone.Core/Models/PetaPoco.cs b/NzbDrone.Core/Datastore/PetaPoco/PetaPoco.cs similarity index 99% rename from NzbDrone.Core/Models/PetaPoco.cs rename to NzbDrone.Core/Datastore/PetaPoco/PetaPoco.cs index 24555a31c..8abc47cc4 100644 --- a/NzbDrone.Core/Models/PetaPoco.cs +++ b/NzbDrone.Core/Datastore/PetaPoco/PetaPoco.cs @@ -26,7 +26,6 @@ // ReSharper disable namespace PetaPoco - { // Poco's marked [Explicit] require all column properties to be marked [AttributeUsage(AttributeTargets.Class)] @@ -354,12 +353,16 @@ public void OpenSharedConnection() { _sharedConnection = _factory.CreateConnection(); _sharedConnection.ConnectionString = _connectionString; - _sharedConnection.Open(); if (KeepConnectionAlive) _sharedConnectionDepth++; // Make sure you call Dispose } + + if (_sharedConnection.State != ConnectionState.Open) + _sharedConnection.Open(); + _sharedConnectionDepth++; + } // Close a previously opened connection @@ -860,9 +863,6 @@ public IEnumerable Query(Sql sql) var pd = PocoData.ForType(typeof(T)); try { - if (_sharedConnection.State != ConnectionState.Open) - _sharedConnection.Open(); - r = cmd.ExecuteReader(); OnExecutedCommand(cmd); } @@ -1297,9 +1297,7 @@ public object Insert(string tableName, string primaryKeyName, bool autoIncrement { using (var cmd = CreateCommand(_sharedConnection, "")) { - if(_sharedConnection.State != ConnectionState.Open) - _sharedConnection.Open(); - + var pd = PocoData.ForObject(poco, primaryKeyName); var names = new List(); var values = new List(); diff --git a/NzbDrone.Core/NzbDrone.Core.csproj b/NzbDrone.Core/NzbDrone.Core.csproj index 7a2918f5d..508f85abe 100644 --- a/NzbDrone.Core/NzbDrone.Core.csproj +++ b/NzbDrone.Core/NzbDrone.Core.csproj @@ -185,7 +185,7 @@ - + @@ -306,6 +306,9 @@ + + +

dy=hV1{imv1U*LrubU|a@9F= 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 Svx+lK1pEzyzS5k@0s9v{+(@hd literal 0 HcmV?d00001 diff --git a/packages/Castle.Core.2.5.2/lib/ASL - Apache Software Foundation License.txt b/packages/Castle.Core.2.5.2/lib/ASL - Apache Software Foundation License.txt new file mode 100644 index 000000000..e259b5841 --- /dev/null +++ b/packages/Castle.Core.2.5.2/lib/ASL - Apache Software Foundation License.txt @@ -0,0 +1,57 @@ +Apache License, Version 2.0 + +Apache License +Version 2.0, January 2004 +http://www.apache.org/licenses/ + +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + +1. Definitions. + +"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. + +"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. + +"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + +"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. + +"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. + +"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. + +"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). + +"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. + +"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." + +"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. + +2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. + +3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. + +4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: + + 1. You must give any other recipients of the Work or Derivative Works a copy of this License; and + + 2. You must cause any modified files to carry prominent notices stating that You changed the files; and + + 3. You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and + + 4. If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. + +You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. + +5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. + +6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. + +7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. + +8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. + +9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. + +END OF TERMS AND CONDITIONS diff --git a/packages/Castle.Core.2.5.2/lib/BreakingChanges.txt b/packages/Castle.Core.2.5.2/lib/BreakingChanges.txt new file mode 100644 index 000000000..ef719d13c --- /dev/null +++ b/packages/Castle.Core.2.5.2/lib/BreakingChanges.txt @@ -0,0 +1,55 @@ +================================================================================================ +change - Removed WebLogger and WebLoggerFactory + +impact - low +fixability - medium +revision - + +description - To minimize management overhead the classes were removed so that only single + Client Profile version of Castle.Core can be distributed. + +fix - You can use NLog or Log4Net web logger integration, or reuse implementation of existing + web logger and use it as a custom logger. + +================================================================================================ +change - Removed obsolete overload of ProxyGenerator.CreateClassProxy + +impact - low +fixability - trivial +revision - + +description - Deprecated overload of ProxyGenerator.CreateClassProxy was removed to keep the + method consistent with other methods and to remove confusion + +fix - whenever removed overload was used, use one of the other overloads. + +================================================================================================ +change - IProxyGenerationHook.NonVirtualMemberNotification method was renamed + +impact - high +fixability - easy +revision - + +description - to accommodate class proxies with target method NonVirtualMemberNotification on + IProxyGenerationHook type was renamed to more accurate NonProxyableMemberNotification + since for class proxies with target not just methods but also fields and other member that + break the abstraction will be passed to this method. + +fix - whenever NonVirtualMemberNotification is used/implemented change the method name to + NonProxyableMemberNotification. Implementors should also accommodate possibility that not + only MethodInfos will be passed as method's second parameter. + +================================================================================================ +change - DynamicProxy will now allow to intercept members of System.Object + +impact - very low +fixability - easy +revision - + +description - to allow scenarios like mocking of System.Object members, DynamicProxy will not + disallow proxying of these methods anymore. AllMethodsHook (default IProxyGenerationHook) + will still filter them out though. + +fix - whenever custom IProxyGenerationHook is used, user should account for System.Object's + members being now passed to ShouldInterceptMethod and NonVirtualMemberNotification methods + and if neccessary update the code to handle them appropriately. \ No newline at end of file diff --git a/packages/Castle.Core.2.5.2/lib/Changes.txt b/packages/Castle.Core.2.5.2/lib/Changes.txt new file mode 100644 index 000000000..03d6a4873 --- /dev/null +++ b/packages/Castle.Core.2.5.2/lib/Changes.txt @@ -0,0 +1,145 @@ +2.5.2 (2010-11-15) +================== +- fixed DYNPROXY-150 - Finalizer should not be proxied +- implemented DYNPROXY-149 - Make AllMethodsHook members virtual so it can be used as a base class +- fixed DYNPROXY-147 - Can't crete class proxies with two non-public methods having same argument types but different return type +- fixed DYNPROXY-145 Unable to proxy System.Threading.SynchronizationContext (.NET 4.0) +- fixed DYNPROXY-144 - params argument not supported in constructor +- fixed DYNPROXY-143 - Permit call to reach "non-proxied" methods of inherited interfaces +- implemented DYNPROXY-139 - Better error message +- fixed DYNPROXY-133 - Debug assertion in ClassProxyInstanceContributor fails when proxying ISerializable with an explicit implementation of GetObjectData +- fixed CORE-32 - Determining if permission is granted via PermissionUtil does not work in .NET 4 +- applied patch by Alwin Meijs - ExtendedLog4netFactory can be configured with a stream from for example an embedded log4net xml config +- Upgraded NLog to 2.0 Beta 1 +- Added DefaultXmlSerializer to bridge XPathAdapter with standard Xml Serialization. +- XPathAdapter for DictionaryAdapter added IXPathSerializer to provide hooks for custom serialization. + +2.5.1 (2010-09-21) +================== +- Interface proxy with target Interface now accepts null as a valid target value (which can be replaced at a later stage). +- DictionaryAdapter behavior overrides are now ordered with all other behaviors +- BREAKING CHANGE: removed web logger so that by default Castle.Core works in .NET 4 client profile +- added paramter to ModuleScope disabling usage of signed modules. This is to workaround issue DYNPROXY-134. Also a descriptive exception message is being thrown now when the issue is detected. +- Added IDictionaryBehaviorBuilder to allow grouping behaviors +- Added GenericDictionaryAdapter to simplify generic value sources +- fixed issue DYNPROXY-138 - Error message missing space +- fixed false positive where DynamicProxy would not let you proxy interface with target interface when target object was a COM object. +- fixed ReflectionBasedDictionaryAdapter when using indexed properties + +2.5.0 (2010-08-21) +================== +- DynamicProxy will now not replicate non-public attribute types +- Applied patch from Kenneth Siewers Møller which adds parameterless constructor to DefaultSmtpSender implementation, to be able to configure the inner SmtpClient from the application configuration file (system.net.smtp). +- added support for .NET 4 and Silverlight 4, updated solution to VisualStudio 2010 +- Removed obsolete overload of CreateClassProxy +- Added class proxy with taget +- Added ability to intercept explicitly implemented generic interface methods on class proxy. +- DynamicProxy does not disallow intercepting members of System.Object anymore. AllMethodsHook will still filter them out though. +- Added ability to intercept explicitly implemented interface members on class proxy. Does not support generic members. +- Merged DynamicProxy into Core binary +- fixed DYNPROXY-ISSUE-132 - "MetaProperty equals implementation incorrect" +- Fixed bug in DiagnosticsLoggerTestCase, where when running as non-admin, the teardown will throw SecurityException (contributed by maxild) +- Split IoC specific classes into Castle.Windsor project +- Merged logging services solution +- Merged DynamicProxy project + +1.2.0 (2010-01-11) +================== + +- Added IEmailSender interface and its default implementation + +1.2.0 beta (2009-12-04) +================== + +- BREAKING CHANGE - added ChangeProxyTarget method to IChangeProxyTarget interface +- added docs to IChangeProxyTarget methods +- Fixed DYNPROXY-ISSUE-108 - Obtaining replicated custom attributes on proxy may fail when property setter throws exception on default value +- Moved custom attribute replication from CustomAttributeUtil to new interface - IAttributeDisassembler +- Exposed IAttributeDisassembler via ProxyGenerationOptions, so that users can plug their implementation for some convoluted scenarios. (for Silverlight) +- Moved IInterceptorSelector from Dynamic Proxy to Core (IOC-ISSUE-156) + +1.1.0 (2009-05-04) +================== + +- Applied Eric Hauser's patch fixing CORE-ISSUE-22 + "Support for environment variables in resource URI" + +- Applied Gauthier Segay's patch fixing CORE-ISSUE-20 + "Castle.Core.Tests won't build via nant because it use TraceContext without referencing System.Web.dll" + +- Added simple interface to ComponentModel to make optional properties required. + +- Applied Mark's -- -- patch that changes + the Core to support being compiled for Silverlight 2 + +- Applied Louis DeJardin's patch adding TraceLogger as a new logger implementation + +- Applied Chris Bilson's patch fixing CORE-15 + "WebLogger Throws When Logging Outside of an HttpContext" + +Release Candidate 3 +=================== + +- Added IServiceProviderEx which extends IServiceProvider + +- Added Pair class. + +- Applied Bill Pierce's patch fixing CORE-9 + "Allow CastleComponent Attribute to Specify Lifestyle in Constructor" + +- Added UseSingleInterfaceProxy to CompomentModel to control the proxying + behavior while maintaining backward compatibility. + Added the corresponding ComponentProxyBehaviorAttribute. + +- Made NullLogger and IExtnededLogger + +- Enabled a new format on ILogger interface, with 6 overloads for each method: + Debug(string) + Debug(string, Exception) + Debug(string, params object[]) + DebugFormat(string, params object[]) + DebugFormat(Exception, string, params object[]) + DebugFormat(IFormatProvider, string, params object[]) + DebugFormat(IFormatProvider, Exception, string, params object[]) + + The "FatalError" overloads where marked as [Obsolete], replaced by "Fatal" and "FatalFormat". + +0.0.1.0 +======= + +- Included IProxyTargetAccessor + +- Removed IMethodInterceptor and IMethodInvocation, that have been replaced + by IInterceptor and IInvocation + +- Added FindByPropertyInfo to PropertySetCollection + +- Made the DependencyModel.IsOptional property writable + +- Applied Curtis Schlak's patch fixing IOC-27 + "assembly resource format only works for resources where the assemblies name and default namespace are the same." + + Quoting: + + "I chose to preserve backwards compatibility by implementing the code in the + reverse order as suggested by the reporter. Given the following URI for a resource: + + assembly://my.cool.assembly/context/moo/file.xml + + It will initially look for an embedded resource with the manifest name of + "my.cool.assembly.context.moo.file.xml" in the loaded assembly my.cool.assembly.dll. + If it does not find it, then it looks for the embedded resource with the manifest name + of "context.moo.file.xml". + +- IServiceEnabledComponent Introduced to be used across the project as + a standard way to have access to common services, for example, logger factories + +- Added missing log factories + +- Refactor StreamLogger and DiagnosticLogger to be more consistent behavior-wise + +- Refactored WebLogger to extend LevelFilteredLogger (removed duplication) + +- Refactored LoggerLevel order + +- Project started diff --git a/packages/Castle.Core.2.5.2/lib/Committers.txt b/packages/Castle.Core.2.5.2/lib/Committers.txt new file mode 100644 index 000000000..f9bf2dfce --- /dev/null +++ b/packages/Castle.Core.2.5.2/lib/Committers.txt @@ -0,0 +1,80 @@ +This file names who's behind the Castle Team. You can find more about us at http://www.castleproject.org/community/team.html + +Committers +========== +(ordered by the date when joined the project) + +- hammett/Hamilton Verissimo +- Henry Conceição +- Kevin Williams +- Craig Neuwirt +- Gilles Bayon +- Andrew Hallock +- Jason Nelson +- Dru Sellers +- John Morales +- CobraLord +- Dan +- Tatham Oddie +- Fabio David Batista +- Chad Humphries +- Ayende Rahien +- G. Richard Bellamy +- Roelof Blom +- Ahmed Ghandour +- Josh Robb +- Ernst Naezer +- Marc-Andre Cournoyer +- Fabian Schmied +- Dave Godfrey +- Markus Zywitza +- Lee Henson +- Ken Egozi +- Chris Ortman +- Jonathon Rossi +- Tuna Toksöz +- Krzysztof Kozmic +- Mauricio Scheffer +- John Simons + +Managers +======== + + Patch Manager + ------------- + + - Josh Robb + + Documentation Manager + --------------------- + + - + + +PMC Members +=========== +(ordered by the date when joined the PMC) + +- hammett/Hamilton Verissimo (Chair) +- Henry Conceição +- Kevin Williams +- Craig Neuwirt +- Gilles Bayon +- Chad Humphries +- Ayende Rahien +- Fabio David Batista +- Roelof Blom +- Josh Robb +- Jonathon Rossi + +Emeritus +======== +(no longer active committers) + +- Gilles Bayon +- Dan +- Andrew Hallock +- John Morales +- CobraLord +- Tatham Oddie +- Ahmed Ghandour diff --git a/packages/Castle.Core.2.5.2/lib/NET35/Castle.Core.dll b/packages/Castle.Core.2.5.2/lib/NET35/Castle.Core.dll new file mode 100644 index 0000000000000000000000000000000000000000..0207baeae72b38d760b2fa2be7c7c85e4022fcf2 GIT binary patch literal 296960 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 vcJrw;pGI4(&HNv{sv#Ba)D7*1z=deL;J + + + Castle.Core + + + +