Sie sind auf Seite 1von 940

te IS NULL OR Users.

LastActivityDate <= @InactiveSinceDate)


END
GO
/*************************************************************/
/*************************************************************/
IF (NOT EXISTS (SELECT name
FROM sysobjects
WHERE (name = N'vw_aspnet_WebPartState_Paths')
AND (type = 'V')))
BEGIN
PRINT 'Creating the vw_aspnet_WebPartState_Paths view...'
EXEC(N'
CREATE VIEW [dbo].[vw_aspnet_WebPartState_Paths]
AS SELECT [dbo].[aspnet_Paths].[ApplicationId], [dbo].[aspnet_Paths].[PathId],
[dbo].[aspnet_Paths].[Path], [dbo].[aspnet_Paths].[LoweredPath]
FROM [dbo].[aspnet_Paths]
')
END
/*************************************************************/
/*************************************************************/
IF (NOT EXISTS (SELECT name
FROM sysobjects
WHERE (name = N'vw_aspnet_WebPartState_Shared')
AND (type = 'V')))
BEGIN
PRINT 'Creating the vw_aspnet_WebPartState_Shared view...'
EXEC(N'
CREATE VIEW [dbo].[vw_aspnet_WebPartState_Shared]
AS SELECT [dbo].[aspnet_PersonalizationAllUsers].[PathId], [DataSize]=DATALENG
TH([dbo].[aspnet_PersonalizationAllUsers].[PageSettings]), [dbo].[aspnet_Persona
lizationAllUsers].[LastUpdatedDate]
FROM [dbo].[aspnet_PersonalizationAllUsers]
')
END
/*************************************************************/
/*************************************************************/
IF (NOT EXISTS (SELECT name
FROM sysobjects
WHERE (name = N'vw_aspnet_WebPartState_User')
AND (type = 'V')))
BEGIN
PRINT 'Creating the vw_aspnet_WebPartState_User view...'
EXEC(N'
CREATE VIEW [dbo].[vw_aspnet_WebPartState_User]
AS SELECT [dbo].[aspnet_PersonalizationPerUser].[PathId], [dbo].[aspnet_Person
alizationPerUser].[UserId], [DataSize]=DATALENGTH([dbo].[aspnet_PersonalizationP
erUser].[PageSettings]), [dbo].[aspnet_PersonalizationPerUser].[LastUpdatedDate]
FROM [dbo].[aspnet_PersonalizationPerUser]
')
END
GO
/*************************************************************/
/*************************************************************/

---Create Personalization schema version


-DECLARE @command nvarchar(4000)
SET @command = 'GRANT EXECUTE ON [dbo].aspnet_RegisterSchemaVersion TO ' + QUOTE
NAME(user)
EXECUTE (@command)
GO
EXEC [dbo].aspnet_RegisterSchemaVersion N'Personalization', N'1', 1, 1
GO
/*************************************************************/
/*************************************************************/
---Create Personalization roles
-IF ( NOT EXISTS ( SELECT name
FROM sysusers
WHERE issqlrole = 1
AND name = N'aspnet_Personalization_FullAccess' ) )
EXEC sp_addrole N'aspnet_Personalization_FullAccess'
IF ( NOT EXISTS ( SELECT name
FROM dbo.sysusers
WHERE issqlrole = 1
AND name = N'aspnet_Personalization_BasicAccess' ) )
EXEC sp_addrole N'aspnet_Personalization_BasicAccess'
IF ( NOT EXISTS ( SELECT name
FROM sysusers
WHERE issqlrole = 1
AND name = N'aspnet_Personalization_ReportingAccess' ) )
EXEC sp_addrole N'aspnet_Personalization_ReportingAccess'
GO
EXEC sp_addrolemember N'aspnet_Personalization_BasicAccess', N'aspnet_Personaliz
ation_FullAccess'
EXEC sp_addrolemember N'aspnet_Personalization_ReportingAccess', N'aspnet_Person
alization_FullAccess'
GO
---Stored Procedure rights for BasicAccess
-GRANT EXECUTE ON dbo.aspnet_Paths_CreatePath TO aspnet_Personalization_BasicAcce
ss
GRANT EXECUTE ON dbo.aspnet_PersonalizationAllUsers_GetPageSettings TO aspnet_Pe
rsonalization_BasicAccess
GRANT EXECUTE ON dbo.aspnet_PersonalizationPerUser_GetPageSettings TO aspnet_Per
sonalization_BasicAccess
GRANT EXECUTE ON dbo.aspnet_PersonalizationAllUsers_ResetPageSettings TO aspnet_
Personalization_BasicAccess
GRANT EXECUTE ON dbo.aspnet_PersonalizationPerUser_ResetPageSettings TO aspnet_P
ersonalization_BasicAccess

GRANT EXECUTE ON dbo.aspnet_PersonalizationAllUsers_SetPageSettings TO aspnet_Pe


rsonalization_BasicAccess
GRANT EXECUTE ON dbo.aspnet_PersonalizationPerUser_SetPageSettings TO aspnet_Per
sonalization_BasicAccess
GRANT EXECUTE ON dbo.aspnet_Personalization_GetApplicationId TO aspnet_Personali
zation_BasicAccess
GRANT EXECUTE ON dbo.aspnet_CheckSchemaVersion TO aspnet_Personalization_BasicAc
cess
GRANT EXECUTE ON dbo.aspnet_RegisterSchemaVersion TO aspnet_Personalization_Basi
cAccess
GRANT EXECUTE ON dbo.aspnet_UnRegisterSchemaVersion TO aspnet_Personalization_Ba
sicAccess
---Stored Procedure rights for ReportingAccess
-GRANT EXECUTE ON dbo.aspnet_PersonalizationAdministration_FindState TO aspnet_Pe
rsonalization_ReportingAccess
GRANT EXECUTE ON dbo.aspnet_PersonalizationAdministration_GetCountOfState TO asp
net_Personalization_ReportingAccess
GRANT EXECUTE ON dbo.aspnet_CheckSchemaVersion TO aspnet_Personalization_Reporti
ngAccess
GRANT EXECUTE ON dbo.aspnet_RegisterSchemaVersion TO aspnet_Personalization_Repo
rtingAccess
GRANT EXECUTE ON dbo.aspnet_UnRegisterSchemaVersion TO aspnet_Personalization_Re
portingAccess
---Additional stored procedure rights for FullAccess
-GRANT EXECUTE ON dbo.aspnet_PersonalizationAdministration_ResetUserState TO aspn
et_Personalization_FullAccess
GRANT EXECUTE ON dbo.aspnet_PerBsonalizationAdministration_ResetSharedState TO aspnet_P
ersonalization_FullAccess
GRANT EXECUTE ON dbo.aspnet_PersonalizationAdministration_DeleteAllState TO aspn
et_Personalization_FullAccess
---View rights
-GRANT SELECT ON dbo.vw_aspnet_Applications TO aspnet_Personalization_ReportingAc
cess
GRANT SELECT ON dbo.vw_aspnet_Users TO aspnet_Personalization_ReportingAccess
GRANT SELECT ON dbo.vw_aspnet_WebPartState_Paths TO aspnet_Personalization_Repor
tingAccess
GRANT SELECT ON dbo.vw_aspnet_WebPartState_Shared TO aspnet_Personalization_Repo
rtingAccess
GRANT SELECT ON dbo.vw_aspnet_WebPartState_User TO aspnet_Personalization_Report
ingAccess
GO
--------------------------------------------------------------------------- Version specific install
------------------------------------------------------------------------DECLARE @ver INT
DECLARE @version NCHAR(100)

DECLARE @dot INT


DECLARE @hyphen INT
DECLARE @SqlToExec NCHAR(400)
SELECT @ver = 8
SELECT @version = @@Version
SELECT @hyphen = CHARINDEX(N' - ', @version)
IF (NOT(@hyphen IS NULL) AND @hyphen > 0)
BEGIN
SELECT @hyphen = @hyphen + 3
SELECT @dot
= CHARINDEX(N'.', @version, @hyphen)
IF (NOT(@dot IS NULL) AND @dot > @hyphen)
BEGIN
SELECT @version = SUBSTRING(@version, @hyphen, @dot - @hyphen)
SELECT @ver
= CONVERT(INT, @version)
END
END
IF (@ver >= 8)
BEGIN
EXEC sp_tableoption N'aspnet_PersonalizationAllUsers', 'text in row', 6000
EXEC sp_tableoption N'aspnet_PersonalizationPerUser', 'text in row', 6000
END
GO
/*************************************************************/
/*************************************************************/
/*************************************************************/
/*************************************************************/
DECLARE @command nvarchar(4000)
SET @command = 'REVOKE EXECUTE ON [dbo].aspnet_RegisterSchemaVersion FROM ' + QU
OTENAME(user)
EXECUTE (@command)
GO
PRINT '-------------------------------------------------'
PRINT 'Completed execution of InstallPersonalization.SQL'
PRINT '-------------------------------------------------'
Q Q Q/**********************************************************************/
/* InstallProfile.SQL
*/
/*
*/
/* Installs the tables, triggers and stored procedures necessary for */
/* supporting the aspnet feature of ASP.Net
*/
/*
*/
/* InstallCommon.sql must be run before running this file.
*/
/*
** Copyright Microsoft, Inc. 2002
** All Rights Reserved.
*/
/**********************************************************************/
PRINT '------------------------------------------------'
PRINT 'Starting execution of InstallProfile.SQL'
PRINT '------------------------------------------------'
GO
SET QUOTED_IDENTIFIER OFF -- We don't use quoted identifiers
SET ANSI_NULLS ON
-- We don't want (NULL = NULL) == TRUE
GO

SET ANSI_PADDING ON
GO
SET ANSI_NULL_DFLT_ON ON
GO
/*************************************************************/
/*************************************************************/
/*************************************************************/
/*************************************************************/
/*************************************************************/
DECLARE @dbname nvarchar(128)
SET @dbname = N'aspnetdb'
IF (NOT EXISTS (SELECT name
FROM master.dbo.sysdatabases
WHERE ('[' + name + ']' = @dbname OR name = @dbname)))
BEGIN
RAISERROR('The database ''%s'' cannot be found. Please run InstallCommon.sql f
irst.', 18, 1, @dbname)
END
GO
USE [aspnetdb]
GO
IF (NOT EXISTS (SELECT name
FROM sysobjects
WHERE (name = N'aspnet_Applications')
AND (type = 'U')))
BEGIN
RAISERROR('The table ''aspnet_Applications'' cannot be found. Please use aspne
t_regsql.exe for installing ASP.NET application services.', 18, 1)
END
IF (NOT EXISTS (SELECT name
FROM sysobjects
WHERE (name = N'aspnet_Users')
AND (type = 'U')))
BEGIN
RAISERROR('The table ''aspnet_Users'' cannot be found. Please use aspnet_regsq
l.exe for installing ASP.NET application services.', 18, 1)
END
IF (NOT EXISTS (SELECT name
FROM sysobjects
WHERE (name = N'aspnet_Applications_CreateApplication')
AND (type = 'P')))
BEGIN
RAISERROR('The stored procedure ''aspnet_Applications_CreateApplication'' cann
ot be found. Please use aspnet_regsql.exe for installing ASP.NET application ser
vices.', 18, 1)
END
IF (NOT EXISTS (SELECT name
FROM sysobjects
WHERE (name = N'aspnet_Users_CreateUser')
AND (type = 'P')))
BEGIN

RAISERROR('The stored procedure ''aspnet_Users_CreateUser'' cannot be found. P


lease use aspnet_regsql.exe for installing ASP.NET application services.', 18, 1
)
END
IF (NOT EXISTS (SELECT name
FROM sysobjects
WHERE (name = N'aspnet_Users_DeleteUser')
AND (type = 'P')))
BEGIN
RAISERROR('The stored procedure ''aspnet_Users_DeleteUser'' cannot be found. P
lease use aspnet_regsql.exe for installing ASP.NET application services.', 18, 1
)
END
/*************************************************************/
/*************************************************************/
/*************************************************************/
/*************************************************************/
/*************************************************************/
IF (NOT EXISTS (SELECT name
FROM sysobjects
WHERE (name = N'aspnet_Profile')
AND (type = 'U')))
BEGIN
PRINT 'Creating the aspnet_Profile table...'
CREATE TABLE dbo.aspnet_Profile (
UserId
uniqueidentifier PRIMARY KEY FOREIGN KEY REFE
RENCES dbo.aspnet_Users(UserId),
PropertyNames
ntext NOT NULL,
PropertyValuesString
ntext NOT NULL,
PropertyValuesBinary
image NOT NULL,
LastUpdatedDate
datetime NOT NULL)
END
/*************************************************************/
/*************************************************************/
/*************************************************************/
/*************************************************************/
IF (EXISTS (SELECT name
FROM sysobjects
WHERE (name = N'aspnet_Profile_GetProperties')
AND (type = 'P')))
DROP PROCEDURE dbo.aspnet_Profile_GetProperties
GO
CREATE PROCEDURE dbo.aspnet_Profile_GetProperties
@ApplicationName
nvarchar(256),
@UserName
nvarchar(256),
@CurrentTimeUtc
datetime
AS
BEGIN
DECLARE @ApplicationId uniqueidentifier
SELECT @ApplicationId = NULL
SELECT @ApplicationId = ApplicationId FROM dbo.aspnet_Applications WHERE LO
WER(@ApplicationName) = LoweredApplicationName
IF (@ApplicationId IS NULL)
RETURN

DECLARE @UserId uniqueidentifier


SELECT @UserId = NULL
SELECT @UserId = UserId
FROM dbo.aspnet_Users
WHERE ApplicationId = @ApplicationId AND LoweredUserName = LOWER(@UserName)
IF (@UserId IS NULL)
RETURN
SELECT TOP 1 PropertyNames, PropertyValuesString, PropertyValuesBinary
FROM
dbo.aspnet_Profile
WHERE
UserId = @UserId

END
GO

IF (@@ROWCOUNT > 0)
BEGIN
UPDATE dbo.aspnet_Users
SET
LastActivityDate=@CurrentTimeUtc
WHERE UserId = @UserId
END

/*************************************************************/
/*************************************************************/
IF (EXISTS (SELECT name
FROM sysobjects
WHERE (name = N'aspnet_Profile_SetProperties')
AND (type = 'P')))
DROP PROCEDURE dbo.aspnet_Profile_SetProperties
GO
CREATE PROCEDURE dbo.aspnet_Profile_SetProperties
@ApplicationName
nvarchar(256),
@PropertyNames
ntext,
@PropertyValuesString ntext,
@PropertyValuesBinary image,
@UserName
nvarchar(256),
@IsUserAnonymous
bit,
@CurrentTimeUtc
datetime
AS
BEGIN
DECLARE @ApplicationId uniqueidentifier
SELECT @ApplicationId = NULL
DECLARE @ErrorCode
SET @ErrorCode = 0

int

DECLARE @TranStarted
SET @TranStarted = 0

bit

IF( @@TRANCOUNT = 0 )
BEGIN
BEGIN TRANSACTION
SET @TranStarted = 1
END
ELSE
SET @TranStarted = 0

EXEC dbo.aspnet_Applications_CreateApplication @ApplicationName, @Applicatio


nId OUTPUT
IF( @@ERROR <> 0 )
BEGIN
SET @ErrorCode = -1
GOTO Cleanup
END
DECLARE
DECLARE
SELECT
SELECT

@UserId uniqueidentifier
@LastActivityDate datetime
@UserId = NULL
@LastActivityDate = @CurrentTimeUtc

SELECT @UserId = UserId


FROM dbo.aspnet_Users
WHERE ApplicationId = @ApplicationId AND LoweredUserName = LOWER(@UserName)
IF (@UserId IS NULL)
EXEC dbo.aspnet_Users_CreateUser @ApplicationId, @UserName, @IsUserAnony
mous, @LastActivityDate, @UserId OUTPUT
IF( @@ERROR <> 0 )
BEGIN
SET @ErrorCode = -1
GOTO Cleanup
END
UPDATE dbo.aspnet_Users
SET
LastActivityDate=@CurrentTimeUtc
WHERE UserId = @UserId
IF( @@ERROR <> 0 )
BEGIN
SET @ErrorCode = -1
GOTO Cleanup
END
IF (EXISTS( SELECT *
FROM dbo.aspnet_Profile
WHERE UserId = @UserId))
UPDATE dbo.aspnet_Profile
SET
PropertyNames=@PropertyNames, PropertyValuesString = @PropertyVal
uesString,
PropertyValuesBinary = @PropertyValuesBinary, LastUpdatedDate=@Cu
rrentTimeUtc
WHERE UserId = @UserId
ELSE
INSERT INTO dbo.aspnet_Profile(UserId, PropertyNames, PropertyValuesStri
ng, PropertyValuesBinary, LastUpdatedDate)
VALUES (@UserId, @PropertyNames, @PropertyValuesString, @PropertyVa
luesBinary, @CurrentTimeUtc)
IF( @@ERROR <> 0 )
BEGIN
SET @ErrorCode = -1
GOTO Cleanup
END
IF( @TranStarted = 1 )
BEGIN

END

SET @TranStarted = 0
COMMIT TRANSACTION

RETURN 0
Cleanup:
IF( @TranStarted = 1 )
BEGIN
SET @TranStarted = 0
ROLLBACK TRANSACTION
END
RETURN @ErrorCode
END
GO
/*************************************************************/
/*************************************************************/
IF (EXISTS (SELECT name
FROM sysobjects
WHERE (name = N'aspnet_Profile_DeleteProfiles')
AND (type = 'P')))
DROP PROCEDURE dbo.aspnet_Profile_DeleteProfiles
GO
CREATE PROCEDURE dbo.aspnet_Profile_DeleteProfiles
@ApplicationName
nvarchar(256),
@UserNames
nvarchar(4000)
AS
BEGIN
DECLARE @UserName
nvarchar(256)
DECLARE @CurrentPos int
DECLARE @NextPos
int
DECLARE @NumDeleted int
DECLARE @DeletedUser int
DECLARE @TranStarted bit
DECLARE @ErrorCode
int
SET
SET
SET
SET

@ErrorCode = 0
@CurrentPos = 1
@NumDeleted = 0
@TranStarted = 0

IF( @@TRANCOUNT = 0 )
BEGIN
BEGIN TRANSACTION
SET @TranStarted = 1
END
ELSE
SET @TranStarted = 0
WHILE (@CurrentPos <= LEN(@UserNames))
BEGIN
SELECT @NextPos = CHARINDEX(N',', @UserNames, @CurrentPos)
IF (@NextPos = 0 OR @NextPos IS NULL)
SELECT @NextPos = LEN(@UserNames) + 1
SELECT @UserName = SUBSTRING(@UserNames, @CurrentPos, @NextPos - @Curren

tPos)

SELECT @CurrentPos = @NextPos+1

IF (LEN(@UserName) > 0)
BEGIN
SELECT @DeletedUser = 0
EXEC dbo.aspnet_Users_DeleteUser @ApplicationName, @UserName, 4, @De
letedUser OUTPUT
IF( @@ERROR <> 0 )
BEGIN
SET @ErrorCode = -1
GOTO Cleanup
END
IF (@DeletedUser <> 0)
SELECT @NumDeleted = @NumDeleted + 1
END
END
SELECT @NumDeleted
IF (@TranStarted = 1)
BEGIN
SET @TranStarted = 0
COMMIT TRANSACTION
END
SET @TranStarted = 0
RETURN 0
Cleanup:
IF (@TranStarted = 1 )
BEGIN
SET @TranStarted = 0
ROLLBACK TRANSACTION
END
RETURN @ErrorCode
END
GO
/*************************************************************/
/*************************************************************/
IF (EXISTS (SELECT name
FROM sysobjects
WHERE (name = N'aspnet_Profile_DeleteInactiveProfiles')
AND (type = 'P')))
DROP PROCEDURE dbo.aspnet_Profile_DeleteInactiveProfiles
GO
CREATE PROCEDURE dbo.aspnet_Profile_DeleteInactiveProfiles
@ApplicationName
nvarchar(256),
@ProfileAuthOptions
int,
@InactiveSinceDate
datetime
AS
BEGIN
DECLARE @ApplicationId uniqueidentifier
SELECT @ApplicationId = NULL
SELECT @ApplicationId = ApplicationId FROM aspnet_Applications WHERE LOWER(
@ApplicationName) = LoweredApplicationName
IF (@ApplicationId IS NULL)
BEGIN
SELECT 0
RETURN

END
DELETE
FROM
dbo.aspnet_Profile
WHERE UserId IN
( SELECT UserId
FROM
dbo.aspnet_Users u
WHERE ApplicationId = @ApplicationId
AND (LastActivityDate <= @InactiveSinceDate)
AND (
(@ProfileAuthOptions = 2)
OR (@ProfileAuthOptions = 0 AND IsAnonymous = 1)
OR (@ProfileAuthOptions = 1 AND IsAnonymous = 0)
)
)
END
GO

SELECT @@ROWCOUNT

/*************************************************************/
/*************************************************************/
IF (EXISTS (SELECT name
FROM sysobjects
WHERE (name = N'aspnet_Profile_GetNumberOfInactiveProfiles')
AND (type = 'P')))
DROP PROCEDURE dbo.aspnet_Profile_GetNumberOfInactiveProfiles
GO
CREATE PROCEDURE dbo.aspnet_Profile_GetNumberOfInactiveProfiles
@ApplicationName
nvarchar(256),
@ProfileAuthOptions
int,
@InactiveSinceDate
datetime
AS
BEGIN
DECLARE @ApplicationId uniqueidentifier
SELECT @ApplicationId = NULL
SELECT @ApplicationId = ApplicationId FROM aspnet_Applications WHERE LOWER(
@ApplicationName) = LoweredApplicationName
IF (@ApplicationId IS NULL)
BEGIN
SELECT 0
RETURN
END
SELECT
FROM
WHERE
AND
AND
AND

END
GO

COUNT(*)
dbo.aspnet_Users u, dbo.aspnet_Profile p
ApplicationId = @ApplicationId
u.UserId = p.UserId
(LastActivityDate <= @InactiveSinceDate)
(
(@ProfileAuthOptions = 2)
OR (@ProfileAuthOptions = 0 AND IsAnonymous = 1)
OR (@ProfileAuthOptions = 1 AND IsAnonymous = 0)
)

/*************************************************************/

/*************************************************************/
IF (EXISTS (SELECT name
FROM sysobjects
WHERE (name = N'aspnet_Profile_GetProfiles')
AND (type = 'P')))
DROP PROCEDURE dbo.aspnet_Profile_GetProfiles
GO
CREATE PROCEDURE dbo.aspnet_Profile_GetProfiles
@ApplicationName
nvarchar(256),
@ProfileAuthOptions
int,
@PageIndex
int,
@PageSize
int,
@UserNameToMatch
nvarchar(256) = NULL,
@InactiveSinceDate
datetime
= NULL
AS
BEGIN
DECLARE @ApplicationId uniqueidentifier
SELECT @ApplicationId = NULL
SELECT @ApplicationId = ApplicationId FROM aspnet_Applications WHERE LOWER(
@ApplicationName) = LoweredApplicationName
IF (@ApplicationId IS NULL)
RETURN
-- Set the page bounds
DECLARE @PageLowerBound int
DECLARE @PageUpperBound int
DECLARE @TotalRecords int
SET @PageLowerBound = @PageSize * @PageIndex
SET @PageUpperBound = @PageSize - 1 + @PageLowerBound
-- Create a temp table TO store the select results
CREATE TABLE #PageIndexForUsers
(
IndexId int IDENTITY (0, 1) NOT NULL,
UserId uniqueidentifier
)
-- Insert into our temp table
INSERT INTO #PageIndexForUsers (UserId)
SELECT u.UserId
FROM
dbo.aspnet_Users u, dbo.aspnet_Profile p
WHERE ApplicationId = @ApplicationId
AND u.UserId = p.UserId
AND (@InactiveSinceDate IS NULL OR LastActivityDate <= @InactiveSinc
eDate)
AND (
(@ProfileAuthOptions = 2)
OR (@ProfileAuthOptions = 0 AND IsAnonymous = 1)
OR (@ProfileAuthOptions = 1 AND IsAnonymous = 0)
)
AND (@UserNameToMatch IS NULL OR LoweredUserName LIKE LOWER(@UserNam
eToMatch))
ORDER BY UserName
SELECT u.UserName, u.IsAnonymous, u.LastActivityDate, p.LastUpdatedDate,
DATALENGTH(p.PropertyNames) + DATALENGTH(p.PropertyValuesString) + D
ATALENGTH(p.PropertyValuesBinary)
FROM
dbo.aspnet_Users u, dbo.aspnet_Profile p, #PageIndexForUsers i
WHERE u.UserId = p.UserId AND p.UserId = i.UserId AND i.IndexId >= @PageLo
werBound AND i.IndexId <= @PageUpperBound

SELECT COUNT(*)
FROM #PageIndexForUsers
END
GO

DROP TABLE #PageIndexForUsers

/*************************************************************/
/*************************************************************/
IF (NOT EXISTS (SELECT name
FROM sysobjects
WHERE (name = N'vw_aspnet_Profiles')
AND (type = 'V')))
BEGIN
PRINT 'Creating the vw_aspnet_Profiles view...'
EXEC(N'
CREATE VIEW [dbo].[vw_aspnet_Profiles]
AS SELECT [dbo].[aspnet_Profile].[UserId], [dbo].[aspnet_Profile].[LastUpdated
Date],
[DataSize]= DATALENGTH([dbo].[aspnet_Profile].[PropertyNames])
+ DATALENGTH([dbo].[aspnet_Profile].[PropertyValuesString])
+ DATALENGTH([dbo].[aspnet_Profile].[PropertyValuesBinary])
FROM [dbo].[aspnet_Profile]
')
END
GO
/*************************************************************/
/*************************************************************/
---Create Profile schema version
-DECLARE @command nvarchar(4000)
SET @command = 'GRANT EXECUTE ON [dbo].aspnet_RegisterSchemaVersion TO ' + QUOTE
NAME(user)
EXECUTE (@command)
GO
EXEC [dbo].aspnet_RegisterSchemaVersion N'Profile', N'1', 1, 1
GO
/*************************************************************/
/*************************************************************/
---Create Profile roles
-IF ( NOT EXISTS ( SELECT name
FROM sysusers
WHERE issqlrole = 1
AND name = N'aspnet_Profile_FullAccess' ) )
EXEC sp_addrole N'aspnet_Profile_FullAccess'
IF ( NOT EXISTS ( SELECT name
FROM sysusers
WHERE issqlrole = 1

AND name = N'aspnet_Profile_BasicAccess' ) )


EXEC sp_addrole N'aspnet_Profile_BasicAccess'
IF ( NOT EXISTS ( SELECT name
FROM sysusers
WHERE issqlrole = 1
AND name = N'aspnet_Profile_ReportingAccess' ) )
EXEC sp_addrole N'aspnet_Profile_ReportingAccess'
GO
EXEC sp_addrolemember N'aspnet_Profile_BasicAccess', N'aspnet_Profile_FullAccess
'
EXEC sp_addrolemember N'aspnet_Profile_ReportingAccess', N'aspnet_Profile_FullAc
cess'
GO
---Stored Procedure rights for BasicAccess
-GRANT EXECUTE ON dbo.aspnet_Profile_GetProperties TO aspnet_Profile_BasicAccess
GRANT EXECUTE ON dbo.aspnet_Profile_SetProperties TO aspnet_Profile_BasicAccess
GRANT EXECUTE ON dbo.aspnet_CheckSchemaVersion TO aspnet_Profile_BasicAccess
GRANT EXECUTE ON dbo.aspnet_RegisterSchemaVersion TO aspnet_Profile_BasicAccess
GRANT EXECUTE ON dbo.aspnet_UnRegisterSchemaVersion TO aspnet_Profile_BasicAcces
s
---Stored Procedure rights for ReportingAccess
-GRANT EXECUTE ON dbo.aspnet_Profile_GetNumberOfInactiveProfiles TO aspnet_Profil
e_ReportingAccess
GRANT EXECUTE ON dbo.aspnet_Profile_GetProfiles TO aspnet_Profile_ReportingAcces
s
GRANT EXECUTE ON dbo.aspnet_CheckSchemaVersion TO aspnet_Profile_ReportingAccess
GRANT EXECUTE ON dbo.aspnet_RegisterSchemaVersion TO aspnet_Profile_ReportingAcc
ess
GRANT EXECUTE ON dbo.aspnet_UnRegisterSchemaVersion TO aspnet_Profile_ReportingA
ccess
---Additional stored procedure rights for FullAccess
-GRANT EXECUTE ON dbo.aspnet_Profile_DeleteProfiles TO aspnet_Profile_FullAccess
GRANT EXECUTE ON dbo.aspnet_Profile_DeleteInactiveProfiles TO aspnet_Profile_Ful
lAccess
---View rights
-GRANT SELECT ON dbo.vw_aspnet_Applications TO aspnet_Profile_ReportingAccess
GRANT SELECT ON dbo.vw_aspnet_Users TO aspnet_Profile_ReportingAccess
GRANT SELECT ON dbo.vw_aspnet_Profiles TO aspnet_Profile_ReportingAccess
GO
--------------------------------------------------------------------------- Version specific install
------------------------------------------------------------------------DECLARE @ver int

DECLARE
DECLARE
DECLARE
DECLARE

@version nchar(100)
@dot int
@hyphen int
@SqlToExec nchar(400)

SELECT @ver = 8
SELECT @version = @@Version
SELECT @hyphen = CHARINDEX(N' - ', @version)
IF (NOT(@hyphen IS NULL) AND @hyphen > 0)
BEGIN
SELECT @hyphen = @hyphen + 3
SELECT @dot
= CHARINDEX(N'.', @version, @hyphen)
IF (NOT(@dot IS NULL) AND @dot > @hyphen)
BEGIN
SELECT @version = SUBSTRING(@version, @hyphen, @dot - @hyphen)
SELECT @ver
= CONVERT(int, @version)
END
END
IF (@ver >= 8)
BEGIN
EXEC sp_tableoption N'aspnet_Profile', 'text in row', 6000
END
GO
/*************************************************************/
/*************************************************************/
/*************************************************************/
/*************************************************************/
DECLARE @command nvarchar(4000)
SET @command = 'REVOKE EXECUTE ON [dbo].aspnet_RegisterSchemaVersion FROM ' + QU
OTENAME(user)
EXECUTE (@command)
GO
PRINT '-------------------------------------------------'
PRINT 'Completed execution of InstallProfile.SQL'
PRINT '-------------------------------------------------'
q ,   /**********************************************************************/
/* InstallRoles.SQL
*/
/*
*/
/* Installs the tables, triggers and stored procedures necessary for */
/* supporting the aspnet feature of ASP.Net
*/
/*
*/
/* InstallCommon.sql must be run before running this file.
*/
/*
** Copyright Microsoft, Inc. 2002
** All Rights Reserved.
*/
/**********************************************************************/
PRINT '--------------------------------------'
PRINT 'Starting execution of InstallRoles.SQL'
PRINT '--------------------------------------'
GO
SET QUOTED_IDENTIFIER OFF -- We don't use quoted identifiers
SET ANSI_NULLS ON
-- We don't want (NULL = NULL) == TRUE
GO

SET ANSI_PADDING ON
GO
SET ANSI_NULL_DFLT_ON ON
GO
/*************************************************************/
/*************************************************************/
/*************************************************************/
/*************************************************************/
/*************************************************************/
DECLARE @dbname nvarchar(128)
SET @dbname = N'aspnetdb'
IF (NOT EXISTS (SELECT name
FROM master.dbo.sysdatabases
WHERE ('[' + name + ']' = @dbname OR name = @dbname)))
BEGIN
RAISERROR('The database ''%s'' cannot be found. Please run InstallCommon.sql f
irst.', 18, 1, @dbname)
END
GO
USE [aspnetdb]
GO
IF (NOT EXISTS (SELECT name
FROM sysobjects
WHERE (name = N'aspnet_Applications')
AND (type = 'U')))
BEGIN
RAISERROR('The table ''aspnet_Applications'' cannot be found. Please use aspne
t_regsql.exe for installing ASP.NET application services.', 18, 1)
END
IF (NOT EXISTS (SELECT name
FROM sysobjects
WHERE (name = N'aspnet_Users')
AND (type = 'U')))
BEGIN
RAISERROR('The table ''aspnet_Users'' cannot be found. Please use aspnet_regsq
l.exe for installing ASP.NET application services.', 18, 1)
END
IF (NOT EXISTS (SELECT name
FROM sysobjects
WHERE (name = N'aspnet_Applications_CreateApplication')
AND (type = 'P')))
BEGIN
RAISERROR('The stored procedure ''aspnet_Applications_CreateApplication'' cann
ot be found. Please use aspnet_regsql.exe for installing ASP.NET application ser
vices.', 18, 1)
END
IF (NOT EXISTS (SELECT name
FROM sysobjects
WHERE (name = N'aspnet_Users_CreateUser')
AND (type = 'P')))
BEGIN

RAISERROR('The stored procedure ''aspnet_Users_CreateUser'' cannot be found. P


lease use aspnet_regsql.exe for installing ASP.NET application services.', 18, 1
)
END
IF (NOT EXISTS (SELECT name
FROM sysobjects
WHERE (name = N'aspnet_Users_DeleteUser')
AND (type = 'P')))
BEGIN
RAISERROR('The stored procedure ''aspnet_Users_DeleteUser'' cannot be found. P
lease use aspnet_regsql.exe for installing ASP.NET application services.', 18, 1
)
END
/*************************************************************/
/*************************************************************/
IF (NOT EXISTS (SELECT name
FROM sysobjects
WHERE (name = N'aspnet_Roles')
AND (type = 'U')))
BEGIN
PRINT 'Creating the aspnet_Roles table...'
CREATE TABLE dbo.aspnet_Roles (
ApplicationId
uniqueidentifier
NOT NULL FOREIGN KEY REFERENCES dbo
.aspnet_Applications(ApplicationId),
RoleId
uniqueidentifier
PRIMARY KEY NONCLUSTERED DEFAULT N
EWID(),
RoleName
nvarchar(256)
NOT NULL,
LoweredRoleName nvarchar(256)
NOT NULL,
Description
nvarchar(256)
)
CREATE UNIQUE CLUSTERED INDEX aspnet_Roles_index1 ON dbo.aspnet_Roles(Applic
ationId, LoweredRoleName)
END
GO
/*************************************************************/
/*************************************************************/
IF (NOT EXISTS (SELECT name
FROM sysobjects
WHERE (name = N'aspnet_UsersInRoles')
AND (type = 'U')))
BEGIN
PRINT 'Creating the aspnet_UsersInRoles table...'
CREATE TABLE dbo.aspnet_UsersInRoles (
UserId
uniqueidentifier NOT NULL PRIMARY KEY(UserId, RoleId) FOREIGN
KEY REFERENCES dbo.aspnet_Users (UserId),
RoleId
uniqueidentifier NOT NULL FOREIGN KEY REFERENCES dbo.aspnet_R
oles (RoleId))
CREATE INDEX aspnet_UsersInRoles_index ON dbo.aspnet_UsersInRoles(RoleId)
END
/*************************************************************/
/*************************************************************/
/*************************************************************/
/*************************************************************/

IF (EXISTS (SELECT name


FROM sysobjects
WHERE (name = N'aspnet_UsersInRoles_IsUserInRole')
AND (type = 'P')))
DROP PROCEDURE dbo.aspnet_UsersInRoles_IsUserInRole
GO
CREATE PROCEDURE dbo.aspnet_UsersInRoles_IsUserInRole
@ApplicationName nvarchar(256),
@UserName
nvarchar(256),
@RoleName
nvarchar(256)
AS
BEGIN
DECLARE @ApplicationId uniqueidentifier
SELECT @ApplicationId = NULL
SELECT @ApplicationId = ApplicationId FROM aspnet_Applications WHERE LOWER(
@ApplicationName) = LoweredApplicationName
IF (@ApplicationId IS NULL)
RETURN(2)
DECLARE @UserId uniqueidentifier
SELECT @UserId = NULL
DECLARE @RoleId uniqueidentifier
SELECT @RoleId = NULL

SELECT @UserId = UserId


FROM
dbo.aspnet_Users
WHERE LoweredUserName = LOWER(@UserName) AND ApplicationId = @ApplicationI
IF (@UserId IS NULL)
RETURN(2)

SELECT @RoleId = RoleId


FROM
dbo.aspnet_Roles
WHERE LoweredRoleName = LOWER(@RoleName) AND ApplicationId = @ApplicationI
IF (@RoleId IS NULL)
RETURN(3)

IF (EXISTS( SELECT * FROM dbo.aspnet_UsersInRoles WHERE UserId = @UserId AN


D RoleId = @RoleId))
RETURN(1)
ELSE
RETURN(0)
END
GO
/*************************************************************/
/*************************************************************/
IF (EXISTS (SELECT name
FROM sysobjects
WHERE (name = N'aspnet_UsersInRoles_GetRolesForUser')
AND (type = 'P')))
DROP PROCEDURE dbo.aspnet_UsersInRoles_GetRolesForUser
GO
CREATE PROCEDURE dbo.aspnet_UsersInRoles_GetRolesForUser

@ApplicationName nvarchar(256),
@UserName
nvarchar(256)

AS
BEGIN
DECLARE @ApplicationId uniqueidentifier
SELECT @ApplicationId = NULL
SELECT @ApplicationId = ApplicationId FROM aspnet_Applications WHERE LOWER(
@ApplicationName) = LoweredApplicationName
IF (@ApplicationId IS NULL)
RETURN(1)
DECLARE @UserId uniqueidentifier
SELECT @UserId = NULL

SELECT @UserId = UserId


FROM
dbo.aspnet_Users
WHERE LoweredUserName = LOWER(@UserName) AND ApplicationId = @ApplicationI
IF (@UserId IS NULL)
RETURN(1)

SELECT r.RoleName
FROM dbo.aspnet_Roles r, dbo.aspnet_UsersInRoles ur
WHERE r.RoleId = ur.RoleId AND r.ApplicationId = @ApplicationId AND ur.User
Id = @UserId
ORDER BY r.RoleName
RETURN (0)
END
GO
/*************************************************************/
/*************************************************************/
IF (EXISTS (SELECT name
FROM sysobjects
WHERE (name = N'aspnet_Roles_CreateRole')
AND (type = 'P')))
DROP PROCEDURE dbo.aspnet_Roles_CreateRole
GO
CREATE PROCEDURE dbo.aspnet_Roles_CreateRole
@ApplicationName nvarchar(256),
@RoleName
nvarchar(256)
AS
BEGIN
DECLARE @ApplicationId uniqueidentifier
SELECT @ApplicationId = NULL
DECLARE @ErrorCode
SET @ErrorCode = 0

int

DECLARE @TranStarted
SET @TranStarted = 0

bit

IF( @@TRANCOUNT = 0 )
BEGIN
BEGIN TRANSACTION
SET @TranStarted = 1
END
ELSE
SET @TranStarted = 0

EXEC dbo.aspnet_Applications_CreateApplication @ApplicationName, @Applicatio


nId OUTPUT
IF( @@ERROR <> 0 )
BEGIN
SET @ErrorCode = -1
GOTO Cleanup
END
IF (EXISTS(SELECT RoleId FROM dbo.aspnet_Roles WHERE LoweredRoleName = LOWER
(@RoleName) AND ApplicationId = @ApplicationId))
BEGIN
SET @ErrorCode = 1
GOTO Cleanup
END
INSERT INTO dbo.aspnet_Roles
(ApplicationId, RoleName, LoweredRoleName)
VALUES (@ApplicationId, @RoleName, LOWER(@RoleName))
IF( @@ERROR <> 0 )
BEGIN
SET @ErrorCode = -1
GOTO Cleanup
END
IF( @TranStarted = 1 )
BEGIN
SET @TranStarted = 0
COMMIT TRANSACTION
END
RETURN(0)
Cleanup:
IF( @TranStarted = 1 )
BEGIN
SET @TranStarted = 0
ROLLBACK TRANSACTION
END
RETURN @ErrorCode
END
GO
/*************************************************************/
/*************************************************************/
IF (EXISTS (SELECT name
FROM sysobjects
WHERE (name = N'aspnet_Roles_DeleteRole')
AND (type = 'P')))
DROP PROCEDURE dbo.aspnet_Roles_DeleteRole
GO
CREATE PROCEDURE dbo.aspnet_Roles_DeleteRole
@ApplicationName
nvarchar(256),
@RoleName
nvarchar(256),

@DeleteOnlyIfRoleIsEmpty
bit
AS
BEGIN
DECLARE @ApplicationId uniqueidentifier
SELECT @ApplicationId = NULL
SELECT @ApplicationId = ApplicationId FROM aspnet_Applications WHERE LOWER(
@ApplicationName) = LoweredApplicationName
IF (@ApplicationId IS NULL)
RETURN(1)
DECLARE @ErrorCode
SET @ErrorCode = 0

int

DECLARE @TranStarted
SET @TranStarted = 0

bit

IF( @@TRANCOUNT = 0 )
BEGIN
BEGIN TRANSACTION
SET @TranStarted = 1
END
ELSE
SET @TranStarted = 0
DECLARE
SELECT
SELECT
(@RoleName)

@RoleId uniqueidentifier
@RoleId = NULL
@RoleId = RoleId FROM dbo.aspnet_Roles WHERE LoweredRoleName = LOWER
AND ApplicationId = @ApplicationId

IF (@RoleId IS NULL)
BEGIN
SELECT @ErrorCode = 1
GOTO Cleanup
END
IF (@DeleteOnlyIfRoleIsEmpty <> 0)
BEGIN
IF (EXISTS (SELECT RoleId FROM dbo.aspnet_UsersInRoles WHERE @RoleId =
RoleId))
BEGIN
SELECT @ErrorCode = 2
GOTO Cleanup
END
END
DELETE FROM dbo.aspnet_UsersInRoles WHERE @RoleId = RoleId
IF( @@ERROR <> 0 )
BEGIN
SET @ErrorCode = -1
GOTO Cleanup
END
DELETE FROM dbo.aspnet_Roles WHERE @RoleId = RoleId AND ApplicationId = @Ap
plicationId
IF( @@ERROR <> 0 )
BEGIN
SET @ErrorCode = -1
GOTO Cleanup

END
IF( @TranStarted = 1 )
BEGIN
SET @TranStarted = 0
COMMIT TRANSACTION
END
RETURN(0)
Cleanup:
IF( @TranStarted = 1 )
BEGIN
SET @TranStarted = 0
ROLLBACK TRANSACTION
END
END
GO

RETURN @ErrorCode

/*************************************************************/
/*************************************************************/
IF (EXISTS (SELECT name
FROM sysobjects
WHERE (name = N'aspnet_Roles_RoleExists')
AND (type = 'P')))
DROP PROCEDURE dbo.aspnet_Roles_RoleExists
GO
CREATE PROCEDURE dbo.aspnet_Roles_RoleExists
@ApplicationName nvarchar(256),
@RoleName
nvarchar(256)
AS
BEGIN
DECLARE @ApplicationId uniqueidentifier
SELECT @ApplicationId = NULL
SELECT @ApplicationId = ApplicationId FROM aspnet_Applications WHERE LOWER(
@ApplicationName) = LoweredApplicationName
IF (@ApplicationId IS NULL)
RETURN(0)
IF (EXISTS (SELECT RoleName FROM dbo.aspnet_Roles WHERE LOWER(@RoleName) = L
oweredRoleName AND ApplicationId = @ApplicationId ))
RETURN(1)
ELSE
RETURN(0)
END
GO
/*************************************************************/
/*************************************************************/
IF (EXISTS (SELECT name
FROM sysobjects
WHERE (name = N'aspnet_UsersInRoles_AddUsersToRoles')
AND (type = 'P')))
DROP PROCEDURE dbo.aspnet_UsersInRoles_AddUsersToRoles
GO

IF (EXISTS (SELECT name


FROM sysobjects
WHERE (name = N'aspnet_UsersInRoles_RemoveUsersFromRoles')
AND (type = 'P')))
DROP PROCEDURE dbo.aspnet_UsersInRoles_RemoveUsersFromRoles
GO
DECLARE
DECLARE
DECLARE
DECLARE
DECLARE

@ver
@version
@dot
@hyphen
@SqlToExec

int
nchar(100)
int
int
nchar(4000)

SELECT @ver = 7
SELECT @version = @@Version
SELECT @hyphen = CHARINDEX(N' - ', @version)
IF (NOT(@hyphen IS NULL) AND @hyphen > 0)
BEGIN
SELECT @hyphen = @hyphen + 3
SELECT @dot
= CHARINDEX(N'.', @version, @hyphen)
IF (NOT(@dot IS NULL) AND @dot > @hyphen)
BEGIN
SELECT @version = SUBSTRING(@version, @hyphen, @dot - @hyphen)
SELECT @ver
= CONVERT(int, @version)
END
END
IF (@ver > 7)
SELECT @SqlToExec = N'
CREATE PROCEDURE dbo.aspnet_UsersInRoles_AddUsersToRoles
@ApplicationName nvarchar(256),
@UserNames
nvarchar(4000),
@RoleNames
nvarchar(4000),
@CurrentTimeUtc datetime
AS
BEGIN
DECLARE @AppId uniqueidentifier
SELECT @AppId = NULL
SELECT @AppId = ApplicationId FROM aspnet_Applications WHERE LOWER(@App
licationName) = LoweredApplicationName
IF (@AppId IS NULL)
RETURN(2)
DECLARE @TranStarted bit
SET @TranStarted = 0
IF( @@TRANCOUNT = 0 )
BEGIN
BEGIN TRANSACTION
SET @TranStarted = 1
END

EY)
EY)

DECLARE @tbNames
DECLARE @tbRoles

table(Name nvarchar(256) NOT NULL PRIMARY KEY)


table(RoleId uniqueidentifier NOT NULL PRIMARY K

DECLARE @tbUsers

table(UserId uniqueidentifier NOT NULL PRIMARY K

DECLARE
DECLARE
DECLARE
DECLARE

int
int
int
nvarchar(256)

@Num
@Pos
@NextPos
@Name

SET @Num = 0
SET @Pos = 1
WHILE(@Pos <= LEN(@RoleNames))
BEGIN
SELECT @NextPos = CHARINDEX(N'','', @RoleNames, @Pos)
IF (@NextPos = 0 OR @NextPos IS NULL)
SELECT @NextPos = LEN(@RoleNames) + 1
SELECT @Name = RTRIM(LTRIM(SUBSTRING(@RoleNames, @Pos, @NextPos
- @Pos)))
SELECT @Pos = @NextPos+1

END

INSERT INTO @tbNames VALUES (@Name)


SET @Num = @Num + 1

INSERT INTO @tbRoles


SELECT RoleId
FROM dbo.aspnet_Roles ar, @tbNames t
WHERE LOWER(t.Name) = ar.LoweredRoleName AND ar.ApplicationId = @AppI

IF (@@ROWCOUNT <> @Num)


BEGIN
SELECT TOP 1 Name
FROM @tbNames
WHERE LOWER(Name) NOT IN (SELECT ar.LoweredRoleName FROM dbo.as
pnet_Roles ar, @tbRoles r WHERE r.RoleId = ar.RoleId)
IF( @TranStarted = 1 )
ROLLBACK TRANSACTION
RETURN(2)
END
DELETE FROM @tbNames WHERE 1=1
SET @Num = 0
SET @Pos = 1
WHILE(@Pos <= LEN(@UserNames))
BEGIN
SELECT @NextPos = CHARINDEX(N'','', @UserNames, @Pos)
IF (@NextPos = 0 OR @NextPos IS NULL)
SELECT @NextPos = LEN(@UserNames) + 1
SELECT @Name = RTRIM(LTRIM(SUBSTRING(@UserNames, @Pos, @NextPos
- @Pos)))
SELECT @Pos = @NextPos+1

END

INSERT INTO @tbNames VALUES (@Name)


SET @Num = @Num + 1

INSERT INTO @tbUsers


SELECT UserId
FROM dbo.aspnet_Users ar, @tbNames t
WHERE LOWER(t.Name) = ar.LoweredUserName AND ar.ApplicationId = @AppI
IF (@@ROWCOUNT <> @Num)
BEGIN
DELETE FROM @tbNames
WHERE LOWER(Name) IN (SELECT LoweredUserName FROM dbo.aspnet_Use

rs au, @tbUsers u WHERE au.UserId = u.UserId)


INSERT dbo.aspnet_Users (ApplicationId, UserId, UserName, Lowere
dUserName, IsAnonymous, LastActivityDate)
SELECT @AppId, NEWID(), Name, LOWER(Name), 0, @CurrentTimeUtc
FROM @tbNames

d = @AppId
END

INSERT INTO @tbUsers


SELECT UserId
FROM dbo.aspnet_Users au, @tbNames t
WHERE LOWER(t.Name) = au.LoweredUserName AND au.ApplicationI

IF (EXISTS (SELECT * FROM dbo.aspnet_UsersInRoles ur, @tbUsers tu, @tbRo


les tr WHERE tu.UserId = ur.UserId AND tr.RoleId = ur.RoleId))
BEGIN
SELECT TOP 1 UserName, RoleName
FROM
dbo.aspnet_UsersInRoles ur, @tbUsers tu, @tbRol
es tr, aspnet_Users u, aspnet_Roles r
WHERE
u.UserId = tu.UserId AND r.RoleId = tr.RoleId AN
D tu.UserId = ur.UserId AND tr.RoleId = ur.RoleId

END

IF( @TranStarted = 1 )
ROLLBACK TRANSACTION
RETURN(3)

INSERT INTO dbo.aspnet_UsersInRoles (UserId, RoleId)


SELECT UserId, RoleId
FROM @tbUsers, @tbRoles
IF( @TranStarted = 1 )
COMMIT TRANSACTION
RETURN(0)

END'
ELSE
SELECT @SqlToExec = N'
CREATE PROCEDURE dbo.aspnet_UsersInRoles_AddUsersToRoles
@ApplicationName
nvarchar(256),
@UserNames
nvarchar(4000),
@RoleNames
nvarchar(4000),
@CurrentTimeUtc
datetime
AS
BEGIN
DECLARE @AppId uniqueidentifier
SELECT @AppId = NULL
SELECT @AppId = ApplicationId FROM aspnet_Applications WHERE LOWER(@App
licationName) = LoweredApplicationName
IF (@AppId IS NULL)
RETURN(2)
DECLARE @TranStarted bit
SET @TranStarted = 0
IF( @@TRANCOUNT = 0 )
BEGIN
BEGIN TRANSACTION
SET @TranStarted = 1
END

DECLARE
DECLARE
DECLARE
DECLARE

@RoleId
@UserId
@UserName
@RoleName

uniqueidentifier
uniqueidentifier
nvarchar(256)
nvarchar(256)

DECLARE
DECLARE
DECLARE
DECLARE

@CurrentPosU
@NextPosU
@CurrentPosR
@NextPosR

int
int

int
int

SELECT @CurrentPosU = 1
WHILE(@CurrentPosU <= LEN(@UserNames))
BEGIN
SELECT @NextPosU = CHARINDEX(N'','', @UserNames, @CurrentPosU)
IF (@NextPosU = 0 OR @NextPosU IS NULL)
SELECT @NextPosU = LEN(@UserNames) + 1
SELECT @UserName = SUBSTRING(@UserNames, @CurrentPosU, @NextPosU
- @CurrentPosU)
SELECT @CurrentPosU = @NextPosU+1

ntPosR)

SELECT @CurrentPosR = 1
WHILE(@CurrentPosR <= LEN(@RoleNames))
BEGIN
SELECT @NextPosR = CHARINDEX(N'','', @RoleNames, @Curre

NextPosR - @CurrentPosR)

IF (@NextPosR = 0 OR @NextPosR IS NULL)


SELECT @NextPosR = LEN(@RoleNames) + 1
SELECT @RoleName = SUBSTRING(@RoleNames, @CurrentPosR, @

SELECT @CurrentPosR = @NextPosR+1


SELECT @RoleId = NULL
SELECT @RoleId = RoleId FROM dbo.aspnet_Roles WHERE Lowe
redRoleName = LOWER(@RoleName) AND ApplicationId = @AppId
IF (@RoleId IS NULL)
BEGIN
SELECT @RoleName
IF( @TranStarted = 1 )
ROLLBACK TRANSACTION
RETURN(2)
END
SELECT @UserId = NULL
SELECT @UserId = UserId FROM dbo.aspnet_Users WHERE Lowe
redUserName = LOWER(@UserName) AND ApplicationId = @AppId
IF (@UserId IS NULL)
BEGIN
EXEC dbo.aspnet_Users_CreateUser @AppId, @UserNa
me, 0, @CurrentTimeUtc, @UserId OUTPUT
END
IF (EXISTS(SELECT * FROM dbo.aspnet_UsersInRoles WHERE @
UserId = UserId AND @RoleId = RoleId))
BEGIN
SELECT @UserName, @RoleName
IF( @TranStarted = 1 )
ROLLBACK TRANSACTION
RETURN(3)
END

INSERT INTO dbo.aspnet_UsersInRoles (UserId, RoleId) VAL


UES(@UserId, @RoleId)
END
END
IF( @TranStarted = 1 )
COMMIT TRANSACTION
RETURN(0)
END'
EXEC sp_executesql @SqlToExec
IF (@ver > 7)
SELECT @SqlToExec = N'
CREATE PROCEDURE dbo.aspnet_UsersInRoles_RemoveUsersFromRoles
@ApplicationName nvarchar(256),
@UserNames
nvarchar(4000),
@RoleNames
nvarchar(4000)
AS
BEGIN
DECLARE @AppId uniqueidentifier
SELECT @AppId = NULL
SELECT @AppId = ApplicationId FROM aspnet_Applications WHERE LOWER(@App
licationName) = LoweredApplicationName
IF (@AppId IS NULL)
RETURN(2)
DECLARE @TranStarted
SET @TranStarted = 0

bit

IF( @@TRANCOUNT = 0 )
BEGIN
BEGIN TRANSACTION
SET @TranStarted = 1
END
DECLARE
DECLARE
DECLARE
DECLARE
DECLARE
DECLARE
DECLARE
DECLARE
DECLARE
DECLARE

@tbNames
@tbRoles
@tbUsers
@Num
@Pos
@NextPos
@Name
@CountAll
@CountU
@CountR

table(Name nvarchar(256) NOT NULL PRIMARY KEY)


table(RoleId uniqueidentifier NOT NULL PRIMARY KEY)
table(UserId uniqueidentifier NOT NULL PRIMARY KEY)
int
int
int
nvarchar(256)
int
int
int

SET @Num = 0
SET @Pos = 1
WHILE(@Pos <= LEN(@RoleNames))
BEGIN
SELECT @NextPos = CHARINDEX(N'','', @RoleNames, @Pos)
IF (@NextPos = 0 OR @NextPos IS NULL)
SELECT @NextPos = LEN(@RoleNames) + 1
SELECT @Name = RTRIM(LTRIM(SUBSTRING(@RoleNames, @Pos, @NextPos
- @Pos)))
SELECT @Pos = @NextPos+1
INSERT INTO @tbNames VALUES (@Name)

END

SET @Num = @Num + 1

INSERT INTO @tbRoles


SELECT RoleId
FROM dbo.aspnet_Roles ar, @tbNames t
WHERE LOWER(t.Name) = ar.LoweredRoleName AND ar.ApplicationId = @AppI
SELECT @CountR = @@ROWCOUNT

IF (@CountR <> @Num)


BEGIN
SELECT TOP 1 N'''', Name
FROM @tbNames
WHERE LOWER(Name) NOT IN (SELECT ar.LoweredRoleName FROM dbo.as
pnet_Roles ar, @tbRoles r WHERE r.RoleId = ar.RoleId)
IF( @TranStarted = 1 )
ROLLBACK TRANSACTION
RETURN(2)
END
DELETE FROM @tbNames WHERE 1=1
SET @Num = 0
SET @Pos = 1
WHILE(@Pos <= LEN(@UserNames))
BEGIN
SELECT @NextPos = CHARINDEX(N'','', @UserNames, @Pos)
IF (@NextPos = 0 OR @NextPos IS NULL)
SELECT @NextPos = LEN(@UserNames) + 1
SELECT @Name = RTRIM(LTRIM(SUBSTRING(@UserNames, @Pos, @NextPos
- @Pos)))
SELECT @Pos = @NextPos+1

END

INSERT INTO @tbNames VALUES (@Name)


SET @Num = @Num + 1

INSERT INTO @tbUsers


SELECT UserId
FROM dbo.aspnet_Users ar, @tbNames t
WHERE LOWER(t.Name) = ar.LoweredUserName AND ar.ApplicationId = @AppI

SELECT @CountU = @@ROWCOUNT


IF (@CountU <> @Num)
BEGIN
SELECT TOP 1 Name, N''''
FROM @tbNames
WHERE LOWER(Name) NOT IN (SELECT au.LoweredUserName FROM dbo.as
pnet_Users au, @tbUsers u WHERE u.UserId = au.UserId)

END

IF( @TranStarted = 1 )
ROLLBACK TRANSACTION
RETURN(1)

SELECT @CountAll = COUNT(*)

FROM
WHERE

dbo.aspnet_UsersInRoles ur, @tbUsers u, @tbRoles r


ur.UserId = u.UserId AND ur.RoleId = r.RoleId

IF (@CountAll <> @CountU * @CountR)


BEGIN
SELECT TOP 1 UserName, RoleName
FROM
@tbUsers tu, @tbRoles tr, dbo.aspnet_Users u, d
bo.aspnet_Roles r
WHERE
u.UserId = tu.UserId AND r.RoleId = tr.RoleId A
ND
tu.UserId NOT IN (SELECT ur.UserId FROM
dbo.aspnet_UsersInRoles ur WHERE ur.RoleId = tr.RoleId) AND
tr.RoleId NOT IN (SELECT ur.RoleId FROM
dbo.aspnet_UsersInRoles ur WHERE ur.UserId = tu.UserId)
IF( @TranStarted = 1 )
ROLLBACK TRANSACTION
RETURN(3)
END
DELETE FROM dbo.aspnet_UsersInRoles
WHERE UserId IN (SELECT UserId FROM @tbUsers)
AND RoleId IN (SELECT RoleId FROM @tbRoles)
IF( @TranStarted = 1 )
COMMIT TRANSACTION
RETURN(0)

END
'
ELSE
SELECT @SqlToExec = N'
CREATE PROCEDURE dbo.aspnet_UsersInRoles_RemoveUsersFromRoles
@ApplicationName nvarchar(256),
@UserNames
nvarchar(4000),
@RoleNames
nvarchar(4000)
AS
BEGIN
DECLARE @AppId uniqueidentifier
SELECT @AppId = NULL
SELECT @AppId = ApplicationId FROM aspnet_Applications WHERE LOWER(@App
licationName) = LoweredApplicationName
IF (@AppId IS NULL)
RETURN(2)
DECLARE @TranStarted
SET @TranStarted = 0

bit

IF( @@TRANCOUNT = 0 )
BEGIN
BEGIN TRANSACTION
SET @TranStarted = 1
END
DECLARE
DECLARE
DECLARE
DECLARE

@RoleId
@UserId
@UserName
@RoleName

DECLARE @CurrentPosU
DECLARE @NextPosU
DECLARE @CurrentPosR

uniqueidentifier
uniqueidentifier
nvarchar(256)
nvarchar(256)
int
int

int

DECLARE @NextPosR

int

SELECT @CurrentPosU = 1
WHILE(@CurrentPosU <= LEN(@UserNames))
BEGIN
SELECT @NextPosU = CHARINDEX(N'','', @UserNames, @CurrentPosU)
IF (@NextPosU = 0 OR @NextPosU IS NULL)
SELECT @NextPosU = LEN(@UserNames)+1
SELECT @UserName = SUBSTRING(@UserNames, @CurrentPosU, @NextPosU
- @CurrentPosU)
SELECT @CurrentPosU = @NextPosU+1

ntPosR)

SELECT @CurrentPosR = 1
WHILE(@CurrentPosR <= LEN(@RoleNames))
BEGIN
SELECT @NextPosR = CHARINDEX(N'','', @RoleNames, @Curre

NextPosR - @CurrentPosR)

IF (@NextPosR = 0 OR @NextPosR IS NULL)


SELECT @NextPosR = LEN(@RoleNames)+1
SELECT @RoleName = SUBSTRING(@RoleNames, @CurrentPosR, @
SELECT @CurrentPosR = @NextPosR+1

SELECT @RoleId = NULL


SELECT @RoleId = RoleId FROM dbo.aspnet_Roles WHERE Lowe
redRoleName = LOWER(@RoleName) AND ApplicationId = @AppId
IF (@RoleId IS NULL)
BEGIN
SELECT N'''', @RoleName
IF( @TranStarted = 1 )
ROLLBACK TRANSACTION
RETURN(2)
END
SELECT @UserId = NULL
SELECT @UserId = UserId FROM dbo.aspnet_Users WHERE Lowe
redUserName = LOWER(@UserName) AND ApplicationId = @AppId
IF (@UserId IS NULL)
BEGIN
SELECT @UserName, N''''
IF( @TranStarted = 1 )
ROLLBACK TRANSACTION
RETURN(1)
END
IF (NOT(EXISTS(SELECT * FROM dbo.aspnet_UsersInRoles WHE
RE @UserId = UserId AND @RoleId = RoleId)))
BEGIN
SELECT @UserName, @RoleName
IF( @TranStarted = 1 )
ROLLBACK TRANSACTION
RETURN(3)
END
DELETE FROM dbo.aspnet_UsersInRoles WHERE (UserId = @Use
rId AND RoleId = @RoleId)
END
END
IF( @TranStarted = 1 )
COMMIT TRANSACTION

RETURN(0)
END
'
EXEC sp_executesql @SqlToExec
GO
/*************************************************************/
/*************************************************************/
IF (EXISTS (SELECT name
FROM sysobjects
WHERE (name = N'aspnet_UsersInRoles_GetUsersInRoles')
AND (type = 'P')))
DROP PROCEDURE dbo.aspnet_UsersInRoles_GetUsersInRoles
GO
CREATE PROCEDURE dbo.aspnet_UsersInRoles_GetUsersInRoles
@ApplicationName nvarchar(256),
@RoleName
nvarchar(256)
AS
BEGIN
DECLARE @ApplicationId uniqueidentifier
SELECT @ApplicationId = NULL
SELECT @ApplicationId = ApplicationId FROM aspnet_Applications WHERE LOWER(
@ApplicationName) = LoweredApplicationName
IF (@ApplicationId IS NULL)
RETURN(1)
DECLARE @RoleId uniqueidentifier
SELECT @RoleId = NULL

Id

SELECT @RoleId = RoleId


FROM
dbo.aspnet_Roles
WHERE LOWER(@RoleName) = LoweredRoleName AND ApplicationId = @Application
IF (@RoleId IS NULL)
RETURN(1)

SELECT u.UserName
FROM dbo.aspnet_Users u, dbo.aspnet_UsersInRoles ur
WHERE u.UserId = ur.UserId AND @RoleId = ur.RoleId AND u.ApplicationId = @A
pplicationId
ORDER BY u.UserName
RETURN(0)
END
GO
/*************************************************************/
/*************************************************************/
IF (EXISTS (SELECT name
FROM sysobjects
WHERE (name = N'aspnet_UsersInRoles_FindUsersInRole')
AND (type = 'P')))
DROP PROCEDURE dbo.aspnet_UsersInRoles_FindUsersInRole
GO
CREATE PROCEDURE dbo.aspnet_UsersInRoles_FindUsersInRole
@ApplicationName nvarchar(256),
@RoleName
nvarchar(256),
@UserNameToMatch nvarchar(256)

AS
BEGIN
DECLARE @ApplicationId uniqueidentifier
SELECT @ApplicationId = NULL
SELECT @ApplicationId = ApplicationId FROM aspnet_Applications WHERE LOWER(
@ApplicationName) = LoweredApplicationName
IF (@ApplicationId IS NULL)
RETURN(1)
DECLARE @RoleId uniqueidentifier
SELECT @RoleId = NULL

Id

SELECT @RoleId = RoleId


FROM
dbo.aspnet_Roles
WHERE LOWER(@RoleName) = LoweredRoleName AND ApplicationId = @Application
IF (@RoleId IS NULL)
RETURN(1)

SELECT u.UserName
FROM dbo.aspnet_Users u, dbo.aspnet_UsersInRoles ur
WHERE u.UserId = ur.UserId AND @RoleId = ur.RoleId AND u.ApplicationId = @A
pplicationId AND LoweredUserName LIKE LOWER(@UserNameToMatch)
ORDER BY u.UserName
RETURN(0)
END
GO
/*************************************************************/
/*************************************************************/
IF (EXISTS (SELECT name
FROM sysobjects
WHERE (name = N'aspnet_Roles_GetAllRoles')
AND (type = 'P')))
DROP PROCEDURE dbo.aspnet_Roles_GetAllRoles
GO
CREATE PROCEDURE dbo.aspnet_Roles_GetAllRoles (
@ApplicationName
nvarchar(256))
AS
BEGIN
DECLARE @ApplicationId uniqueidentifier
SELECT @ApplicationId = NULL
SELECT @ApplicationId = ApplicationId FROM aspnet_Applications WHERE LOWER(
@ApplicationName) = LoweredApplicationName
IF (@ApplicationId IS NULL)
RETURN
SELECT RoleName
FROM dbo.aspnet_Roles WHERE ApplicationId = @ApplicationId
ORDER BY RoleName
END
GO
/*************************************************************/
/*************************************************************/
IF (NOT EXISTS (SELECT name
FROM sysobjects
WHERE (name = N'vw_aspnet_Roles')

AND (type = 'V')))


BEGIN
PRINT 'Creating the vw_aspnet_Roles view...'
EXEC(N'
CREATE VIEW [dbo].[vw_aspnet_Roles]
AS SELECT [dbo].[aspnet_Roles].[ApplicationId], [dbo].[aspnet_Roles].[RoleId],
[dbo].[aspnet_Roles].[RoleName], [dbo].[aspnet_Roles].[LoweredRoleName], [dbo].
[aspnet_Roles].[Description]
FROM [dbo].[aspnet_Roles]
')
END
GO
/*************************************************************/
/*************************************************************/
IF (NOT EXISTS (SELECT name
FROM sysobjects
WHERE (name = N'vw_aspnet_UsersInRoles')
AND (type = 'V')))
BEGIN
PRINT 'Creating the vw_aspnet_UsersInRoles view...'
EXEC(N'
CREATE VIEW [dbo].[vw_aspnet_UsersInRoles]
AS SELECT [dbo].[aspnet_UsersInRoles].[UserId], [dbo].[aspnet_UsersInRoles].[R
oleId]
FROM [dbo].[aspnet_UsersInRoles]
')
END
GO
/*************************************************************/
/*************************************************************/
---Create Role Manager schema version
-DECLARE @command nvarchar(4000)
SET @command = 'GRANT EXECUTE ON [dbo].aspnet_RegisterSchemaVersion TO ' + QUOTE
NAME(user)
EXECUTE (@command)
GO
EXEC [dbo].aspnet_RegisterSchemaVersion N'Role Manager', N'1', 1, 1
GO
/*************************************************************/
/*************************************************************/
---Create Role Manager roles
-IF ( NOT EXISTS ( SELECT name
FROM sysusers
WHERE issqlrole = 1
AND name = N'aspnet_Roles_FullAccess' ) )
EXEC sp_addrole N'aspnet_Roles_FullAccess'

IF ( NOT EXISTS ( SELECT name


FROM sysusers
WHERE issqlrole = 1
AND name = N'aspnet_Roles_BasicAccess' ) )
EXEC sp_addrole N'aspnet_Roles_BasicAccess'
IF ( NOT EXISTS ( SELECT name
FROM sysusers
WHERE issqlrole = 1
AND name = N'aspnet_Roles_ReportingAccess' ) )
EXEC sp_addrole N'aspnet_Roles_ReportingAccess'
GO
EXEC sp_addrolemember N'aspnet_Roles_BasicAccess', N'aspnet_Roles_FullAccess'
EXEC sp_addrolemember N'aspnet_Roles_ReportingAccess', N'aspnet_Roles_FullAccess
'
GO
---Stored Procedure rights for BasicAccess
-GRANT EXECUTE ON dbo.aspnet_UsersInRoles_IsUserInRole TO aspnet_Roles_BasicAcces
s
GRANT EXECUTE ON dbo.aspnet_UsersInRoles_GetRolesForUser TO aspnet_Roles_BasicAc
cess
GRANT EXECUTE ON dbo.aspnet_CheckSchemaVersion TO aspnet_Roles_BasicAccess
GRANT EXECUTE ON dbo.aspnet_RegisterSchemaVersion TO aspnet_Roles_BasicAccess
GRANT EXECUTE ON dbo.aspnet_UnRegisterSchemaVersion TO aspnet_Roles_BasicAccess
---Stored Procedure rights for ReportingAccess
-GRANT EXECUTE ON dbo.aspnet_UsersInRoles_IsUserInRole TO aspnet_Roles_ReportingA
ccess
GRANT EXECUTE ON dbo.aspnet_UsersInRoles_GetRolesForUser TO aspnet_Roles_Reporti
ngAccess
GRANT EXECUTE ON dbo.aspnet_Roles_RoleExists TO aspnet_Roles_ReportingAccess
GRANT EXECUTE ON dbo.aspnet_UsersInRoles_GetUsersInRoles TO aspnet_Roles_Reporti
ngAccess
GRANT EXECUTE ON dbo.aspnet_UsersInRoles_FindUsersInRole TO aspnet_Roles_Reporti
ngAccess
GRANT EXECUTE ON dbo.aspnet_Roles_GetAllRoles TO aspnet_Roles_ReportingAccess
GRANT EXECUTE ON dbo.aspne Cit_CheckSchemaVersion TO aspnet_Roles_ReportingAccess
GRANT EXECUTE ON dbo.aspnet_RegisterSchemaVersion TO aspnet_Roles_ReportingAcces
s
GRANT EXECUTE ON dbo.aspnet_UnRegisterSchemaVersion TO aspnet_Roles_ReportingAcc
ess
---Additional stored procedure rights for FullAccess
-GRANT EXECUTE
GRANT EXECUTE
GRANT EXECUTE
ess
GRANT EXECUTE
llAccess
--

ON dbo.aspnet_Roles_CreateRole TO aspnet_Roles_FullAccess
ON dbo.aspnet_Roles_DeleteRole TO aspnet_Roles_FullAccess
ON dbo.aspnet_UsersInRoles_AddUsersToRoles TO aspnet_Roles_FullAcc
ON dbo.aspnet_UsersInRoles_RemoveUsersFromRoles TO aspnet_Roles_Fu

--View rights
-GRANT SELECT ON dbo.vw_aspnet_Applications TO aspnet_Roles_ReportingAccess
GRANT SELECT ON dbo.vw_aspnet_Users TO aspnet_Roles_ReportingAccess
GRANT SELECT ON dbo.vw_aspnet_Roles TO aspnet_Roles_ReportingAccess
GRANT SELECT ON dbo.vw_aspnet_UsersInRoles TO aspnet_Roles_ReportingAccess
GO
/*************************************************************/
/*************************************************************/
/*************************************************************/
/*************************************************************/
DECLARE @command nvarchar(4000)
SET @command = 'REVOKE EXECUTE ON [dbo].aspnet_RegisterSchemaVersion FROM ' + QU
OTENAME(user)
EXECUTE (@command)
GO
PRINT '---------------------------------------'
PRINT 'Completed execution of InstallRoles.SQL'
PRINT '---------------------------------------'
   /*********************************************************************
InstallSqlState.SQL
Installs the tables, and stored procedures necessary for
supporting ASP.NET session state.
Copyright Microsoft, Inc.
All Rights Reserved.
*********************************************************************/
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
PRINT
PRINT
PRINT
PRINT
PRINT
PRINT
PRINT
PRINT
PRINT
PRINT
PRINT
PRINT
GO

''
'-----------------------------------------'
'Starting execution of InstallSqlState.SQL'
'-----------------------------------------'
'--------------------------------------------------'
'Note:
'
'Do not run this file manually.
'
'You should use aspnet_regsql.exe to install
'
'and uninstall SQL session state.
'
''
'Run ''aspnet_regsql.exe -?'' for details.
'
'--------------------------------------------------'

/*****************************************************************************/
USE master
GO

/* Create and populate the session state database */


IF DB_ID(N'ASPState') IS NULL BEGIN
DECLARE @cmd nvarchar(500)
SET @cmd = N'CREATE DATABASE [ASPState]'
EXEC(@cmd)
END
GO
/* Drop all tables, startup procedures, stored procedures and types. */
/* Drop the DeleteExpiredSessions_Job */
DECLARE @jobname nvarchar(200)
SET @jobname = N'ASPState' + '_Job_DeleteExpiredSessions'
-- Delete the [local] job
-- We expected to get an error if the job doesn't exist.
PRINT 'If the job does not exist, an error from msdb.dbo.sp_delete_job is expect
ed.'
EXECUTE msdb.dbo.sp_delete_job @job_name = @jobname
GO
DECLARE @sstype nvarchar(128)
SET @sstype = N'sstype_temp'
IF UPPER(@sstype) = 'SSTYPE_TEMP' AND OBJECT_ID(N'dbo.ASPState_Startup', 'P') IS
NOT NULL BEGIN
DROP PROCEDURE dbo.ASPState_Startup
END
USE [tempdb]
GO
IF OBJECT_ID(N'dbo.ASPStateTempSessions','U') IS NOT NULL BEGIN
DROP TABLE dbo.ASPStateTempSessions
END
IF OBJECT_ID(N'dbo.ASPStateTempApplications','U') IS NOT NULL BEGIN
DROP TABLE dbo.ASPStateTempApplications
END
USE [ASPState]
GO
IF (EXISTS (SELECT name FROM sysobjects WHERE (name = N'GetMajorVersion') AND (t
ype = 'P')))
DROP PROCEDURE [dbo].GetMajorVersion
GO
IF (EXISTS (SELECT name FROM sysobjects WHERE (name = N'CreateTempTables') AND (
type = 'P')))
DROP PROCEDURE [dbo].CreateTempTables
GO
IF (EXISTS (SELECT name FROM sysobjects WHERE (name = N'TempGetVersion') AND (ty
pe = 'P')))
DROP PROCEDURE [dbo].TempGetVersion
GO

IF (EXISTS (SELECT name FROM sysobjects WHERE (name = N'GetHashCode') AND (type
= 'P')))
DROP PROCEDURE [dbo].GetHashCode
GO
IF (EXISTS (SELECT name FROM sysobjects WHERE (name = N'TempGetAppID') AND (type
= 'P')))
DROP PROCEDURE [dbo].TempGetAppID
GO
IF (EXISTS (SELECT name FROM sysobjects WHERE (name = N'TempGetStateItem') AND (
type = 'P')))
DROP PROCEDURE [dbo].TempGetStateItem
GO
IF (EXISTS (SELECT name FROM sysobjects WHERE (name = N'TempGetStateItem2') AND
(type = 'P')))
DROP PROCEDURE [dbo].TempGetStateItem2
GO
IF (EXISTS (SELECT name FROM sysobjects WHERE (name = N'TempGetStateItem3') AND
(type = 'P')))
DROP PROCEDURE [dbo].TempGetStateItem3
GO
IF (EXISTS (SELECT name FROM sysobjects WHERE (name = N'TempGetStateItemExclusiv
e') AND (type = 'P')))
DROP PROCEDURE [dbo].TempGetStateItemExclusive
GO
IF (EXISTS (SELECT name FROM sysobjects WHERE (name = N'TempGetStateItemExclusiv
e2') AND (type = 'P')))
DROP PROCEDURE [dbo].TempGetStateItemExclusive2
GO
IF (EXISTS (SELECT name FROM sysobjects WHERE (name = N'TempGetStateItemExclusiv
e3') AND (type = 'P')))
DROP PROCEDURE [dbo].TempGetStateItemExclusive3
GO
IF (EXISTS (SELECT name FROM sysobjects WHERE (name = N'TempReleaseStateItemExcl
usive') AND (type = 'P')))
DROP PROCEDURE [dbo].TempReleaseStateItemExclusive
GO
IF (EXISTS (SELECT name FROM sysobjects WHERE (name = N'TempInsertUninitializedI
tem') AND (type = 'P')))
DROP PROCEDURE [dbo].TempInsertUninitializedItem
GO
IF (EXISTS (SELECT name FROM sysobjects WHERE (name = N'TempInsertStateItemShort
') AND (type = 'P')))
DROP PROCEDURE [dbo].TempInsertStateItemShort
GO
IF (EXISTS (SELECT name FROM sysobjects WHERE (name = N'TempInsertStateItemLong'
) AND (type = 'P')))
DROP PROCEDURE [dbo].TempInsertStateItemLong
GO

IF (EXISTS (SELECT name FROM sysobjects WHERE (name = N'TempUpdateStateItemShort


') AND (type = 'P')))
DROP PROCEDURE [dbo].TempUpdateStateItemShort
GO
IF (EXISTS (SELECT name FROM sysobjects WHERE (name = N'TempUpdateStateItemShort
NullLong') AND (type = 'P')))
DROP PROCEDURE [dbo].TempUpdateStateItemShortNullLong
GO
IF (EXISTS (SELECT name FROM sysobjects WHERE (name = N'TempUpdateStateItemLong'
) AND (type = 'P')))
DROP PROCEDURE [dbo].TempUpdateStateItemLong
GO
IF (EXISTS (SELECT name FROM sysobjects WHERE (name = N'TempUpdateStateItemLongN
ullShort') AND (type = 'P')))
DROP PROCEDURE [dbo].TempUpdateStateItemLongNullShort
GO
IF (EXISTS (SELECT name FROM sysobjects WHERE (name = N'TempRemoveStateItem') AN
D (type = 'P')))
DROP PROCEDURE [dbo].TempRemoveStateItem
GO
IF (EXISTS (SELECT name FROM sysobjects WHERE (name = N'TempResetTimeout') AND (
type = 'P')))
DROP PROCEDURE [dbo].TempResetTimeout
GO
IF (EXISTS (SELECT name FROM sysobjects WHERE (name = N'DeleteExpiredSessions')
AND (type = 'P')))
DROP PROCEDURE [dbo].DeleteExpiredSessions
GO
IF EXISTS(SELECT name FROM systypes WHERE name ='tSessionId')
EXECUTE sp_droptype tSessionId
GO
IF EXISTS(SELECT name FROM systypes WHERE name ='tAppName')
EXECUTE sp_droptype tAppName
GO
IF EXISTS(SELECT name FROM systypes WHERE name ='tSessionItemShort')
EXECUTE sp_droptype tSessionItemShort
GO
IF EXISTS(SELECT name FROM systypes WHERE name ='tSessionItemLong')
EXECUTE sp_droptype tSessionItemLong
GO
IF EXISTS(SELECT name FROM systypes WHERE name ='tTextPtr')
EXECUTE sp_droptype tTextPtr
GO
/*****************************************************************************/
CREATE PROCEDURE dbo.GetMajorVersion
@@ver int OUTPUT

AS
BEGIN

yphen)

END
GO

DECLARE
DECLARE
DECLARE
DECLARE

@version
@dot
@hyphen
@SqlToExec

nchar(100)
int
int
nchar(4000)

SELECT @@ver = 7
SELECT @version = @@Version
SELECT @hyphen = CHARINDEX(N' - ', @version)
IF (NOT(@hyphen IS NULL) AND @hyphen > 0)
BEGIN
SELECT @hyphen = @hyphen + 3
SELECT @dot
= CHARINDEX(N'.', @version, @hyphen)
IF (NOT(@dot IS NULL) AND @dot > @hyphen)
BEGIN
SELECT @version = SUBSTRING(@version, @hyphen, @dot - @h
END

END

SELECT @@ver

= CONVERT(int, @version)

/*****************************************************************************/
USE [ASPState]
/* Find out the version */
DECLARE @ver int
EXEC dbo.GetMajorVersion @@ver=@ver OUTPUT
DECLARE @cmd nchar(4000)
IF (@ver >= 8)
SET @cmd = N'
CREATE PROCEDURE dbo.CreateTempTables
AS
CREATE TABLE [tempdb].dbo.ASPStateTempSessions (
SessionId
nvarchar(88)
NOT NULL PRIMARY KEY,
Created
datetime
NOT NULL DEFAULT GETUTCDATE(
),
Expires
datetime
NOT NULL,
LockDate
datetime
NOT NULL,
LockDateLocal
datetime
NOT NULL,
LockCookie
int
NOT NULL,
Timeout
int
NOT NULL,
Locked
bit
NOT NULL,
SessionItemShort
VARBINARY(7000) NULL,
SessionItemLong
image
NULL,
Flags
int
NOT NULL DEFAULT 0,
)
CREATE NONCLUSTERED INDEX Index_Expires ON [tempdb].dbo.ASPStateTemp
Sessions(Expires)
CREATE TABLE [tempdb].dbo.ASPStateTempApplications (
AppId
int
NOT NULL PRIMARY KEY,
AppName
char(280)
NOT NULL,
)

CREATE NONCLUSTERED INDEX Index_AppName ON [tempdb].dbo.ASPStateTemp


Applications(AppName)
RETURN 0'

ELSE

SET @cmd = N'


CREATE PROCEDURE dbo.CreateTempTables
AS
CREATE TABLE [tempdb].dbo.ASPStateTempSessions (
SessionId
nvarchar(88)
NOT NULL PRIMARY KEY,
Created
datetime
NOT NULL DEFAULT GETDATE(),
Expires
datetime
NOT NULL,
LockDate
datetime
NOT NULL,
LockCookie
int
NOT NULL,
Timeout
int
NOT NULL,
Locked
bit
NOT NULL,
SessionItemShort
VARBINARY(7000) NULL,
SessionItemLong
image
NULL,
Flags
int
NOT NULL DEFAULT 0,
)

CREATE NONCLUSTERED INDEX Index_Expires ON [tempdb].dbo.ASPStateTemp


Sessions(Expires)
CREATE TABLE [tempdb].dbo.ASPStateTempApplications (
AppId
int
NOT NULL PRIMARY KEY,
AppName
char(280)
NOT NULL,
)
CREATE NONCLUSTERED INDEX Index_AppName ON [tempdb].dbo.ASPStateTemp
Applications(AppName)
RETURN 0'
EXEC (@cmd)
GO
/*****************************************************************************/
EXECUTE sp_addtype tSessionId, 'nvarchar(88)', 'NOT NULL'
GO
EXECUTE sp_addtype tAppName, 'varchar(280)', 'NOT NULL'
GO
EXECUTE sp_addtype tSessionItemShort, 'varbinary(7000)'
GO
EXECUTE sp_addtype tSessionItemLong, 'image'
GO
EXECUTE sp_addtype tTextPtr, 'varbinary(16)'
GO
/*****************************************************************************/
CREATE PROCEDURE dbo.TempGetVersion
@ver
char(10) OUTPUT
AS

GO

SELECT @ver = "2"


RETURN 0

/*****************************************************************************/
CREATE PROCEDURE dbo.GetHashCode
@input tAppName,
@hash int OUTPUT
AS
/*
This sproc is based on this C# hash function:
int GetHashCode(string s)
{
int
hash = 5381;
int
len = s.Length;
for (int i = 0; i < len; i++) {
int
c = Convert.ToInt32(s[i]);
hash = ((hash << 5) + hash) ^ c;
}
}

*/

return hash;

However, SQL 7 doesn't provide a 32-bit integer


type that allows rollover of bits, we have to
divide our 32bit integer into the upper and lower
16 bits to do our calculation.

DECLARE
DECLARE
DECLARE
DECLARE
DECLARE
DECLARE
DECLARE
DECLARE

@hi_16bit
@lo_16bit
@hi_t
@lo_t
@len
@i
@c
@carry

int
int
int
int
int
int
int
int

SET @hi_16bit = 0
SET @lo_16bit = 5381
SET @len = DATALENGTH(@input)
SET @i = 1
WHILE (@i <= @len)
BEGIN
SET @c = ASCII(SUBSTRING(@input, @i, 1))
/* Formula:
hash = ((hash << 5) + hash) ^ c */
/* hash << 5 */
SET @hi_t = @hi_16bit * 32 /* high 16bits << 5 */
SET @hi_t = @hi_t & 0xFFFF /* zero out overflow */
SET @lo_t = @lo_16bit * 32 /* low 16bits << 5 */

its */

SET @carry = @lo_16bit & 0x1F0000 /* move low 16bits carryover to hi 16b
SET @carry = @carry / 0x10000 /* >> 16 */
SET @hi_t = @hi_t + @carry
SET @hi_t = @hi_t & 0xFFFF /* zero out overflow */
/* + hash */
SET @lo_16bit = @lo_16bit + @lo_t
SET @hi_16bit = @hi_16bit + @hi_t + (@lo_16bit / 0x10000)
/* delay clearing the overflow */
/* ^c */
SET @lo_16bit = @lo_16bit ^ @c
/* Now clear the overflow bits */
SET @hi_16bit = @hi_16bit & 0xFFFF
SET @lo_16bit = @lo_16bit & 0xFFFF

END

SET @i = @i + 1

/* Do a sign extension of the hi-16bit if needed */


IF (@hi_16bit & 0x8000 <> 0)
SET @hi_16bit = 0xFFFF0000 | @hi_16bit
/* Merge hi and lo 16bit back together */
SET @hi_16bit = @hi_16bit * 0x10000 /* << 16 */
SET @hash = @hi_16bit | @lo_16bit
GO

RETURN 0

/*****************************************************************************/
DECLARE @cmd nchar(4000)
SET @cmd = N'
CREATE PROCEDURE dbo.TempGetAppID
@appName
tAppName,
@appId
int OUTPUT
AS
SET @appName = LOWER(@appName)
SET @appId = NULL
SELECT @appId = AppId
FROM [tempdb].dbo.ASPStateTempApplications
WHERE AppName = @appName
IF @appId IS NULL BEGIN
BEGIN TRAN
SELECT @appId = AppId
FROM [tempdb].dbo.ASPStateTempApplications WITH (TABLOCKX)
WHERE AppName = @appName
IF @appId IS NULL
BEGIN
EXEC GetHashCode @appName, @appId OUTPUT
INSERT [tempdb].dbo.ASPStateTempApplications

VALUES
(@appId, @appName)
IF @@ERROR = 2627
BEGIN
DECLARE @dupApp tAppName
SELECT @dupApp = RTRIM(AppName)
FROM [tempdb].dbo.ASPStateTempApplications
WHERE AppId = @appId
RAISERROR(''SQL session state fatal error: hash-code collision b
etween applications ''''%s'''' and ''''%s''''. Please rename the 1st application
to resolve the problem.'',
18, 1, @appName, @dupApp)
END
END
END

COMMIT

RETURN 0'
EXEC(@cmd)
GO
/*****************************************************************************/
/* Find out the version */
DECLARE @ver int
EXEC dbo.GetMajorVersion @@ver=@ver OUTPUT
DECLARE @cmd nchar(4000)
IF (@ver >= 8)
SET @cmd = N'
CREATE PROCEDURE dbo.TempGetStateItem
@id
tSessionId,
@itemShort tSessionItemShort OUTPUT,
@locked
bit OUTPUT,
@lockDate datetime OUTPUT,
@lockCookie int OUTPUT
AS
DECLARE @textptr AS tTextPtr
DECLARE @length AS int
DECLARE @now AS datetime
SET @now = GETUTCDATE()
UPDATE [tempdb].dbo.ASPStateTempSessions
SET Expires = DATEADD(n, Timeout, @now),
@locked = Locked,
@lockDate = LockDateLocal,
@lockCookie = LockCookie,
@itemShort = CASE @locked
WHEN 0 THEN SessionItemShort
ELSE NULL
END,
@textptr = CASE @locked
WHEN 0 THEN TEXTPTR(SessionItemLong)
ELSE NULL
END,
@length = CASE @locked

WHEN 0 THEN DATALENGTH(SessionItemLong)


ELSE NULL
END
WHERE SessionId = @id
IF @length IS NOT NULL BEGIN
READTEXT [tempdb].dbo.ASPStateTempSessions.SessionItemLong @text
ptr 0 @length
END
RETURN 0'

ELSE

SET @cmd = N'


CREATE PROCEDURE dbo.TempGetStateItem
@id
tSessionId,
@itemShort tSessionItemShort OUTPUT,
@locked
bit OUTPUT,
@lockDate datetime OUTPUT,
@lockCookie int OUTPUT
AS
DECLARE @textptr AS tTextPtr
DECLARE @length AS int
DECLARE @now AS datetime
SET @now = GETDATE()

UPDATE [tempdb].dbo.ASPStateTempSessions
SET Expires = DATEADD(n, Timeout, @now),
@locked = Locked,
@lockDate = LockDate,
@lockCookie = LockCookie,
@itemShort = CASE @locked
WHEN 0 THEN SessionItemShort
ELSE NULL
END,
@textptr = CASE @locked
WHEN 0 THEN TEXTPTR(SessionItemLong)
ELSE NULL
END,
@length = CASE @locked
WHEN 0 THEN DATALENGTH(SessionItemLong)
ELSE NULL
END
WHERE SessionId = @id
IF @length IS NOT NULL BEGIN
READTEXT [tempdb].dbo.ASPStateTempSessions.SessionItemLong @text
ptr 0 @length
END
RETURN 0'
EXEC (@cmd)
GO
/*****************************************************************************/
DECLARE @ver int
EXEC dbo.GetMajorVersion @@ver=@ver OUTPUT
DECLARE @cmd nchar(4000)
IF (@ver >= 8)
SET @cmd = N'
CREATE PROCEDURE dbo.TempGetStateItem2

AS

@id
@itemShort
@locked
@lockAge
@lockCookie

tSessionId,
tSessionItemShort OUTPUT,
bit OUTPUT,
int OUTPUT,
int OUTPUT

DECLARE @textptr AS tTextPtr


DECLARE @length AS int
DECLARE @now AS datetime
SET @now = GETUTCDATE()

UPDATE [tempdb].dbo.ASPStateTempSessions
SET Expires = DATEADD(n, Timeout, @now),
@locked = Locked,
@lockAge = DATEDIFF(second, LockDate, @now),
@lockCookie = LockCookie,
@itemShort = CASE @locked
WHEN 0 THEN SessionItemShort
ELSE NULL
END,
@textptr = CASE @locked
WHEN 0 THEN TEXTPTR(SessionItemLong)
ELSE NULL
END,
@length = CASE @locked
WHEN 0 THEN DATALENGTH(SessionItemLong)
ELSE NULL
END
WHERE SessionId = @id
IF @length IS NOT NULL BEGIN
READTEXT [tempdb].dbo.ASPStateTempSessions.SessionItemLong @text
ptr 0 @length
END
RETURN 0'
EXEC (@cmd)
GO
/*****************************************************************************/
/* Find out the version */
DECLARE @ver int
EXEC dbo.GetMajorVersion @@ver=@ver OUTPUT
DECLARE @cmd nchar(4000)
IF (@ver >= 8)
SET @cmd = N'
CREATE PROCEDURE dbo.TempGetStateItem3
@id
tSessionId,
@itemShort tSessionItemShort OUTPUT,
@locked
bit OUTPUT,
@lockAge
int OUTPUT,
@lockCookie int OUTPUT,
@actionFlags int OUTPUT
AS
DECLARE @textptr AS tTextPtr
DECLARE @length AS int
DECLARE @now AS datetime

SET @now = GETUTCDATE()


UPDATE [tempdb].dbo.ASPStateTempSessions
SET Expires = DATEADD(n, Timeout, @now),
@locked = Locked,
@lockAge = DATEDIFF(second, LockDate, @now),
@lockCookie = LockCookie,
@itemShort = CASE @locked
WHEN 0 THEN SessionItemShort
ELSE NULL
END,
@textptr = CASE @locked
WHEN 0 THEN TEXTPTR(SessionItemLong)
ELSE NULL
END,
@length = CASE @locked
WHEN 0 THEN DATALENGTH(SessionItemLong)
ELSE NULL
END,
/* If the Uninitialized flag (0x1) if it is set,
remove it and return InitializeItem (0x1) in actionFlags */
Flags = CASE
WHEN (Flags & 1) <> 0 THEN (Flags & ~1)
ELSE Flags
END,
@actionFlags = CASE
WHEN (Flags & 1) <> 0 THEN 1
ELSE 0
END
WHERE SessionId = @id
IF @length IS NOT NULL BEGIN
READTEXT [tempdb].dbo.ASPStateTempSessions.SessionItemLong @text
ptr 0 @length
END
RETURN 0'

ELSE

SET @cmd = N'


CREATE PROCEDURE dbo.TempGetStateItem3
@id
tSessionId,
@itemShort tSessionItemShort OUTPUT,
@locked
bit OUTPUT,
@lockDate datetime OUTPUT,
@lockCookie int OUTPUT,
@actionFlags int OUTPUT
AS
DECLARE @textptr AS tTextPtr
DECLARE @length AS int
DECLARE @now AS datetime
SET @now = GETDATE()
UPDATE [tempdb].dbo.ASPStateTempSessions
SET Expires = DATEADD(n, Timeout, @now),
@locked = Locked,
@lockDate = LockDate,
@lockCookie = LockCookie,
@itemShort = CASE @locked
WHEN 0 THEN SessionItemShort
ELSE NULL

END,
@textptr = CASE @locked
WHEN 0 THEN TEXTPTR(SessionItemLong)
ELSE NULL
END,
@length = CASE @locked
WHEN 0 THEN DATALENGTH(SessionItemLong)
ELSE NULL
END,
/* If the Uninitialized flag (0x1) if it is set,
remove it and return InitializeItem (0x1) in actionFlags */
Flags = CASE
WHEN (Flags & 1) <> 0 THEN (Flags & ~1)
ELSE Flags
END,
@actionFlags = CASE
WHEN (Flags & 1) <> 0 THEN 1
ELSE 0
END
WHERE SessionId = @id
IF @length IS NOT NULL BEGIN
READTEXT [tempdb].dbo.ASPStateTempSessions.SessionItemLong @text
ptr 0 @length
END
RETURN 0'
EXEC (@cmd)
GO
/*****************************************************************************/
DECLARE @ver int
EXEC dbo.GetMajorVersion @@ver=@ver OUTPUT
DECLARE @cmd nchar(4000)
IF (@ver >= 8)
SET @cmd = N'
CREATE PROCEDURE dbo.TempGetStateItemExclusive
@id
tSessionId,
@itemShort tSessionItemShort OUTPUT,
@locked
bit OUTPUT,
@lockDate datetime OUTPUT,
@lockCookie int OUTPUT
AS
DECLARE @textptr AS tTextPtr
DECLARE @length AS int
DECLARE @now AS datetime
DECLARE @nowLocal AS datetime
SET @now = GETUTCDATE()
SET @nowLocal = GETDATE()
UPDATE [tempdb].dbo.ASPStateTempSessions
SET Expires = DATEADD(n, Timeout, @now),
LockDate = CASE Locked
WHEN 0 THEN @now
ELSE LockDate
END,
@lockDate = LockDateLocal = CASE Locked

WHEN 0 THEN @nowLocal


ELSE LockDateLocal
END,
@lockCookie = LockCookie = CASE Locked
WHEN 0 THEN LockCookie + 1
ELSE LockCookie
END,
@itemShort = CASE Locked
WHEN 0 THEN SessionItemShort
ELSE NULL
END,
@textptr = CASE Locked
WHEN 0 THEN TEXTPTR(SessionItemLong)
ELSE NULL
END,
@length = CASE Locked
WHEN 0 THEN DATALENGTH(SessionItemLong)
ELSE NULL
END,
@locked = Locked,
Locked = 1
WHERE SessionId = @id
IF @length IS NOT NULL BEGIN
READTEXT [tempdb].dbo.ASPStateTempSessions.SessionItemLong @text
ptr 0 @length
END
RETURN 0'

ELSE

SET @cmd = N'


CREATE PROCEDURE dbo.TempGetStateItemExclusive
@id
tSessionId,
@itemShort tSessionItemShort OUTPUT,
@locked
bit OUTPUT,
@lockDate datetime OUTPUT,
@lockCookie int OUTPUT
AS
DECLARE @textptr AS tTextPtr
DECLARE @length AS int
DECLARE @now AS datetime
SET @now = GETDATE()
UPDATE [tempdb].dbo.ASPStateTempSessions
SET Expires = DATEADD(n, Timeout, @now),
@lockDate = LockDate = CASE Locked
WHEN 0 THEN @now
ELSE LockDate
END,
@lockCookie = LockCookie = CASE Locked
WHEN 0 THEN LockCookie + 1
ELSE LockCookie
END,
@itemShort = CASE Locked
WHEN 0 THEN SessionItemShort
ELSE NULL
END,
@textptr = CASE Locked
WHEN 0 THEN TEXTPTR(SessionItemLong)
ELSE NULL
END,

@length = CASE Locked


WHEN 0 THEN DATALENGTH(SessionItemLong)
ELSE NULL
END,
@locked = Locked,
Locked = 1
WHERE SessionId = @id
IF @length IS NOT NULL BEGIN
READTEXT [tempdb].dbo.ASPStateTempSessions.SessionItemLong @text
ptr 0 @length
END
RETURN 0'
EXEC (@cmd)
GO
/*****************************************************************************/
DECLARE @ver int
EXEC dbo.GetMajorVersion @@ver=@ver OUTPUT
DECLARE @cmd nchar(4000)
IF (@ver >= 8)
SET @cmd = N'
CREATE PROCEDURE dbo.TempGetStateItemExclusive2
@id
tSessionId,
@itemShort tSessionItemShort OUTPUT,
@locked
bit OUTPUT,
@lockAge
int OUTPUT,
@lockCookie int OUTPUT
AS
DECLARE @textptr AS tTextPtr
DECLARE @length AS int
DECLARE @now AS datetime
DECLARE @nowLocal AS datetime
SET @now = GETUTCDATE()
SET @nowLocal = GETDATE()
UPDATE [tempdb].dbo.ASPStateTempSessions
SET Expires = DATEADD(n, Timeout, @now),
LockDate = CASE Locked
WHEN 0 THEN @now
ELSE LockDate
END,
LockDateLocal = CASE Locked
WHEN 0 THEN @nowLocal
ELSE LockDateLocal
END,
@lockAge = CASE Locked
WHEN 0 THEN 0
ELSE DATEDIFF(second, LockDate, @now)
END,
@lockCookie = LockCookie = CASE Locked
WHEN 0 THEN LockCookie + 1
ELSE LockCookie
END,
@itemShort = CASE Locked
WHEN 0 THEN SessionItemShort

ELSE NULL
END,
@textptr = CASE Locked
WHEN 0 THEN TEXTPTR(SessionItemLong)
ELSE NULL
END,
@length = CASE Locked
WHEN 0 THEN DATALENGTH(SessionItemLong)
ELSE NULL
END,
@locked = Locked,
Locked = 1
WHERE SessionId = @id
IF @length IS NOT NULL BEGIN
READTEXT [tempdb].dbo.ASPStateTempSessions.SessionItemLong @text
ptr 0 @length
END
RETURN 0'
EXEC (@cmd)
GO
/*****************************************************************************/
DECLARE @ver int
EXEC dbo.GetMajorVersion @@ver=@ver OUTPUT
DECLARE @cmd nchar(4000)
IF (@ver >= 8)
SET @cmd = N'
CREATE PROCEDURE dbo.TempGetStateItemExclusive3
@id
tSessionId,
@itemShort tSessionItemShort OUTPUT,
@locked
bit OUTPUT,
@lockAge
int OUTPUT,
@lockCookie int OUTPUT,
@actionFlags int OUTPUT
AS
DECLARE @textptr AS tTextPtr
DECLARE @length AS int
DECLARE @now AS datetime
DECLARE @nowLocal AS datetime
SET @now = GETUTCDATE()
SET @nowLocal = GETDATE()
UPDATE [tempdb].dbo.ASPStateTempSessions
SET Expires = DATEADD(n, Timeout, @now),
LockDate = CASE Locked
WHEN 0 THEN @now
ELSE LockDate
END,
LockDateLocal = CASE Locked
WHEN 0 THEN @nowLocal
ELSE LockDateLocal
END,
@lockAge = CASE Locked
WHEN 0 THEN 0
ELSE DATEDIFF(second, LockDate, @now)

END,
@lockCookie = LockCookie = CASE Locked
WHEN 0 THEN LockCookie + 1
ELSE LockCookie
END,
@itemShort = CASE Locked
WHEN 0 THEN SessionItemShort
ELSE NULL
END,
@textptr = CASE Locked
WHEN 0 THEN TEXTPTR(SessionItemLong)
ELSE NULL
END,
@length = CASE Locked
WHEN 0 THEN DATALENGTH(SessionItemLong)
ELSE NULL
END,
@locked = Locked,
Locked = 1,
/* If the Uninitialized flag (0x1) if it is set,
remove it and return InitializeItem (0x1) in actionFlags */
Flags = CASE
WHEN (Flags & 1) <> 0 THEN (Flags & ~1)
ELSE Flags
END,
@actionFlags = CASE
WHEN (Flags & 1) <> 0 THEN 1
ELSE 0
END
WHERE SessionId = @id
IF @length IS NOT NULL BEGIN
READTEXT [tempdb].dbo.ASPStateTempSessions.SessionItemLong @text
ptr 0 @length
END
RETURN 0'

ELSE

SET @cmd = N'


CREATE PROCEDURE dbo.TempGetStateItemExclusive3
@id
tSessionId,
@itemShort tSessionItemShort OUTPUT,
@locked
bit OUTPUT,
@lockDate datetime OUTPUT,
@lockCookie int OUTPUT,
@actionFlags int OUTPUT
AS
DECLARE @textptr AS tTextPtr
DECLARE @length AS int
DECLARE @now AS datetime
SET @now = GETDATE()
UPDATE [tempdb].dbo.ASPStateTempSessions
SET Expires = DATEADD(n, Timeout, @now),
@lockDate = LockDate = CASE Locked
WHEN 0 THEN @now
ELSE LockDate
END,
@lockCookie = LockCookie = CASE Locked
WHEN 0 THEN LockCookie + 1

ELSE LockCookie
END,
@itemShort = CASE Locked
WHEN 0 THEN SessionItemShort
ELSE NULL
END,
@textptr = CASE Locked
WHEN 0 THEN TEXTPTR(SessionItemLong)
ELSE NULL
END,
@length = CASE Locked
WHEN 0 THEN DATALENGTH(SessionItemLong)
ELSE NULL
d* T T
END,
@locked = Locked,
Locked = 1,
/* If the Uninitialized flag (0x1) if it is set,
remove it and return InitializeItem (0x1) in actionFlags */
Flags = CASE
WHEN (Flags & 1) <> 0 THEN (Flags & ~1)
ELSE Flags
END,
@actionFlags = CASE
WHEN (Flags & 1) <> 0 THEN 1
ELSE 0
END
WHERE SessionId = @id
IF @length IS NOT NULL BEGIN
READTEXT [tempdb].dbo.ASPStateTempSessions.SessionItemLong @text
ptr 0 @length
END
RETURN 0'
EXEC (@cmd)
GO
/*****************************************************************************/
DECLARE @ver int
EXEC dbo.GetMajorVersion @@ver=@ver OUTPUT
DECLARE @cmd nchar(4000)
IF (@ver >= 8)
SET @cmd = N'
CREATE PROCEDURE dbo.TempReleaseStateItemExclusive
@id
tSessionId,
@lockCookie int
AS
UPDATE [tempdb].dbo.ASPStateTempSessions
SET Expires = DATEADD(n, Timeout, GETUTCDATE()),
Locked = 0
WHERE SessionId = @id AND LockCookie = @lockCookie
RETURN 0'

ELSE

SET @cmd = N'


CREATE PROCEDURE dbo.TempReleaseStateItemExclusive
@id
tSessionId,

AS

@lockCookie int
UPDATE [tempdb].dbo.ASPStateTempSessions
SET Expires = DATEADD(n, Timeout, GETDATE()),
Locked = 0
WHERE SessionId = @id AND LockCookie = @lockCookie
RETURN 0'

EXEC (@cmd)
GO
/*****************************************************************************/
DECLARE @ver int
EXEC dbo.GetMajorVersion @@ver=@ver OUTPUT
DECLARE @cmd nchar(4000)
IF (@ver >= 8)
SET @cmd = N'
CREATE PROCEDURE dbo.TempInsertUninitializedItem
@id
tSessionId,
@itemShort tSessionItemShort,
@timeout
int
AS
DECLARE @now AS datetime
DECLARE @nowLocal AS datetime
SET @now = GETUTCDATE()
SET @nowLocal = GETDATE()
INSERT [tempdb].dbo.ASPStateTempSessions
(SessionId,
SessionItemShort,
Timeout,
Expires,
Locked,
LockDate,
LockDateLocal,
LockCookie,
Flags)
VALUES
(@id,
@itemShort,
@timeout,
DATEADD(n, @timeout, @now),
0,
@now,
@nowLocal,
1,
1)
RETURN 0'

ELSE

SET @cmd = N'


CREATE PROCEDURE dbo.TempInsertUninitializedItem
@id
tSessionId,
@itemShort tSessionItemShort,
@timeout
int

AS
DECLARE @now AS datetime
SET @now = GETDATE()
INSERT [tempdb].dbo.ASPStateTempSessions
(SessionId,
SessionItemShort,
Timeout,
Expires,
Locked,
LockDate,
LockCookie,
Flags)
VALUES
(@id,
@itemShort,
@timeout,
DATEADD(n, @timeout, @now),
0,
@now,
1,
1)
RETURN 0'
EXEC (@cmd)
GO
/*****************************************************************************/
DECLARE @ver int
EXEC dbo.GetMajorVersion @@ver=@ver OUTPUT
DECLARE @cmd nchar(4000)
IF (@ver >= 8)
SET @cmd = N'
CREATE PROCEDURE dbo.TempInsertStateItemShort
@id
tSessionId,
@itemShort tSessionItemShort,
@timeout
int
AS
DECLARE @now AS datetime
DECLARE @nowLocal AS datetime
SET @now = GETUTCDATE()
SET @nowLocal = GETDATE()
INSERT [tempdb].dbo.ASPStateTempSessions
(SessionId,
SessionItemShort,
Timeout,
Expires,
Locked,
LockDate,
LockDateLocal,
LockCookie)
VALUES
(@id,

@itemShort,
@timeout,
DATEADD(n, @timeout, @now),
0,
@now,
@nowLocal,
1)
RETURN 0'

ELSE

SET @cmd = N'


CREATE PROCEDURE dbo.TempInsertStateItemShort
@id
tSessionId,
@itemShort tSessionItemShort,
@timeout
int
AS
DECLARE @now AS datetime
SET @now = GETDATE()
INSERT [tempdb].dbo.ASPStateTempSessions
(SessionId,
SessionItemShort,
Timeout,
Expires,
Locked,
LockDate,
LockCookie)
VALUES
(@id,
@itemShort,
@timeout,
DATEADD(n, @timeout, @now),
0,
@now,
1)
RETURN 0'

EXEC (@cmd)
GO
/*****************************************************************************/
DECLARE @ver int
EXEC dbo.GetMajorVersion @@ver=@ver OUTPUT
DECLARE @cmd nchar(4000)
IF (@ver >= 8)
SET @cmd = N'
CREATE PROCEDURE dbo.TempInsertStateItemLong
@id
tSessionId,
@itemLong tSessionItemLong,
@timeout
int
AS
DECLARE @now AS datetime
DECLARE @nowLocal AS datetime
SET @now = GETUTCDATE()
SET @nowLocal = GETDATE()

INSERT [tempdb].dbo.ASPStateTempSessions
(SessionId,
SessionItemLong,
Timeout,
Expires,
Locked,
LockDate,
LockDateLocal,
LockCookie)
VALUES
(@id,
@itemLong,
@timeout,
DATEADD(n, @timeout, @now),
0,
@now,
@nowLocal,
1)
RETURN 0'

ELSE

SET @cmd = N'


CREATE PROCEDURE dbo.TempInsertStateItemLong
@id
tSessionId,
@itemLong tSessionItemLong,
@timeout
int
AS
DECLARE @now AS datetime
SET @now = GETDATE()
INSERT [tempdb].dbo.ASPStateTempSessions
(SessionId,
SessionItemLong,
Timeout,
Expires,
Locked,
LockDate,
LockCookie)
VALUES
(@id,
@itemLong,
@timeout,
DATEADD(n, @timeout, @now),
0,
@now,
1)
RETURN 0'

EXEC (@cmd)
GO
/*****************************************************************************/
DECLARE @ver int
EXEC dbo.GetMajorVersion @@ver=@ver OUTPUT
DECLARE @cmd nchar(4000)
IF (@ver >= 8)

SET @cmd = N'


CREATE PROCEDURE dbo.TempUpdateStateItemShort
@id
tSessionId,
@itemShort tSessionItemShort,
@timeout
int,
@lockCookie int
AS
UPDATE [tempdb].dbo.ASPStateTempSessions
SET Expires = DATEADD(n, @timeout, GETUTCDATE()),
SessionItemShort = @itemShort,
Timeout = @timeout,
Locked = 0
WHERE SessionId = @id AND LockCookie = @lockCookie
RETURN 0'

ELSE

SET @cmd = N'


CREATE PROCEDURE dbo.TempUpdateStateItemShort
@id
tSessionId,
@itemShort tSessionItemShort,
@timeout
int,
@lockCookie int
AS
UPDATE [tempdb].dbo.ASPStateTempSessions
SET Expires = DATEADD(n, @timeout, GETDATE()),
SessionItemShort = @itemShort,
Timeout = @timeout,
Locked = 0
WHERE SessionId = @id AND LockCookie = @lockCookie
RETURN 0'

EXEC (@cmd)
GO
/*****************************************************************************/
DECLARE @ver int
EXEC dbo.GetMajorVersion @@ver=@ver OUTPUT
DECLARE @cmd nchar(4000)
IF (@ver >= 8)
SET @cmd = N'
CREATE PROCEDURE dbo.TempUpdateStateItemShortNullLong
@id
tSessionId,
@itemShort tSessionItemShort,
@timeout
int,
@lockCookie int
AS
UPDATE [tempdb].dbo.ASPStateTempSessions
SET Expires = DATEADD(n, @timeout, GETUTCDATE()),
SessionItemShort = @itemShort,
SessionItemLong = NULL,
Timeout = @timeout,
Locked = 0
WHERE SessionId = @id AND LockCookie = @lockCookie
RETURN 0'

ELSE

SET @cmd = N'

CREATE PROCEDURE dbo.TempUpdateStateItemShortNullLong


@id
tSessionId,
@itemShort tSessionItemShort,
@timeout
int,
@lockCookie int
AS
UPDATE [tempdb].dbo.ASPStateTempSessions
SET Expires = DATEADD(n, @timeout, GETDATE()),
SessionItemShort = @itemShort,
SessionItemLong = NULL,
Timeout = @timeout,
Locked = 0
WHERE SessionId = @id AND LockCookie = @lockCookie
RETURN 0'
EXEC (@cmd)
GO
/*****************************************************************************/
DECLARE @ver int
EXEC dbo.GetMajorVersion @@ver=@ver OUTPUT
DECLARE @cmd nchar(4000)
IF (@ver >= 8)
SET @cmd = N'
CREATE PROCEDURE dbo.TempUpdateStateItemLong
@id
tSessionId,
@itemLong tSessionItemLong,
@timeout
int,
@lockCookie int
AS
UPDATE [tempdb].dbo.ASPStateTempSessions
SET Expires = DATEADD(n, @timeout, GETUTCDATE()),
SessionItemLong = @itemLong,
Timeout = @timeout,
Locked = 0
WHERE SessionId = @id AND LockCookie = @lockCookie
RETURN 0'

ELSE

SET @cmd = N'


CREATE PROCEDURE dbo.TempUpdateStateItemLong
@id
tSessionId,
@itemLong tSessionItemLong,
@timeout
int,
@lockCookie int
AS
UPDATE [tempdb].dbo.ASPStateTempSessions
SET Expires = DATEADD(n, @timeout, GETDATE()),
SessionItemLong = @itemLong,
Timeout = @timeout,
Locked = 0
WHERE SessionId = @id AND LockCookie = @lockCookie
RETURN 0'

EXEC (@cmd)
GO

/*****************************************************************************/
DECLARE @ver int
EXEC dbo.GetMajorVersion @@ver=@ver OUTPUT
DECLARE @cmd nchar(4000)
IF (@ver >= 8)
SET @cmd = N'
CREATE PROCEDURE dbo.TempUpdateStateItemLongNullShort
@id
tSessionId,
@itemLong tSessionItemLong,
@timeout
int,
@lockCookie int
AS
UPDATE [tempdb].dbo.ASPStateTempSessions
SET Expires = DATEADD(n, @timeout, GETUTCDATE()),
SessionItemLong = @itemLong,
SessionItemShort = NULL,
Timeout = @timeout,
Locked = 0
WHERE SessionId = @id AND LockCookie = @lockCookie
RETURN 0'

ELSE

SET @cmd = N'


CREATE PROCEDURE dbo.TempUpdateStateItemLongNullShort
@id
tSessionId,
@itemLong tSessionItemLong,
@timeout
int,
@lockCookie int
AS
UPDATE [tempdb].dbo.ASPStateTempSessions
SET Expires = DATEADD(n, @timeout, GETDATE()),
SessionItemLong = @itemLong,
SessionItemShort = NULL,
Timeout = @timeout,
Locked = 0
WHERE SessionId = @id AND LockCookie = @lockCookie
RETURN 0'

EXEC (@cmd)
GO
/*****************************************************************************/
DECLARE @cmd nchar(4000)
SET @cmd = N'
CREATE PROCEDURE dbo.TempRemoveStateItem
@id
tSessionId,
@lockCookie int
AS
DELETE [tempdb].dbo.ASPStateTempSessions
WHERE SessionId = @id AND LockCookie = @lockCookie
RETURN 0'
EXEC(@cmd)
GO
/*****************************************************************************/

DECLARE @ver int


EXEC dbo.GetMajorVersion @@ver=@ver OUTPUT
DECLARE @cmd nchar(4000)
IF (@ver >= 8)
SET @cmd = N'
CREATE PROCEDURE dbo.TempResetTimeout
@id
tSessionId
AS
UPDATE [tempdb].dbo.ASPStateTempSessions
SET Expires = DATEADD(n, Timeout, GETUTCDATE())
WHERE SessionId = @id
RETURN 0'
ELSE
SET @cmd = N'
CREATE PROCEDURE dbo.TempResetTimeout
@id
tSessionId
AS
UPDATE [tempdb].dbo.ASPStateTempSessions
SET Expires = DATEADD(n, Timeout, GETDATE())
WHERE SessionId = @id
RETURN 0'
EXEC (@cmd)
GO
/*****************************************************************************/
DECLARE @ver int
EXEC dbo.GetMajorVersion @@ver=@ver OUTPUT
DECLARE @cmd nchar(4000)
IF (@ver >= 8)
SET @cmd = N'
CREATE PROCEDURE dbo.DeleteExpiredSessions
AS
SET NOCOUNT ON
SET DEADLOCK_PRIORITY LOW
DECLARE @now datetime
SET @now = GETUTCDATE()
CREATE TABLE #tblExpiredSessions
(
SessionID nvarchar(88) NOT NULL PRIMARY KEY
)
INSERT #tblExpiredSessions (SessionID)
SELECT SessionID
FROM [tempdb].dbo.ASPStateTempSessions WITH (READUNCOMMITTED)
WHERE Expires < @now
IF @@ROWCOUNT <> 0
BEGIN
DECLARE ExpiredSessionCursor CURSOR LOCAL FORWARD_ONLY READ_ONLY
FOR SELECT SessionID FROM #tblExpiredSessions
DECLARE @SessionID nvarchar(88)
OPEN ExpiredSessionCursor

FETCH NEXT FROM ExpiredSessionCursor INTO @SessionID


WHILE @@FETCH_STATUS = 0
BEGIN
DELETE FROM [tempdb].dbo.ASPStateTempSessions WHERE Sess
ionID = @SessionID AND Expires < @now
FETCH NEXT FROM ExpiredSessionCursor INTO @SessionID
END
CLOSE ExpiredSessionCursor
DEALLOCATE ExpiredSessionCursor
END
DROP TABLE #tblExpiredSessions
RETURN 0'

ELSE

SET @cmd = N'


CREATE PROCEDURE dbo.DeleteExpiredSessions
AS
SET NOCOUNT ON
SET DEADLOCK_PRIORITY LOW
DECLARE @now datetime
SET @now = GETDATE()
CREATE TABLE #tblExpiredSessions
(
SessionID nvarchar(88) NOT NULL PRIMARY KEY
)
INSERT #tblExpiredSessions (SessionID)
SELECT SessionID
FROM [tempdb].dbo.ASPStateTempSessions WITH (READUNCOMMITTED)
WHERE Expires < @now
IF @@ROWCOUNT <> 0
BEGIN
DECLARE ExpiredSessionCursor CURSOR LOCAL FORWARD_ONLY READ_ONLY
FOR SELECT SessionID FROM #tblExpiredSessions
DECLARE @SessionID nvarchar(88)
OPEN ExpiredSessionCursor
FETCH NEXT FROM ExpiredSessionCursor INTO @SessionID

WHILE @@FETCH_STATUS = 0
BEGIN
DELETE FROM [tempdb].dbo.ASPStateTempSessions WHERE Sess
ionID = @SessionID AND Expires < @now
FETCH NEXT FROM ExpiredSessionCursor INTO @SessionID
END
CLOSE ExpiredSessionCursor
DEALLOCATE ExpiredSessionCursor

END
DROP TABLE #tblExpiredSessions
RETURN 0'
EXEC (@cmd)
GO
/*****************************************************************************/
EXECUTE dbo.CreateTempTables
GO
USE master
GO
DECLARE @sstype nvarchar(128)
SET @sstype = N'sstype_temp'
IF UPPER(@sstype) = 'SSTYPE_TEMP' BEGIN
DECLARE @cmd nchar(4000)
SET @cmd = N'
/* Create the startup procedure */
CREATE PROCEDURE dbo.ASPState_Startup
AS
EXECUTE ASPState.dbo.CreateTempTables
RETURN 0'
EXEC(@cmd)
EXECUTE sp_procoption @ProcName='dbo.ASPState_Startup', @OptionName='startup
', @OptionValue='true'
END
/*****************************************************************************/
/* Create the job to delete expired sessions */
-- Add job category
-- We expect an error if the category already exists.
PRINT 'If the category already exists, an error from msdb.dbo.sp_add_category is
expected.'
EXECUTE msdb.dbo.sp_add_category @name = N'[Uncategorized (Local)]'
GO
BEGIN TRANSACTION
DECLARE @JobID BINARY(16)
DECLARE @ReturnCode int
DECLARE @nameT nchar(200)
SELECT @ReturnCode = 0
-- Add the job
SET @nameT = N'ASPState' + '_Job_DeleteExpiredSessions'
EXECUTE @ReturnCode = msdb.dbo.sp_add_job
@job_id = @JobID OUTPUT,
@job_name = @nameT,
@owner_login_name = NULL,
@description = N'Deletes expired sessions from the session state dat
abase.',

@category_name = N'[Uncategorized (Local)]',


@enabled = 1,
@notify_level_email = 0,
@notify_level_page = 0,
@notify_level_netsend = 0,
@notify_level_eventlog = 0,
@delete_level= 0
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
-- Add the job steps
SET @nameT = N'ASPState' + '_JobStep_DeleteExpiredSessions'
EXECUTE @ReturnCode = msdb.dbo.sp_add_jobstep
@job_id = @JobID,
@step_id = 1,
@step_name = @nameT,
@command = N'EXECUTE DeleteExpiredSessions',
@database_name = N'ASPState',
@server = N'',
@subsystem = N'TSQL',
@cmdexec_success_code = 0,
@flags = 0,
@retry_attempts = 0,
@retry_interval = 1,
@output_file_name = N'',
@on_success_step_id = 0,
@on_success_action = 1,
@on_fail_step_id = 0,
@on_fail_action = 2
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXECUTE @ReturnCode = msdb.dbo.sp_update_job @job_id = @JobID, @start_step_i
d = 1
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
-- Add the job schedules
SET @nameT = N'ASPState' + '_JobSchedule_DeleteExpiredSessions'
EXECUTE @ReturnCode = msdb.dbo.sp_add_jobschedule
@job_id = @JobID,
@name = @nameT,
@enabled = 1,
@freq_type = 4,
@active_start_date = 20001016,
@active_start_time = 0,
@freq_interval = 1,
@freq_subday_type = 4,
@freq_subday_interval = 1,
@freq_relative_interval = 0,
@freq_recurrence_factor = 0,
@active_end_date = 99991231,
@active_end_time = 235959
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
-- Add the Target Servers
EXECUTE @ReturnCode = msdb.dbo.sp_add_jobserver @job_id = @JobID, @server_na
me = N'(local)'
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback

COMMIT TRANSACTION
GOTO EndSave
QuitWithRollback:
IF (@@TRANCOUNT > 0) ROLLBACK TRANSACTION
EndSave:
GO
/*************************************************************/
/*************************************************************/
/*************************************************************/
/*************************************************************/
PRINT
PRINT
PRINT
PRINT

''
'------------------------------------------'
'Completed execution of InstallSqlState.SQL'
'------------------------------------------'

,  /*********************************************************************
InstallSqlStateTemplate.SQL
Installs the tables, and stored procedures necessary for
supporting ASP.NET session state.
Copyright Microsoft, Inc.
All Rights Reserved.
*********************************************************************/
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
PRINT
PRINT
PRINT
PRINT
PRINT
PRINT
PRINT
PRINT
PRINT
PRINT
PRINT
PRINT
PRINT
GO
/*

''
'-------------------------------------------------'
'Starting execution of InstallSqlStateTemplate.SQL'
'-------------------------------------------------'
''
'--------------------------------------------------'
'Note:
'
'This file is included for backward compatibility '
'only. You should use aspnet_regsql.exe to install'
'and uninstall SQL session state.
'
''
'Run ''aspnet_regsql.exe -?'' for details.
'
'--------------------------------------------------'

InstallSqlStateTemplate.sql and UninstallSqlStateTemplate.sql are


templates files for installing the ASP.NET session state SQL objects
on a database other than the default 'ASPState'.

er"

To
1.
2.
3.

create your own script files based on the template:


Create your own script files by coping the two template files.
Decide a name for your database (e.g. MyASPStateDB)
In your own script files, replace all occurences of "DatabaseNamePlaceHold

by your database name.


4. Install and uninstall ASP.NET session state SQL objects using your own

*/

script files.

/*****************************************************************************/
USE master
GO
/* Create and populate the session state database */
IF DB_ID(N'DatabaseNamePlaceHolder') IS NULL BEGIN
DECLARE @cmd nvarchar(500)
SET @cmd = N'CREATE DATABASE [DatabaseNamePlaceHolder]'
EXEC(@cmd)
END
GO
/* Drop all tables, startup procedures, stored procedures and types. */
/* Drop the DeleteExpiredSessions_Job */
DECLARE @jobname nvarchar(200)
SET @jobname = N'DatabaseNamePlaceHolder' + '_Job_DeleteExpiredSessions'
-- Delete the [local] job
-- We expected to get an error if the job doesn't exist.
PRINT 'If the job does not exist, an error from msdb.dbo.sp_delete_job is expect
ed.'
EXECUTE msdb.dbo.sp_delete_job @job_name = @jobname
GO
DECLARE @sstype nvarchar(128)
SET @sstype = N'sstype_custom'
IF UPPER(@sstype) = 'SSTYPE_TEMP' AND OBJECT_ID(N'dbo.ASPState_Startup', 'P') IS
NOT NULL BEGIN
DROP PROCEDURE dbo.ASPState_Startup
END
USE [DatabaseNamePlaceHolder]
GO
IF OBJECT_ID(N'dbo.ASPStateTempSessions','U') IS NOT NULL BEGIN
DROP TABLE dbo.ASPStateTempSessions
END
IF OBJECT_ID(N'dbo.ASPStateTempApplications','U') IS NOT NULL BEGIN
DROP TABLE dbo.ASPStateTempApplications
END
USE [DatabaseNamePlaceHolder]
GO
IF (EXISTS (SELECT name FROM sysobjects WHERE (name = N'GetMajorVersion') AND (t
ype = 'P')))
DROP PROCEDURE [dbo].GetMajorVersion
GO
IF (EXISTS (SELECT name FROM sysobjects WHERE (name = N'CreateTempTables') AND (
type = 'P')))

GO

DROP PROCEDURE [dbo].CreateTempTables

IF (EXISTS (SELECT name FROM sysobjects WHERE (name = N'TempGetVersion') AND (ty
pe = 'P')))
DROP PROCEDURE [dbo].TempGetVersion
GO
IF (EXISTS (SELECT name FROM sysobjects WHERE (name = N'GetHashCode') AND (type
= 'P')))
DROP PROCEDURE [dbo].GetHashCode
GO
IF (EXISTS (SELECT name FROM sysobjects WHERE (name = N'TempGetAppID') AND (type
= 'P')))
DROP PROCEDURE [dbo].TempGetAppID
GO
IF (EXISTS (SELECT name FROM sysobjects WHERE (name = N'TempGetStateItem') AND (
type = 'P')))
DROP PROCEDURE [dbo].TempGetStateItem
GO
IF (EXISTS (SELECT name FROM sysobjects WHERE (name = N'TempGetStateItem2') AND
(type = 'P')))
DROP PROCEDURE [dbo].TempGetStateItem2
GO
IF (EXISTS (SELECT name FROM sysobjects WHERE (name = N'TempGetStateItem3') AND
(type = 'P')))
DROP PROCEDURE [dbo].TempGetStateItem3
GO
IF (EXISTS (SELECT name FROM sysobjects WHERE (name = N'TempGetStateItemExclusiv
e') AND (type = 'P')))
DROP PROCEDURE [dbo].TempGetStateItemExclusive
GO
IF (EXISTS (SELECT name FROM sysobjects WHERE (name = N'TempGetStateItemExclusiv
e2') AND (type = 'P')))
DROP PROCEDURE [dbo].TempGetStateItemExclusive2
GO
IF (EXISTS (SELECT name FROM sysobjects WHERE (name = N'TempGetStateItemExclusiv
e3') AND (type = 'P')))
DROP PROCEDURE [dbo].TempGetStateItemExclusive3
GO
IF (EXISTS (SELECT name FROM sysobjects WHERE (name = N'TempReleaseStateItemExcl
usive') AND (type = 'P')))
DROP PROCEDURE [dbo].TempReleaseStateItemExclusive
GO
IF (EXISTS (SELECT name FROM sysobjects WHERE (name = N'TempInsertUninitializedI
tem') AND (type = 'P')))
DROP PROCEDURE [dbo].TempInsertUninitializedItem
GO
IF (EXISTS (SELECT name FROM sysobjects WHERE (name = N'TempInsertStateItemShort
') AND (type = 'P')))

GO

DROP PROCEDURE [dbo].TempInsertStateItemShort

IF (EXISTS (SELECT name FROM sysobjects WHERE (name = N'TempInsertStateItemLong'


) AND (type = 'P')))
DROP PROCEDURE [dbo].TempInsertStateItemLong
GO
IF (EXISTS (SELECT name FROM sysobjects WHERE (name = N'TempUpdateStateItemShort
') AND (type = 'P')))
DROP PROCEDURE [dbo].TempUpdateStateItemShort
GO
IF (EXISTS (SELECT name FROM sysobjects WHERE (name = N'TempUpdateStateItemShort
NullLong') AND (type = 'P')))
DROP PROCEDURE [dbo].TempUpdateStateItemShortNullLong
GO
IF (EXISTS (SELECT name FROM sysobjects WHERE (name = N'TempUpdateStateItemLong'
) AND (type = 'P')))
DROP PROCEDURE [dbo].TempUpdateStateItemLong
GO
IF (EXISTS (SELECT name FROM sysobjects WHERE (name = N'TempUpdateStateItemLongN
ullShort') AND (type = 'P')))
DROP PROCEDURE [dbo].TempUpdateStateItemLongNullShort
GO
IF (EXISTS (SELECT name FROM sysobjects WHERE (name = N'TempRemoveStateItem') AN
D (type = 'P')))
DROP PROCEDURE [dbo].TempRemoveStateItem
GO
IF (EXISTS (SELECT name FROM sysobjects WHERE (name = N'TempResetTimeout') AND (
type = 'P')))
DROP PROCEDURE [dbo].TempResetTimeout
GO
IF (EXISTS (SELECT name FROM sysobjects WHERE (name = N'DeleteExpiredSessions')
AND (type = 'P')))
DROP PROCEDURE [dbo].DeleteExpiredSessions
GO
IF EXISTS(SELECT name FROM systypes WHERE name ='tSessionId')
EXECUTE sp_droptype tSessionId
GO
IF EXISTS(SELECT name FROM systypes WHERE name ='tAppName')
EXECUTE sp_droptype tAppName
GO
IF EXISTS(SELECT name FROM systypes WHERE name ='tSessionItemShort')
EXECUTE sp_droptype tSessionItemShort
GO
IF EXISTS(SELECT name FROM systypes WHERE name ='tSessionItemLong')
EXECUTE sp_droptype tSessionItemLong
GO
IF EXISTS(SELECT name FROM systypes WHERE name ='tTextPtr')

GO

EXECUTE sp_droptype tTextPtr

/*****************************************************************************/
CREATE PROCEDURE dbo.GetMajorVersion
@@ver int OUTPUT
AS
BEGIN
DECLARE @version
nchar(100)
DECLARE @dot
int
DECLARE @hyphen
int
DECLARE @SqlToExec
nchar(4000)

yphen)

END
GO

SELECT @@ver = 7
SELECT @version = @@Version
SELECT @hyphen = CHARINDEX(N' - ', @version)
IF (NOT(@hyphen IS NULL) AND @hyphen > 0)
BEGIN
SELECT @hyphen = @hyphen + 3
SELECT @dot
= CHARINDEX(N'.', @version, @hyphen)
IF (NOT(@dot IS NULL) AND @dot > @hyphen)
BEGIN
SELECT @version = SUBSTRING(@version, @hyphen, @dot - @h

END

END

SELECT @@ver

= CONVERT(int, @version)

/*****************************************************************************/
USE [DatabaseNamePlaceHolder]
/* Find out the version */
DECLARE @ver int
EXEC dbo.GetMajorVersion @@ver=@ver OUTPUT
DECLARE @cmd nchar(4000)
IF (@ver >= 8)
SET @cmd = N'
CREATE PROCEDURE dbo.CreateTempTables
AS
CREATE TABLE [DatabaseNamePlaceHolder].dbo.ASPStateTempSessions (
SessionId
nvarchar(88)
NOT NULL PRIMARY KEY,
Created
datetime
NOT NULL DEFAULT GETUTCDATE(
),
Expires
datetime
NOT NULL,
LockDate
datetime
NOT NULL,
LockDateLocal
datetime
NOT NULL,
LockCookie
int
NOT NULL,
Timeout
int
NOT NULL,
Locked
bit
NOT NULL,
SessionItemShort
varbinary(7000) NULL,
SessionItemLong
image
NULL,
Flags
int
NOT NULL DEFAULT 0,
)

CREATE NONCLUSTERED INDEX Index_Expires ON [DatabaseNamePlaceHolder]


.dbo.ASPStateTempSessions(Expires)
CREATE TABLE [DatabaseNamePlaceHolder].dbo.ASPStateTempApplications

AppId
AppName

int
char(280)

NOT NULL PRIMARY KEY,


NOT NULL,

CREATE NONCLUSTERED INDEX Index_AppName ON [DatabaseNamePlaceHolder]


.dbo.ASPStateTempApplications(AppName)
RETURN 0'

ELSE

SET @cmd = N'


CREATE PROCEDURE dbo.CreateTempTables
AS
CREATE TABLE [DatabaseNamePlaceHolder].dbo.ASPStateTempSessions (
SessionId
nvarchar(88)
NOT NULL PRIMARY KEY,
Created
datetime
NOT NULL DEFAULT GETDATE(),
Expires
datetime
NOT NULL,
LockDate
datetime
NOT NULL,
LockCookie
int
NOT NULL,
Timeout
int
NOT NULL,
Locked
bit
NOT NULL,
SessionItemShort
varbinary(7000) NULL,
SessionItemLong
image
NULL,
Flags
int
NOT NULL DEFAULT 0,
)

CREATE NONCLUSTERED INDEX Index_Expires ON [DatabaseNamePlaceHolder]


.dbo.ASPStateTempSessions(Expires)
(

CREATE TABLE [DatabaseNamePlaceHolder].dbo.ASPStateTempApplications

AppId
AppName

int
char(280)

NOT NULL PRIMARY KEY,


NOT NULL,

CREATE NONCLUSTERED INDEX Index_AppName ON [DatabaseNamePlaceHolder]


.dbo.ASPStateTempApplications(AppName)
RETURN 0'
EXEC (@cmd)
GO
/*****************************************************************************/
EXECUTE sp_addtype tSessionId, 'nvarchar(88)', 'NOT NULL'
GO
EXECUTE sp_addtype tAppName, 'varchar(280)', 'NOT NULL'
GO
EXECUTE sp_addtype tSessionItemShort, 'varbinary(7000)'
GO
EXECUTE sp_addtype tSessionItemLong, 'image'
GO

EXECUTE sp_addtype tTextPtr, 'varbinary(16)'


GO
/*****************************************************************************/
CREATE PROCEDURE dbo.TempGetVersion
@ver
char(10) OUTPUT
AS
SELECT @ver = "2"
RETURN 0
GO
/*****************************************************************************/
CREATE PROCEDURE dbo.GetHashCode
@input tAppName,
@hash int OUTPUT
AS
/*
This sproc is based on this C# hash function:
int GetHashCode(string s)
{
int
hash = 5381;
int
len = s.Length;
for (int i = 0; i < len; i++) {
int
c = Convert.ToInt32(s[i]);
hash = ((hash << 5) + hash) ^ c;
}
}

*/

return hash;

However, SQL 7 doesn't provide a 32-bit integer


type that allows rollover of bits, we have to
divide our 32bit integer into the upper and lower
16 bits to do our calculation.

DECLARE
DECLARE
DECLARE
DECLARE
DECLARE
DECLARE
DECLARE
DECLARE

@hi_16bit
@lo_16bit
@hi_t
@lo_t
@len
@i
@c
@carry

int
int
int
int
int
int
int
int

SET @hi_16bit = 0
SET @lo_16bit = 5381
SET @len = DATALENGTH(@input)
SET @i = 1
WHILE (@i <= @len)
BEGIN
SET @c = ASCII(SUBSTRING(@input, @i, 1))

/* Formula:
hash = ((hash << 5) + hash) ^ c */
/* hash << 5 */
SET @hi_t = @hi_16bit * 32 /* high 16bits << 5 */
SET @hi_t = @hi_t & 0xFFFF /* zero out overflow */
SET @lo_t = @lo_16bit * 32 /* low 16bits << 5 */
its */

SET @carry = @lo_16bit & 0x1F0000 /* move low 16bits carryover to hi 16b
SET @carry = @carry / 0x10000 /* >> 16 */
SET @hi_t = @hi_t + @carry
SET @hi_t = @hi_t & 0xFFFF /* zero out overflow */
/* + hash */
SET @lo_16bit = @lo_16bit + @lo_t
SET @hi_16bit = @hi_16bit + @hi_t + (@lo_16bit / 0x10000)
/* delay clearing the overflow */
/* ^c */
SET @lo_16bit = @lo_16bit ^ @c
/* Now clear the overflow bits */
SET @hi_16bit = @hi_16bit & 0xFFFF
SET @lo_16bit = @lo_16bit & 0xFFFF

END

SET @i = @i + 1

/* Do a sign extension of the hi-16bit if needed */


IF (@hi_16bit & 0x8000 <> 0)
SET @hi_16bit = 0xFFFF0000 | @hi_16bit
/* Merge hi and lo 16bit back together */
SET @hi_16bit = @hi_16bit * 0x10000 /* << 16 */
SET @hash = @hi_16bit | @lo_16bit
GO

RETURN 0

/*****************************************************************************/
DECLARE @cmd nchar(4000)
SET @cmd = N'
CREATE PROCEDURE dbo.TempGetAppID
@appName
tAppName,
@appId
int OUTPUT
AS
SET @appName = LOWER(@appName)
SET @appId = NULL
SELECT @appId = AppId
FROM [DatabaseNamePlaceHolder].dbo.ASPStateTempApplications
WHERE AppName = @appName
IF @appId IS NULL BEGIN
BEGIN TRAN

SELECT @appId = AppId


FROM [DatabaseNamePlaceHolder].dbo.ASPStateTempApplications WITH (TABLOC

KX)

WHERE AppName = @appName


IF @appId IS NULL
BEGIN
EXEC GetHashCode @appName, @appId OUTPUT
INSERT [DatabaseNamePlaceHolder].dbo.ASPStateTempApplications
VALUES
(@appId, @appName)
IF @@ERROR = 2627
BEGIN
DECLARE @dupApp tAppName
SELECT @dupApp = RTRIM(AppName)
FROM [DatabaseNamePlaceHolder].dbo.ASPStateTempApplications
WHERE AppId = @appId

RAISERROR(''SQL session state fatal error: hash-code collision b


etween applications ''''%s'''' and ''''%s''''. Please rename the 1st application
to resolve the problem.'',
18, 1, @appName, @dupApp)
END
END
END

COMMIT

RETURN 0'
EXEC(@cmd)
GO
/*****************************************************************************/
/* Find out the version */
DECLARE @ver int
EXEC dbo.GetMajorVersion @@ver=@ver OUTPUT
DECLARE @cmd nchar(4000)
IF (@ver >= 8)
SET @cmd = N'
CREATE PROCEDURE dbo.TempGetStateItem
@id
tSessionId,
@itemShort tSessionItemShort OUTPUT,
@locked
bit OUTPUT,
@lockDate datetime OUTPUT,
@lockCookie int OUTPUT
AS
DECLARE @textptr AS tTextPtr
DECLARE @length AS int
DECLARE @now AS datetime
SET @now = GETUTCDATE()
UPDATE [DatabaseNamePlaceHolder].dbo.ASPStateTempSessions
SET Expires = DATEADD(n, Timeout, @now),
@locked = Locked,
@lockDate = LockDateLocal,

@lockCookie = LockCookie,
@itemShort = CASE @locked
WHEN 0 THEN SessionItemShort
ELSE NULL
END,
@textptr = CASE @locked
WHEN 0 THEN TEXTPTR(SessionItemLong)
ELSE NULL
END,
@length = CASE @locked
WHEN 0 THEN DATALENGTH(SessionItemLong)
ELSE NULL
END
WHERE SessionId = @id
IF @length IS NOT NULL BEGIN
READTEXT [DatabaseNamePlaceHolder].dbo.ASPStateTempSessions.Sess
ionItemLong @textptr 0 @length
END
RETURN 0'

ELSE

SET @cmd = N'


CREATE PROCEDURE dbo.TempGetStateItem
@id
tSessionId,
@itemShort tSessionItemShort OUTPUT,
@locked
bit OUTPUT,
@lockDate datetime OUTPUT,
@lockCookie int OUTPUT
AS
DECLARE @textptr AS tTextPtr
DECLARE @length AS int
DECLARE @now AS datetime
SET @now = GETDATE()

UPDATE [DatabaseNamePlaceHolder].dbo.ASPStateTempSessions
SET Expires = DATEADD(n, Timeout, @now),
@locked = Locked,
@lockDate = LockDate,
@lockCookie = LockCookie,
@itemShort = CASE @locked
WHEN 0 THEN SessionItemShort
ELSE NULL
END,
@textptr = CASE @locked
WHEN 0 THEN TEXTPTR(SessionItemLong)
ELSE NULL
END,
@length = CASE @locked
WHEN 0 THEN DATALENGTH(SessionItemLong)
ELSE NULL
END
WHERE SessionId = @id
IF @length IS NOT NULL BEGIN
READTEXT [DatabaseNamePlaceHolder].dbo.ASPStateTempSessions.Sess
ionItemLong @textptr 0 @length
END
RETURN 0'
EXEC (@cmd)

GO
/*****************************************************************************/
DECLARE @ver int
EXEC dbo.GetMajorVersion @@ver=@ver OUTPUT
DECLARE @cmd nchar(4000)
IF (@ver >= 8)
SET @cmd = N'
CREATE PROCEDURE dbo.TempGetStateItem2
@id
tSessionId,
@itemShort tSessionItemShort OUTPUT,
@locked
bit OUTPUT,
@lockAge
int OUTPUT,
@lockCookie int OUTPUT
AS
DECLARE @textptr AS tTextPtr
DECLARE @length AS int
DECLARE @now AS datetime
SET @now = GETUTCDATE()
UPDATE [DatabaseNamePlaceHolder].dbo.ASPStateTempSessions
SET Expires = DATEADD(n, Timeout, @now),
@locked = Locked,
@lockAge = DATEDIFF(second, LockDate, @now),
@lockCookie = LockCookie,
@itemShort = CASE @locked
WHEN 0 THEN SessionItemShort
ELSE NULL
END,
@textptr = CASE @locked
WHEN 0 THEN TEXTPTR(SessionItemLong)
ELSE NULL
END,
@length = CASE @locked
WHEN 0 THEN DATALENGTH(SessionItemLong)
ELSE NULL
END
WHERE SessionId = @id
IF @length IS NOT NULL BEGIN
READTEXT [DatabaseNamePlaceHolder].dbo.ASPStateTempSessions.Sess
ionItemLong @textptr 0 @length
END
RETURN 0'
EXEC (@cmd)
GO
/*****************************************************************************/
/* Find out the version */
DECLARE @ver int
EXEC dbo.GetMajorVersion @@ver=@ver OUTPUT
DECLARE @cmd nchar(4000)
IF (@ver >= 8)
SET @cmd = N'
CREATE PROCEDURE dbo.TempGetStateItem3

AS

@id
tSessionId,
@itemShort tSessionItemShort OUTPUT,
@locked
bit OUTPUT,
@lockAge
int OUTPUT,
@lockCookie int OUTPUT,
@actionFlags int OUTPUT
DECLARE @textptr AS tTextPtr
DECLARE @length AS int
DECLARE @now AS datetime
SET @now = GETUTCDATE()
UPDATE [DatabaseNamePlaceHolder].dbo.ASPStateTempSessions
SET Expires = DATEADD(n, Timeout, @now),
@locked = Locked,
@lockAge = DATEDIFF(second, LockDate, @now),
@lockCookie = LockCookie,
@itemShort = CASE @locked
WHEN 0 THEN SessionItemShort
ELSE NULL
END,
@textptr = CASE @locked
WHEN 0 THEN TEXTPTR(SessionItemLong)
ELSE NULL
END,
@length = CASE @locked
WHEN 0 THEN DATALENGTH(SessionItemLong)
ELSE NULL
END,

/* If the Uninitialized flag (0x1) if it is set,


remove it and return InitializeItem (0x1) in actionFlags */
Flags = CASE
WHEN (Flags & 1) <> 0 THEN (Flags & ~1)
ELSE Flags
END,
@actionFlags = CASE
WHEN (Flags & 1) <> 0 THEN 1
ELSE 0
END
WHERE SessionId = @id
IF @length IS NOT NULL BEGIN
READTEXT [DatabaseNamePlaceHolder].dbo.ASPStateTempSessions.Sess
ionItemLong @textptr 0 @length
END
RETURN 0'

ELSE

SET @cmd = N'


CREATE PROCEDURE dbo.TempGetStateItem3
@id
tSessionId,
@itemShort tSessionItemShort OUTPUT,
@locked
bit OUTPUT,
@lockDate datetime OUTPUT,
@lockCookie int OUTPUT,
@actionFlags int OUTPUT
AS
DECLARE @textptr AS tTextPtr
DECLARE @length AS int
DECLARE @now AS datetime

SET @now = GETDATE()


UPDATE [DatabaseNamePlaceHolder].dbo.ASPStateTempSessions
SET Expires = DATEADD(n, Timeout, @now),
@locked = Locked,
@lockDate = LockDate,
@lockCookie = LockCookie,
@itemShort = CASE @locked
WHEN 0 THEN SessionItemShort
ELSE NULL
END,
@textptr = CASE @locked
WHEN 0 THEN TEXTPTR(SessionItemLong)
ELSE NULL
END,
@length = CASE @locked
WHEN 0 THEN DATALENGTH(SessionItemLong)
ELSE NULL
END,
/* If the Uninitialized flag (0x1) if it is set,
remove it and return InitializeItem (0x1) in actionFlags */
Flags = CASE
WHEN (Flags & 1) <> 0 THEN (Flags & ~1)
ELSE Flags
END,
@actionFlags = CASE
WHEN (Flags & 1) <> 0 THEN 1
ELSE 0
END
WHERE SessionId = @id
IF @length IS NOT NULL BEGIN
READTEXT [DatabaseNamePlaceHolder].dbo.ASPStateTempSessions.Sess
ionItemLong @textptr 0 @length
END
RETURN 0'
EXEC (@cmd)
GO
/*****************************************************************************/
DECLARE @ver int
EXEC dbo.GetMajorVersion @@ver=@ver OUTPUT
DECLARE @cmd nchar(4000)
IF (@ver >= 8)
SET @cmd = N'
CREATE PROCEDURE dbo.TempGetStateItemExclusive
@id
tSessionId,
@itemShort tSessionItemShort OUTPUT,
@locked
bit OUTPUT,
@lockDate datetime OUTPUT,
@lockCookie int OUTPUT
AS
DECLARE @textptr AS tTextPtr
DECLARE @length AS int
DECLARE @now AS datetime
DECLARE @nowLocal AS datetime

SET @now = GETUTCDATE()


SET @nowLocal = GETDATE()
UPDATE [DatabaseNamePlaceHolder].dbo.ASPStateTempSessions
SET Expires = DATEADD(n, Timeout, @now),
LockDate = CASE Locked
WHEN 0 THEN @now
ELSE LockDate
END,
@lockDate = LockDateLocal = CASE Locked
WHEN 0 THEN @nowLocal
ELSE LockDateLocal
END,
@lockCookie = LockCookie = CASE Locked
WHEN 0 THEN LockCookie + 1
ELSE LockCookie
END,
@itemShort = CASE Locked
WHEN 0 THEN SessionItemShort
ELSE NULL
END,
@textptr = CASE Locked
WHEN 0 THEN TEXTPTR(SessionItemLong)
ELSE NULL
END,
@length = CASE Locked
WHEN 0 THEN DATALENGTH(SessionItemLong)
ELSE NULL
END,
@locked = Locked,
Locked = 1
WHERE SessionId = @id
IF @length IS NOT NULL BEGIN
READTEXT [DatabaseNamePlaceHolder].dbo.ASPStateTempSessions.Sess
ionItemLong @textptr 0 @length
END
RETURN 0'

ELSE

SET @cmd = N'


CREATE PROCEDURE dbo.TempGetStateItemExclusive
@id
tSessionId,
@itemShort tSessionItemShort OUTPUT,
@locked
bit OUTPUT,
@lockDate datetime OUTPUT,
@lockCookie int OUTPUT
AS
DECLARE @textptr AS tTextPtr
DECLARE @length AS int
DECLARE @now AS datetime
SET @now = GETDATE()
UPDATE [DatabaseNamePlaceHolder].dbo.ASPStateTempSessions
SET Expires = DATEADD(n, Timeout, @now),
@lockDate = LockDate = CASE Locked
WHEN 0 THEN @now
ELSE LockDate
END,
@lockCookie = LockCookie = CASE Locked
WHEN 0 THEN LockCookie + 1

ELSE LockCookie
END,
@itemShort = CASE Locked
WHEN 0 THEN SessionItemShort
ELSE NULL
END,
@textptr = CASE Locked
WHEN 0 THEN TEXTPTR(SessionItemLong)
ELSE NULL
END,
@length = CASE Locked
WHEN 0 THEN DATALENGTH(SessionItemLong)
ELSE NULL
END,
@locked = Locked,
Locked = 1
WHERE SessionId = @id
IF @length IS NOT NULL BEGIN
READTEXT [DatabaseNamePlaceHolder].dbo.ASPStateTempSessions.Sess
ionItemLong @textptr 0 @length
END
RETURN 0'
EXEC (@cmd)
GO
/*****************************************************************************/
DECLARE @ver int
EXEC dbo.GetMajorVersion @@ver=@ver OUTPUT
DECLARE @cmd nchar(4000)
IF (@ver >= 8)
SET @cmd = N'
CREATE PROCEDURE dbo.TempGetStateItemExclusive2
@id
tSessionId,
@itemShort tSessionItemShort OUTPUT,
@locked
bit OUTPUT,
@lockAge
int OUTPUT,
@lockCookie int OUTPUT
AS
DECLARE @textptr AS tTextPtr
DECLARE @length AS int
DECLARE @now AS datetime
DECLARE @nowLocal AS datetime
SET @now = GETUTCDATE()
SET @nowLocal = GETDATE()
UPDATE [DatabaseNamePlaceHolder].dbo.ASPStateTempSessions
SET Expires = DATEADD(n, Timeout, @now),
LockDate = CASE Locked
WHEN 0 THEN @now
ELSE LockDate
END,
LockDateLocal = CASE Locked
WHEN 0 THEN @nowLocal
ELSE LockDateLocal
END,

@lockAge = CASE Locked


WHEN 0 THEN 0
ELSE DATEDIFF(second, LockDate, @now)
END,
@lockCookie = LockCookie = CASE Locked
WHEN 0 THEN LockCookie + 1
ELSE LockCookie
END,
@itemShort = CASE Locked
WHEN 0 THEN SessionItemShort
ELSE NULL
END,
@textptr = CASE Locked
WHEN 0 THEN TEXTPTR(SessionItemLong)
ELSE NULL
END,
@length = CASE Locked
WHEN 0 THEN DATALENGTH(SessionItemLong)
ELSE NULL
END,
@locked = Locked,
Locked = 1
WHERE SessionId = @id
IF @length IS NOT NULL BEGIN
READTEXT [DatabaseNamePlaceHolder].dbo.ASPStateTempSessions.Sess
ionItemLong @textptr 0 @length
END
RETURN 0'
EXEC (@cmd)
GO
/*****************************************************************************/
DECLARE @ver int
EXEC dbo.GetMajorVersion @@ver=@ver OUTPUT
DECLARE @cmd nchar(4000)
IF (@ver >= 8)
SET @cmd = N'
CREATE PROCEDURE dbo.TempGetStateItemExclusive3
@id
tSessionId,
@itemShort tSessionItemShort OUTPUT,
@locked
bit OUTPUT,
@lockAge
int OUTPUT,
@lockCookie int OUTPUT,
@actionFlags int OUTPUT
AS
DECLARE @textptr AS tTextPtr
DECLARE @length AS int
DECLARE @now AS datetime
DECLARE @nowLocal AS datetime
SET @now = GETUTCDATE()
SET @nowLocal = GETDATE()
UPDATE [DatabaseNamePlaceHolder].dbo.ASPStateTempSessions
SET Expires = DATEADD(n, Timeout, @now),
LockDate = CASE Locked

WHEN 0 THEN @now


ELSE LockDate
END,
LockDateLocal = CASE Locked
WHEN 0 THEN @nowLocal
ELSE LockDateLocal
END,
@lockAge = CASE Locked
WHEN 0 THEN 0
ELSE DATEDIFF(second, LockDate, @now)
END,
@lockCookie = LockCookie = CASE Locked
WHEN 0 THEN LockCookie + 1
ELSE LockCookie
END,
@itemShort = CASE Locked
WHEN 0 THEN SessionItemShort
ELSE NULL
END,
@textptr = CASE Locked
WHEN 0 THEN TEXTPTR(SessionItemLong)
ELSE NULL
END,
@length = CASE Locked
WHEN 0 THEN DATALENGTH(SessionItemLong)
ELSE NULL
END,
@locked = Locked,
Locked = 1,
/* If the Uninitialized flag (0x1) if it is set,
remove it and return InitializeItem (0x1) in actionFlags */
Flags = CASE
WHEN (Flags & 1) <> 0 THEN (Flags & ~1)
ELSE Flags
END,
@actionFlags = CASE
WHEN (Flags & 1) <> 0 THEN 1
ELSE 0
END
WHERE SessionId = @id
IF @length IS NOT NULL BEGIN
READTEXT [DatabaseNamePlaceHolder].dbo.ASPStateTempSessions.Sess
ionItemLong @textptr 0 @length
END
RETURN 0'

ELSE

SET @cmd = N'


CREATE PROCEDURE dbo.TempGetStateItemExclusive3
@id
tSess  r[[ionId,
@itemShort tSessionItemShort OUTPUT,
@locked
bit OUTPUT,
@lockDate datetime OUTPUT,
@lockCookie int OUTPUT,
@actionFlags int OUTPUT
AS
DECLARE @textptr AS tTextPtr
DECLARE @length AS int
DECLARE @now AS datetime

SET @now = GETDATE()


UPDATE [DatabaseNamePlaceHolder].dbo.ASPStateTempSessions
SET Expires = DATEADD(n, Timeout, @now),
@lockDate = LockDate = CASE Locked
WHEN 0 THEN @now
ELSE LockDate
END,
@lockCookie = LockCookie = CASE Locked
WHEN 0 THEN LockCookie + 1
ELSE LockCookie
END,
@itemShort = CASE Locked
WHEN 0 THEN SessionItemShort
ELSE NULL
END,
@textptr = CASE Locked
WHEN 0 THEN TEXTPTR(SessionItemLong)
ELSE NULL
END,
@length = CASE Locked
WHEN 0 THEN DATALENGTH(SessionItemLong)
ELSE NULL
END,
@locked = Locked,
Locked = 1,
/* If the Uninitialized flag (0x1) if it is set,
remove it and return InitializeItem (0x1) in actionFlags */
Flags = CASE
WHEN (Flags & 1) <> 0 THEN (Flags & ~1)
ELSE Flags
END,
@actionFlags = CASE
WHEN (Flags & 1) <> 0 THEN 1
ELSE 0
END
WHERE SessionId = @id
IF @length IS NOT NULL BEGIN
READTEXT [DatabaseNamePlaceHolder].dbo.ASPStateTempSessions.Sess
ionItemLong @textptr 0 @length
END
RETURN 0'
EXEC (@cmd)
GO
/*****************************************************************************/
DECLARE @ver int
EXEC dbo.GetMajorVersion @@ver=@ver OUTPUT
DECLARE @cmd nchar(4000)
IF (@ver >= 8)
SET @cmd = N'
CREATE PROCEDURE dbo.TempReleaseStateItemExclusive
@id
tSessionId,
@lockCookie int
AS

UPDATE [DatabaseNamePlaceHolder].dbo.ASPStateTempSessions
SET Expires = DATEADD(n, Timeout, GETUTCDATE()),
Locked = 0
WHERE SessionId = @id AND LockCookie = @lockCookie
RETURN 0'

ELSE

SET @cmd = N'


CREATE PROCEDURE dbo.TempReleaseStateItemExclusive
@id
tSessionId,
@lockCookie int
AS
UPDATE [DatabaseNamePlaceHolder].dbo.ASPStateTempSessions
SET Expires = DATEADD(n, Timeout, GETDATE()),
Locked = 0
WHERE SessionId = @id AND LockCookie = @lockCookie
RETURN 0'

EXEC (@cmd)
GO
/*****************************************************************************/
DECLARE @ver int
EXEC dbo.GetMajorVersion @@ver=@ver OUTPUT
DECLARE @cmd nchar(4000)
IF (@ver >= 8)
SET @cmd = N'
CREATE PROCEDURE dbo.TempInsertUninitializedItem
@id
tSessionId,
@itemShort tSessionItemShort,
@timeout
int
AS
DECLARE @now AS datetime
DECLARE @nowLocal AS datetime
SET @now = GETUTCDATE()
SET @nowLocal = GETDATE()
INSERT [DatabaseNamePlaceHolder].dbo.ASPStateTempSessions
(SessionId,
SessionItemShort,
Timeout,
Expires,
Locked,
LockDate,
LockDateLocal,
LockCookie,
Flags)
VALUES
(@id,
@itemShort,
@timeout,
DATEADD(n, @timeout, @now),
0,
@now,
@nowLocal,

1,
1)
RETURN 0'

ELSE

SET @cmd = N'


CREATE PROCEDURE dbo.TempInsertUninitializedItem
@id
tSessionId,
@itemShort tSessionItemShort,
@timeout
int
AS
DECLARE @now AS datetime
SET @now = GETDATE()
INSERT [DatabaseNamePlaceHolder].dbo.ASPStateTempSessions
(SessionId,
SessionItemShort,
Timeout,
Expires,
Locked,
LockDate,
LockCookie,
Flags)
VALUES
(@id,
@itemShort,
@timeout,
DATEADD(n, @timeout, @now),
0,
@now,
1,
1)
RETURN 0'

EXEC (@cmd)
GO
/*****************************************************************************/
DECLARE @ver int
EXEC dbo.GetMajorVersion @@ver=@ver OUTPUT
DECLARE @cmd nchar(4000)
IF (@ver >= 8)
SET @cmd = N'
CREATE PROCEDURE dbo.TempInsertStateItemShort
@id
tSessionId,
@itemShort tSessionItemShort,
@timeout
int
AS
DECLARE @now AS datetime
DECLARE @nowLocal AS datetime
SET @now = GETUTCDATE()
SET @nowLocal = GETDATE()
INSERT [DatabaseNamePlaceHolder].dbo.ASPStateTempSessions

(SessionId,
SessionItemShort,
Timeout,
Expires,
Locked,
LockDate,
LockDateLocal,
LockCookie)
VALUES
(@id,
@itemShort,
@timeout,
DATEADD(n, @timeout, @now),
0,
@now,
@nowLocal,
1)
RETURN 0'

ELSE

SET @cmd = N'


CREATE PROCEDURE dbo.TempInsertStateItemShort
@id
tSessionId,
@itemShort tSessionItemShort,
@timeout
int
AS
DECLARE @now AS datetime
SET @now = GETDATE()
INSERT [DatabaseNamePlaceHolder].dbo.ASPStateTempSessions
(SessionId,
SessionItemShort,
Timeout,
Expires,
Locked,
LockDate,
LockCookie)
VALUES
(@id,
@itemShort,
@timeout,
DATEADD(n, @timeout, @now),
0,
@now,
1)
RETURN 0'

EXEC (@cmd)
GO
/*****************************************************************************/
DECLARE @ver int
EXEC dbo.GetMajorVersion @@ver=@ver OUTPUT
DECLARE @cmd nchar(4000)
IF (@ver >= 8)
SET @cmd = N'

CREATE PROCEDURE dbo.TempInsertStateItemLong


@id
tSessionId,
@itemLong tSessionItemLong,
@timeout
int
AS
DECLARE @now AS datetime
DECLARE @nowLocal AS datetime
SET @now = GETUTCDATE()
SET @nowLocal = GETDATE()
INSERT [DatabaseNamePlaceHolder].dbo.ASPStateTempSessions
(SessionId,
SessionItemLong,
Timeout,
Expires,
Locked,
LockDate,
LockDateLocal,
LockCookie)
VALUES
(@id,
@itemLong,
@timeout,
DATEADD(n, @timeout, @now),
0,
@now,
@nowLocal,
1)
RETURN 0'

ELSE

SET @cmd = N'


CREATE PROCEDURE dbo.TempInsertStateItemLong
@id
tSessionId,
@itemLong tSessionItemLong,
@timeout
int
AS
DECLARE @now AS datetime
SET @now = GETDATE()
INSERT [DatabaseNamePlaceHolder].dbo.ASPStateTempSessions
(SessionId,
SessionItemLong,
Timeout,
Expires,
Locked,
LockDate,
LockCookie)
VALUES
(@id,
@itemLong,
@timeout,
DATEADD(n, @timeout, @now),
0,
@now,
1)
RETURN 0'

EXEC (@cmd)
GO
/*****************************************************************************/
DECLARE @ver int
EXEC dbo.GetMajorVersion @@ver=@ver OUTPUT
DECLARE @cmd nchar(4000)
IF (@ver >= 8)
SET @cmd = N'
CREATE PROCEDURE dbo.TempUpdateStateItemShort
@id
tSessionId,
@itemShort tSessionItemShort,
@timeout
int,
@lockCookie int
AS
UPDATE [DatabaseNamePlaceHolder].dbo.ASPStateTempSessions
SET Expires = DATEADD(n, @timeout, GETUTCDATE()),
SessionItemShort = @itemShort,
Timeout = @timeout,
Locked = 0
WHERE SessionId = @id AND LockCookie = @lockCookie
RETURN 0'

ELSE

SET @cmd = N'


CREATE PROCEDURE dbo.TempUpdateStateItemShort
@id
tSessionId,
@itemShort tSessionItemShort,
@timeout
int,
@lockCookie int
AS
UPDATE [DatabaseNamePlaceHolder].dbo.ASPStateTempSessions
SET Expires = DATEADD(n, @timeout, GETDATE()),
SessionItemShort = @itemShort,
Timeout = @timeout,
Locked = 0
WHERE SessionId = @id AND LockCookie = @lockCookie
RETURN 0'

EXEC (@cmd)
GO
/*****************************************************************************/
DECLARE @ver int
EXEC dbo.GetMajorVersion @@ver=@ver OUTPUT
DECLARE @cmd nchar(4000)
IF (@ver >= 8)
SET @cmd = N'
CREATE PROCEDURE dbo.TempUpdateStateItemShortNullLong
@id
tSessionId,
@itemShort tSessionItemShort,
@timeout
int,
@lockCookie int
AS
UPDATE [DatabaseNamePlaceHolder].dbo.ASPStateTempSessions

SET Expires = DATEADD(n, @timeout, GETUTCDATE()),


SessionItemShort = @itemShort,
SessionItemLong = NULL,
Timeout = @timeout,
Locked = 0
WHERE SessionId = @id AND LockCookie = @lockCookie
RETURN 0'

ELSE

SET @cmd = N'


CREATE PROCEDURE dbo.TempUpdateStateItemShortNullLong
@id
tSessionId,
@itemShort tSessionItemShort,
@timeout
int,
@lockCookie int
AS
UPDATE [DatabaseNamePlaceHolder].dbo.ASPStateTempSessions
SET Expires = DATEADD(n, @timeout, GETDATE()),
SessionItemShort = @itemShort,
SessionItemLong = NULL,
Timeout = @timeout,
Locked = 0
WHERE SessionId = @id AND LockCookie = @lockCookie
RETURN 0'

EXEC (@cmd)
GO
/*****************************************************************************/
DECLARE @ver int
EXEC dbo.GetMajorVersion @@ver=@ver OUTPUT
DECLARE @cmd nchar(4000)
IF (@ver >= 8)
SET @cmd = N'
CREATE PROCEDURE dbo.TempUpdateStateItemLong
@id
tSessionId,
@itemLong tSessionItemLong,
@timeout
int,
@lockCookie int
AS
UPDATE [DatabaseNamePlaceHolder].dbo.ASPStateTempSessions
SET Expires = DATEADD(n, @timeout, GETUTCDATE()),
SessionItemLong = @itemLong,
Timeout = @timeout,
Locked = 0
WHERE SessionId = @id AND LockCookie = @lockCookie
RETURN 0'

ELSE

SET @cmd = N'


CREATE PROCEDURE dbo.TempUpdateStateItemLong
@id
tSessionId,
@itemLong tSessionItemLong,
@timeout
int,
@lockCookie int
AS
UPDATE [DatabaseNamePlaceHolder].dbo.ASPStateTempSessions

SET Expires = DATEADD(n, @timeout, GETDATE()),


SessionItemLong = @itemLong,
Timeout = @timeout,
Locked = 0
WHERE SessionId = @id AND LockCookie = @lockCookie
RETURN 0'
EXEC (@cmd)
GO
/*****************************************************************************/
DECLARE @ver int
EXEC dbo.GetMajorVersion @@ver=@ver OUTPUT
DECLARE @cmd nchar(4000)
IF (@ver >= 8)
SET @cmd = N'
CREATE PROCEDURE dbo.TempUpdateStateItemLongNullShort
@id
tSessionId,
@itemLong tSessionItemLong,
@timeout
int,
@lockCookie int
AS
UPDATE [DatabaseNamePlaceHolder].dbo.ASPStateTempSessions
SET Expires = DATEADD(n, @timeout, GETUTCDATE()),
SessionItemLong = @itemLong,
SessionItemShort = NULL,
Timeout = @timeout,
Locked = 0
WHERE SessionId = @id AND LockCookie = @lockCookie
RETURN 0'

ELSE

SET @cmd = N'


CREATE PROCEDURE dbo.TempUpdateStateItemLongNullShort
@id
tSessionId,
@itemLong tSessionItemLong,
@timeout
int,
@lockCookie int
AS
UPDATE [DatabaseNamePlaceHolder].dbo.ASPStateTempSessions
SET Expires = DATEADD(n, @timeout, GETDATE()),
SessionItemLong = @itemLong,
SessionItemShort = NULL,
Timeout = @timeout,
Locked = 0
WHERE SessionId = @id AND LockCookie = @lockCookie
RETURN 0'

EXEC (@cmd)
GO
/*****************************************************************************/
DECLARE @cmd nchar(4000)
SET @cmd = N'
CREATE PROCEDURE dbo.TempRemoveStateItem

AS

@id
tSessionId,
@lockCookie int

DELETE [DatabaseNamePlaceHolder].dbo.ASPStateTempSessions
WHERE SessionId = @id AND LockCookie = @lockCookie
RETURN 0'
EXEC(@cmd)
GO
/*****************************************************************************/
DECLARE @ver int
EXEC dbo.GetMajorVersion @@ver=@ver OUTPUT
DECLARE @cmd nchar(4000)
IF (@ver >= 8)
SET @cmd = N'
CREATE PROCEDURE dbo.TempResetTimeout
@id
tSessionId
AS
UPDATE [DatabaseNamePlaceHolder].dbo.ASPStateTempSessions
SET Expires = DATEADD(n, Timeout, GETUTCDATE())
WHERE SessionId = @id
RETURN 0'
ELSE
SET @cmd = N'
CREATE PROCEDURE dbo.TempResetTimeout
@id
tSessionId
AS
UPDATE [DatabaseNamePlaceHolder].dbo.ASPStateTempSessions
SET Expires = DATEADD(n, Timeout, GETDATE())
WHERE SessionId = @id
RETURN 0'
EXEC (@cmd)
GO
/*****************************************************************************/
DECLARE @ver int
EXEC dbo.GetMajorVersion @@ver=@ver OUTPUT
DECLARE @cmd nchar(4000)
IF (@ver >= 8)
SET @cmd = N'
CREATE PROCEDURE dbo.DeleteExpiredSessions
AS
SET NOCOUNT ON
SET DEADLOCK_PRIORITY LOW
DECLARE @now datetime
SET @now = GETUTCDATE()
CREATE TABLE #tblExpiredSessions
(
SessionID nvarchar(88) NOT NULL PRIMARY KEY
)
INSERT #tblExpiredSessions (SessionID)
SELECT SessionID
FROM [DatabaseNamePlaceHolder].dbo.ASPStateTempSessions WITH (RE

ADUNCOMMITTED)

WHERE Expires < @now

IF @@ROWCOUNT <> 0
BEGIN
DECLARE ExpiredSessionCursor CURSOR LOCAL FORWARD_ONLY READ_ONLY
FOR SELECT SessionID FROM #tblExpiredSessions
DECLARE @SessionID nvarchar(88)
OPEN ExpiredSessionCursor
FETCH NEXT FROM ExpiredSessionCursor INTO @SessionID
WHILE @@FETCH_STATUS = 0
BEGIN
DELETE FROM [DatabaseNamePlaceHolder].dbo.ASPStateTempSe
ssions WHERE SessionID = @SessionID AND Expires < @now
FETCH NEXT FROM ExpiredSessionCursor INTO @SessionID
END
CLOSE ExpiredSessionCursor
DEALLOCATE ExpiredSessionCursor
END
DROP TABLE #tblExpiredSessions
RETURN 0'

ELSE

SET @cmd = N'


CREATE PROCEDURE dbo.DeleteExpiredSessions
AS
SET NOCOUNT ON
SET DEADLOCK_PRIORITY LOW
DECLARE @now datetime
SET @now = GETDATE()
CREATE TABLE #tblExpiredSessions
(
SessionID nvarchar(88) NOT NULL PRIMARY KEY
)

INSERT #tblExpiredSessions (SessionID)


SELECT SessionID
FROM [DatabaseNamePlaceHolder].dbo.ASPStateTempSessions WITH (RE
ADUNCOMMITTED)
WHERE Expires < @now
IF @@ROWCOUNT <> 0
BEGIN
DECLARE ExpiredSessionCursor CURSOR LOCAL FORWARD_ONLY READ_ONLY
FOR SELECT SessionID FROM #tblExpiredSessions
DECLARE @SessionID nvarchar(88)
OPEN ExpiredSessionCursor

FETCH NEXT FROM ExpiredSessionCursor INTO @SessionID


WHILE @@FETCH_STATUS = 0
BEGIN
DELETE FROM [DatabaseNamePlaceHolder].dbo.ASPStateTempSe
ssions WHERE SessionID = @SessionID AND Expires < @now
FETCH NEXT FROM ExpiredSessionCursor INTO @SessionID
END
CLOSE ExpiredSessionCursor
DEALLOCATE ExpiredSessionCursor
END
DROP TABLE #tblExpiredSessions
RETURN 0'
EXEC (@cmd)
GO
/*****************************************************************************/
EXECUTE dbo.CreateTempTables
GO
USE master
GO
DECLARE @sstype nvarchar(128)
SET @sstype = N'sstype_custom'
IF UPPER(@sstype) = 'SSTYPE_TEMP' BEGIN
DECLARE @cmd nchar(4000)
SET @cmd = N'
/* Create the startup procedure */
CREATE PROCEDURE dbo.ASPState_Startup
AS
EXECUTE ASPState.dbo.CreateTempTables
RETURN 0'
EXEC(@cmd)
EXECUTE sp_procoption @ProcName='dbo.ASPState_Startup', @OptionName='startup
', @OptionValue='true'
END
/*****************************************************************************/
/* Create the job to delete expired sessions */
-- Add job category
-- We expect an error if the category already exists.
PRINT 'If the category already exists, an error from msdb.dbo.sp_add_category is
expected.'
EXECUTE msdb.dbo.sp_add_category @name = N'[Uncategorized (Local)]'
GO
BEGIN TRANSACTION
DECLARE @JobID BINARY(16)

DECLARE @ReturnCode int


DECLARE @nameT nchar(200)
SELECT @ReturnCode = 0
-- Add the job
SET @nameT = N'DatabaseNamePlaceHolder' + '_Job_DeleteExpiredSessions'
EXECUTE @ReturnCode = msdb.dbo.sp_add_job
@job_id = @JobID OUTPUT,
@job_name = @nameT,
@owner_login_name = NULL,
@description = N'Deletes expired sessions from the session state dat
abase.',
@category_name = N'[Uncategorized (Local)]',
@enabled = 1,
@notify_level_email = 0,
@notify_level_page = 0,
@notify_level_netsend = 0,
@notify_level_eventlog = 0,
@delete_level= 0
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
-- Add the job steps
SET @nameT = N'DatabaseNamePlaceHolder' + '_JobStep_DeleteExpiredSessions'
EXECUTE @ReturnCode = msdb.dbo.sp_add_jobstep
@job_id = @JobID,
@step_id = 1,
@step_name = @nameT,
@command = N'EXECUTE DeleteExpiredSessions',
@database_name = N'DatabaseNamePlaceHolder',
@server = N'',
@database_user_name = N'',
@subsystem = N'TSQL',
@cmdexec_success_code = 0,
@flags = 0,
@retry_attempts = 0,
@retry_interval = 1,
@output_file_name = N'',
@on_success_step_id = 0,
@on_success_action = 1,
@on_fail_step_id = 0,
@on_fail_action = 2
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXECUTE @ReturnCode = msdb.dbo.sp_update_job @job_id = @JobID, @start_step_i
d = 1
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback

s'

-- Add the job schedules


SET @nameT = N'DatabaseNamePlaceHolder' + '_JobSchedule_DeleteExpiredSession
EXECUTE @ReturnCode = msdb.dbo.sp_add_jobschedule
@job_id = @JobID,
@name = @nameT,
@enabled = 1,
@freq_type = 4,
@active_start_date = 20001016,
@active_start_time = 0,
@freq_interval = 1,

@freq_subday_type = 4,
@freq_subday_interval = 1,
@freq_relative_interval = 0,
@freq_recurrence_factor = 0,
@active_end_date = 99991231,
@active_end_time = 235959
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
-- Add the Target Servers
EXECUTE @ReturnCode = msdb.dbo.sp_add_jobserver @job_id = @JobID, @server_na
me = N'(local)'
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
COMMIT TRANSACTION
GOTO EndSave
QuitWithRollback:
IF (@@TRANCOUNT > 0) ROLLBACK TRANSACTION
EndSave:
GO
/*************************************************************/
/*************************************************************/
/*************************************************************/
/*************************************************************/
PRINT
PRINT
PRINT
PRINT

''
'--------------------------------------------------'
'Completed execution of InstallSqlStateTemplate.SQL'
'--------------------------------------------------'

ad99/**********************************************************************/
/* InstallWebEventSqlProvider.SQL
*/
/*
*/
/* Installs the tables, triggers and stored procedures necessary for */
/* supporting the aspnet feature of ASP.Net
*/
/*
*/
/* InstallCommon.sql must be run before running this file.
*/
/*
** Copyright Microsoft, Inc. 2003
** All Rights Reserved.
*/
/**********************************************************************/
PRINT '----------------------------------------------------'
PRINT 'Starting execution of InstallWebEventSqlProvider.SQL'
PRINT '----------------------------------------------------'
GO
SET
SET
GO
SET
GO
SET
GO

QUOTED_IDENTIFIER OFF -- We don't use quoted identifiers


ANSI_NULLS ON
-- We don't want (NULL = NULL) == TRUE
ANSI_PADDING ON
ANSI_NULL_DFLT_ON ON

/*************************************************************/
/*************************************************************/
/*************************************************************/

/*************************************************************/
/*************************************************************/
DECLARE @dbname NVARCHAR(128)
SET @dbname = N'aspnetdb'
IF (NOT EXISTS (SELECT name
FROM master.dbo.sysdatabases
WHERE ('[' + name + ']' = @dbname OR name = @dbname)))
BEGIN
RAISERROR('The database ''%s'' cannot be found. Please run InstallCommon.sql f
irst.', 18, 1, @dbname)
END
GO
USE [aspnetdb]
GO
IF (NOT EXISTS (SELECT name
FROM sysobjects
WHERE (name = N'aspnet_WebEvent_Events')
AND (type = 'U')))
BEGIN
PRINT 'Creating the aspnet_WebEvent_Events table...'
CREATE TABLE dbo.aspnet_WebEvent_Events (
EventId
char(32)
PRIMARY KEY,
EventTimeUtc
datetime
NOT NULL,
EventTime
datetime
NOT NULL,
EventType
nvarchar(256)
NOT NULL,
EventSequence decimal(19,0)
NOT NULL, /* SQL7 doesn't support bi
gint */
EventOccurrence decimal(19,0)
NOT NULL, /* SQL7 doesn't support bi
gint */
EventCode
int
NOT NULL,
EventDetailCode int
NOT NULL,
Message
nvarchar(1024)
NULL,
ApplicationPath nvarchar(256)
NULL,
ApplicationVirtualPath nvarchar(256) NULL,
MachineName
nvarchar(256)
NOT NULL,
RequestUrl
nvarchar(1024)
NULL,
ExceptionType nvarchar(256)
NULL,
Details
ntext
NULL
)
END
/*************************************************************/
/*************************************************************/
/*************************************************************/
/*************************************************************/
/*************************************************************/
IF (EXISTS (SELECT name
FROM sysobjects
WHERE (name = N'aspnet_WebEvent_LogEvent')
AND (type = 'P')))
DROP PROCEDURE dbo.aspnet_WebEvent_LogEvent
GO
CREATE PROCEDURE dbo.aspnet_WebEvent_LogEvent
@EventId
char(32),

@EventTimeUtc
datetime,
@EventTime
datetime,
@EventType
nvarchar(256),
@EventSequence decimal(19,0),
@EventOccurrence decimal(19,0),
@EventCode
int,
@EventDetailCode int,
@Message
nvarchar(1024),
@ApplicationPath nvarchar(256),
@ApplicationVirtualPath nvarchar(256),
@MachineName
nvarchar(256),
@RequestUrl
nvarchar(1024),
@ExceptionType nvarchar(256),
@Details
ntext

AS
BEGIN
INSERT
dbo.aspnet_WebEvent_Events
(
EventId,
EventTimeUtc,
EventTime,
EventType,
EventSequence,
EventOccurrence,
EventCode,
EventDetailCode,
Message,
ApplicationPath,
ApplicationVirtualPath,
MachineName,
RequestUrl,
ExceptionType,
Details
)
VALUES
(
@EventId,
@EventTimeUtc,
@EventTime,
@EventType,
@EventSequence,
@EventOccurrence,
@EventCode,
@EventDetailCode,
@Message,
@ApplicationPath,
@ApplicationVirtualPath,
@MachineName,
@RequestUrl,
@ExceptionType,
@Details
)
END
GO

/*************************************************************/
/*************************************************************/
IF ( NOT EXISTS ( SELECT name

FROM sysusers
WHERE issqlrole = 1
AND name = N'aspnet_WebEvent_FullAccess'))
EXEC sp_addrole N'aspnet_WebEvent_FullAccess'
GRANT EXECUTE ON dbo.aspnet_WebEvent_LogEvent TO aspnet_WebEvent_FullAccess
GRANT EXECUTE ON dbo.aspnet_CheckSchemaVersion TO aspnet_WebEvent_FullAccess
GRANT EXECUTE ON dbo.aspnet_RegisterSchemaVersion TO aspnet_WebEvent_FullAccess
GRANT EXECUTE ON dbo.aspnet_UnRegisterSchemaVersion TO aspnet_WebEvent_FullAcces
s
GO
/*************************************************************/
/*************************************************************/
---Create Health Monitoring schema version
-DECLARE @command nvarchar(4000)
SET @command = 'GRANT EXECUTE ON [dbo].aspnet_RegisterSchemaVersion TO ' + QUOTE
NAME(user)
EXECUTE (@command)
GO
EXEC [dbo].aspnet_RegisterSchemaVersion N'Health Monitoring', N'1', 1, 1
GO
/*************************************************************/
/*************************************************************/
DECLARE @command nvarchar(4000)
SET @command = 'REVOKE EXECUTE ON [dbo].aspnet_RegisterSchemaVersion FROM ' + QU
OTENAME(user)
EXECUTE (@command)
GO
PRINT '-----------------------------------------------------'
PRINT 'Completed execution of InstallWebEventSqlProvider.SQL'
PRINT '-----------------------------------------------------'
K<browsers>
<!-- Mozilla/5.0 (iPhone; U; CPU like Mac OS X; en) AppleWebKit/420+ (KHTML,
like Gecko) Version/3.0 Mobile/1A543a Safari/419.3 -->
<gateway id="IPhone" parentID="Safari">
<identification>
<userAgent match="iPhone" />
</identification>
<capabilities>
<capability
<capability
<capability
<capability
</capabilities>
</gateway>

name="mobileDeviceModel"
name="mobileDeviceManufacturer"
name="isMobileDevice"
name="canInitiateVoiceCall"

value="IPhone" />
value="Apple" />
value="true" />
value="true" />

<!-- Mozilla/5.0 (iPod; U; CPU like Mac OS X; en) AppleWebKit/420.1 (KHTML,


like Gecko) Version/3.0 Mobile/4A93 Safari/419.3 -->
<gateway id="IPod" parentID="Safari">

<identification>
<userAgent match="iPod" />
</identification>
<capabilities>
<capability name="mobileDeviceModel"
value="IPod" />
<capability name="mobileDeviceManufacturer"
value="Apple" />
<capability name="isMobileDevice"
value="true" />
</capabilities>
</gateway>
</browsers>e&Lb11<configuration>
<mscorlib>
<security>
<policy>
<PolicyLevel version="1">
<SecurityClasses>
<SecurityClass Name="AllMembershipCondition" Description
="System.Security.Policy.AllMembershipCondition, mscorlib, Version=4.0.0.0, Cult
ure=neutral, PublicKeyToken=b77a5c561934e089"/>
<SecurityClass Name="AspNetHostingPermission" Descriptio
n="System.Web.AspNetHostingPermission, System, Version=4.0.0.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089"/>
<SecurityClass Name="ConfigurationPermission" Descriptio
n="System.Configuration.ConfigurationPermission, System.Configuration, Version=4
.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
<SecurityClass Name="DnsPermission" Description="System.
Net.DnsPermission, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a
5c561934e089"/>
<SecurityClass Name="EnvironmentPermission" Description=
"System.Security.Permissions.EnvironmentPermission, mscorlib, Version=4.0.0.0, C
ulture=neutral, PublicKeyToken=b77a5c561934e089"/>
<SecurityClass Name="FileIOPermission" Description="Syst
em.Security.Permissions.FileIOPermission, mscorlib, Version=4.0.0.0, Culture=neu
tral, PublicKeyToken=b77a5c561934e089"/>
<SecurityClass Name="FirstMatchCodeGroup" Description="S
ystem.Security.Policy.FirstMatchCodeGroup, mscorlib, Version=4.0.0.0, Culture=ne
utral, PublicKeyToken=b77a5c561934e089"/>
<SecurityClass Name="IsolatedStorageFilePermission" Desc
ription="System.Security.Permissions.IsolatedStorageFilePermission, mscorlib, Ve
rsion=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
<SecurityClass Name="NamedPermissionSet" Description="Sy
stem.Security.NamedPermissionSet"/>
<SecurityClass Name="PrintingPermission" Description="Sy
stem.Drawing.Printing.PrintingPermission, System.Drawing, Version=4.0.0.0, Cultu
re=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
<SecurityClass Name="ReflectionPermission" Description="
System.Security.Permissions.ReflectionPermission, mscorlib, Version=4.0.0.0, Cul
ture=neutral, PublicKeyToken=b77a5c561934e089"/>
<SecurityClass Name="RegistryPermission" Description="Sy
stem.Security.Permissions.RegistryPermission, mscorlib, Version=4.0.0.0, Culture
=neutral, PublicKeyToken=b77a5c561934e089"/>
<SecurityClass Name="SecurityPermission" Description="Sy
stem.Security.Permissions.SecurityPermission, mscorlib, Version=4.0.0.0, Culture
=neutral, PublicKeyToken=b77a5c561934e089"/>
<SecurityClass Name="SmtpPermission" Description="System
.Net.Mail.SmtpPermission, System, Version=4.0.0.0, Culture=neutral, PublicKeyTok
en=b77a5c561934e089"/>
<SecurityClass Name="SocketPermission" Description="Syst
em.Net.SocketPermission, System, Version=4.0.0.0, Culture=neutral, PublicKeyToke
n=b77a5c561934e089"/>

<SecurityClass Name="SqlClientPermission" Description="S


ystem.Data.SqlClient.SqlClientPermission, System.Data, Version=4.0.0.0, Culture=
neutral, PublicKeyToken=b77a5c561934e089"/>
<SecurityClass Name="StrongNameMembershipCondition" Desc
ription="System.Security.Policy.StrongNameMembershipCondition, mscorlib, Version
=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
<SecurityClass Name="UnionCodeGroup" Description="System
.Security.Policy.UnionCodeGroup, mscorlib, Version=4.0.0.0, Culture=neutral, Pub
licKeyToken=b77a5c561934e089"/>
<SecurityClass Name="UrlMembershipCondition" Description
="System.Security.Policy.UrlMembershipCondition, mscorlib, Version=4.0.0.0, Cult
ure=neutral, PublicKeyToken=b77a5c561934e089"/>
<SecurityClass Name="WebPermission" Description="System.
Net.WebPermission, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a
5c561934e089"/>
<SecurityClass Name="ZoneMembershipCondition" Descriptio
n="System.Security.Policy.ZoneMembershipCondition, mscorlib, Version=4.0.0.0, Cu
lture=neutral, PublicKeyToken=b77a5c561934e089"/>
</SecurityClasses>
<NamedPermissionSets>
<PermissionSet
class="NamedPermissionSet"
version="1"
Unrestricted="true"
Name="FullTrust"
Description="Allows full access to all resources
"
/>
<PermissionSet
class="NamedPermissionSet"
version="1"
Name="Nothing"
Description="Denies all resources, including the
right to execute"
/>
<PermissionSet
class="NamedPermissionSet"
version="1"
Name="ASP.Net">
<IPermission
class="AspNetHostingPermission"
version="1"
Level="High"
/>
<IPermission
class="ConfigurationPermission"
version="1"
Unrestricted="true"
/>
<IPermission
class="DnsPermission"
version="1"
Unrestricted="true"
/>
<IPermission
class="EnvironmentPermission"
version="1"
Unrestricted="true"
/>
<IPermission

class="FileIOPermission"
version="1"
Unrestricted="true"

s"

/>
<IPermission
class="IsolatedStorageFilePermission"
version="1"
Unrestricted="true"
/>
<IPermission
class="PrintingPermission"
version="1"
Level="DefaultPrinting"
/>
<IPermission
class="ReflectionPermission"
version="1"
Flags="ReflectionEmit, RestrictedMemberAcces

/>
<IPermission
class="RegistryPermission"
version="1"
Unrestricted="true"
/>
<IPermission
class="SecurityPermission"
version="1"
Flags="Execution, ControlThread, ControlPrin
cipal, RemotingConfiguration"
/>
<IPermission
class="SmtpPermission"
version="1"
Access="Connect"
/>
<IPermission
class="SocketPermission"
version="1"
Unrestricted="true"
/>
<IPermission
class="SqlClientPermission"
version="1"
Unrestricted="true"
/>
<IPermission
class="WebPermission"
version="1"
Unrestricted="true"
/>
</PermissionSet>
</NamedPermissionSets>
<CodeGroup
class="FirstMatchCodeGroup"
version="1"
PermissionSetName="Nothing">
<IMembershipCondition
class="AllMembershipCondition"
version="1"

SetName="Nothing">

/>
<CodeGroup
class="UnionCodeGroup"
version="1"
PermissionSetName="ASP.Net">
<IMembershipCondition
class="UrlMembershipCondition"
version="1"
Url="$AppDirUrl$/*"
/>
</CodeGroup>
<CodeGroup
class="UnionCodeGroup"
version="1"
PermissionSetName="ASP.Net">
<IMembershipCondition
class="UrlMembershipCondition"
version="1"
Url="$CodeGen$/*"
/>
</CodeGroup>
<CodeGroup class="UnionCodeGroup" version="1" Permission

<IMembershipCondition
class="ZoneMembershipCondition"
version="1"
Zone="MyComputer" />
<CodeGroup
class="UnionCodeGroup"
version="1"
PermissionSetName="FullTrust"
Name="Microsoft_Strong_Name"
Description="This code group grants code sig
ned with the Microsoft strong name full trust. ">
<IMembershipCondition
class="StrongNameMembershipCondition"
version="1"
PublicKeyBlob="0024000004800000940000000
60200000024000052534131000400000100010007D1FA57C4AED9F0A32E84AA0FAEFD0DE9E8FD6AE
C8F87FB03766C834C99921EB23BE79AD9D5DCC1DD9AD236132102900B723CF980957FC4E177108FC
607774F29E8320E92EA05ECE4E821C0A5EFE8F1645C4C0C93C1AB99285D622CAA652C1DFAD63D745
D6F2DE5F17E5EAF0FC4963D261C8A12436518206DC093344D5AD293"
/>
</CodeGroup>
<CodeGroup
class="UnionCodeGroup"
version="1"
PermissionSetName="FullTrust"
Name="Ecma_Strong_Name"
Description="This code group grants code sig
ned with the ECMA strong name full trust. ">
<IMembershipCondition
class="StrongNameMembershipCondition"
version="1"
PublicKeyBlob="0000000000000000040000000
0000000"
/>
</CodeGroup>
</CodeGroup>
</CodeGroup>

</PolicyLevel>
</policy>
</security>
</mscorlib>
</configuration>
I N<configuration>
<mscorlib>
<security>
<policy>
<PolicyLevel version="1">
<SecurityClasses>
<SecurityClass Name="AllMembershipCondition" Description
="System.Security.Policy.AllMembershipCondition, mscorlib, Version=4.0.0.0, Cult
ure=neutral, PublicKeyToken=b77a5c561934e089"/>
<SecurityClass Name="AspNetHostingPermission" Descriptio
n="System.Web.AspNetHostingPermission, System, Version=4.0.0.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089"/>
<SecurityClass Name="FileIOPermission" Description="Syst
em.Security.Permissions.FileIOPermission, mscorlib, Version=4.0.0.0, Culture=neu
tral, PublicKeyToken=b77a5c561934e089"/>
<SecurityClass Name="FirstMatchCodeGroup" Description="S
ystem.Security.Policy.FirstMatchCodeGroup, mscorlib, Version=4.0.0.0, Culture=ne
utral, PublicKeyToken=b77a5c561934e089"/>
<SecurityClass Name="IsolatedStorageFilePermission" Desc
ription="System.Security.Permissions.IsolatedStorageFilePermission, mscorlib, Ve
rsion=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
<SecurityClass Name="NamedPermissionSet" Description="Sy
stem.Security.NamedPermissionSet"/>
<SecurityClass Name="SecurityPermission" Description="Sy
stem.Security.Permissions.SecurityPermission, mscorlib, Version=4.0.0.0, Culture
=neutral, PublicKeyToken=b77a5c561934e089"/>
<SecurityClass Name="StrongNameMembershipCondition" Desc
ription="System.Security.Policy.StrongNameMembershipCondition, mscorlib, Version
=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
<SecurityClass Name="UnionCodeGroup" Description="System
.Security.Policy.UnionCodeGroup, mscorlib, Version=4.0.0.0, Culture=neutral, Pub
licKeyToken=b77a5c561934e089"/>
<SecurityClass Name="UrlMembershipCondition" Description
="System.Security.Policy.UrlMembershipCondition, mscorlib, Version=4.0.0.0, Cult
ure=neutral, PublicKeyToken=b77a5c561934e089"/>
<SecurityClass Name="ZoneMembershipCondition" Descriptio
n="System.Security.Policy.ZoneMembershipCondition, mscorlib, Version=4.0.0.0, Cu
lture=neutral, PublicKeyToken=b77a5c561934e089"/>
</SecurityClasses>
<NamedPermissionSets>
<PermissionSet
class="NamedPermissionSet"
version="1"
Unrestricted="true"
Name="FullTrust"
Description="Allows full access to all resources
"
/>
<PermissionSet
class="NamedPermissionSet"
version="1"
Name="Nothing"
Description="Denies all resources, including the
right to execute"

SetName="Nothing">

/>
<PermissionSet
class="NamedPermissionSet"
version="1"
Name="ASP.Net">
<IPermission
class="AspNetHostingPermission"
version="1"
Level="Low"
/>
<IPermission
class="FileIOPermission"
version="1"
Read="$AppDir$"
PathDiscovery="$AppDir$"
/>
<IPermission
class="IsolatedStorageFilePermission"
version="1"
Allowed="AssemblyIsolationByUser"
UserQuota="1048576"
/>
<IPermission
class="SecurityPermission"
version="1"
Flags="Execution"
/>
</PermissionSet>
</NamedPermissionSets>
<CodeGroup
class="FirstMatchCodeGroup"
version="1"
PermissionSetName="Nothing">
<IMembershipCondition
class="AllMembershipCondition"
version="1"
/>
<CodeGroup
class="UnionCodeGroup"
version="1"
PermissionSetName="ASP.Net">
<IMembershipCondition
class="UrlMembershipCondition"
version="1"
Url="$AppDirUrl$/*"
/>
</CodeGroup>
<CodeGroup
class="UnionCodeGroup"
version="1"
PermissionSetName="ASP.Net">
<IMembershipCondition
class="UrlMembershipCondition"
version="1"
Url="$CodeGen$/*"
/>
</CodeGroup>
<CodeGroup class="UnionCodeGroup" version="1" Permission
<IMembershipCondition

class="ZoneMembershipCondition"
version="1"
Zone="MyComputer" />
<CodeGroup
class="UnionCodeGroup"
version="1"
PermissionSetName="FullTrust"
Name="Microsoft_Strong_Name"
Description="This code group grants code sig
ned with the Microsoft strong name full trust. ">
<IMembershipCondition
class="StrongNameMembershipCondition"
version="1"
PublicKeyBlob="0024000004800000940000000
60200000024000052534131000400000100010007D1FA57C4AED9F0A32E84AA0FAEFD0DE9E8FD6AE
C8F87FB03766C834C99921EB23BE79AD9D5DCC1DD9AD236132102900B723CF980957FC4E177108FC
607774F29E8320E92EA05ECE4E821C0A5EFE8F1645C4C0C93C1AB99285D622CAA652C1DFAD63D745
D6F2DE5F17E5EAF0FC4963D261C8A12436518206DC093344D5AD293"
/>
</CodeGroup>
<CodeGroup
class="UnionCodeGroup"
version="1"
PermissionSetName="FullTrust"
Name="Ecma_Strong_Name"
Description="This code group grants code sig
ned with the ECMA strong name full trust. ">
<IMembershipCondition
class="StrongNameMembershipCondition"
version="1"
PublicKeyBlob="0000000000000000040000000
0000000"
/>
</CodeGroup>
</CodeGroup>
</CodeGroup>
</PolicyLevel>
</policy>
</security>
</mscorlib>
</configuration>
u--<configuration>
<mscorlib>
<security>
<policy>
<PolicyLevel version="1">
<SecurityClasses>
<SecurityClass Name="AllMembershipCondition" Description
="System.Security.Policy.AllMembershipCondition, mscorlib, Version=4.0.0.0, Cult
ure=neutral, PublicKeyToken=b77a5c561934e089"/>
<SecurityClass Name="AspNetHostingPermission" Descriptio
n="System.Web.AspNetHostingPermission, System, Version=4.0.0.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089"/>
<SecurityClass Name="DnsPermission" Description="System.
Net.DnsPermission, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a
5c561934e089"/>
<SecurityClass Name="EnvironmentPermission" Description=
"System.Security.Permissions.EnvironmentPermission, mscorlib, Version=4.0.0.0, C
ulture=neutral, PublicKeyToken=b77a5c561934e089"/>

<SecurityClass Name="FileIOPermission" Description="Syst


em.Security.Permissions.FileIOPermission, mscorlib, Version=4.0.0.0, Culture=neu
tral, PublicKeyToken=b77a5c561934e089"/>
<SecurityClass Name="FirstMatchCodeGroup" Description="S
ystem.Security.Policy.FirstMatchCodeGroup, mscorlib, Version=4.0.0.0, Culture=ne
utral, PublicKeyToken=b77a5c561934e089"/>
<SecurityClass Name="IsolatedStorageFilePermission" Desc
ription="System.Security.Permissions.IsolatedStorageFilePermission, mscorlib, Ve
rsion=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
<SecurityClass Name="NamedPermissionSet" Description="Sy
stem.Security.NamedPermissionSet"/>
<SecurityClass Name="PrintingPermission" Description="Sy
stem.Drawing.Printing.PrintingPermission, System.Drawing, Version=4.0.0.0, Cultu
re=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
<SecurityClass Name="SecurityPermission" Description="Sy
stem.Security.Permissions.SecurityPermission, mscorlib, Version=4.0.0.0, Culture
=neutral, PublicKeyToken=b77a5c561934e089"/>
<SecurityClass Name="SmtpPermission" Description="System
.Net.Mail.SmtpPermission, System, Version=4.0.0.0, Culture=neutral, PublicKeyTok
en=b77a5c561934e089"/>
<SecurityClass Name="SqlClientPermission" Description="S
ystem.Data.SqlClient.SqlClientPermission, System.Data, Version=4.0.0.0, Culture=
neutral, PublicKeyToken=b77a5c561934e089"/>
<SecurityClass Name="StrongNameMembershipCondition" Desc
ription="System.Security.Policy.StrongNameMembershipCondition, mscorlib, Version
=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
<SecurityClass Name="UIPermission" Description="System.S
ecurity.Permissions.UIPermission, mscorlib, Version=4.0.0.0, Culture=neutral, Pu
blicKeyToken=b77a5c561934e089"/>
<SecurityClass Name="UnionCodeGroup" Description="System
.Security.Policy.UnionCodeGroup, mscorlib, Version=4.0.0.0, Culture=neutral, Pub
licKeyToken=b77a5c561934e089"/>
<SecurityClass Name="UrlMembershipCondition" Description
="System.Security.Policy.UrlMembershipCondition, mscorlib, Version=4.0.0.0, Cult
ure=neutral, PublicKeyToken=b77a5c561934e089"/>
<SecurityClass Name="WebPermission" Description="System.
Net.WebPermission, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a
5c561934e089"/>
<SecurityClass Name="ZoneMembershipCondition" Descriptio
n="System.Security.Policy.ZoneMembershipCondition, mscorlib, Version=4.0.0.0, Cu
lture=neutral, PublicKeyToken=b77a5c561934e089"/>
<SecurityClass Name="ReflectionPermission" Description="
System.Security.Permissions.ReflectionPermission, mscorlib, Version=4.0.0.0, Cul
ture=neutral, PublicKeyToken=b77a5c561934e089"/>
</SecurityClasses>
<NamedPermissionSets>
<PermissionSet
class="NamedPermissionSet"
version="1"
Unrestricted="true"
Name="FullTrust"
Description="Allows full access to all resources
"
/>
<PermissionSet
class="NamedPermissionSet"
version="1"
Name="Nothing"
Description="Denies all resources, including the
right to execute"

/>
<PermissionSet
class="NamedPermissionSet"
version="1"
Name="ASP.Net">
<IPermission
class="AspNetHostingPermission"
version="1"
Level="Medium"
/>
<IPermission
class="DnsPermission"
version="1"
Unrestricted="true"
/>
<IPermission
class="EnvironmentPermission"
version="1"
Read="TEMP;TMP;USERNAME;OS;COMPUTERNAME"
/>
<IPermission
class="FileIOPermission"
version="1"
Read="$AppDir$"
Write="$AppDir$"
Append="$AppDir$"
PathDiscovery="$AppDir$"
/>
<IPermission
class="IsolatedStorageFilePermission"
version="1"
Allowed="AssemblyIsolationByUser"
UserQuota="9223372036854775807"
/>
<IPermission
class="PrintingPermission"
version="1"
Level="DefaultPrinting"
/>
<IPermission
class="SecurityPermission"
version="1"
Flags="Execution, ControlThread, ControlPrin
cipal, RemotingConfiguration"
/>
<IPermission
class="SmtpPermission"
version="1"
Access="Connect"
/>
<IPermission
class="SqlClientPermission"
version="1"
Unrestricted="true"
/>
<IPermission
class="WebPermission"
version="1">
<ConnectAccess>
<URI uri="$OriginHost$"/>

SetName="Nothing">

</ConnectAccess>
</IPermission>
<IPermission
class="ReflectionPermission"
version="1"
Flags="RestrictedMemberAccess"/>
</PermissionSet>
</NamedPermissionSets>
<CodeGroup
class="FirstMatchCodeGroup"
version="1"
PermissionSetName="Nothing">
<IMembershipCondition
class="AllMembershipCondition"
version="1"
/>
<CodeGroup
class="UnionCodeGroup"
version="1"
PermissionSetName="ASP.Net">
<IMembershipCondition
class="UrlMembershipCondition"
version="1"
Url="$AppDirUrl$/*"
/>
</CodeGroup>
<CodeGroup
class="UnionCodeGroup"
version="1"
PermissionSetName="ASP.Net">
<IMembershipCondition
class="UrlMembershipCondition"
version="1"
Url="$CodeGen$/*"
/>
</CodeGroup>
<CodeGroup class="UnionCodeGroup" version="1" Permission

<IMembershipCondition
class="ZoneMembershipCondition"
version="1"
Zone="MyComputer" />
<CodeGroup
class="UnionCodeGroup"
version="1"
PermissionSetName="FullTrust"
Name="Microsoft_Strong_Name"
Description="This code group grants code sig
ned with the Microsoft strong name full trust. ">
<IMembershipCondition
class="StrongNameMembershipCondition"
version="1"
PublicKeyBlob="0024000004800000940000000
60200000024000052534131000400000100010007D1FA57C4AED9F0A32E84AA0FAEFD0DE9E8FD6AE
C8F87FB03766C834C99921EB23BE79AD9D5DCC1DD9AD236132102900B723CF980957FC4E177108FC
607774F29E8320E92EA05ECE4E821C0A5EFE8F1645C4C0C93C1AB99285D622CAA652C1DFAD63D745
D6F2DE5F17E5EAF0FC4963D261C8A12436518206DC093344D5AD293"
/>
</CodeGroup>
<CodeGroup

class="UnionCodeGroup"
version="1"
PermissionSetName="FullTrust"
Name="Ecma_Strong_Name"
Description="This code group grants code sig
ned with the ECMA strong name full trust. ">
<IMembershipCondition
class="StrongNameMembershipCondition"
version="1"
PublicKeyBlob="0000000000000000040000000
0000000"
/>
</CodeGroup>
</CodeGroup>
</CodeGroup>
</PolicyLevel>
</policy>
</security>
</mscorlib>
</configuration>
T<configuration>
<mscorlib>
<security>
<policy>
<PolicyLevel version="1">
<SecurityClasses>
<SecurityClass Name="AllMembershipCondition" Description
="System.Security.Policy.AllMembershipCondition, mscorlib, Version=4.0.0.0, Cult
ure=neutral, PublicKeyToken=b77a5c561934e089"/>
<SecurityClass Name="AspNetHostingPermission" Descriptio
n="System.Web.AspNetHostingPermission, System, Version=4.0.0.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089"/>
<SecurityClass Name="FirstMatchCodeGroup" Description="S
ystem.Security.Policy.FirstMatchCodeGroup, mscorlib, Version=4.0.0.0, Culture=ne
utral, PublicKeyToken=b77a5c561934e089"/>
<SecurityClass Name="NamedPermissionSet" Description="Sy
stem.Security.NamedPermissionSet"/>
<SecurityClass Name="SecurityPermission" Description="Sy
stem.Security.Permissions.SecurityPermission, mscorlib, Version=4.0.0.0, Culture
=neutral, PublicKeyToken=b77a5c561934e089"/>
<SecurityClass Name="StrongNameMembershipCondition" Desc
ription="System.Security.Policy.StrongNameMembershipCondition, mscorlib, Version
=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
<SecurityClass Name="UnionCodeGroup" Description="System
.Security.Policy.UnionCodeGroup, mscorlib, Version=4.0.0.0, Culture=neutral, Pub
licKeyToken=b77a5c561934e089"/>
<SecurityClass Name="UrlMembershipCondition" Description
="System.Security.Policy.UrlMembershipCondition, mscorlib, Version=4.0.0.0, Cult
ure=neutral, PublicKeyToken=b77a5c561934e089"/>
<SecurityClass Name="ZoneMembershipCondition" Descriptio
n="System.Security.Policy.ZoneMembershipCondition, mscorlib, Version=4.0.0.0, Cu
lture=neutral, PublicKeyToken=b77a5c561934e089"/>
</SecurityClasses>
<NamedPermissionSets>
<PermissionSet
class="NamedPermissionSet"
version="1"
Unrestricted="true"
Name="FullTrust"

Description="Allows full access to all resources

"

right to execute"

SetName="Nothing">

/>
<PermissionSet
class="NamedPermissionSet"
version="1"
Name="Nothing"
Description="Denies all resources, including the
/>
<PermissionSet
class="NamedPermissionSet"
version="1"
Name="ASP.Net">
<IPermission
class="AspNetHostingPermission"
version="1"
Level="Minimal"
/>
<IPermission
class="SecurityPermission"
version="1"
Flags="Execution"
/>
</PermissionSet>
</NamedPermissionSets>
<CodeGroup
class="FirstMatchCodeGroup"
version="1"
PermissionSetName="Nothing">
<IMembershipCondition
class="AllMembershipCondition"
version="1"
/>
<CodeGroup
class="UnionCodeGroup"
version="1"
PermissionSetName="ASP.Net">
<IMembershipCondition
class="UrlMembershipCondition"
version="1"
Url="$AppDirUrl$/*"
/>
</CodeGroup>
<CodeGroup
class="UnionCodeGroup"
version="1"
PermissionSetName="ASP.Net">
<IMembershipCondition
class="UrlMembershipCondition"
version="1"
Url="$CodeGen$/*"
/>
</CodeGroup>
<CodeGroup class="UnionCodeGroup" version="1" Permission
<IMembershipCondition
class="ZoneMembershipCondition"
version="1"
Zone="MyComputer" />

<CodeGroup
class="UnionCodeGroup"
version="1"
PermissionSetName="FullTrust"
Name="Microsoft_Strong_Name"
Description="This code group grants code sig
ned with the Microsoft strong name full trust. ">
<IMembershipCondition
class="StrongNameMembershipCondition"
version="1"
PublicKeyBlob="0024000004800000940000000
60200000024000052534131000400000100010007D1FA57C4AED9F0A32E84AA0FAEFD0DE9E8FD6AE
C8F87FB03766C834C99921EB23BE79AD9D5DCC1DD9AD236132102900B723CF980957FC4E177108FC
607774F29E8320E92EA05ECE4E821C0A5EFE8F1645C4C0C93C1AB99285D622CAA652C1DFAD63D745
D6F2DE5F17E5EAF0FC4963D261C8A12436518206DC093344D5AD293"
/>
</CodeGroup>
<CodeGroup
class="UnionCodeGroup"
version="1"
PermissionSetName="FullTrust"
Name="Ecma_Strong_Name"
Description="This code group grants code sig
ned with the ECMA strong name full trust. ">
<IMembershipCondition
class="StrongNameMembershipCondition"
version="1"
PublicKeyBlob="0000000000000000040000000
0000000"
/>
</CodeGroup>
</CodeGroup>
</CodeGroup>
</PolicyLevel>
</policy>
</security>
</mscorlib>
</configuration>
3

@cc<%@ Page masterPageFile="~/WebAdminWithConfirmation.master" inherits="System.Web


.Administration.SecurityPage"%>
<%@ MasterType virtualPath="~/WebAdminWithConfirmation.master" %>
<%@ Import Namespace="System.Data.SqlClient" %>
<script runat="server" language="cs">
public void AddRole(object sender, EventArgs e) {
if (!textBox1.Text.Equals(string.Empty)){
try {
CallWebAdminHelperMethod(false, "CreateRole",new object[] {(string)
textBox1.Text}, new Type[] {typeof(string)});
textBox1.Text = string.Empty;
}
catch (Exception ex){
errorMessage.Text = ex.Message;
errorMessage.Visible = true;
}
BindGrid();
}
}
private void BindGrid() {
string[] arr = (string[])CallWebAdminHelperMethod(false, "GetAllRoles", new
object[] {}, null);
dataGrid.DataSource = arr;

int currentPage = dataGrid.PageIndex;


int count = arr.Length;
int pageSize = dataGrid.PageSize;
if (count > 0 && currentPage == count / pageSize && count % pageSize == 0) {
dataGrid.PageIndex -= 1;
}
dataGrid.DataBind();
dataGrid.Visible = (dataGrid.Rows.Count > 0);

private string GetToolTip(string resourceName, string itemName) {


string tempString = (string) GetLocalResourceObject(resourceName);
return String.Format((string)GetGlobalResourceObject("GlobalResources","Tool
TipFormat"), tempString, itemName);
}
public void IndexChanged(object sender, GridViewPageEventArgs e) {
dataGrid.PageIndex = e.NewPageIndex;
BindGrid();
}
public void LinkButtonClick(object sender, CommandEventArgs e){
if (e.CommandName.Equals("ManageRole")) {
CurrentRole = (string)e.CommandArgument;
// do not prepend ~/ to this path since it is not at the root
Response.Redirect("manageSingleRole.aspx");
}
if (e.CommandName.Equals("DeleteRole")){
RoleName.Text = (string)e.CommandArgument;
Master.SetDisplayUI(true);
}
}

private void No_Click(object sender, EventArgs e) {


Master.SetDisplayUI(false);
}
public void Page_Load() {
if (!IsPostBack) {
BindGrid();
}
}

dataGrid.HeaderStyle.HorizontalAlign = DirectionalityHorizontalAlign;

private void Yes_Click(object sender, EventArgs e) {


if ((bool)CallWebAdminHelperMethod(false, "RoleExists", new object[] {(strin
g) RoleName.Text}, new Type[] {typeof(string)})) {
CallWebAdminHelperMethod(false, "DeleteRole", new object[] {(string) Rol
eName.Text, false}, new Type[] {typeof(string),typeof(bool)});
}
BindGrid();
Master.SetDisplayUI(false);

}
</script>

<asp:content runat="server" contentplaceholderid="buttons">


<asp:button ValidationGroup="none" text="<%$ Resources:Back%>" id="doneButto
n" onClick="ReturnToPreviousPage" runat=server/>
</asp:content>
<asp:content runat="server" contentplaceholderid="titleBar"><asp:literal runat="
server" text="<%$ Resources:ManageRoles %>"/>
</asp:content>
<asp:content runat="server" contentplaceholderid="content">
<div style="width:580">
<asp:literal runat="server" text="<%$ Resources:Instructions %>" />
</div><br/>
<table cellspacing="0" cellpadding="5" class="lrbBorders" width="580" id="Manage
AllRolesTable">
<tr>
<td class="callOutStyle"><h1 class="callOutHeaderStyle"><asp:literal run
at="server" text="<%$ Resources:CreateNewRole %>" /></h1></td>
</tr>
<tr >
<td class="bodyTextNoPadding">
<asp:Label runat="server" AssociatedControlID="textBox1" Text="<%
$ Resources:NewRoleName %>"/>
<asp:textBox runat=server id="textBox1" maxlength="256"/>
<asp:button runat=server id="button1" text="<%$ Resources:AddRole
%>" onClick="AddRole"/><br/>
<asp:label runat="server" id="errorMessage" enableViewState="false" forecolo
r="Red" visible="false"/>
</td>
</tr>
</table>

<%-- Cause the textbox to submit the page on enter, raising server side onclick-%>
<input type="text" style="visibility:hidden"/>
<br/>
<table cellspacing="0" cellpadding="0" border="0" width="580">
<tbody>
<tr valign="top">
<td height="100%" class="lrbBorders">
<asp:gridView runat="server" id="dataGrid" allowpaging="true" autoge
neratecolumns="False" border="0" cellpadding="5" cellspacing="0" OnPageIndexCha
nging="IndexChanged" pagesize="7" width="100%" UseAccessibleHeader="true">

="#009999"/>

RoleName %>" >

AddRemove %>" >

<rowStyle cssClass="gridRowStyle" />


<alternatingRowStyle cssClass="gridAlternatingRowStyle" />
<footerStyle forecolor="#003399" backcolor="#99CCCC"/>
<headerStyle cssClass="callOutStyle" font-bold="true" />
<selectedRowStyle font-bold="True" forecolor="#CCFF99" backcolor
<pagerStyle forecolor="#000000" backcolor="#EEEEEE"/>
<pagersettings mode="Numeric"/>
<columns >
<asp:templateField runat="server" headerText="<%$ Resources:
<itemTemplate>
<%# Container.DataItem %>
</itemTemplate>
</asp:templateField>
<asp:templateField runat="server" headerText="<%$ Resources:

<itemTemplate>
<asp:linkButton runat="server" id="linkButton1" text
="<%$ Resources:Manage %>" commandName="ManageRole" toolTip='<%# GetToolTip("Man
age",Container.DataItem.ToString()) %>' commandArgument='<%#Container.DataItem%>
' onCommand='LinkButtonClick'/>
</itemTemplate>
</asp:templateField>
<asp:templateField runat="server" >
<itemStyle horizontalAlign="center"/>
<itemTemplate>
<asp:linkButton runat="server" id="linkButton2" text
="<%$ Resources:Delete %>" commandName="DeleteRole" toolTip='<%# GetToolTip("Del
ete",Container.DataItem.ToString()) %>' commandArgument='<%#Container.DataItem%>
' onCommand='LinkButtonClick'/>
</itemTemplate>
</asp:templateField>
</columns>
</asp:gridView>
</td>
</tr>
</tbody>
</table>
</asp:content>
<%-- Confirmation Dialog --%>
<asp:content runat="server" contentplaceholderid="dialogTitle">
<asp:literal runat="server" text="<%$ Resources:UserManagement %>" />
</asp:content>

<asp:content runat="server" contentplaceholderid="dialogContent">


<img src="../../Images/alert_lrg.gif"/>
<asp:literal runat="server" text="<%$ Resources:AreYouSure %>"/> "<asp:Label
runat=server id="RoleName" Font-Bold="true"/>"?
</asp:content>
<asp:content runat="server" contentplaceholderid="dialogBottomLeftButton">
<asp:Button runat="server" OnClick="Yes_Click" Text="<%$ Resources:Yes %>" w
idth="100"/>
</asp:content>
<asp:content runat="server" contentplaceholderid="dialogBottomRightButton">
<asp:Button runat="server" OnClick="No_Click" Text="<%$ Resources:No %>" wid
th="100"/>
</asp:content>
`pbTT<?xml version="1.0" encoding="utf-8"?>
<root>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>1.3</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.
0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.
0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="AddRemove" type="System.String">
<value>Add/Remove Users</value>
</data>
<data name="AddRole" type="System.String">
<value>Add Role</value>
</data>
<data name="AreYouSure" type="System.String">
<value>Are you sure you want to delete the role: </value>
</data>
<data name="Back" type="System.String">
<value>Back</value>
</data>
<data name="CreateNewRole" type="System.String">
<value>Create New Role</value>
</data>
<data name="Delete" type="System.String">
<value>Delete</value>
</data>
<data name="Instructions" type="System.String">
<value>You can optionally add roles, or groups, that enable you to allow or
deny groups of users access to specific folders in your Web site. For example, y
ou might create roles such as "managers," "sales," or "members," each with diffe
rent access to specific folders.</value>

</data>
<data name="Manage" type="System.String">
<value>Manage</value>
</data>
<data name="ManageRoles" type="System.String">
<value>Manage Roles</value>
</data>
<data name="NewRoleName" type="System.String">
<value>New role name:</value>
</data>
<data name="No" type="System.String">
<value>No</value>
</data>
<data name="RoleName" type="System.String">
<value>Role Name</value>
</data>
<data name="UserManagement" type="System.String">
<value>User Management</value>
</data>
<data name="Yes" type="System.String">
<value>Yes</value>
</data>
</root>;^Bm\;\;<%@ page masterPageFile="~/WebAdminWithConfirmation.master" inher
its="System.Web.Administration.ApplicationConfigurationPage"%>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Globalization" %>
<%@ Import Namespace="System.Web.Administration" %>
<%@ Import Namespace="System.Web.Configuration" %>
<script runat="server" language="cs">
private enum LocationType {
Local = 0,
Inherited = 1,
Overridden = 2,
}
private WebAdminWithConfirmationMasterPage Master {
get {
return (WebAdminWithConfirmationMasterPage)base.Master;
}
}
private void AddAppSettingRow(DataTable dataTable, string name, string value, Lo
cationType locationType) {
DataRow row = dataTable.NewRow();
// Assume the columns are in expected order when the table is created
row[0] = name;
row[1] = value;
row[2] = locationType;
}

dataTable.Rows.Add(row);

private void BindAppSettings() {


// TODO: Perf: It might not be needed if there are no application settings.
DataTable dataTable = new DataTable();

dataTable.Locale = CultureInfo.InvariantCulture; // FxCop


dataTable.Columns.Add("Name", typeof(string));
dataTable.Columns.Add("Value", typeof(string));
dataTable.Columns.Add("LocationType", typeof(LocationType));
string appPath = ApplicationPath;
string parentPath = GetParentPath(appPath);
Configuration parentConfig = OpenWebConfiguration(parentPath);
AppSettingsSection parentAppSettingsSection = (AppSettingsSection) parentCon
fig.GetSection("appSettings");
KeyValueConfigurationCollection parentSettings = parentAppSettingsSection.Se
ttings;
Configuration config = OpenWebConfiguration(appPath);
AppSettingsSection appSettingsSection = (AppSettingsSection) config.GetSecti
on("appSettings");
KeyValueConfigurationCollection settings = appSettingsSection.Settings;
foreach (KeyValueConfigurationElement element in settings) {
string name = element.Key;
string value = element.Value;
KeyValueConfigurationElement parentValue = parentSettings[name];
if (parentValue != null && parentValue.Value != value) {
AddAppSettingRow(dataTable, name, value, LocationType.Overridden);
parentSettings.Remove(name);
}
else if (parentValue == null) {
AddAppSettingRow(dataTable, name, value, LocationType.Local);
}
else {
// we have something which is getting inherited but not getting over
ridden...
AddAppSettingRow(dataTable, name, value, LocationType.Inherited);
}
}
DataView dataView = new DataView(dataTable);
dataView.Sort = "Name ASC";
AppSettingGridView.DataSource = dataView;
AppSettingGridView.DataBind();
// Display the label of # of app settings
int totalCount = dataView.Count;
string numOfAppSettingsText = String.Format((string)GetLocalResourceObject("
NumOfAppSettingsText"), totalCount.ToString(CultureInfo.InvariantCulture));
if (totalCount <= AppSettingGridView.PageSize) {
NumOfAppSettingsLabel.Visible = true;
NumOfAppSettingsLabel.Text = numOfAppSettingsText;
}
else {
// Merge the text in the pager row
NumOfAppSettingsLabel.Visible = false;
TableCell labelCell = new TableCell();
labelCell.HorizontalAlign = DirectionalityHorizontalAlign;
labelCell.VerticalAlign = VerticalAlign.Top;
labelCell.ColumnSpan = 4;

labelCell.Text = numOfAppSettingsText;

GridViewRow pagerRow = AppSettingGridView.BottomPagerRow;


TableCell pagerCell = pagerRow.Cells[0];
pagerCell.ColumnSpan -= 4;
pagerRow.Cells.AddAt(0, labelCell);

private string GetToolTip(string resourceName, string itemName) {


string tempString = (string) GetLocalResourceObject(resourceName);
return String.Format((string)GetGlobalResourceObject("GlobalResources","Tool
TipFormat"), tempString, itemName);
}
private string GetLocationTypeText(LocationType locationType) {
string resourceName = PropertyConverter.EnumToString(typeof(LocationType), l
ocationType);
return ((string) GetLocalResourceObject(resourceName));
}
void Page_Load() {
if (!IsPostBack) {
string appPath = ApplicationPath;
if (!String.IsNullOrEmpty(appPath)) {
MainTitle.Text = String.Format((string)GetLocalResourceObject("Title
ForSite"), appPath);
}
BindAppSettings();
lAlign;
}
}

AppSettingGridView.HeaderStyle.HorizontalAlign = DirectionalityHorizonta

void AppSettingGridView_Delete(object sender, GridViewDeleteEventArgs e) {


GridViewRow row = AppSettingGridView.Rows[e.RowIndex];
TableCell nameCell = row.Cells[1];
Name.Value = HttpUtility.HtmlDecode(nameCell.Text.ToString());
DeleteName.Text = String.Format((string)GetLocalResourceObject("Confirmation
Text"), nameCell.Text);

// Go to confirmation UI
Master.SetDisplayUI(true);

void AppSettingGridView_Edit(object sender, GridViewEditEventArgs e) {


StringBuilder editUrl = new StringBuilder();
editUrl.Append("EditAppSetting.aspx");
GridViewRow row = AppSettingGridView.Rows[e.NewEditIndex];
TableCell nameCell = row.Cells[1];
TableCell valueCell = row.Cells[2];
string tempString = HttpUtility.HtmlDecode(nameCell.Text.ToString());
editUrl.Append("?name=");
tempString = HttpUtility.UrlEncode(tempString);
editUrl.Append(tempString);

tempString = HttpUtility.HtmlDecode(valueCell.Text.ToString());
editUrl.Append("&value=");
tempString = HttpUtility.UrlEncode(tempString);
editUrl.Append(tempString);
}

Response.Redirect(editUrl.ToString());

void AppSettingGridView_PageIndexChanged(object sender, GridViewPageEventArgs e)


{
AppSettingGridView.PageIndex = e.NewPageIndex;
BindAppSettings();
}
// Confirmation's related handlers
void Yes_Click(object sender, EventArgs e) {
string appPath = ApplicationPath;
string parentPath = GetParentPath(appPath);
Configuration parentConfig = OpenWebConfiguration(parentPath);
AppSettingsSection parentAppSettingsSection = (AppSettingsSection) parentCon
fig.GetSection("appSettings");
KeyValueConfigurationCollection parentSettings = parentAppSettingsSection.Se
ttings;
Configuration config = OpenWebConfiguration(ApplicationPath);
AppSettingsSection appSettingsSection = (AppSettingsSection) config.GetSecti
on("appSettings");
// check if this is an inherited setting that
// we are trying to remove.
KeyValueConfigurationElement parentValue = parentSettings[Name.Value];
if (parentValue != null) {
// add an identical entry that the parent already has, so local entry ge
ts deleted
if (appSettingsSection.Settings[Name.Value] == null)
appSettingsSection.Settings.Add(Name.Value,parentValue.Value);
else
appSettingsSection.Settings[Name.Value].Value = parentValue.Value;
}
else {
appSettingsSection.Settings.Remove(Name.Value);
}
SaveConfig(config);
// Before data binding again, we need to adjust the current page index if
// this is the last property to be deleted on this page
if (AppSettingGridView.PageIndex != 0) {
int totalCount = AppSettingGridView.Rows.Count - 1;
if ((totalCount % AppSettingGridView.PageSize) == 0) {
AppSettingGridView.PageIndex -= 1;
}
}
// Re-populate data and return to the content page
BindAppSettings();

Master.SetDisplayUI(false);

void No_Click(object sender, EventArgs e) {


BindAppSettings();
Master.SetDisplayUI(false);
}
</script>
<%-- Main Content --%>
<asp:content runat="server" contentplaceholderid="titleBar">
<asp:Literal runat="server" id="MainTitle" Text="<%$ Resources:Title %>"/>
</asp:content>
<asp:content runat="server" contentplaceholderid="content">
<table height="100%" width="100%" cellspacing="0" cellpadding="0">
<tr>
<td>
<table height="100%" width="100%" cellspacing="0" cellpadding="1
">
<tr class="bodyText" valign="top" height="1%">
<td>
<asp:Literal runat="server" Text="<%$ Resources:Inst
ructions %>"/>
</td>
</tr>
<tr height="20"><td/></tr>
<tr height="1%">
<td>
<table height="100%" width="100%" cellspacing="0" ce
llpadding="0"
rules="all" bordercolor="#CCDDEF" border="1"
style="border-color:#CCDDEF;border-style:None;border-collapse:collapse;">
<tr valign="top">
<td class="lbBorders">
<asp:GridView runat="server" id="AppSett
ingGridView" width="100%" cellspacing="0" cellpadding="5" border="0"
AutoGenerateColumns="false
"
OnRowDeleting="AppSettingG
ridView_Delete" OnRowEditing="AppSettingGridView_Edit"
AllowPaging="true" PageSiz
e="7" OnPageIndexChanging="AppSettingGridView_PageIndexChanged"
UseAccessibleHeader="true"
>
<rowstyle cssclass="gridRowStyle" />
<alternatingrowstyle cssclass="gridA
lternatingRowStyle" />
<pagersettings mode="Numeric" Positi
on="Bottom" />
<pagerstyle cssClass="gridPagerStyle
" />
<headerstyle cssclass="callOutStyle"
font-bold="true" />
<Columns>
<asp:TemplateField ItemStyle-Wid
th="15%" HeaderText="<%$ Resources:SourceHeader %>">
<ItemTemplate>

<%# GetLocationTypeText(
(LocationType) DataBinder.Eval(Container.DataItem, "LocationType"))%>
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField HeaderText="<%$
Resources:NameHeader %>" DataField="Name" ItemStyle-Width="20%"/>
<asp:BoundField HeaderText="<%$
Resources:ValueHeader %>" DataField="Value" ItemStyle-Width="20%"/>
th="15%">
erver" commandname="Edit" forecolor="blue"

<asp:TemplateField ItemStyle-Wid
<ItemTemplate>
<asp:LinkButton runat="s

Text='<%
# (((LocationType) DataBinder.Eval(Container.DataItem, "LocationType")) == Locat
ionType.Inherited) ? (string)GetLocalResourceObject("OverrideLinkText") : (strin
g)GetLocalResourceObject("EditLinkText") %>'
ToolTip=
'<%# (((LocationType) DataBinder.Eval(Container.DataItem, "LocationType")) == Lo
cationType.Inherited) ? GetToolTip("OverrideLinkToolTip",DataBinder.Eval(Contain
er.DataItem, "Name").ToString()) : GetToolTip("EditLinkToolTip",DataBinder.Eval(
Container.DataItem, "Name").ToString()) %>'/>
</ItemTemplate>
</asp:TemplateField>

erver" commandname="Delete" forecolor="blue"

<asp:TemplateField>
<ItemTemplate>
<asp:LinkButton runat="s

Text="<%
$ Resources:DeleteLinkText %>" toolTip='<%# GetToolTip("DeleteLinkToolTip",DataB
inder.Eval(Container.DataItem, "Name").ToString()) %>'
Enabled=
'<%# (((LocationType) DataBinder.Eval(Container.DataItem, "LocationType")) == Lo
cationType.Inherited) ? false : true %>'/>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:Gridview>
</td>
</tr>
<tr class="gridPagerStyle" style="padding-left:5
;">
<td>
<asp:Label runat="server" id="NumOfAppSe
ttingsLabel"/>
</td>
</tr>
</table>
</td>
</tr>
<tr class="bodyText" valign="top" >
<td>
<asp:HyperLink runat="server" NavigateUrl="CreateApp
Setting.aspx" Text="<%$ Resources:CreateAppSettingLinkText %>"/>
<td>
</tr>

</table>
</td>
<td width="100"/>
</tr>
</table>
</asp:content>
<asp:content runat="server" contentplaceholderid="buttons">
<asp:Button ValidationGroup="none" Text="<%$ Resources:GlobalResources,BackB
uttonLabel %>" id="BackButton" onclick="ReturnToPreviousPage" runat="server"/>
</asp:content>
<%-- Confirmation Dialog --%>
<asp:content runat="server" contentplaceholderid="dialogTitle">
<asp:Literal runat="server" Text="<%$ Resources:DeleteAppSettingTitle %>"/>
</asp:content>
<asp:content runat="server" contentplaceholderid="dialogContent">
<asp:HiddenField runat="server" id="Name"/>
<table cellspacing="4" cellpadding="4">
<tr class="bodyText">
<td>
<asp:Image runat="server" ImageUrl="~/Images/alert_lrg.gif"/>
</td>
<td>
<asp:Literal runat="server" id="DeleteName"/>
</td>
</tr>
</table>
</asp:content>
<asp:content runat="server" contentplaceholderid="dialogBottomLeftButton">
<asp:Button runat="server" OnClick="Yes_Click" Text="<%$ Resources:GlobalRes
ources,YesButtonLabel %>" width="100"/>
</asp:content>
<asp:content runat="server" contentplaceholderid="dialogBottomRightButton">
<asp:Button runat="server" OnClick="No_Click" Text="<%$ Resources:GlobalReso
urces,NoButtonLabel %>" width="75"/>
</asp:content>
aHca

<?xml version="1.0" encoding="utf-8"?>


<root>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>1.3</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Versio
n=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Versio
n=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="ConfirmationText" type="System.String">
<value>Are you sure you want to delete the application setting "&lt;b&gt
;{0}&lt;/b&gt;"?</value>
</data>
<data name="CreateAppSettingLinkText" type="System.String">
<value>Create new application setting</value>
</data>
<data name="DeleteAppSettingTitle" type="System.String">
<value>Delete Application Setting</value>
</data>
<data name="DeleteLinkText" type="System.String">
<value>Delete</value>
</data>
<data name="DeleteLinkToolTip" type="System.String">
<value>Delete application setting</value>
</data>
<data name="EditLinkText" type="System.String">
<value>Edit</value>
</data>
<data name="EditLinkToolTip" type="System.String">
<value>Edit application setting</value>
</data>
<data name="Inherited" type="System.String">
<value>Inherited</value>
</data>
<data name="Instructions" type="System.String">
<value>Use this page to edit, override, or delete application settings t
hat you do not want to hard-code into your pages. Settings can be local to your
application or can be inherited from a default site-wide or computer-wide config
uration. If a setting is inherited, you can override it to specify a new value f
or your application.</value>
</data>
<data name="Local" type="System.String">
<value>Local</value>
</data>
<data name="NameHeader" type="System.String">
<value>Name</value>
</data>
<data name="NumOfAppSettingsText" type="System.String">
<value>Existing application settings: {0}</value>
</data>
<data name="Overridden" type="System.String">
<value>Overridden</value>

</data>
<data name="OverrideLinkText" type="System.String">
<value>Override</value>
</data>
<data name="OverrideLinkToolTip" type="System.String">
<value>Override application setting</value>
</data>
<data name="SourceHeader" type="System.String">
<value>Source</value>
</data>
<data name="Title" type="System.String">
<value>Manage Application Settings</value>
</data>
<data name="TitleForSite" type="System.String">
<value>Manage Application Settings For Site: {0}</value>
</data>
<data name="ValueHeader" type="System.String">
<value>Value</value>
</data>
</root>
(!]3131<%@ page masterPageFile="~/WebAdminWithConfirmation.master" inherits="Syst
em.Web.Administration.ProvidersPage"%>
<%@ MasterType virtualPath="~/WebAdminWithConfirmation.master" %>
<%@ Register TagPrefix="uc" TagName="ProviderList" Src="ProviderList.ascx"%>
<%@ Import Namespace="System.Reflection" %>
<%@ Import Namespace="System.Web.Configuration" %>
<script runat="server" language="cs">
private int _parentProviderCount = 0;
private string CurrentProvider {
get {
return (string)Session["WebAdminManageConsolidatedProvidersCurrentProvid
er"];
}
set {
Session["WebAdminManageConsolidatedProvidersCurrentProvider"] = value;
}
}
private void BackToPreviousPage(object sender, EventArgs e) {
ReturnToPreviousPage(sender, e);
}
private void BindProviderList(ProviderListUserControl providerList) {
string appPath = ApplicationPath;
int trailingSlash = appPath.LastIndexOf("/");
string parentAppPath = appPath.Substring(0, trailingSlash);
if (parentAppPath != null && parentAppPath.Length == 0) {
parentAppPath = null;
}
Configuration config = OpenWebConfiguration(appPath);
MembershipSection membershipSection = (MembershipSection)config.GetSection("
system.web/membership");
RoleManagerSection roleManagerSection = (RoleManagerSection)config.GetSectio
n("system.web/roleManager");
Configuration parentConfig = OpenWebConfiguration(parentAppPath);

MembershipSection membershipParentSection = (MembershipSection)parentConfig.


GetSection("system.web/membership");
RoleManagerSection roleManagerParentSection = (RoleManagerSection)parentConf
ig.GetSection("system.web/roleManager");
ArrayList providersArray = new ArrayList();
ArrayList groupedProvidersFiltered = new ArrayList();
ProviderSettingsCollection membershipProviders = membershipSection.Providers

ProviderSettingsCollection roleManagerProviders = roleManagerSection.Provide

rs;

ProviderSettingsCollection membershipParentProviders = membershipParentSecti


on.Providers;
ProviderSettingsCollection roleManagerParentProviders = roleManagerParentSec
tion.Providers;
ConnectionStringsSection connectionStringSection = (ConnectionStringsSection
)config.GetSection("connectionStrings");
// loop thru the membershipProviders and see if our grouped entries are in t

here

// if so, then grab the connection string, it must be the same for the role
provider as well
foreach (System.Configuration.ProviderSettings mps in membershipProviders) {
string name = mps.Name;
string connectionString = mps.Parameters["connectionStringName"];
foreach(GroupedProperty oneGroupedProvider in GroupedProvidersList) {
if (name == oneGroupedProvider.MembershipProvider) {
n string

// check if the roleprovider exists with the identical connectio

if (HasProviderInProviderSettings(roleManagerProviders, oneGroup
edProvider.RoleProvider, connectionString)) {
groupedProvidersFiltered.Add(oneGroupedProvider);
string tempDescription = oneGroupedProvider.Description;
nk...

// use the type from the membership provider for the test li

providersArray.Add(new ProviderListUserControl.ProviderListI
tems(oneGroupedProvider.Name, tempDescription, connectionString, mps.Type, true)
);
}
}
}
}
foreach (System.Configuration.ProviderSettings mps in membershipProviders) {
string name = mps.Name;
string connectionString = mps.Parameters["connectionStringName"];
if (HasProviderInProviderSettings(roleManagerProviders, name, connection
String)) {
// Check if the same provider shows up in the parent config.
if (HasProviderInProviderSettings(membershipParentProviders, name, c
onnectionString) &&

HasProviderInProviderSettings(roleManagerParentProviders, name,
connectionString)) {
_parentProviderCount++;
}
providersArray.Add(new ProviderListUserControl.ProviderListItems(mps
.Name, mps.Parameters["description"], mps.Parameters["connectionStringName"], mp
s.Type, false));
}
}
providerList.DataSource = providersArray;
providerList.ParentProviderCount = _parentProviderCount;
string defaultMembershipProvider = membershipSection.DefaultProvider;
string defaultRoleProvider = roleManagerSection.DefaultProvider;
if (defaultMembershipProvider == defaultRoleProvider) {
for (int i = 0; i < providersArray.Count; i++) {
if (((ProviderListUserControl.ProviderListItems) providersArray[i]).
ProviderName == defaultMembershipProvider) {
providerList.SelectedIndex = i;
}
}
Session["DefaultProvider"] = defaultMembershipProvider;
} else {
// check if they are part of a group and select that group
string groupProviderName = String.Empty;
foreach (GroupedProperty oneGroupedProvider in groupedProvidersFiltered)
{
if (oneGroupedProvider.MembershipProvider == defaultMembershipProvid
er) {
if (oneGroupedProvider.RoleProvider == defaultRoleProvider) {
groupProviderName = oneGroupedProvider.Name;
for (int i = 0; i < providersArray.Count; i++) {
if (((ProviderListUserControl.ProviderListItems) provide
rsArray[i]).ProviderName == groupProviderName) {
providerList.SelectedIndex = i;
}
}
Session["DefaultProvider"] = groupProviderName;
}
}
}
}
}

providerList.DataBind();

private void BindProviderLists() {


BindProviderList(ProviderList);
}
private bool HasProviderInProviderSettings(ProviderSettingsCollection providerSe
ttings, string name, string connectionString) {
bool found = false;
foreach (System.Configuration.ProviderSettings ps in providerSettings) {
if (ps.Name == name && ps.Parameters["connectionStringName"] == connecti
onString) {

found = true;
break;

}
}
return found;

private void Page_Load() {


if (!IsPostBack) {
BindProviderLists();
}
}
private void SelectProvider(object sender, ProviderListUserControl.ProviderEvent
Args e) {
RadioButton radioButton = (RadioButton) sender;
Configuration config = OpenWebConfiguration(ApplicationPath);
MembershipSection membershipSection = (MembershipSection)config.GetSection("
system.web/membership");
RoleManagerSection roleManagerSection = (RoleManagerSection)config.GetSectio
n("system.web/roleManager");
if (e.IsGroup) {
// lookup the group and set the appropriate providers.
foreach(GroupedProperty oneGroupedProvider in GroupedProvidersList) {
if (e.ProviderName == oneGroupedProvider.Name) {
if (oneGroupedProvider.MembershipProvider != null) {
membershipSection.DefaultProvider = oneGroupedProvider.Membe
rshipProvider;
} else {
membershipSection.DefaultProvider = null;
}
if (oneGroupedProvider.RoleProvider != null) {
roleManagerSection.DefaultProvider = oneGroupedProvider.Role
Provider;
} else {
roleManagerSection.DefaultProvider = null;
}
}
}
}
else {
membershipSection.DefaultProvider = e.ProviderName;
roleManagerSection.DefaultProvider = e.ProviderName;
}

SaveConfig(config);
BindProviderLists();

private bool TestConnectionHelper(string connection) {


bool good = true;
try {
Type type = typeof(HttpApplication).Assembly.GetType("System.Web.DataAcc
ess.SqlConnectionHelper");
MethodInfo method = type.GetMethod("GetConnection", BindingFlags.Static
| BindingFlags.Public | BindingFlags.NonPublic);
if (method != null) {
method.Invoke(null, new object[]{connection, false /* revert imperso

nation */});
}
}
catch {
good = false;
}
return good;
}
private bool TestConnectionString(object sender, EventArgs e) {
LinkButton b = sender as LinkButton;
string connectionString = null;
try {
Configuration config = OpenWebConfiguration(ApplicationPath);
ConnectionStringsSection connectionStringSection = (ConnectionString
sSection)config.GetSection("connectionStrings");
// Review: Management API doesn't allow retrieve a connection string
setting via direct name look up
// Need to create an object with the name set for looking up instead
.
ConnectionStringSettings css = new ConnectionStringSettings();
css.Name = b.CommandArgument /* connection string name */;
css = connectionStringSection.ConnectionStrings[connectionStringSect
ion.ConnectionStrings.IndexOf(css)];
connectionString = css.ConnectionString;
}
catch {
return false;
}
if (b.CommandName.Contains("Sql")) {
return TestConnectionHelper(connectionString);
} else {
return true;
}
}
private void TestConnection(object sender, EventArgs e) {
bool good = TestConnectionString(sender, e);
LinkButton b = (LinkButton) sender;
bool isSql = b.CommandName.Contains("Sql");
mv1.ActiveViewIndex = 1;
testConnectionLiteral.Text = TestConnectionText(good, isSql);

OKButton.Visible = true;
Master.SetDisplayUI(true /* confirmation */);

private void OK_Click(object sender, EventArgs e) {


Master.SetDisplayUI(false);
}
</script>
<%-- Main Content --%>
<asp:content runat="server" contentplaceholderid="titleBar">
<asp:literal runat="server" text="<%$ Resources:ManageProviders %>"/>
</asp:content>
<asp:content runat="server" contentplaceholderid="content">

<table height="10" width="100%" cellspacing="0" cellpadding="0" valign="top"


align="left">
<tr class="bodyTextNoPadding" height="1%">
<td>
<asp:literal runat="server" text="<%$ Resources:Instructions %>"
/>
</td>
</tr>
<tr><td>&nbsp</td></tr>
<tr height="1%">
<td>
<uc:ProviderList runat="server" id="ProviderList"
HeaderText="<%$ Resources:Provider %>"
ServiceName="all"
OnSelectProvider="SelectProvider"
OnTestConnection="TestConnection"/>
</td>
</tr>
</table>
</asp:content>
<asp:content runat="server" contentplaceholderid="buttons">
<asp:button ValidationGroup="none" text="<%$ Resources:GlobalResources,BackB
uttonLabel %>" id="BackButton" onclick="BackToPreviousPage" runat="server"/>
</asp:content>
<%-- Confirmation Dialog --%>
<asp:content runat="server" contentplaceholderid="dialogTitle">
<asp:literal runat="server" text="<%$ Resources:ProviderManagement %>"/>
</asp:content>
<asp:content runat="server" contentplaceholderid="dialogContent">
<asp:multiview runat="server" id="mv1" enableViewState="false" activeViewInd
ex="0">
<asp:view runat="server">
<table cellspacing="4" cellpadding="4">
<tr class="bodyText">
<td valign="top">
<asp:Image runat="server" ImageUrl="~/Images/alert_lrg.gif"/>
</td>
<td>
<asp:literal runat="server" id="areYouSureLiteral"/>
</td>
</tr>
</table>
</asp:view>
<asp:view runat="server">
<asp:label runat="server" id="testConnectionLiteral"/>
</asp:view>
</asp:multiview>
</asp:content>
<asp:content runat="server" contentplaceholderid="dialogBottomLeftButton">
</asp:content>
<asp:content runat="server" contentplaceholderid="dialogBottomRightButton">
<asp:Button runat="server" id="OKButton" enableViewState="false" OnClick="OK
_Click" Text="<%$ Resources:OK %>" visible="false" width="75"/>
</asp:content>
7a  < ?xml version="1.0" encoding="utf-8"?>
<root>

<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>1.3</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.
0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.
0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>

<data name="Instructions" type="System.String">


<value>Use this page to select a provider for storing site management data.<
/value>
</data>
<data name="ManageProviders" type="System.String">
<value>Manage Providers</value>
</data>
<data name="No" type="System.String">
<value>No</value>
</data>
<data name="OK" type="System.String">
<value>OK</value>
</data>
<data name="Yes" type="System.String">
<value>Yes</value>
</data>
<data name="Provider" type="System.String">
<value>Provider</value>
</data>
<data name="AddNewProvider" type="System.String">
<value>Add a new provider</value>
</data>
<data name="ProviderManagement" type="System.String">
<value>Provider Management</value>
</data>
</root>
}
TT<%@ Page masterPageFile="~/WebAdminWithConfirmation.master" inherits="System.We
.Administration.SecurityPage"%>
<%@ MasterType virtualPath="~/WebAdminWithConfirmation.master" %>
<%@ Import Namespace="System.Drawing" %>
<%@ Import Namespace="System.Web.Administration" %>
<%@ Import Namespace="System.Web.Configuration" %>
<%@ Import Namespace="System.Web.Hosting" %>
<script
private
private
private
private
private

runat="server" language="cs">
const string SELECTED_RULE = "WebAdminSelectedRule";
const string RULES = "WebAdminRules";
const string NO_DELETE_RULES = "WebAdminNoDeleteRules";
const string PARENT_RULE_COUNT = "WebAdminParentRuleCount";
const string SELECTED_ITEM = "WebAdminSelectedItem";

private int ParentRuleCount {


get {
object obj = Session[PARENT_RULE_COUNT];
return obj != null ? (int) obj : -1;

}
set {
Session[PARENT_RULE_COUNT] = value;
}

private ArrayList NotDeleteableRules {


get {
object obj = (ArrayList)Session[NO_DELETE_RULES];
if (obj != null) {
return (ArrayList)Session[NO_DELETE_RULES];
} else {
return (new ArrayList());
}
}
set {
Session[NO_DELETE_RULES] = value;
}
}
private ArrayList Rules {
get {
object obj = (ArrayList)Session[RULES];
if (obj != null) {
return (ArrayList)Session[RULES];
} else {
return (new ArrayList());
}
}
set {
Session[RULES] = value;
}
}
private int SelectedRule {
get {
object obj = Session[SELECTED_RULE];
return obj != null ? (int) obj : -1;
}
set {
Session[SELECTED_RULE] = value;
}
}
private void GetNotDeletableRules(Configuration config) {
AuthorizationSection notDeleteableAuth = (AuthorizationSection) config.GetSe
ction("system.web/authorization");
ArrayList arrNoDelete = new ArrayList();
PropertyInformation propUsers = null;
PropertyInformation propRoles = null;
bool entryIsDeletable = false;
int i = 0;
foreach (AuthorizationRule entryKeep in notDeleteableAuth.Rules) {
entryIsDeletable = true;
propUsers = entryKeep.ElementInformation.Properties["users"];
propRoles = entryKeep.ElementInformation.Properties["roles"];
if (propUsers != null) {
if (propUsers.ValueOrigin == PropertyValueOrigin.Inherited) {
entryIsDeletable = false;

if (propRoles != null && entryIsDeletable) {


if (propRoles.ValueOrigin == PropertyValueOrigin.Inherited) {
entryIsDeletable = false;
}
}
if (!entryIsDeletable) {
// store the index in here as to which one is not deletable
arrNoDelete.Add(i);
}
}
}

i++;

Session[NO_DELETE_RULES] = arrNoDelete;

private string GetToolTip(string resourceName, string itemName) {


string tempString = (string) GetLocalResourceObject(resourceName);
return String.Format((string)GetGlobalResourceObject("GlobalResources","Tool
TipFormat"), tempString, itemName);
}
private void BindGrid() {
string appPath = CurrentPath;
string parentPath = GetParentPath(appPath);
Configuration config = OpenWebConfiguration(appPath, true);
AuthorizationSection auth = (AuthorizationSection) config.GetSection("system
.web/authorization");
Configuration parentConfig = OpenWebConfiguration(parentPath, true);
AuthorizationSection parentAuth = (AuthorizationSection) parentConfig.GetSec
tion("system.web/authorization");
ParentRuleCount = parentAuth.Rules.Count;
GetNotDeletableRules(config);
ArrayList arr = new ArrayList();
foreach (AuthorizationRule entry in auth.Rules) {
arr.Add(entry);
}
Session[RULES] = arr;
dataGrid.DataSource = arr;
dataGrid.DataBind();
if (dataGrid.SelectedRow != null) {
UpdateRowColors(dataGrid, dataGrid.Rows[dataGrid.SelectedRow.RowIndex]);
}

private void DeleteRule(object sender, EventArgs e) {


LinkButton button = (LinkButton) sender;
GridViewRow item = (GridViewRow) button.Parent.Parent;
AuthorizationRule rule = (AuthorizationRule)Rules[item.RowIndex];
StringBuilder builder = new StringBuilder();

builder.Append(rule.Action);
int i = 0;
foreach (string u in rule.Users) {
if (i > 0) {
builder.Append(", " + u);
}
else {
builder.Append(" " + u);
}
i++;
}
i = 0;
foreach (string r in rule.Roles) {
if (i > 0) {
builder.Append(", " + r);
}
else {
builder.Append(" " + r);
}
i++;
}
RuleDescription.Text = builder.ToString();
Master.SetDisplayUI(true);
Session["ItemIndex"] = item.RowIndex;

private void Yes_Click(object sender, EventArgs e) {


Rules.RemoveAt((int)Session["ItemIndex"]);
UpdateRules();
dataGrid.SelectedIndex = -1;
BindGrid();
Master.SetDisplayUI(false);
}
private void No_Click(object sender, EventArgs e) {
Master.SetDisplayUI(false);
}
private string GetRoles(object val, bool appendImg) {
StringBuilder builder = new StringBuilder();
AuthorizationRule rule = (AuthorizationRule)val;
if (rule.Roles.Count == 0) {
return String.Empty;
}
for(int i = 0; i < rule.Roles.Count; i++) {
if (i > 0) {
builder.Append(", ");
}
string role = rule.Roles[i];
if (role == "*") {
role = (string)GetLocalResourceObject("BracketAll");
}
builder.Append(role);
}
if (appendImg) {
StringBuilder builder2 = new StringBuilder();
builder2.Append("<img src=\"../../Images/image2.gif\" alt=\"" + (string)
GetGlobalResourceObject("GlobalResources", "RoleGif") + " [" + builder.ToString(
) + "]" + "\"/> ");

builder2.Append(builder.ToString());
return builder2.ToString();
} else {
return builder.ToString();
}

private string GetUsers(object val, bool appendImg) {


StringBuilder builder = new StringBuilder();
AuthorizationRule rule = (AuthorizationRule)val;
if (rule.Users.Count == 0) {
return String.Empty;
}
for(int i = 0; i < rule.Users.Count; i++) {
if (i > 0) {
builder.Append(", ");
}
string user = rule.Users[i];
if (user == "?") {
user = (string)GetLocalResourceObject("BracketAnonymous");
}
else if (user == "*") {
user = (string)GetLocalResourceObject("BracketAll");
}
builder.Append(user);
}
if (appendImg) {
StringBuilder builder2 = new StringBuilder();
builder2.Append("<img src=\"../../Images/image1.gif\" alt=\"" + (string)
GetGlobalResourceObject("GlobalResources", "UserGif") + " [" + builder.ToString(
) + "]" + "\"/> ");
builder2.Append(builder.ToString());
return builder2.ToString();
} else {
return builder.ToString();
}
}
private string GetAction(object val) {
AuthorizationRule rule = (AuthorizationRule)val;
string ruleAction = "";
if (rule.Action == AuthorizationRuleAction.Allow) {
ruleAction = (string)GetLocalResourceObject("Allow");
} else if (rule.Action == AuthorizationRuleAction.Deny) {
ruleAction = (string)GetLocalResourceObject("Deny");
}
return ruleAction;
}
private string GetUsersAndRoles(object val, bool appendImg) {
return GetUsers(val, appendImg) + GetRoles(val, appendImg);
}
private bool IsEntryDeleteable(int rowIndex) {
bool entryIsDeleteable = false;
if (rowIndex < Rules.Count - ParentRuleCount) {
entryIsDeleteable = true;

}
if (!entryIsDeleteable) {
return entryIsDeleteable;
}
foreach (int index1 in NotDeleteableRules) {
if (index1 == rowIndex) {
entryIsDeleteable = false;
}
}
return entryIsDeleteable;

private bool IsIE() {


HttpBrowserCapabilities caps = Page.Request.Browser;
bool isIE = (caps.Type.IndexOf("IE") > -1);
return isIE;
}
private void ItemDataBound(object sender, System.Web.UI.WebControls.GridViewRowE
ventArgs e)
{
if (e.Row.RowIndex >= Rules.Count - ParentRuleCount) {
return;
}
DataControlRowType itemType = e.Row.RowType;
if ((itemType == DataControlRowType.Pager) ||
(itemType == DataControlRowType.Header) ||
(itemType == DataControlRowType.Footer))
{
return;
}
if (IsIE()) {
if (IsEntryDeleteable(e.Row.RowIndex)) {
// if netscape, then selecting the the row
// will not allow the DeleteRule to fire
foreach(Control c in e.Row.Cells[0].Controls) {
LinkButton button = c as LinkButton;
if (button == null) {
continue;
}
e.Row.Attributes["onclick"] = Page.GetPostBackClientHyperlink(but
ton, "");
}
}
}
}
private void MoveRuleDown(object sender, EventArgs e) {
ArrayList rules = Rules;
int selectedRule = SelectedRule;
// // Response.Write(selectedRule);
if(selectedRule >= rules.Count - ParentRuleCount) {
return;
}
AuthorizationRule rule = (AuthorizationRule)rules[selectedRule];
rules.RemoveAt(selectedRule);
rules.Insert(selectedRule + 1, rule);

UpdateRules();
BindGrid();
dataGrid.SelectedIndex = selectedRule + 1;
UpdateRowColors(dataGrid, dataGrid.Rows[selectedRule + 1]);
SelectedRule = selectedRule + 1;
UpdateUpDownButtons();

private void MoveRuleUp(object sender, EventArgs e) {


ArrayList rules = Rules;
int selectedRule = SelectedRule;
if(selectedRule == 0) {
return;
}

AuthorizationRule rule = (AuthorizationRule)rules[selectedRule];


rules.RemoveAt(selectedRule);
rules.Insert(selectedRule - 1, rule);
UpdateRules();
BindGrid();
dataGrid.SelectedIndex = selectedRule - 1;
UpdateRowColors(dataGrid, dataGrid.Rows[selectedRule - 1]);
SelectedRule = selectedRule - 1;
UpdateUpDownButtons();

private string GetDirectory(string path) {


if (path == null) {
return null;
}
if (path.LastIndexOf('/') == -1) {
return "/";
}
}

return path.Substring(path.LastIndexOf('/') + 1);

private void Page_Init() {


if(!IsPostBack) {
// Note: treenodes persist when added in Init, before loadViewState
TreeNode n = new TreeNode(GetDirectory(ApplicationPath), ApplicationPath
);
tv.Nodes.Add(n);
n.Selected = true;
if (String.IsNullOrEmpty(CurrentPath)) {
CurrentPath = ApplicationPath;
}

PopulateChildren(n, CurrentPath);
}
dataGrid.HeaderStyle.HorizontalAlign = DirectionalityHorizontalAlign;

private void Page_Load() {


if (!IsPostBack) {
BindGrid();
}

HighlightSelectedNode(tv.Nodes[0], CurrentPath);

private void PopulateChildren(TreeNode parent, string selectNodeValue) {


if (parent.ChildNodes.Count == 0) {
VirtualDirectory vdir = GetVirtualDirectory(parent.Value);
foreach (VirtualDirectory childVdir in vdir.Directories) {
string childValue = parent.Value + "/" + childVdir.Name;
TreeNode newNode = new TreeNode(childVdir.Name, childValue);
if (selectNodeValue != null && childValue == selectNodeValue) {
//newNode.Selected = true;
newNode.SelectAction = TreeNodeSelectAction.Select;
}
parent.ChildNodes.Add(newNode);
}
}
}
private bool HighlightSelectedNode(TreeNode node, string path) {
bool foundIt = false;
foreach (TreeNode childNode in node.ChildNodes) {
if (childNode.Value == path) {
childNode.Selected = true;
foundIt = true;
break;
}
}
return foundIt;
}
protected void RedirectToCreatePermission(object sender, EventArgs e) {
Response.Redirect("createPermission.aspx");
}
public void SelectClick(object sender, EventArgs e) {
LinkButton button = (LinkButton)sender;
GridViewRow row = (GridViewRow)button.Parent.Parent;
SelectedRule = row.RowIndex;
dataGrid.SelectedIndex = SelectedRule;

UpdateRowColors(dataGrid, row);
UpdateUpDownButtons();

private void SetItemColorRecursive(Control c, Color col) {


foreach(Control child in c.Controls) {
LinkButton button = child as LinkButton;
if (button != null) {
button.ForeColor = col;
}
Label label = child as Label;
if (label != null) {
label.ForeColor = col;
}
SetItemColorRecursive(child, col);
}
}

protected void TreeNodeExpanded(Object sender, TreeNodeEventArgs e) {


foreach(TreeNode child in e.Node.ChildNodes) {
PopulateChildren(child, CurrentPath);
}
}
protected void TreeNodeSelected(object sender, EventArgs e) {
CurrentPath = ((TreeView)sender).SelectedNode.Value;
dataGrid.SelectedIndex = -1;
BindGrid();
}
public void UpdateRowColors(Control dataGrid, Control item) {
if (item == null) {
// unexpected condition -exit gracefully
return;
}
string prevItemID = (string)Session[SELECTED_ITEM];
if (prevItemID != null) {
GridViewRow prevItem = (GridViewRow) ((GridView)dataGrid).FindControl(pr
evItemID);
if (prevItem != null) {
// REVIEW
SetItemColorRecursive(prevItem, Color.Black);
// prevButton.ForeColor = Color.Black;
}
}

SetItemColorRecursive(item, Color.White);
// Review: best practice for a naming container inside a user control.
string id = item.UniqueID;
int i = id.IndexOf(((GridView)dataGrid).ID);
id = id.Substring(i);
i = id.IndexOf("$");
id = id.Substring(i + 1);
Session[SELECTED_ITEM] = id ;

private void UpdateRules() {


Configuration config = OpenWebConfiguration(CurrentPath, true);
AuthorizationSection auth = (AuthorizationSection) config.GetSection("system
.web/authorization");
auth.Rules.Clear();
ArrayList rules = Rules;
foreach (AuthorizationRule rule in rules) {
// // Response.Write("rule <br/>");
auth.Rules.Add(rule);
}

// auth.IsModified = true;
SaveConfig(config);

private void UpdateUpDownButtons() {


int index = SelectedRule;
moveDown.Enabled = (index < Rules.Count - ParentRuleCount - 1);
moveUp.Enabled = (index > 0);
}

</script>
<asp:content runat="server" contentplaceholderid="buttons">
<asp:button ValidationGroup="none" runat="server" id="button1" text="<%$ Resourc
es:Done %>" onclick="ReturnToPreviousPage"/>
</asp:content>
<asp:content runat="server" contentplaceholderid="titleBar">
<asp:literal runat="server" text="<%$ Resources:ManageAccessRules %>" />
</asp:content>
<asp:content runat="server" contentplaceholderid="content" >
<asp:literal runat="server" text="<%$ Resources:Instructions %>" />
<table width="100%">
<tr>
<td width="80%">
<table cellspacing="0" width="100%" cellpadding="4" rules="none" bor
dercolor="#CCDDEF" border="1" style="border-color:#CCDDEF;border-style:None;bord
er-collapse:collapse;">
<tr class="callOutStyle">
<td colspan="3" id="ManageAccessRulesHeader"><h1 class="call
OutHeaderStyle"><asp:literal runat="server" text="<%$ Resources:ManageAccessRule
s %>"/></h1></td>
</tr>
<tr align="=<% DirectionalityHorizontalAlign.ToString(); %>">
<td valign="top" width="200px" align="=<% DirectionalityHori
zontalAlign.ToString(); %>">
<asp:panel runat="server" id="panel1" scroll
bars="auto" height="150px" width="200px" cssclass="bodyTextNoPadding">
<asp:treeView runat="server" id="tv" onS
electedNodeChanged="TreeNodeSelected" onTreeNodeExpanded="TreeNodeExpanded" node
Style-cssClass="bodyTextLowPadding" >
<RootNodeStyle ImageUrl="../../image
s/folder.gif" />
<ParentNodeStyle ImageUrl="../../ima
ges/folder.gif" />
<LeafNodeStyle ImageUrl="../../image
s/folder.gif" />
<nodestyle cssClass="bodyTextLowPadd
ing"/>
<selectedNodeStyle cssClass="bodyTex
tLowPaddingSelected"/>
</asp:treeView>
</asp:panel>
</td>
<td valign="top">
<asp:gridview runat="server" id="dataGrid" bordercolor="
#CCDDEF" allowsorting="true" gridlines="Horizontal"
borderstyle="None" cellpadding="4" autogeneratecolum
ns="False" onrowdatabound="ItemDataBound" width="100%" UseAccessibleHeader="true
">

le" />

<rowstyle cssclass="gridRowStyle" />


<alternatingrowstyle cssclass="gridAlternatingRowSty
<headerstyle cssclass="callOutStyle" font-bold="true

" />
>

ect%>" visible="false">

<selectedrowstyle cssclass="gridSelectedRowStyle"/>
<pagerstyle forecolor="#000000" backcolor="#EEEEEE"/
<pagersettings mode="Numeric"/>
<columns>
<asp:templatefield headertext="<%$ Resources:Sel

<itemtemplate>
<asp:linkbutton runat="server" commandna
me="Select" forecolor='black' onclick="SelectClick" text=""/>
</itemtemplate>
</asp:templatefield>
mission %>">

<asp:templatefield headertext="<%$ Resources:Per

<itemtemplate>
<asp:label runat="server" id="select" en
abled="<%# IsEntryDeleteable(((GridViewRow) Container).RowIndex) %>" text="<%#Ge
tAction((AuthorizationRule)Container.DataItem)%>"/>
</itemtemplate>
</asp:templatefield>
rsAndRoles %>">

<asp:templatefield headertext="<%$ Resources:Use

<itemtemplate>
<asp:linkbutton runat="server" id="selec
tme" enabled="<%# IsEntryDeleteable(((GridViewRow) Container).RowIndex) %>" fore
color="black" onclick="SelectClick" text="<%#GetUsersAndRoles((AuthorizationRule
)Container.DataItem, true)%>"/>
</itemtemplate>
</asp:templatefield>
ete %>">

<asp:templatefield headertext="<%$ Resources:Del

<itemtemplate>
<asp:linkbutton runat="server" id="delet
e" enabled="<%# IsEntryDeleteable(((GridViewRow) Container).RowIndex) %>" foreco
lor='black' onClick="DeleteRule" text="<%$ Resources:Delete %>" toolTip='<%# Get
ToolTip("Delete",GetUsersAndRoles((AuthorizationRule)Container.DataItem, false))
%>'/>
</itemtemplate>
</asp:templatefield>
</columns>
</asp:gridview>
<asp:linkButton runat="server" id="linkButton1" cssClass
="bodyTextNoPadding" text="<%$ Resources:AddNewAccessRule %>" onClick="RedirectT
oCreatePermission"/>
</td>
<td valign="top">
<asp:button runat="server" id="moveUp" text="<%$ Resourc
es:MoveUp %>" enabled="false" onClick="MoveRuleUp" width="110px"/>
<br/>
<asp:button runat="server" id="moveDown" text="<%$ Resou
rces:MoveDown %>" enabled="false" onClick="MoveRuleDown" width="110px"/>
</td>
</tr>
</table>

</td>
</tr>
</table>
</asp:content>
<%-- Confirmation Dialog --%>
<asp:content runat="server" contentplaceholderid="dialogTitle">
<asp:literal runat="server" text="<%$ Resources:RuleManagement %>" />
</asp:content>
<asp:content runat="server" contentplaceholderid="dialogContent">
<img src="../../Images/alert_lrg.gif"/>
<asp:literal runat="server" text="<%$ Resources:AreYouSure %>" /> "<asp:Labe
l runat=server id="RuleDescription" />"?
</asp:content>
<asp:content runat="server" contentplaceholderid="dialogBottomLeftButton">
<asp:Button runat="server" OnClick="Yes_Click" Text="<%$ Resources:Yes %>" w
idth="100"/>
</asp:content>
<asp:content runat="server" contentplaceholderid="dialogBottomRightButton">
<asp:Button runat="server" OnClick="No_Click" Text="<%$ Resources:No %>" wid
th="100"/>
</asp:content>
eIjHi
i
<?xml version="1.0" encoding="utf-8"?>
<root>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>1.3</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.
0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.
0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="AddNewAccessRule" type="System.String">
<value>Add new access rule</value>
</data>
<data name="AreYouSure" type="System.String">
<value>Are you sure you want to delete the rule:</value>
</data>
<data name="Delete" type="System.String">
<value>Delete</value>
</data>
<data name="Done" type="System.String">
<value>Done</value>
</data>
<data name="Instructions" type="System.String">
<value>Use this page to manage access rules for your Web site. Rules are app

lied in order. The first rule that matches applies, and the permission in each r
ule overrides the permissions in all following rules. Use the &lt;b&gt;Move Up&l
t;/b&gt; and &lt;b&gt;Move Down&lt;/b&gt; buttons to change the order of the sel
ected rule.&lt;br&gt;&lt;br&gt;Rules that appear dimmed are inherited from the p
arent and cannot be changed at this level.</value>
</data>
<data name="ManageAccessRules" type="System.String">
<value>Manage Access Rules</value>
</data>
<data name="MoveDown" type="System.String">
<value>Move Down</value>
</data>
<data name="MoveUp" type="System.String">
<value>Move Up</value>
</data>
<data name="No" type="System.String">
<value>No</value>
</data>
<data name="Permission" type="System.String">
<value>Permission</value>
</data>
<data name="RuleManagement" type="System.String">
<value> Rule Management</value>
</data>
<data name="Select" type="System.String">
<value>Select</value>
</data>
<data name="UsersAndRoles" type="System.String">
<value>Users and Roles</value>
</data>
<data name="Yes" type="System.String">
<value>Yes</value>
</data>
<data name="BracketAll" type="System.String">
<value>[all]</value>
</data>
<data name="BracketAnonymous" type="System.String">
<value>[anonymous]</value>
</data>
<data name="Allow" type="System.String">
<value>Allow</value>
</data>
<data name="Deny" type="System.String">
<value>Deny</value>
</data>
</root> {V%%<%@ page masterPageFile="~/WebAdminWithConfirmation.master" inherits="Sys
tem.Web.Administration.ProvidersPage"%>
<%@ Register TagPrefix="uc" TagName="ProviderList" Src="ProviderList.ascx"%>
<%@ MasterType virtualPath="~/WebAdminWithConfirmation.master" %>
<%@ Import Namespace="System.Reflection" %>
<%@ Import Namespace="System.Web.Configuration" %>
<script runat="server" language="cs">
private void BackToPreviousPage(object sender, EventArgs e) {
ReturnToPreviousPage(sender, e);
}
private void BindProviderList(ProviderSettingsCollection providers,
string defaultProvider,
ProviderListUserControl providerList) {

ArrayList providersArray = new ArrayList();


foreach (System.Configuration.ProviderSettings mps in providers) {
string name = mps.Name;
string connectionString = mps.Parameters["connectionStringName"];
providersArray.Add(new ProviderListUserControl.ProviderListItems(mps.Nam
e, mps.Parameters["description"], mps.Parameters["connectionStringName"], mps.Ty
pe, false));
}
providerList.DataSource = providersArray;

int i = 0;
foreach(System.Configuration.ProviderSettings ps in providers){
if (ps.Name == defaultProvider) {
providerList.SelectedIndex = i;
}
i++;
}
providerList.DataBind();

private void BindProviderLists() {


Configuration config = OpenWebConfiguration(ApplicationPath);
MembershipSection membershipSection = (MembershipSection)config.GetSection("
system.web/membership");
MembershipProviderList.ParentProviderCount = ParentProviderCount("membership
");
BindProviderList(membershipSection.Providers, membershipSection.DefaultProvi
der, MembershipProviderList);
RoleManagerSection roleManagerSection = (RoleManagerSection)config.GetSectio
n("system.web/roleManager");
RoleProviderList.ParentProviderCount = ParentProviderCount("roleManager");
BindProviderList(roleManagerSection.Providers, roleManagerSection.DefaultPro
vider, RoleProviderList);
}
private void Page_Load() {
if (!IsPostBack) {
BindProviderLists();
}
}
private void SelectProvider(object sender, ProviderListUserControl.ProviderEvent
Args e) {
RadioButton radioButton = (RadioButton) sender;
Configuration config = OpenWebConfiguration(ApplicationPath);
switch (e.ServiceName) {
case "membership":
MembershipSection membershipSection = (MembershipSection)config.GetS
ection("system.web/membership");
membershipSection.DefaultProvider = e.ProviderName;
break;
case "roleManager":
RoleManagerSection roleManagerSection = (RoleManagerSection)config.G
etSection("system.web/roleManager");

roleManagerSection.DefaultProvider = e.ProviderName;
break;
default:
throw new HttpException((string)String.Format((string)GetLocalResour
ceObject("UnrecognizedService"), e.ServiceName));
}

SaveConfig(config);
BindProviderLists();

private int ParentProviderCount(string serviceName) {


string parentPath = GetParentPath(ApplicationPath);
Configuration parentConfig = OpenWebConfiguration(parentPath);
switch (serviceName) {
case "membership":
MembershipSection membershipSection = (MembershipSection)parentConfi
g.GetSection("system.web/membership");
return membershipSection.Providers.Count;
case "roleManager":
RoleManagerSection roleManagerSection = (RoleManagerSection)parentCo
nfig.GetSection("system.web/roleManager");
return roleManagerSection.Providers.Count;
default:
return -1;
}
}
private bool TestConnectionHelper(string connection) {
bool good = true;
try {
Type type = typeof(HttpApplication).Assembly.GetType("System.Web.DataAcc
ess.SqlConnectionHelper");
MethodInfo method = type.GetMethod("GetConnection", BindingFlags.Static
| BindingFlags.Public | BindingFlags.NonPublic);
if (method != null) {
method.Invoke(null, new object[]{connection, false /* revert imperso
nation */});
}
}
catch {
good = false;
}
return good;
}
private bool TestConnectionString(object sender, EventArgs e) {
LinkButton b = sender as LinkButton;
string connectionString = null;
try {
Configuration config = OpenWebConfiguration(ApplicationPath);
ConnectionStringsSection connectionStringSection = (ConnectionStringsSec
tion)config.GetSection("connectionStrings");
// Review: Management API doesn't allow retrieve a connection string set
ting via direct name look up
// Need to create an object with the name set for looking up instead.
ConnectionStringSettings css = new ConnectionStringSettings();
css.Name = b.CommandArgument /* connection string name */;
css = connectionStringSection.ConnectionStrings[connectionStringSection.
ConnectionStrings.IndexOf(css)];

connectionString = css.ConnectionString;
}
catch {
return false;
}

if (b.CommandName.Contains("Sql")) {
return TestConnectionHelper(connectionString);
} else {
return true;
}

private void TestConnection(object sender, EventArgs e) {


bool good = TestConnectionString(sender, e);
LinkButton b = (LinkButton) sender;
bool isSql = b.CommandName.Contains("Sql");
bool isWindowsToken = b.CommandName.Contains("WindowsToken");
if (isWindowsToken) {
good = true;
}
mv1.ActiveViewIndex = 1;
testConnectionLiteral.Text = TestConnectionText(good, isSql);

OKButton.Visible = true;
Master.SetDisplayUI(true /* confirmation */);

private void OK_Click(object sender, EventArgs e) {


Master.SetDisplayUI(false);
}
</script>
<%-- Main Content --%>
<asp:content runat="server" contentplaceholderid="titleBar">
<asp:literal runat="server" text="<%$ Resources:ManageProviders %>"/>
</asp:content>
<asp:content runat="server" contentplaceholderid="content">
<table height="100%" width="100%" cellspacing="0" cellpadding="0" valign="to
p" align="left">
<tr class="bodyTextNoPadding" height="1%">
<td>
<asp:literal runat="server" text="<%$ Resources:UseThisPage %>"/
>
</td>
</tr>
<tr height="1%">
<td/>
&nbsp;
</td>
</tr>
<tr height="1%">
<td>
<uc:ProviderList runat="server" id="MembershipProviderList"
HeaderText="<%$ Resources:MembershipProvider %>
" ServiceName="membership"
OnSelectProvider="SelectProvider"

OnTestConnection="TestConnection" />
</td>
</tr>
<tr height="1%">
<td/>
&nbsp;
</td>
</tr>
<tr height="1%">
<td>
<uc:ProviderList runat="server" id="RoleProviderList"
HeaderText="<%$ Resources:RoleProvider %>" Serv
iceName="roleManager"
OnSelectProvider="SelectProvider"
OnTestConnection="TestConnection"/>
</td>
</tr>
<tr height="1%">
<td/>
&nbsp;
</td>
</tr>
<tr height="1%">
<td/>
&nbsp;
</td>
</tr>
<tr height="1%">
<td>
</td>
</tr>
<tr height="1%">
<td/>
&nbsp;
</td>
</tr>
<tr height="1%">
<td>
</td>
</tr>
<tr height="93%">
<td/>
&nbsp;
</td>
</tr>
</table>
</asp:content>
<asp:content runat="server" contentplaceholderid="buttons">
<asp:button ValidationGroup="none" text="<%$ Resources:Back %>" id="BackButt
on" onclick="BackToPreviousPage" runat="server"/>
</asp:content>
<%-- Confirmation Dialog --%>
<asp:content runat="server" contentplaceholderid="dialogTitle">
<asp:literal runat="server" text="<%$ Resources:ProviderManagement %>"/>
</asp:content>
<asp:content runat="server" contentplaceholderid="dialogContent">
<asp:multiview runat="server" id="mv1" enableViewState="false" activeViewInd

ex="0">

if"/>

<asp:view runat="server">
<table cellspacing="4" cellpadding="4">
<tr class="bodyText">
<td valign="top">
<asp:Image runat="server" ImageUrl="~/Images/alert_lrg.g

</td>
<td>
<asp:literal runat="server" id="areYouSureLiteral" />
</td>
</tr>
</table>
</asp:view>
<asp:view runat="server">
<asp:label runat="server" id="testConnectionLiteral"/>
</asp:view>
</asp:multiview>
</asp:content>
<asp:content runat="server" contentplaceholderid="dialogBottomLeftButton">
</asp:content>
<asp:content runat="server" contentplaceholderid="dialogBottomRightButton">
<asp:Button runat="server" id="OKButton" enableViewState="false" OnClick="OK
_Click" Text="<%$ Resources:OK%>" visible="false" width="75"/>
</asp:content>
D,

<?xml version="1.0" encoding="utf-8"?>
<root>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>1.3</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.
0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.
0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="Back" type="System.String">
<value>Back</value>
</data>
<data name="ManageProviders" type="System.String">
<value>Manage Providers</value>
</data>
<data name="No" type="System.String">
<value>No</value>
</data>
<data name="ProviderManagement" type="System.String">
<value>Provider Management</value>
</data>
<data name="OK" type="System.String">
<value>OK</value>
</data>
<data name="UseThisPage" type="System.String">
<value>Use this page to select a provider for each feature.</value>

</data>
<data name="Yes" type="System.String">
<value>Yes</value>
</data>
<data name="MembershipProvider" type="System.String">
<value>Membership Provider</value>
</data>
<data name="AddMembershipProvider" type="System.String">
<value>Add new membership provider</value>
</data>
<data name="RoleProvider" type="System.String">
<value>Role Provider</value>
</data>
<data name="AddRoleProvider" type="System.String">
<value>Add new role provider</value>
</data>
<data name="SiteCounterProvider" type="System.String">
<value>Site Counter Provider</value>
</data>
<data name="AddSiteCounterProvider" type="System.String">
<value>Add new site counter provider</value>
</data>
<data name="PageCounterProvider" type="System.String">
<value>Page Counter Provider</value>
</data>
<data name="AddPageCounterProvider" type="System.String">
<value>Add new page counter provider</value>
</data>
<data name="UnrecognizedService" type="System.String">
<value>Unrecognized service name: {0}</value>
</data>
</root>
}2w9'9'<%@ Page masterPageFile="~/WebAdminButtonRow.master" inherits="System.Web.
Administration.SecurityPage"%>
<%@ Import Namespace="System.Drawing" %>
<%@ Import Namespace="System.Web.Administration" %>
<%@ Import Namespace="System.Web.Configuration" %>
<script runat="server" language="cs">
private const string DATA_SOURCE = "WebAdminDataSource";
public void SetDataSource(object v) {
Session[DATA_SOURCE] = v;
}
public void BindGrid(bool displayUsersNotFound) {
dataGrid.DataSource = Session[DATA_SOURCE];
dataGrid.DataBind();
if (dataGrid.Rows.Count == 0) {
if (displayUsersNotFound) {
notFoundUsers.Visible = true;
}
}
}
private void DataGrid_RowDataBound(object sender, GridViewRowEventArgs e) {
AddTitleAttributeOnRowDataBound(e, "UserInRoleCheckBox");
}

public void IndexChanged(object sender, GridViewPageEventArgs e) {


dataGrid.PageIndex = e.NewPageIndex;
BindGrid(false);
}
public void EnabledChanged(object sender, EventArgs e) {
CheckBox checkBox = (CheckBox) sender;
GridViewRow gvr = (GridViewRow)checkBox.Parent.Parent;
Label label = (Label) gvr.FindControl("userNameLink");
string userName = label.Text;
string currentRoleName = CurrentRole;
if (checkBox.Checked) {
if (!(bool)CallWebAdminHelperMethod(false, "IsUserInRole", new object[]
{userName, currentRoleName}, new Type[] {typeof(string),typeof(string)})) {
CallWebAdminHelperMethod(false, "AddUsersToRoles",new object[] {new
string[]{userName}, new string[]{currentRoleName}}, new Type[] {typeof(string[])
,typeof(string[])});
}
}
else {
if ((bool)CallWebAdminHelperMethod(false, "IsUserInRole", new object[] {
userName, currentRoleName}, new Type[] {typeof(string),typeof(string)})) {
CallWebAdminHelperMethod(false, "RemoveUsersFromRoles",new object[]
{new string[]{userName}, new string[]{currentRoleName}}, new Type[] {typeof(stri
ng[]),typeof(string[])});
}
}
}
public void Page_Load() {
if(!IsPostBack) {
PopulateRepeaterDataSource();
repeater.DataBind();
string currentRoleName = CurrentRole;
roleName.Text = currentRoleName;
string[] muc = (string[]) CallWebAdminHelperMethod(false, "GetUsersInRol
e", new object[] {currentRoleName}, new Type[] {typeof(string)});
MembershipUserCollection Coll = new MembershipUserCollection();
// no Role method for returning a MembershipUserCollection.
MembershipUser OneUser = null;
foreach (string username in muc) {
try {
OneUser = (MembershipUser) CallWebAdminHelperMethod(true, "GetUs
er", new object[] {username, false /* isOnline */}, new Type[] {typeof(string),t
ypeof(bool)});
}
catch {
// eat it
}
if (OneUser != null) {
Coll.Add(OneUser);
}
}
SetDataSource(Coll);
BindGrid(false);
dataGrid.HeaderStyle.HorizontalAlign = DirectionalityHorizontalAlign;
}

}
private void PopulateRepeaterDataSource() {
PopulateRepeaterDataSource (repeater);
}
protected override void OnPreRender(EventArgs e) {
base.OnPreRender(e);
if (dataGrid.Rows.Count == 0) {
containerTable.Visible = false;
}
else {
containerTable.Visible = true;
}
}
public void RedirectToAddUser(object sender, EventArgs e) {
// do not prepend ~/ to this path since it is not at the root
Response.Redirect("adduser.aspx");
}
public void RetrieveLetter(object sender, RepeaterCommandEventArgs e) {
RetrieveLetter(sender, e, dataGrid, (string)GetLocalResourceObject("All"));
SetDataSource(dataGrid.DataSource);
BindGrid(true);
}
public void SearchForUsers(object sender, EventArgs e) {
SearchForUsers(sender, e, repeater, dataGrid, dropDown1, textBox1);
SetDataSource(dataGrid.DataSource);
BindGrid(true);
//multiView1.ActiveViewIndex = 0;
}
</script>
<asp:content runat="server" contentplaceholderid="titleBar">
<asp:literal runat="server" text="<%$ Resources:ManageRoleMembership %>" />
</asp:content>
<asp:content runat="server" contentplaceholderid="buttons">
<asp:button ValidationGroup="none" runat="server" id="button1" text="<%$ Resourc
es:Back %>" onclick="ReturnToPreviousPage"/>
</asp:content>
<asp:content runat="server" contentplaceholderid="content">
<%-- Cause the textbox to submit the page on enter, raising server side onclick-%>
<input type="text" style="visibility:hidden"/>
<table width="100%">
<tbody>
<tr>
<td>
<span class="bodyTextNoPadding">
<asp:literal runat="server" text="<%$ Resources:Instructions %>" />
<br/>

<br/>
<asp:literal runat="server" text="<%$ Resources:Role %>" />
<asp:label id="roleName" runat="server" font-bold="true">
</asp:label>
</span>
</td>
</tr>
<tr>
<td>
<table>
<tbody>
<tr valign="top">
<td>
<table cellspacing="0" cellpadding="5" class="lrbBorders
" width="750"/>
<tbody>

<tr>

chForUsers %>" />

<td class="callOutStyle">
<h1 class="callOutHeaderStyle">
<asp:literal runat="server" text="<%$ Resources:Sear

</h1>
</td>
</tr>
<tr >
<td class="bodyTextNoPadding">
<asp:Label id="SearchByLabel" runat="server" AssociatedC
ontrolID="dropDown1" text="<%$ Resources:SearchBy %>" />
<asp:dropdownlist id="dropDown1" runat="server">
<asp:listitem runat="server" id="listItem1" text="<%$ Re
sources:Username %>"/>
<asp:listitem runat="server" id="listItem2" text="<%$ Re
sources:Email %>"/>
</asp:dropdownlist>
&nbsp;<asp:Label id="SearchForLabel" runat="server" Asso
ciatedControlID="textBox1" text="<%$ Resources:For %>"/>
<asp:textbox runat="server" id="textBox1" width="11em"/>
&nbsp;
<asp:button runat="server" id="button2" onclick="SearchF
orUsers" text="<%$ Resources:FindUser %>"/>
<br />
<asp:Label runat="server" id="alphabetInfo" Text="<%$ Res
ources:GlobalResources,AlphabetInfo %>"/><br/>
<asp:repeater runat="server" id="repeater" onitemcommand
="RetrieveLetter">
<itemtemplate>
<asp:linkbutton runat="server" id="linkButton1" text="<%
#Container.DataItem%>" forecolor="black" commandname="Display" commandargument="
<%#Container.DataItem%>" />
&nbsp;
</itemtemplate>
</asp:repeater>
</td>
</tr>
</tbody>
</table>
<br />
<table id="containerTable" runat="server" border="0" cellspacing="0"
cellpadding="0" class="itemDetailsContainer" width="750" >

<tbody>
<tr align="left" valign="top">
<td width="62%" height="100%" class="lrbBorders">
<asp:gridview runat="server" id="dataGrid" allowpaging="
true" border="0" cellspacing="0" cellpadding="5" autogeneratecolumns="False" oni
temdatabound="ItemDataBound" onpageindexchanging="IndexChanged" pagesize="7" wid
th="100%" UseAccessibleHeader="true" OnRowDataBound="DataGrid_RowDataBound">
<rowstyle cssclass="gridRowStyle" />
<alternatingrowstyle cssclass="gridAlternatingRowStyle"
/>
<headerstyle cssclass="callOutStyle" font-bold="true" he
ight="10"/>
<selectedrowstyle cssclass="gridSelectedRowStyle"/>
<pagerstyle cssclass="gridPagerStyle"/>
<pagersettings mode="Numeric"/>
<columns>
ces:Username %>">

<asp:templatefield runat="server" headertext="<%$ Resour

<itemtemplate>
<asp:label runat="server" AssociatedControlID="UserInRol
eCheckBox" id="userNameLink"
forecolor='black' text='<%#DataBinder.Eval(Co
ntainer.DataItem, "UserName")%>'/>
</itemtemplate>
</asp:templatefield>
ces:UserInRole %>" >

<asp:templatefield runat="server" headertext="<%$ Resour

<headerstyle horizontalalign="center" />


<itemstyle horizontalalign="center" />
<itemtemplate>
<asp:checkbox runat="server" id="UserInRoleCheckBox" onc
heckedchanged="EnabledChanged" autopostback="true"
checked='<%#(bool)CallWebAdminHelperMethod
(false, "IsUserInRole", new object[] {(string) DataBinder.Eval(Container.DataIte
m, "UserName").ToString(), (string)CurrentRole}, new Type[] {typeof(string),type
of(string)})%>' />
</itemtemplate>
</asp:templatefield>
</columns>
</asp:gridview>
</td>
</tr>
</tbody>
</table>
<asp:label runat="server" id="notFoundUsers" class="bodyTextNoPaddin
g" enableViewState="false" visible="false" text="<%$ Resources:NotFoundUsers %>"
/>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
</asp:content>

4<?xml version="1.0" encoding="utf-8"?>


<root>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>1.3</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.
0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.
0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="All" type="System.String">
<value>All</value>
</data>
<data name="Back" type="System.String">
<value>Back</value>
</data>
<data name="Email" type="System.String">
<value>E-mail</value>
</data>
<data name="FindUser" type="System.String">
<value>Find User</value>
</data>
<data name="For" type="System.String">
<value>for:</value>
</data>
<data name="Instructions" type="System.String">
<value>Use this page to manage the members in the specified role. To add a u
ser to the role, search for the user name and then select &lt;b&gt;User Is In Ro
le&lt;/b&gt; for that user.</value>
</data>
<data name="ManageRoleMembership" type="System.String">
<value>Manage Role Membership</value>
</data>
<data name="NotFoundUsers" type="System.String">
<value>No users found for this search.</value>
</data>
<data name="Role" type="System.String">
<value>Role:</value>
</data>
<data name="UserInRole" type="System.String">
<value>User Is In Role</value>
</data>
<data name="UserID" type="System.String">
<value>User ID</value>
</data>
<data name="Username" type="System.String">
<value>User name</value>
</data>
<data name="SearchForUsers" type="System.String">
<value>Search for Users</value>
</data>
<data name="SearchBy" type="System.String">
<value>Search By:</value>

</data>
</root> ad==<%@ Page masterPageFile="~/WebAdminWithConfirmation.master" inherits="Sys
tem.Web.Administration.SecurityPage"%>
<%@ MasterType virtualPath="~/WebAdminWithConfirmation.master" %>
<%@ Import Namespace="System.Web.Administration" %>
<script runat="server" language="cs">
private const string DATA_SOURCE = "WebAdminDataSource";
private const string DATA_SOURCE_ROLES = "WebAdminDataSourceRoles";
public void SetDataSourceRoles(object v) {
Session[DATA_SOURCE_ROLES] = v;
}
public void SetDataSource(object v) {
Session[DATA_SOURCE] = (MembershipUserCollection) v;
}
public void BindGrid(bool displayUsersNotCreated) {
DataGrid.DataSource = Session[DATA_SOURCE];
DataGrid.DataBind();
if (DataGrid.Rows.Count == 0) {
if(displayUsersNotCreated) {
noUsers.Visible = true;
}
else {
notFoundUsers.Visible = true;
}
}
}
public void IndexChanged(object sender, GridViewPageEventArgs e) {
DataGrid.PageIndex = e.NewPageIndex;
BindGrid(false);
}
public void Page_Load() {
noUsers.Visible = false;
if(!IsPostBack) {
PopulateRepeaterDataSource();
AlphabetRepeater.DataBind();
int total = 0;
MembershipUserCollection users = (MembershipUserCollection) CallWebAdmin
HelperMethod(true, "GetAllUsers",new object[] {0, Int32.MaxValue, total}, new Ty
pe[] {typeof(int),typeof(int),Type.GetType("System.Int32&")});
string[] roles = null;
if (IsRoleManagerEnabled()) {
roles = (string[]) CallWebAdminHelperMethod(false, "GetAllRoles",new
object[] {}, null);
}

SetDataSourceRoles(roles);
SetDataSource(users);
BindGrid(true);
DataGrid.HeaderStyle.HorizontalAlign = DirectionalityHorizontalAlign;

public void ButtonClick(object sender, EventArgs e) {


LinkButton button = (LinkButton)sender;
string userName = button.CommandArgument;
SetCurrentUser(userName);
}
private void CheckBoxRepeater_ItemDataBound(Object Sender, RepeaterItemEventArgs
e){
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.
AlternatingItem) {
AddTitleAttribute(e.Item, "CheckBox2");
}
}
private void DataGrid_RowDataBound(object sender, GridViewRowEventArgs e) {
AddTitleAttributeOnRowDataBound(e, "CheckBox1");
}
public void EnabledChanged(object sender, EventArgs e) {
CheckBox checkBox = (CheckBox) sender;
GridViewRow item = (GridViewRow)checkBox.Parent.Parent;
Label label = (Label) item.FindControl("UserNameLink");
string userID = label.Text;
MembershipUser user = (MembershipUser) CallWebAdminHelperMethod(true, "GetUs
er", new object[] {userID, false /* isOnline */}, new Type[] {typeof(string),typ
eof(bool)});
user.IsApproved = checkBox.Checked;
string typeFullName = "System.Web.Security.MembershipUser, " + typeof(HttpC
ontext).Assembly.GetName().ToString();;
Type tempType = Type.GetType(typeFullName);
CallWebAdminHelperMethod(true, "UpdateUser", new object[] {(MembershipUser)
user}, new Type[] {tempType});
}
public void LinkButtonClick(object sender, CommandEventArgs e) {
if (e.CommandName.Equals("EditUser")) {
CurrentUser = ((string)e.CommandArgument);
// do not prepend ~/ to this path since it is not at the root
Response.Redirect("editUser.aspx");
}
if (e.CommandName.Equals("DeleteUser")) {
UserID.Text = (string)e.CommandArgument;
AreYouSure.Text = String.Format((string)GetLocalResourceObject("AreYouSu
re"), UserID.Text);
Master.SetDisplayUI(true);
}
}
private void No_Click(object sender, EventArgs e) {
Master.SetDisplayUI(false);
}
private void PopulateRepeaterDataSource() {
PopulateRepeaterDataSource (AlphabetRepeater);
}
public void RedirectToAddUser(object sender, EventArgs e) {

CurrentUser = null;
// do not prepend ~/ to this path since it is not at the root
Response.Redirect("adduser.aspx");

public void RetrieveLetter(object sender, RepeaterCommandEventArgs e) {


MembershipUserCollection users = null;
RetrieveLetter(sender, e, DataGrid, (string)GetGlobalResourceObject("GlobalR
esources", "All"), users);
SetDataSource(DataGrid.DataSource);
BindGrid(false);
RolePlaceHolder.Visible = DataGrid.Rows.Count != 0;
}
protected void RoleMembershipChanged(object sender, EventArgs e) {
try {
CheckBox box = (CheckBox) sender;
// Array manipulation because cannot use Roles static method (need diffe
rent appPath).
string u = CurrentUser;
string role = box.Text;
if (box.Checked) {
CallWebAdminHelperMethod(false, "AddUsersToRoles",new object[] {new
string[]{u}, new string[]{role}}, new Type[] {typeof(string[]),typeof(string[])}
);
}
else {
CallWebAdminHelperMethod(false, "RemoveUsersFromRoles",new object[]
{new string[]{u}, new string[]{role}}, new Type[] {typeof(string[]),typeof(strin
g[])});
}
}
catch {
// Ignore, e.g., user is already in role.
}
}
public void SearchForUsers(object sender, EventArgs e) {
SearchForUsers(sender, e, AlphabetRepeater, DataGrid, SearchByDropDown, Text
Box1);
SetDataSource(DataGrid.DataSource);
BindGrid(false);
RolePlaceHolder.Visible = DataGrid.Rows.Count != 0;
}
private void SetCurrentUser(string s) {
CurrentUser = s;
if (IsRoleManagerEnabled()) {
CheckBoxRepeater.DataSource = Session[DATA_SOURCE_ROLES];
CheckBoxRepeater.DataBind();
if (CheckBoxRepeater.Items.Count > 0) {
AddToRole.Text = String.Format((string)GetLocalResourceObject("AddTo
Roles2"), s);
}
else {
AddToRole.Text = (string)GetLocalResourceObject("NoRolesDefined");
}
}

else {
ArrayList arr = new ArrayList();
CheckBoxRepeater.DataSource = arr;
CheckBoxRepeater.DataBind();
AddToRole.Text = (string)GetLocalResourceObject("RolesNotEnabled");
}
}

multiView1.ActiveViewIndex = 1;

private string GetToolTip(string resourceName, string itemName) {


string tempString = (string) GetLocalResourceObject(resourceName);
return String.Format((string)GetGlobalResourceObject("GlobalResources","Tool
TipFormat"), tempString, itemName);
}
private void Yes_Click(object sender, EventArgs e) {
CallWebAdminHelperMethod(true, "DeleteUser", new object[] {(string) UserID.T
ext, true}, new Type[] {typeof(string),typeof(bool)});
int total = 0;
MembershipUserCollection users = (MembershipUserCollection) CallWebAdminHelp
erMethod(true, "GetAllUsers",new object[] {0, Int32.MaxValue, total}, new Type[]
{typeof(int),typeof(int),Type.GetType("System.Int32&")});
string[] roles = null;
if (IsRoleManagerEnabled()) {
roles = (string[]) CallWebAdminHelperMethod(false, "GetAllRoles",new obj
ect[] {}, null);
}
SetDataSource(users);
SetDataSourceRoles(roles);
BindGrid(true);
PopulateRepeaterDataSource();
AlphabetRepeater.DataBind();
Master.SetDisplayUI(false);
}
</script>
<asp:content runat="server" contentplaceholderid="titleBar">
Manage Users
</asp:content>
<asp:content runat="server" contentplaceholderid="buttons">
<asp:button ValidationGroup="none" runat="server" id="Button1" text="<%$ Resourc
es:Back %>" onclick="ReturnToPreviousPage"/>
</asp:content>
<asp:content runat="server" contentplaceholderid="content">
<asp:literal runat="server" text="<%$ Resources:Instructions %>" />
<br/><br/>
<%-- Cause the textbox to submit the page on enter, raising server side onclick-%>
<input type="text" style="visibility:hidden"/>
<table cellspacing="0" cellpadding="5" class="lrbBorders" width="750" id="Manage
UsersTable">
<tr>

<td class="callOutStyle"><h1 class="callOutHeaderStyle"><asp:literal run


at="server" text="<%$ Resources:SearchForUsers %>"/></h1></td>
</tr>
<tr >
<td class="bodyTextLowTopPadding">
<asp:Label runat="server" AssociatedControlID="SearchByDropDown" Tex
t="<%$ Resources:SearchBy %>"/>
<asp:dropDownList runat="server" id="SearchByDropDown">
<asp:listItem runat="server" id="Item1" text="<%$ Resources:Username
%>" />
<asp:listitem runat="server" id="Item2" text="<%$ Resources:Email %>
" />
</asp:dropdownlist>
&nbsp;&nbsp;<asp:Label runat="server" AssociatedControlID="TextBox1"
Text="<%$ Resources:For %>"/>
<asp:textbox runat="server" id="TextBox1"/>
<asp:button runat="server" text="<%$ Resources:SearchFor %>" onclick
="SearchForUsers"/>
<br/>
<asp:Label runat="server" id="AlphabetInfo" Text="<%$ Resources:Glob
alResources,AlphabetInfo %>"/><br/>
<asp:repeater runat="server" id="AlphabetRepeater" onitemcommand="Re
trieveLetter">
<itemtemplate>
<asp:linkbutton runat="server" id="LinkButton1" commandname="Display
" commandargument="<%#Container.DataItem%>" text="<%#Container.DataItem%>"/>
&nbsp;
</itemtemplate>
</asp:repeater>
</td>
</table>
<br/>
<table cellspacing="0" cellpadding="0" border="0" id="hook" width="750">
<tbody>
<tr align="left" valign="top">
<td width="62%" height="100%" class="lbBorders">
<asp:gridview runat="server" id="DataGrid" width="100%" cellspacing=
"0" cellpadding="5" border="0" autogeneratecolumns="False" allowpaging="true" pa
gesize="7" onpageindexchanging="IndexChanged" UseAccessibleHeader="true" OnRowDa
taBound="DataGrid_RowDataBound">
<rowstyle cssclass="gridRowStyle" />
<alternatingrowstyle cssclass="gridAlternatingRowStyle" />
<pagerstyle cssClass="gridPagerStyle"/>
<pagersettings mode="Numeric"/>
<headerstyle cssclass="callOutStyle" font-bold="true" />
<selectedrowstyle cssclass="gridSelectedRowStyle"/>
<columns>
<asp:templatefield headertext="<%$ Resources:Active %>">
<headerstyle horizontalalign="center"/>
<itemstyle horizontalalign="center"/>
<itemtemplate>
<asp:checkBox runat="server" id="CheckBox1" oncheckedchanged="Enable
dChanged" autopostback="true" checked='<%#DataBinder.Eval(Container.DataItem, "I
sApproved")%>'/>
</itemtemplate>
</asp:templatefield>

%>">

<asp:templatefield runat="server" headertext="<%$ Resources:Username

<itemtemplate>
<asp:label runat="server" AssociatedControlID="CheckBox1" id="UserNa
meLink" forecolor='black' text='<%#DataBinder.Eval(Container.DataItem, "UserName
")%>'/>
</itemtemplate>
</asp:templatefield>
<asp:templatefield runat="server">
<itemtemplate>
<asp:linkButton runat="server" id="LinkButton1" text="<%$ Resources:
EditUser %>" commandname="EditUser" toolTip='<%# GetToolTip("EditUser",DataBinde
r.Eval(Container.DataItem, "UserName").ToString()) %>' commandargument='<%#DataB
inder.Eval(Container.DataItem, "UserName")%>' forecolor="black" oncommand="LinkB
uttonClick"/>
</itemtemplate>
</asp:templatefield>
<asp:templatefield runat="server">
<itemtemplate>
<asp:linkButton runat="server" id="linkButton2" text="<%$ Resources:
DeleteUser%>" commandname="DeleteUser" toolTip='<%# GetToolTip("DeleteUser",Data
Binder.Eval(Container.DataItem, "UserName").ToString()) %>' commandargument='<%#
DataBinder.Eval(Container.DataItem, "UserName")%>' forecolor="black" oncommand="
LinkButtonClick"/>
</itemtemplate>
</asp:templatefield>
<asp:templatefield runat="server">
<itemtemplate>
<asp:linkbutton runat="server" commandname="EditRoles" toolTip='<%#
GetToolTip("EditRoles",DataBinder.Eval(Container.DataItem, "UserName").ToString(
)) %>' forecolor='black' onclick="ButtonClick" text="<%$ Resources:EditRoles %>"
commandargument='<%# DataBinder.Eval(Container.DataItem, "UserName") %>'/>
</itemtemplate>
</asp:templatefield>
</columns>
</asp:gridview>
<asp:label runat="server" id="noUsers" class="bodyTextNoPadding" ena
bleViewState="false" visible="false" text="<%$ Resources:NoUsersCreated %>"/>
<asp:label runat="server" id="notFoundUsers" class="bodyTextNoPaddin
g" enableViewState="false" visible="false" text="<%$ Resources:NotFoundUsers %>"
/>
</td>
<td width="32%" height="100%">
<asp:placeholder runat="server" id="RolePlaceHolder">
<table borderwidth="1px" cellpadding="5" cellspacing="0" height=
"100%" width="100%">
<tr class="callOutStyle">
<td valign="center"><h1 class="callOutHeaderStyle"><asp:
literal runat="server" text="<%$ Resources:Roles %>"/></h1></td>
</tr>
<tr class="userDetailsWithFontSize" valign="top">
<td class="lrbBorders" height="100%" >
<asp:multiView runat="server" id="multiView1" active

viewindex="0">

<asp:view runat="server" id="view1">


</asp:view>
<asp:view runat="server" id="view2">
<asp:label runat="server" id="AddToRole" text="<%$ R
esources:AddToRoles %>"/><br/>
<asp:repeater runat="server" id="CheckBoxRepeater" O
nItemDataBound="CheckBoxRepeater_ItemDataBound">
<itemtemplate>
<asp:checkBox runat="server" id="CheckBox2" autopost
back="true" oncheckedchanged="RoleMembershipChanged" text='<%# Container.DataIte
m.ToString()%>' checked='<%# (bool)CallWebAdminHelperMethod(false, "IsUserInRole
", new object[] {CurrentUser, Container.DataItem.ToString()}, new Type[] {typeof
(string),typeof(string)}) %>'/>
<br/>
</itemtemplate>
</asp:repeater>
</asp:view>
</asp:multiView>
</td>
</tr>
</table>
</asp:placeholder>
</td>
</tr>
</tbody>
</table>
<asp:linkButton runat="server" id="LinkButton3" text="<%$ Resources:CreateNewUse
r %>" onclick="RedirectToAddUser"/>
</asp:content>
<%-- Confirmation Dialog --%>
<asp:content runat="server" contentplaceholderid="dialogTitle">
<asp:literal runat="server" text="<%$ Resources:ManageUsers %>" />
</asp:content>
<asp:content runat="server" contentplaceholderid="dialogContent">
<img src="../../Images/alert_lrg.gif"/>
<%-- Literal is used here as a convenience, including storing a text property in
view state. --%>
<asp:literal runat="server" id="UserID" visible="false"/>
<asp:literal runat="server" id="AreYouSure" text="<%$ Resources:AreYouSure %>" /
>
</asp:content>
<asp:content runat="server" contentplaceholderid="dialogBottomLeftButton">
<asp:Button runat="server" OnClick="Yes_Click" Text="<%$ Resources:Yes %>" w
idth="100"/>
</asp:content>
<asp:content runat="server" contentplaceholderid="dialogBottomRightButton">
<asp:Button runat="server" OnClick="No_Click" Text="<%$ Resources:No %>" wid
th="100"/>
</asp:content>
w version="1.0" encoding="utf-8"?>
<?xml
<root>
<resheader name="resmimetype">

<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>1.3</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.
0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.
0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="Active" type="System.String">
<value>Active</value>
</data>
<data name="AddToRoles" type="System.String">
<value>Add user to Roles:</value>
</data>
<data name="AddToRoles2" type="System.String">
<value>Add &lt;b&gt;" {0} "&lt;/b&gt; to roles:</value>
</data>
<data name="AreYouSure" type="System.String">
<value>Are you sure you want to delete the user "&lt;b&gt;{0}&lt;/b&gt;"?&lt
;br&gt;&lt;br&gt;All information for this user will be deleted, including the us
er name, the user's membership in roles, and any profile property values associa
ted with this user.</value>
</data>
<data name="Back" type="System.String">
<value>Back</value>
</data>
<data name="DeleteUser" type="System.String">
<value>Delete user</value>
</data>
<data name="EditRoles" type="System.String">
<value>Edit roles</value>
</data>
<data name="EditUser" type="System.String">
<value>Edit user</value>
</data>
<data name="Email" type="System.String">
<value>E-mail</value>
</data>
<data name="For" type="System.String">
<value>for:</value>
</data>
<data name="Instructions" type="System.String">
<value>Click a row to select a user and then click &lt;b&gt;Edit user&lt;/b&
gt; to view or change the user's password or other properties. To assign roles
to the selected user, select the appropriate check boxes on the right.&lt;br&gt;
&lt;br&gt;To prevent a user from logging into your application but retain his or
her information in your database, set the status to inactive by clearing the ch
eck box.</value>
</data>
<data name="ManageUsers" type="System.String">
<value>Manage Users</value>
</data>
<data name="No" type="System.String">
<value>No</value>
</data>

<data name="NoRolesDefined" type="System.String">


<value>No roles have been defined.</value>
</data>
<data name="NoUsersCreated" type="System.String">
<value>No users have been created.</value>
</data>
<data name="NotFoundUsers" type="System.String">
<value>No users found for this search.</value>
</data>
<data name="SearchBy" type="System.String">
<value>Search by:</value>
</data>
<data name="SearchFor" type="System.String">
<value>Find User</value>
</data>
<data name="RolesNotEnabled" type="System.String">
<value>Roles are not enabled.</value>
</data>
<data name="UserID" type="System.String">
<value>User ID</value>
</data>
<data name="Username" type="System.String">
<value>User name</value>
</data>
<data name="Yes" type="System.String">
<value>Yes</value>
</data>
<data name="SearchForUsers" type="System.String">
<value>Search for Users</value>
</data>
<data name="CreateNewUser" type="System.String">
<value>Create new user</value>
</data>
<data name="Roles" type="System.String">
<value>Roles</value>
</data>
</root>K !  MZ  @  !L!This program cannot be run in DOS mode.
$PEL K"Q   M^ `&@  O  @ 

tH.textW  `.rsrc @@.reloc

@@B3Hh( 
   (
}

 

}}}*0X-*(
+ 6
 {+

(-X i2X i2(*0  


 +rprps +

r-pr5psrU+p
s
rcps +rmpr ps
r p s +rprprps +rprps}(
*0s
s

+ko


o

&+-o
,%o
o
&o
++
o
&Xo
o2 -
o
&+( 
o!
t*0(
+o"
{
,{
+i2
X{ -*

. YE4-+2,

{
o 
3

Eh 8o
 0

+@o
Xo
30+o
o
3

 0

+-o
o
3 0

,v}+mo
o
/o
o#

,O}+Fo
o
/o
o#

,({to$
&{trpo%
&*0{

8 
{
{E)F+i{,a{o
(&
o'
o(
&+B{,:{o
o(
&+%{to
,{o
o(
&
Xi?b*0'~()
o*
-~()
o*
*r-p(+
s,
rsp(+
s,
*(-
(.
s/
}s
}}*2{o0
*r(-*{{o1
*0o2
.%{X}*0Xx i1rprps3
z
+V(,R{o
{Y1{o
{ o4
X%{X}X
Y2*s5
z0Z
(-*{{{o
{ Yo6
{o
} 6

o7
*0R
s
( ,={{{o
{Yo6
o%
&{o
}+o
*repripo8
rsprwpo8
(*0M
o
& r p(9
s
o :
o%
&r2po%
&Xo#
o%
&o
*0P{{o
2;{o;
-*(s<
}{(=
o%
&}*0@r9ps>
 s?
o@
rOps>

s?
o@
(*0'

*2oA

&oB
8;oC
3(8XYYo:

+~  (D
-X~ i2
+
>o
#@o
19o
x3.o+
(E
-+GoX
2+5o
1,o+
(F
-+o
X
2,
-

: o 

(&XoC

@ *0Y
  +
r>prHprPprZpr`prfprppr|pr p 
rprp

r p 

rprprprprprprprpr
r
prpr pr*pr4pr@prLprVprdprpprzp r p !r p"r p #rp$rp%rp&rp'rp(rp)rp
p r

p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p

r
r$
r,
r4
r<
rH
rZ
rf
rn
rx
r
r
r
r
r
r
r
r
r
r
r
r
rp rp r p r.p r8p rFp rTp r`p rlp rzp r p  r p  rp rp rp

p r

p r

p r(

p r2

p r<

p rF

p rP

p r^

p rh

p rt

p r

p r

p r

p r

p r

p r

p r

p r

p r

p r

p r

p r

p r

p 
r

p 
r~vnhbVPD:2$p rp rp r(p r4p rBp *(























}}}}(+*{*"}*{*"}*{*"}*{*6(G
}*{*n{+( 
o!
t*(&*(&*(&*0^{,{o
+rNp(I
{ ,{o
+rzp(I
( ,{{oJ
*6(,{*&()*03(,sK
{ oL
sM
oN

,oO
*
'
0 wr=,poP
rA,p(9
r =,poP
rA,p(9
( G
(G
sQ
sQ
oR

o
(S
~U
oV

~T

*0}}}}}}}}}}}}}}s
}(W
sX
}{rpoY
{ rpoY
{ rpoY
{ rpoY
{rFpoY
{ rbpoY
{ r~poY
{ rpoY
{ rpoY
*0,{,{o
 +rNp(I
{ (Z
rp{([
( +s\
o]
{s
o_

s^

o`
sa
zo0
ob


oc
+9od
tFoe
.!oe
.oe
.t+
of
-u@,oO
og
sh
rpr>p(i
o j
rfp(k
9 { (l
}{-{om
rvp(n
,

}8P{rvpoo
sp
sp
sq
 

r~p

rp(r

r
p(r


{rpos
ot
8 o u
ov
r@p(D
ov
ox
,#ow

o8
oy
ov

ow

ov

ox
,ow
 



ov

o8
oy
of
:k

,oO
oz

+({
{o|
(}
-O
oz
+({
{o|
(}
-O
,{r p rpo~
&,{r p rpo~
&
o 
+ ( 
{o 
&( 
-O
{o 
o 
8 o 
o 
o 
rp 
,$rprpo 
&r

prpo 
&o 
r.p( 
,1o 
o 
rPp 
,o 
r`p( 
o 
o f
:i

,oO
9 {rrp(Lr p ,o 
o
-Z~ 
{rp 
,rp{r@p 
,rPp{rrprp( 
o~
&(-(.(/(K*( 
}oj
r>p(k
o 
r p oj
(i
{-{rpo 
{ -{rvpoo
D
(1]z*dF]k h

}#&+$Oo

0 { o 
o 

+fo 
o 
rp( 
,Lo 
rp( 
,o 
tr

prpo 
&o 
{3o 
o|
+of
-
,oO
*r 
0u
{os
ot
+0ou
ov
r:p( 
-ov
rp( 
,
o f
-

,oO
9{r2po 

rpo
o 
o 
r po
r?po
{o 
o 
+c
o 
o 
rp(
-G-o
u
rp(
-o 
rp(

-





-o 



,-

of
 

,oO
 
{-o
-rprpo
&
-rprpo
&*=Q

p,

0
{os
ot
+2ou
ov
rp( 
-ov
r]p( 
,
+
-

of

,oO
-*{o
o

8j

o

o
(
:R
o
o 
o+ '
o 
rp( 
,
o 
+ 
of
-


,oO 

,~ 
+

(
o 
 6, o 

+  o 
X i2 +rprprp+m  + 
 
,
-
-

+X i2
rpo

-*

(

rp(r
(r 
X  i2rp o 
&

of
:

,

oO
*AL?S

4

u}

0vrp(9
o 
o

+;od
tZ
o
{oj
o
,(
oj
o(
&of
-
u@
,
*Gd0,oj
r>p(k
+rvp(9
{rp(9
r po
,o
+o 
r(p(i
o
o 
rbpr>p(i
o
8od
tF

oO

oe
;oe
 
;oe
@t
oj
%,vr p(k
-8r p(k
-*rp(k
-rp(k
-rp(k
,0
o 
rpr>p(i
oj
 
}
(2+5
r6p
oj
r>p(
+oj
oj
o 
(
of
:u@,oO
*A  0 rhp(9
{ rp(9
r po
}{-{+o 
rpoj
rp(
rpo
,o
,rp(D
+o 
r(p(i
rpo
,*o
,"rp(
o
s
(
o
rpo

o 

,o
,rpr2po
r:po

,
o
,}{o
}{(0{rHprdpo(
rppo 
{r p( 
-rp+rp{rpo(
r po 
{:oj
rp(k
,@{rrprpo(
&r p(Mr
 p(r
r (N
p +Poj
rp(k
,>{rrpr po(
&r p(M 
r7p(r

r p 
(No


8

od
tF

oe
;
oe
;
oe
@
toj
rp(k
,|
%
r p(k
-:
r,p(k
-6
rLp(k
-2
rjp(k
-.
-,+4(4+c(B+Y(G+O(J+C(I+9o 
r6p
oj
oj
(
+
oj
oj
o 
(

of
:

u@,oO
(3*AUh0{:{r prpo(
&{rp(k
-*{rp(k
9{rp(k
9{::{9{o
> {rp(D
-;{,{r:prpo(
&8 {r:pr po(
&+~{r p(D
-{r:pr po(
&+S{r( p(D
-@{r:pr8 po(
&+({rp(k
,{r:prH po(
&oj
rp(k
,{rT po 
&8oj
rp(k
,{r po 
&8 oj
r p (k
,{rW!po 
&+koj
rp(k
,{rpo 
&+Foj
r p (k
,{r!po 
&+!{r"poj
rU"p( 
o 
&{-{,j{o
{o
{,!rg"p{r "pr "po8
o(
&{,!r "p{r "pr "po8
o(
&*0P,oj
rp(k
+r"p(9
{ rp(9
{ r"p(9
o
o 
rbprp(i
o

8od
tF
oe
;oe
; o e
3stoj
%,D
rG#p(k
-
rY#p(k
-
ro#p(k
-+(5+G(9+>(@+5o 
r6poj
rp(
+oj
oj
o 
(
of
:=u@,oO
*q;0 ,oj
rG#p(k
+r #p(9
{ rp(9
{ r"p(9
rg"po
}rg"po
r "po
}r "po
rpo
}r#po
}{(0o

8 o d
tF
oe
; o e
.}oe
3]toj
%,.
r#p(k
rp(k
-+(6+>(7+5o 
r6poj
rG#p(
+oj
oj
o 
(
of
:Vu@,oO
*k0(,oj
r#p(k
+r#p(9
{ rp(9
r $po
,o
+o 
rpr#pr$p(
{rp(k
-{rp(k
,|oB
.o
Yo


r$po

r p {(k
,r$po

r$po
{o
rpo
,Ro
1Ho
Yo
~U
.~U
6(
rpo

rp(
o(
&rA$po
{ ,,o
1rA$po
r _$po
{,,o
1r_$po
r $po
,o
1r $po
{ -7rp{(k
,%{r$p(r

rp(
o(
&
( 0r p {(k
,s

,
rpr$po(
&{-er%po


(
,Or%%po
r?%p(D
-
r%prI%po(
&+ rS%p(D
-
r%pr_%po(
&{-#{r p(k
,
ri%pr %po(
&{r p( 
-rp+rp

o{-#rp{(k

r%p

r %p(

(
r%p(
o 
o 
8 o d
otF
e
oe
.{
oe
.p
t
3Noj
%,r%p(k
,
(8+8o 
r6poj
r#p(
+ 
oj
oj
o 
(
of
:au@,oO
*l0@(:4,oj
rp(k
+r&p(9
{rp(9
r $po
}{,{o
+o 
rprpr$p(
{ o
r,E
E&p}{%rO&p(k
-
rc&p(k
-
ry&p(k
-+r &pr&p

+%r&prc&p

+r5'pr 'p

rp}r 'po(
&r'po(
&r'pr'po(
&r p{o(
&*0@,oj
r%p(k
+r(p(9
r_(p(9
(0(
*0~,oj
rY#p(k
+r(p(9
{ rp(9
o 
o 
rbprY#p(i
{(,Z
-}(>+=s
}{{o
{o
{{o
o

o
8 
od
tFoe
; o e
.woe
3Wt

oj
%,'rp(k
,-

{o
(:
 +5
o 
r6poj
rY#p(
+oj
oj
o 
(

of
:\ u@,oO
*i0,oj
rp(k
+r(p(9
 r+)p(9
rpo

,+o
1"rw)po
o 
.*rpo
r $po

,o
+o 
rpr$prp(
{ rp(k
-{rp(k
,0{rp(k
,r )p(D
-*r)p(D
-*{rp(k
,r)p(D
-*r)po
rfpo

,!
o
1 
r)p( 
, +&,o
(;
(1< +
(=
 o
o
+(od
tZoj
o
(
o 
&of
-u@,oO
(
* 5 0r$po
r/*p(
o
*0 P|oB
. Po
QrfpPo
P (?

,@(
rI*p(D
-rp( 

+(
r[*p(D
-

r@p( 

r-.+p
o

(

*0 rpo
,o
-+rpo
rm*p(D
-}r *po

,D(&
o

r*poP
r*
3 poP
3r1+poP
. r *po
r p(
o
*0!{r +p(9
{ r+p(9
{(G
(
s
8 r ',po
+ p

r3,po
-Qs
o
{
o
o 
,
}

o
o
o
{o
} &X i2 o 

:g* <Q0"r ,p(9


{ -.r,p(  (
{ o
&*{o
-=r-p( {o
(

{o
&*rO-p"
,.rY-p(  (
{ 
o
&*{(
(
{(**0,oj
ro#p(k
+r-p(9
{ r-p(9
o
o 
rbpro#p(i

o 
8 
od
tFoe
; o e
.woe
3Wt

oj
%,'r+.p(k
,-

{o
(A
 +5
o 
r6poj
ro#p(
+oj
oj
o 
(

of
:\ u@,oO
*]0#,oj
r+.p(k
+r9.p(9
 r+)p(9
ro.po

,o
+o 
rpro.pr+.p(
r o.po
r+.p(
o
&o
o

+(od
teo
r .poj
r+.p(
of
-
u@
,
(
* 4 08$,oj
r p(k
+r.p(9
{ r-p(9
o
o 
rbpr p(i
o
8
od
tF
oe
; o e
; o e
3qtoj
%,Ar.p(k
-r.p(k
-+#(C+Or/p(

oO

{o
&+5o 
r6poj
r p(
+oj
oj
o 
(

of
:? u@,oO
*[#0:,oj
r.p(k
+r//p(9
{ r-p(9
o
o 
rbpr.p(i

o 
8
od
tFoe
; o e
; o e
3q-

{o
t

oj
%,2rg/p(k
-rq/p(k
-

( D +?(F+5
+
o 
r6poj
r.p(
+oj
oj
o 
(
of
:? u@,oO
*]%0%,oj
rg/p(k
+r /p(9
 r+)p(9
r/po
,o
+o 
rpr/prg/p(
r /po
r/po
r/po
r/po

,o
-r/p

r/po
(
r/p(D
-(E:,o
(-  
o
+(
 
o

r/p(
o 
&o
o
+(od
tZ
oj
o
(
o 
&of
-u@,oO
{rp(k
-{rp(k
,Or/p(D
-A
r
0pr50po 
&+.rS0p((
 
{ o
&(
*5M0s&,o
-{(
(
+(
,
+{(
(
(Z
-*js

o
 
(
,j**JZD0',oj
rq/p(k
+ru0p(9
 r+)p(9
r/po
,o
+o 
rpr/prq/p(
r /po
r0po
r0po
r0po

r0po
,%r?%p(D
-r0p(
o
89 o
> r 0p(
o

r/p(
o 
&{: {r0p{r p(k
-r?%p+rS%po(
&{r#1prS%po(
&{r[1pr?%po(
&}+0r1po 
,o
Yo
rq/p(
o
o
o
+(od
tZ
oj
o
(
o 
&of
-u@,oO
(
*50,oj
r,p(k
+r1p(9
{ r-p(9
o
o 
rbpr,p(i

o
8 
od
tFoe
; o e
.woe
3Wt

oj
%,'r1p(k
,-

{o
(H
 +5
o 
r6poj
r,p(
+oj
oj
o 
(

of
:\ u@,oO
*]0#,oj
r1p(k
+r2p(9
r+)p(9
r=2po
,o
+o 
rpr=2pr1p(
r =2po
r1p(
o
&o
o

+(od
teo
r .poj
r1p(
of
-
u@
,
(
* 4 0J,oj
rjp(k
+r #p(9
{ r"p(9
{(0(
*0 (,oj
rLp(k
+rC2p(9
R r p(M
o
(r
o
r 2po
-'o
r2po
-o
r2po
9R~ 
{r p(k
,r2p+?{rp(k
,r93p+%{r p (k
,r 3p+r3p(9
{ rrprp4pr4p( 
o(
&o
r 2po

oO

,no
1 [{(G
(


(G
(

,d
(

-)(Z
, {o
r/p
(
o
&r p(N*0o){o 
o 
+ Go 
o 
r4p(k
,.o 
(
,)o 
r4po 
,o 
o|
+of
-
,oO
*Sd
0@*o 
o 

o

+o 
o 
( 
,of
 
-
,oO
**

&2
0+{o
,o
*~ 
*00+{o
-{o
{o
o
*BSJB

v4.0.30319l#~8

##StringsD=5#US\r#GUIDlr #BlobW]

3g

NT&+
 G 0
Xv ~ !Y
2 
 !f&   
 
%

 %

=a
@
{

v
u
M
  Y
v+
v
3
 = 
=~/n" V P-  "G

!k7B
R !  g#,=&
s|!
_&
n yQ&# [  t
O 
 
K /&!&

# 
d
J
 f
7J 
 
% 

P


   


, 

   

  


  


 

5

   

Y 

P   

D  

V

    V L  V t

V

0Sc 0sSb
00S1o
0 S1 N 0S SyZ0S A0S m0S 0S @

0S 'S^0>00SS
0 y;0S/0SS&
0?0Sk0SSR0

S>00SDS0B!0
>0
Sy00SS0+0

Sd&!0
00S
 S0S\
f!0
O00&
SS0S?0S0S0+
 S0S00
 S0S0" 0SSL"0
]-_"0
0SSSl
00!0
SSZ
S0 0SS0Q
S00SS^0D
00SSq0:
S!0
S!000SSX!0
1
00S S"`
000S S8"0
w
00SS0.
S0S E
X
!0
0S
0S 0S "0S 

0S

"0S 

0S q0S 0 S !0S !0S m!0S s0S 0S s0`< 1a 0 Q0000}


!0!0 000q0#WP  

%
$-% :&L% &t%  %0&3*h&s*& 

& cT'  ' + ' 



(  @) 3  3*3


4 v4  4@<4 : !D4 :!

 3+*3>3 34e*

%6  %l< .%= |%> f %A  %A &'pC /&( G ,)I  &+LK K&,L u&-,Q &.xR 3/R &1`T ;2TV C4
&C^ V ;D` "c4a t;HLc  &J d ;K e b&Me iNlg Pg  qPTh 

4SR~h4+~!_

}k

!


B FF 
j&  &!  >i!)19AIQ9YY!9  9

*&uP9aYA"}
U3.9Y!lY"<
[ )aY YHYXg4"n
1 )a
 9!!*):& Y  9

)Y3*Y9x!Y4  *Y8

Y8

YG
IG

qI*q  Y8

 

Y*0- r 1*#Y.i"VI` [IQ*qYyqIb!,*Y)1Ii)<oQDu


y1
Q I 7!*Y',  $ %$ ! I"n, 4 IN!4 ! I \ d

H  E* Y

'  *Y"0Y)3I: ?I IjEl  t  * _"neIE 1jICY" I vt  yI |     *Y"VjE

1 o 1*t"   1 or{R&

P  I I= 

Y

Y)Y)QQvQQjYY8

Y

1QP"1QY*eg*- )?V

  **Q Q

!

IP'9I'9 

$(, PTX)\ ` dhlpxt!|2?P w   




 (

E

n



 

 



 


 $
;
F
_
r
w







- J g$ (  , 048?<

@:

D_

H

L

P

T

X

\

`

d
lh 

|xtprt_N%   ?36ANUn  



B ? 

w

 c $(+,P0o4W8?< @DHGLtP T  X  \ `hdl*p9tHxU|\              -N]  . ...#.+.3


.S%.[E.cp.ky.s .{.  .  .  . . Q .  @`    ` C 3  C[ C  C n-<NZb

Ey6B?yHO}y}ODW    B  !M"icrosoft.Build.Conversion.v4.0IEnumerable`1ICollection`1IEquality


tsVS2008<Module>PocketPCplatformIDplatformForVSDframeworkVersionForVSDWindowsCES
ystem.IOSystemSRvalue__STM_JcpaAddMetadatawebMSCorLibmscorlibSystem.Collections.
GenericEVisualBasicvisualBasicdisableVBHostProcdisableCSHostProccharactersToRead
LoadAddnewWebReferencePropertiesAddedMicrosoft.Build.SharedIsPathRootedget_Conve
rsionSkippedBecauseProjectAlreadyConvertedconversionSkippedBecauseProjectAlready
ConvertedvisualBasicGuidVSDVBProjectTypeGuidVSDCSProjectTypeGuidtriumphProjectTy
peGuidvisualJSharpGuidcSharpGuidwpfFlavorGuidreferencedProjectGuidprojectGuidGet
ProjectUniqueNameByGuidGetProjectRelativePathByGuidguidAppendChildRemoveChildIns
ertAfterChildMicrosoft.Buildget_BuildincrementalBuildbuildReadToEndindexOfAmpers
andAppendReplaceIsNullOrWhiteSpacexmlNamespaceimportNamespaceset_PreserveWhitesp
aceselectedDeviceserviceConvertClassicComReferencecomReferencehasWindowsFormsRef
erenceConvertProjectToProjectReferenceprojectReferenceConvertAssemblyReferencere
ferenceSTM_Win32ResourceSTM_LinkResourcebuildActionResourceXmlNodeget_Includeset
_IncludeincludeexcludeSTM_CodePageget_MessagelanguageAddRangeIDisposableRuntimeT
ypeHandleGetTypeFromHandledocumentationFileget_SolutionFileset_SolutionFileParse
SolutionFileSearchForSolutionFilesolutionFileget_IsUserFileset_IsUserFileisUserF
ileoldVSProjectFileget_OldProjectFileset_OldProjectFileoldProjectFileget_NewProj
ectFileset_NewProjectFilenewProjectFileTargetFrameworkProfileClientProfileconsol
eget_NamereferenceNameget_FullNameassemblyNameplatformFamilyNameGetDirectoryName
SwitchProjectPropertyNameswitchProjectPropertyNamefilenameSystem.RuntimevOneRead
LinecurrentReadPositionWithinSingleLinesingleLineoriginalLineget_NewLineCombineM
icrosoft.Build.EngineMicrosoft.Build.BuildEngineenginedebugTypeNonebuildActionNo
neSmartphonepropertiesToEscapeget_NodeTypeXmlNodeTypeSwitchValueTypeswitchValueT
ypedebugTypeget_ItemTypeprojectTypeofficeDocumentTypeoutputTypemyTypeCompareget_
CurrentUICultureget_InvariantCultureCaptureget_OrdinalIgnoreCaseCloseDisposeCrea
teSwitchesToMigrateGuidAttributeAssemblyTargetedPatchBandAttributeNeutralResourc
esLanguageAttributeDebuggableAttributeComVisibleAttributeAssemblyKeyFileAttribut
eAssemblyTitleAttributeObsoleteAttributeRemoveAttributeReplaceSpecialCharactersI
nXmlAttributexmlAttributeAssemblyDelaySignAttributeAssemblyFileVersionAttributeA
ssemblyInformationalVersionAttributeSatelliteContractVersionAttributeAssemblyDes
criptionAttributeInternalsVisibleToAttributeAssemblyDefaultAliasAttributeCompila
tionRelaxationsAttributeAssemblyProductAttributeGetAttributeSetAttributeAssembly
CopyrightAttributeCLSCompliantAttributeTargetedPatchingOptOutAttributeAssemblyCo
mpanyAttributeRuntimeCompatibilityAttributeget_ValueSwitchValueswitchValueTokeni
zeAdditionalOptionsValueadditionalOptionsValuevalueSaveRemovewinExeexeInitialize
get_ItemOfIndexOfconfigEncodingExceptionHandlingSTM_SecureScopingSVT_StringUnesc
apeDataStringReplaceSpecialCharactersInXmlAttributeStringSVT_MultiStringoriginal
StringToStringGetProjectExtensionsStringSetProjectExtensionsStringFormatStringGe
tStringSubstringwebRefEnableLegacyEventingMatchcompSwitchlinkPathJSharpRTMFramew
orkPathEverettFrameworkPathrelPathget_FullPathGetFullPathmsbuildBinPathofficeDoc
umentPathhintPathoutputPathget_Lengthset_LengthEndsWithStartsWithMakeRelativeUri
ReadBlockPeeklinklocalMicrosoft.Build.InternalReplaceAmpersandWithLiteralMicroso
ft.Build.Conversion.v4.0.dlldebugTypeFullSystem.Xmlget_OuterXmlget_RawXmlwebRefe
renceUrlget_Itemset_ItemAddItemSystemTrimfromx86PlatformdefaultPlatformdeploymen
tPlatformplatformEnumSVT_BooleanautogenOpenwindowsFormsWithCustomSubMainget_Exte
nsionChangeExtensionvbprojFileExtensionvbdprojFileExtensioncsdprojFileExtensionc
sprojFileExtensionxmlFileExtensionGetExtensionget_VersionschemaVersionmsbuildVer
sionTargetFrameworkVersionget_ToolsVersionset_ToolsVersiontoolsVersionproductVer
sionMicrosoft.Build.ConversionParseSolutionFileForConversionget_LocationXmlAttri
buteWithLocationXmlElementWithLocationXmlDocumentWithLocationIElementLocationint
eropRegistrationdefaultConfigurationconfigurationMicrosoft.Build.EvaluationSyste
m.GlobalizationbuildActionSystem.ReflectionICollectionXmlAttributeCollectionProj
ectCollectionMicrosoft.Build.Constructionget_Conditionset_ConditionNotExpectedEx
ceptionNotImplementedExceptionInvalidProjectFileExceptionArgumentExceptionsoluti
onSystemDataCommonStringComparisonnoWarnRelativePathToCopyToFileInfoCultureInfoC
ompSwitchInfocompSwitchInfoExtractSwitchInfoFileSystemInfoDirectoryInfovisualStu
diobufferToReadIntovTwoXmlNamedNodeMapECSharpvisualJSharpcSharpAddItemGroupstart
upServicesItemGroupreferencesItemGroupfilesItemGroupimportsItemGroupAddPropertyG
roupPopulatePropertyGroupconfigPropertyGroupglobalPropertyGrouppropertyGroupAltD

irectorySeparatorCharIsNumberOldVSProjectFileReaderStringReaderXmlReaderStreamRe
aderXmlTextReaderStringBuilderfolderReadLineIntoInternalBufferstartIndexIntoBuff
erResourceManagerProjectElementContainerToUpperStringComparerSolutionParserAddit
ionalOptionsParserProjectFileConverterToLowerconfigplatformSeparatorIEnumeratorG
etEnumeratorMatchEvaluator.ctor.cctorswitchStrSwitchIDsswitchIDsSystem.Diagnosti
csprojectTypeGuidsReplaceNonEscapingAmpersandsSystem.Runtime.InteropServicesstar
tupServicesSystem.Runtime.CompilerServiceswebReferencesreferencesSystem.Resource
ssharedResourcesAssemblyResourcesMicrosoft.Build.Conversion.Strings.resourcesDeb
uggingModesget_ChildNodesvalidCompilerSwitchescodeAnalysisRuleAssembliesResource
UtilitiesProjectXmlUtilitiesProjectErrorUtilitiesentitiesget_PropertieswebRefEna
blePropertiesuserPropertiesGetFilesfileswebRefEnableSqlTypesAddXMakePropertiesFr
omXMLAttributesget_Attributesget_HasAttributesVSProjectAttributesfileUpgradeFlag
sdisabledVBWarningsget_ConversionWarningsconversionWarningsget_SolutionParserWar
ningsXMakeProjectStringsProjectLoadSettingsprojectLoadSettingsotherProjectSettin
gssettingsLegacyFrameworkPathsFixCodeAnalysisPathsEqualsdebugSymbolsget_ItemsCon
tainsxmlnsSTM_DisableLangExtensionsget_ProjectExtensionsVBSpecificConversionsFSh
arpSpecificConversionsSystem.Text.RegularExpressionsSystem.CollectionsProcessAdd
itionalOptionsadditionalOptionsMicrosoft.Build.Exceptionsget_PropertyGroupsget_C
harsReplaceSpecialCharactersSDEVBTargetsSDECSTargetsvisualBasicTargetsvisualJSha
rpTargetscsharpTargetsset_DefaultTargetsdefaultTargetsVerifyThrowProjectNoChildE
lementsVSProjectElementsget_ImportsAddFinalPropertiesAndIm    portsimportsExistswindowsCon
catObjectget_Projectset_ProjectGetRelativePathToReferencedProjectVerifyThrowInva
lidProjectConvertInMemoryToMSBuildProjectofficeProjectxmakeProjectget_Containing
ProjectisTriumphProjectisMyTypeAlreadySetInOriginalProjectvisualStudioProjectpro
jectFixTargetFrameworkSubsetIsHexDigitSplitget_DefaultProjectMetadataElementThro
wProjectInvalidChildElementProcessBuildElementbuildElementProcessServiceElements
erviceElementProcessReferenceElementreferenceElementProcessIncludeElementinclude
ElementProcessLanguageElementlanguageElementProcessFileElementfileElementProcess
ConfigElementconfigElementXmlElementxmlElementProjectItemElementProcessPlatformE
lementplatformElementProcessInteropRegistrationElementinteropRegistrationElement
ProjectItemGroupElementCreatePropertyGroupElementProjectPropertyGroupElementProc
essFolderElementfolderElementProcessStartupServicesElementstartupServicesElement
ProcessReferencesElementreferencesElementProcessUserPropertiesElementuserPropert
iesElementProcessFilesElementfilesElementProcessSettingsElementProcessOtherProje
ctSettingsElementotherProjectSettingsElementsettingsElementCreateProjectExtensio
nsElementProcessImportsElementimportsElementProcessVisualStudioProjectElementvis
ualStudioProjectElementProjectRootElementCreateImportElementProcessImportElement
ProjectImportElementimportElementProjectPropertyElementEnvironmentXmlDocumentVer
ifyThrowArgumentget_Parentget_CurrentFindPropertyIfPresentcontentpreBuildEventpo
stBuildEventerrorReportPromptDoConverterrorReportAddImporttriumphImportimportpre
servenewestXmlNodeListArrayListcopytooutputMoveNextSystem.TextxmlAttributeTextVe
rifyThrowRegextargetsFilenamePrefixconfigplatformPrefixconfigurationPrefiximport
PrefixconfigplatformSuffixconfigurationSuffixdeployTargetSuffiximportSuffixToArr
ayContainsKeyGetExecutingAssemblylibraryConvertInMemoryop_Equalityop_InequalityI
sNullOrEmptyIsFilePresentButEmptyemptyAddPropertySetProperty;/codepage:CodePage/x:Dis
ajbclpeaL:angJ
/
XCtPnAs/linkres:/linkresource:LinkResource/securescoping/ssSecureScoping/win32res:W
in32ResourceEMicrosoft.Build.Conversion.StringsSMicrosoft.Build.Conversion.Strin
gs.sharedOCannot write past end of user's buffer.!charactersToRead= *"[^"]*"= *'[^'
]*'<
&lt;> &gt; Caller passed in a string that doesn't have an '&' character i
bcagsitqrluacrlvieudtruaildecsbhotvsdi31maenehlt42rtuoieaTUOIEAcyshcHepY
p
m
f
A
C
E
I
N
O
U
Y
a
c
e
i
n
d
o
u
y
S
s
neurRiecmncNlpils2tfaztAuirlimeimldngef
ds
A
OO
a
oio
lnuaAoomeEpcfl13yaOeiEatEtgTcilhHuoitnc
c
s
E
sI
gU
e
i
u
y
e.iorm&rediaclmftirlpigao;lqdueop
go
qAanulropathsaahmyprB
eaegptoasGlatmgmtamDaeclrtdaeEgpsniblsopniexcZ
le taEtaThcetnatpound
IaomtbadKaMpupNauXiOmicronPiRhoSigmaTauUpsilonPhiChiPsiOmegaalpha
L
betagammadeltaepsilon zet
sesahiiarlgmeqmlgnbruiesadpolrfaopsmlriur
t
d
D
h
p
l
r
w
gnienmuwoaelnxtlfPjtiatrzaokraiwumasmjuipdlepceirsaamiolarneglopfemnisnprydhmaioschmidpassiholml
z
ib
seaqgruarotrhseqtuau
osasyrbmrquuposlidhr
qpauirovrdquod
beadnrqsrupo h
eamrsrpcrarr
lArr
uepfthoAaliewrrdomateoslsr4tldcsrilaaul
f
t
o
l
r
s
h
mdrmbaeiAsnrc+gptreMixsisir
p
tdnadoreAgnomrOgtprlaitdocsnyPzeyfnrimaolpnbhjrnalAecnarcegrtiqaFlunidlvoelri+ecsgaiMiepnscnsuoibptnsigunNptneiwProjen
p
c
s
pcsrtuoFbdisluemAmps
ipunlbuiescatiosnuIpceonp1lAus semblyKey
ContainerNameAssemblyName3AssemblyOriginatorKeyFileRootNamespaceStartupObject3Confi
gurationOverrideFile#DocumentationFileOutputPath'ProjectFileNotFound)NoRootProjec
tElement'VisualStudioProjectProject4.0 $(MSBuildExtensionsPath)\Microsoft\Windows W
orkflow Foundation\v3.0\v3.5\)$(MSBuildToolsPath)\S$(MSBuildBinPath)\Microsoft.Win
FX.targets-TargetFrameworkVersion
v3.0.xamlGeneratorMSBuild:CompileSubTypeDesi
gner!ProjectReference.vcproj.vcxproj!ProjectTypeGuidsM{60dc8134-eba5-43b8-bcc9-bb
4bc16c2548}.csprojM{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}.vbprojM{F184B08F-C81C-45

Cl6i-eAn5t7-FT-a5rAgBeDt9F9r9a1mFe2w8oFr}k'PUrnorfeicloegyni$(zMeSdBEulielmdeEnxttBeunislido+TnsaPragteht)F\rFaSmheawropr\k1S.u0b\sMeitcrosoft.FSha
F
rp.Targets}$(MSBuildExtensionsPath32)\FSharp\1.0\Microsoft.FSharp.Targets $(MSBuild
ExtensionsPath32)\..\Microsoft F#\v4.0\Microsoft.FSharp.TargetsyExists('$(MSBuil
dToolsPath)\Microsoft.Build.Tasks.v4.0.dll'){!Exists('$(MSBuildToolsPath)\Microso
ft.Build.Tasks.v4.0.dll')ReferencemscorlibFSharp.Corec$(MSBuildToolsPath)\Microsoft.
VoiWsauranl4B2a3s5i3c4.2t3a5r4g4e2t3s5_5$,(MSE
N
BxupielcdtBeidnPvaatlhi)d\MPircorjoescotfPtr.oVpiesrutaylEBlaesmiecn.tGarogueptsto add properties to.
OExpected <VisualStudioProject> element.IExpected valid XMake project object.Proj
eScHtATRyPpVeI9SPUrAoLjJeScHtATRyPpVeiCsaunanloBtaBseiCcoEnCvSeHrAtRePdE)NViosAutatlrBiabsuitce?sMEuxlpteicptleedLanguageNodesNotAllowed1Un
C
recognizedChildElementIExpected valid XML language element.ProjectGuid!MissingAtt
rnyiyTbCyuPptUePCLloanctfafilogPrumro+adtu'ic$ot(nVPDelerabstuifgoo5nrSm'c)$h'(eCm=oa=nVfe'ir'gsuiroan{
M
A
t24i.Do06n2)8'B5=B=-2'F'BCx-846AA6-8C16-197242AEB884};{FAE04EC0
-301F-11D3-BF4B-00C04F79EFBC}VisualStudio <FlavorProperties GUID="{FAE04EC0-301F-11D3
-BF4B-00C04F79EFBC}">
< HostingProcess disable="1" />
</FlavorProperties> {68B1623D-7FB9-47D8-8664-7ECEA3297D4F};{F184B08F-C81C-45F6-A57F-
5ABD9991F28F} <FlavorProperties GUID="{F184B08F-C81C-45F6-A57F-5ABD9991F28F}">
<HostingProcess disable="1" />
</FlavorProperties>FilesStartupServicesUserProperties)OtherProjectSettings!FileUpgra
dienFElxaeg;sW2i0ndowsForvm2s.W0ithCustomSubMainConsoleExeLibraryWindowsEmpty{$(MSBuildToolsPa
W
th)\Microsoft.CompactFramework.CSharp.targets $(MSBuildToolsPath)\Microsoft.Compact
Framework.VisualBasic.targetsY$(MSBuildToolsPath)\Microsoft.CSharp.targetse$(MSB
uildToolsPath)\Microsoft.VisualJSharp.targets=$(MSBuildToolsPath)\Microsoft..targ
etsPreBuildEvent%%25PostBuildEvent3Expected <Build> element.eExpected valid global P
rojectPropertyElementGroup.SettingsReferencesImports9Expected <Settings> element.Ou
topnuftiTgy5pEex pected <Config> element.
C
Name#AdditionalOptionsSelectedDevice%Depl
oymentPlatform!IncrementalBuild .xml_42016,42017,42018,42019,42032,42353,42354,4
2r3o5m5pDteIbu'g$T(yCpoenDfeibguugrSaytmibonl)s|$(Platftorrume)' ==fu'l|l'fa'lIsneteropRegniosnterEartrioornR9eEpxopretcted <Platfor
p
m> element.
v1.0Pocket PCSmartphoneWindows CEI3C41C503-53EF-4c2a-8DD4-A8217CAD1
15EPocketPCI4DE813A2-67E0-4a00-945C-3188240A8243IE2BECB1F-8C8C-41ba-B736-9BE7D946A3
98WindowsCEPlatformID%PlatformFamilyNameDeployDirSuffix$(AssemblyName)OExpected <Inte
ropRegistration> element.QExpected configuration's property group.=Expected <Refe
rences> element.;Expected <Reference> element.KReceived null ProjectItemGroupEle
ment-Designer%System.Data.CommonSystem.SRMSCorLib
GuidM{00000000-0000-0000-0000-00
0000000000}COMReference.csdproj.vbdproj)System.Windows.FormsHintPathCMICROSOFT.NET\FR
AMEWORK\V1.0.3705CMICROSOFT.NET\FRAMEWORK\V1.1.4322aMICROSOFT VISUAL JSHARP .NET
\FRAMEWORK\V1.0.4205ASolution file already passed in!QNeed project Guid to find 
solution file.*.sln
.sln*YBug: RelativePathTo can't handle wild cards.1Need va
lid project guid.ACouldNotFindCompleteSolutionFile?ProjectNotListingInSolutionFi
le
httpOUnsupportedProjectToProjectWebReference7Expected <Imports> element.
IEmpxopretc5tEexdpevcatleid <xImmapkoertp>roejleecmtenotb.jNeacmte.space+UnrecognizedAttribute3Expected <Files>
I
element.IncludeExclude+ExcludeFoundInProject7Expected <Include> element.
Foildeer1Expected <File> element.RelPath LinkBuildAction None.resxContent+CopyToOu
tputDirectoryPreserveNewest!EmptyResxRemoved5Expected <Folder> element.WebReferenc
esWebReferenceUrl;WebReference_EnableProperties7WebReference_EnableSQLTypesMWebRe
ference_EnableLegacyEventingModel\GExpected <StartupServices> element.Service7Exp
ected <Service> element.IDEExpected <UserProperties> element.%OfficeDocumentPath#
OfficeProjectTypeOfficeProjectIFAE04EC0-301F-11D3-BF4B-00C04F79EFBCIF184B08F-C81C-
45F6-A57F-5ABD9991F28FIE6FDF86B-F3D1-11D4-8576-0002A516ECE8 This project is not recog
nized as one of the following 3 languages:  C#, VB, VJ#Q{BAA0C2D2-18E2-41B9-852F
-F413020CAA33};{}5CodeAnalysisRuleAssembliesFxCop\\rulesS # OG8;M             

 !  % 1 % ! 1  A    )   I  %
 -YUm % Y %
 - -  %   
 1 ! 1  a  %
 UM YM -M  e  %  
 UQ YQ -Q  ] %  a
E -}        
   i - 

 

 

9  


  

Q-QE% -!
l %% !% %% I!M%-%% %-MMQ3 )% - % 1 % 1 % 1 -M

 IEiE )) MEi )) Q MQME )   ) 




 )  E  ) 
 M  i ) 

M  i ) 

QQiI-QQ-z\V
Q
4?_ 
:j
$  $ RvSA1
l LW.
;
6! r <

w wO)2 !d\L

(]b,e,=t]o-~^ =& C e m 4MZ BMICROSOFT.NET\FRAMEWORK\V1.0.3705BMICROSOFT.NET\FRA


RP .NET\FRAMEWORK\V1.0.4205&VisualStudioProjectVISUALJSHARP

CSHARPVisualBasicECSHARPEVisualBasic
BuildSettings

ConfigPlatform&InteropRegistrationReferencesReference
FilesImports

ImportIncludeExcludFei le

FolderStartupServicesServiceUserProperties(OtherProjectSettingsPocket PCWindows CESmar


tphone$System.Data.CommonSystem.SRMSCorLibRelPatN
ha mGeu idProjectProjectType
LocalAssemblyNameNamespaceILDi nkBuildActioNno ne EmbeddedResourceWebReferencesWebReferenc
eUrlProjectGuidPreBuildEventPostBuildEventProductVersionSchemaVersionOutputPath$Office
DocumentPath"OfficeProjectTypeOfficeProject"AdditionalOptionsSelectedDevice$Deploy
mentPlatform IncrementalBuildHintPath"DocumentationFileDebugTypneo nf
eu llErrorReport

promptMSBuildVersion
xmlns($(MSBuildToolsPath)\.targetsMicrosoft.

CSharpVisualJSharp $(MSBuildExtensionsPath)\Microsoft\VisualStudio\v9.0\OfficeTools\
Microsoft.VisualStudio.OfficeTools.targets0 '$(Configuration)' == '' Configuration
& '$(Platform)' == 'H '$(Configuration)|$(Platform)' == '|
Debug

AnyCPUx86DebugSymbolsCOMReference ProjectReferenceAutoGenVisualStudio:WebReference_En
ableProperties6WebReference_EnableSQLTypesLWebReference_EnableLegacyEventingMode
lfhttp://schemas.microsoft.com/developer/msbuild/2003HFAE04EC0-301F-11D3-BF4B-00
C04F79EFBCHF184B08F-C81C-45F6-A57F-5ABD9991F28FHE6FDF86B-F3D1-11D4-8576-0002A516
ECE8HBAA0C2D2-18E2-41B9-852F-F413020CAA33H4D628B5B-2FBC-4AA6-8C16-197242AEB884H6
8B1623D-7FB9-47D8-8664-7ECEA3297D4FH60dc8134-eba5-43b8-bcc9-bb4bc16c2548 Project
TypeGuidsPlatformID$PlatformFamilyNameDeployDirSuffix <FlavorProperties GUID="{FAE04E
C0-301F-11D3-BF4B-00C04F79EFBC}">
<HostingProcess disable="1" />
</FlavorProperties> <FlavorProperties GUID="{F184B08F-C81C-45F6-A57F-5ABD9991F28F}"
>
< HostingProcess disable="1" />
</FlavorProperties>RMicrosoft.CompactFramework.CSharp.targets\Microsoft.CompactF
ramework.VisualBasic.targets,TargetFrameworkVersion*TargetFrameworkSubset,Target
FrameworkProfile

Clienvt1 .v
02 .0

NoWarn^42016,42017,42018,42019,42032,42353,42354,4235.5x ml.csdproj.vbdproj.csproj.vbp
roj

MyTypeWeb:WindowsFormsWithCustomSubMainWindows4CodeAnalysisRuleAssembliesConsole
EmptyExeLibrary

WinExeOutputType FileUpgradeFlagsContent*CopyToOutputDirectoryPreserveNewest4.0b$(MS
BuildToolsPath)\Microsoft.VisualBasic.targets^$(MSBuildBinPath)\Microsoft.Visual
Basic.targets .  System.Security.Permissions.SecurityPermissionAttribute, mscorlib, Vers
ion=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 TU System.Security.Permi
ssions.SecurityPermissionFlag, mscorlib, Version=4.0.0.0, Culture=neutral, Publi
cKeyToken=b77a5c561934e089Flags
  

)%-1 

 ! AE5IE9E=9E=5MEI MEI MEI  E Q%(((4/ Microsoft Corporation. All rights reserved.4.0.30319.1
(#Mi

ionMicrosoft .NET Framework*%f:\dd\tools\devdiv\FinalPublicKey.snk 

4.0.0.0
e n-USTWrapNonExceptionThrows)$634AFA8F-4271-4e2c-9525-D0B75DAA821A u oMicrosoft.Build.Conve
on.Unittest, PublicKey=002400000480000094000000060200000024000052534131000400000
100010007d1fa57c4aed9f0a32e84aa0faefd0de9e8fd6aec8f87fb03766c834c99921eb23be79ad
9d5dcc1dd9ad236132102900b723cf980957fc4e177108fc607774f29e8320e92ea05ece4e821c0a
5efe8f1645c4c0c93c1ab99285d622caa652c1dfad63d745d6f2de5f17e5eaf0fc4963d261c8a124
36518206dc093344d5ad293 } wMicrosoft.Build.Conversion.Whidbey.Unittest, PublicKey=002
400000480000094000000060200000024000052534131000400000100010007d1fa57c4aed9f0a32
e84aa0faefd0de9e8fd6aec8f87fb03766c834c99921eb23be79ad9d5dcc1dd9ad236132102900b7
23cf980957fc4e177108fc607774f29e8320e92ea05ece4e821c0a5efe8f1645c4c0c93c1ab99285
1.0.21-0
d622caa652c1dfad63d745d6f2de5f17e5eaf0fc4963d261c8a12436518206dc093344d5ad293
TOPerformance critical to inline this type of method across NGen image boun
daries'"Use parameterless overload instead(#Use parameterless overload instead.72Us
e parameterless ConvertInMemory() method instead

 lSystem.Resources.ResourceReader, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKe


yToken=b77a5c561934e089#System.Resources.RuntimeResourceSetPADPADP g 9_5 gRj3E
sxRemoved * ExcludeFoundInProject MissingAttribute *MissingNewProjectFile*MissingOldProje
ctFile >MultipleLanguageNodesNotAllowedG(NoAttributesExpected (NoRootProjectElement&Pr
ojectFileNotFound>ProjectNotListingInSolutionFile>8ProjectTypeCannotBeConverted*Unrec
ognizedAttributeD0UnrecognizedChildElement}&UnrecognizedElementNUnsupportedProjectTo
ProjectWebReference MSB2013: The project-to-project reference with GUID {0} could not
be converted because a valid .SLN file containing all projects could not be foun
d.aMSB2016: Found an empty .RESX file in the project ({0}). Removing it from the
converted project. M SB2015: Found an <Exclude> element in the original project file
. This cannot be converted to Visual Studio .NET and is being ignored.EMSB2001:
Element <{0}> does not contain the required attribute "{1}".<MSB2002: The file na
me of the new project must be specified.<MSB2003: The file name of the old projec
t must be specified.BMSB2004: Element <{0}> cannot contain more than one language
node.1MSB2005: Element <{0}> cannot contain attributes.BMSB2006: The project file
does not contain the root element <{0}>.:MSB2007: Visual Studio cannot find the
project file "{0}".wMSB2014: The project-to-project reference with GUID {0} canno
t be converted because it is not listed in the file '{1}'. MSB2008: This Visual Stud
io project system cannot convert "{0}" projects. It can only be used to convert
C#, VB, and VJ# client projects.7MSB2009: Attribute "{0}" of element <{1}> is no
t valid.;MSB2010: Child element <{0}> of element <{1}> is not valid.$MSB2011: Elem
ent <{0}> is not valid.MSB2012: Project-to-project references to web projects are n
o longer supported and therefore cannot be converted. Please remove the referen
ce to project {0} and add it again.=M>F 3T_ t*XvKWd8FZz`k.M dV[7rIz jH w
g 9iJ k<W3 0 g  Ko  RSDSiS @x*r
D:\Temp\1\ilca2a83e267-7f7d-4216-aa5c-0ca1e5bfb4f4\Microsoft.Build.Conversion.v4.0
.pdb'A 3_CorDllMainmscoree.dll% M^ 0   H X HH4VS_VERSION_INFOovov?
 StringFileInfo 0 40904B
np$FileDescriptionMicrosoft.Build.Conversion.v4.0.dllZFileVersion4.0.30319.1 built 
by: RTMRelh$InternalNameMicrosoft.Build.Conversion.v4.0.dll / LegalCopyright Microsoft
Corporation.  All rights reserved.p$OriginalFilenameMicrosoft.Build.Conversion.v
4.0.dllTProductNameMicrosoft .NET Framework<

ProductVersion4.0.30319.14CommentsFlavor=Retail2
anslation
 

PrivateBuildDDBLD766DVarFileInfo$Tr

S7^ 0 Zm10* H
+0h
+ 7Z0X03
+ 70%  <<<Obsolete>>>0!0
+@ V *j

1 0 `0 L 
.
120825070000Z0y1
070822223102Z
P\ 0
0+0p1+0)UU"Copyright
US10U
(c) 1997 Microsoft Corp.10UMicrosoft Corporation1!0UMicr
Washington10URedmond10U
Microsoft
0 
* Corporation1#0!
H
UMicrosoft Code Signing PCA0 " 0
#A$b
y}]E941%5Iw
E J /"J-|o
EqF
; 99)f;-
kLRb
2'Hl
 MIl/$>e#
c \
H uE
P %+
8P ' N0== l9.4.
}b

xf Os c,2EJ ;PSfQy V> P n5{$Rf= N+~3n G J n  S 0 0U%

0
+]h
0p

U)}s
 Akf
O8|-=4
0
[ pir
94
b=7|j8m
#Q~
zB{
j#
M\c
r0p1+0)
#i
Z9` U 
"Copyright
3;4|

.(c)
) Bk(q8
1997 Microsoft

Corp.10UMicrosoft Corporati

*RA^0
_
,(i0
p

Brv0 z 0 b
0ay1
>0
U*UHS10U
Washington10URedmond10U
Microsoft Corporation1#0!
110307224029Z0
091207224029Z
10
UUMS1
icrosoft
0U
Code Signing PCA0
Washington10URedmond10U
Microsoft
0
0UMOPR1

0*UMCorporation1
Hicrosoft

Corporation0 " 0
q
0 ErSk O#=Y@8s & S < B 8auM\F^i[s  )DdY/ ]n9 eu

B5? E
}K[vr
SI0 |^zZ
w#} 5
7i2$
]PKGmU 
 TN
 0B1U
0U%

0
+
0{DO
(Uo8BvCB$e4uq0
xs2 *_ HU
t 0U r7:p
0U#0 vp[N
Q q
QD.Dc0D
(ps{V4Z
U=0;0975 
3http://crl.microsoft.com/pki/c
rN

190915070000Z0y1
aun
09`
060916010447Z
p1+0)+Z
U"*Copyright
HjT;1_,nM*

0 (c) 1997
UUS1Microsoft
0v{U *
Corp.1
0U
Microsoft
rT n* Corporation1!0
o bKk=UMicrosoft
/zw9gjRoot
{ cAuthor
I&B
Washington10URedmond10U
Microsoft
0 
* Corporation1#0!
H
UMicrosoft Timestamping PCA0 " 0
 7nBJqH>S,2OR >3I1 ( dP K u ipfx'f Y")/@VvmdmJT

0
0+ U

[pir #Q~M r0p1+0)U"Copyright (c) 1997 Microsoft Corp.10UMicrosoft Corporatio

SuM
b1C|P
A0U *0a
UH0pE
0 sT?

-QS  9 V ;Q!i~k"Flm|"F  6~p]E

*|

(a|H !8 
2@S= f7 " wTQ:rD#0  0  
0ay1
-0
U*0UHS10U
Washington10URedmond10U
Microsoft Corporation1#0!
130725191217Z0
080725190217Z
10
UUMS1
icrosoft
0U
Timestamping PCA0
Washington10URedmond10U
Microsoft
0
0UMOPR1'0%

* Corporation1
HUnCipher DSE ESN:7A82-688A-9F921%0#UMicrosoft Time-Stamp Service0 " 0
 
BQz   7(vMPv * GVi ~M quCloq+|  ~a-0 &-v?F 7[h

0
0+U
0
f)Z
* H ~\$Yk v"A7H7 p3( t(u*

O ? 4 dNP;L %

IB {- ]) v `'ocB(X: ; @ WFVk MV0@EN (Qw&


Washington10URedmond10U
Microsoft Corporation1#0!UMicrosoft Code Signing PCA
a>0
1+ 0 * H

:E1 0  0 0y10

+ 70
+ 710

+ 70#
+ 7

1* C
H 0v/| _

0r

1d0bH
H#8K
0g Fo
*MiHcr}B<2
osoft.Build.Conkv
versiqon^
.v4.OH3
0.dll http://microsoft.com0
 mEnI M+_M

39dC,

j
Zx Ek~
$
xMFE,

W& # NZq5s=$YSCc8{eexa i2S.n"IJ 

k(&1W b <%u8-p1 0 

* H

Z?}B &}'x5Rf

00 0y10
UUS10U
Washington10URedmond10U
Microsoft Corporation1#0!UMicrosoft Timestamping PCA
0a~E
100318234317Z0#
- 5Qo
*10O+#HWS4X
]0
 &#^~7mR
* /#
H ~Y`K*3.
0
w!1G  F=)Ob Hk

i' F 

b`N EmC1 IF miVy\ r1VN ,4 m ;b  &#F p#>-iTr?&

71'Ju

b +g NW`l; X zl` =  MZ @  


$PELhK" v O^  t @ _ Os,``

!L!This program cannot be run in DOS mod

H.text  `.rsrcst@@.reloc

`*@B HL(V
-*-**oo( 
,4o( 
,*o( 
,*ooo 
* *( 
*.s *"( 
*6( 
( 
*0gs 
} 
( 
} 
{ 
-( 
} 
~ 
1s 
} 
} 
*1s 
} 
} 
*} 
*^s 
} 
( 
s
z0Fo
( 
o 
+o
(
(
(
o
-
,o


td 0[-,

*';
{ 
*0 { 

EpR+u{ 
o
*{ 
o
#
+{ 
o
(
#X{ 
o
2* #|
(
#* #*(*0 { 

EpR+u{ 
o
*{ 
o
j
+{ 
o
(
jX{ 
o
2* j|
(
j* j*(*0B{ 
E +{ 
o
*{ 
o
***(*
*
*{ 
*
*s
zs
z{ 
*0 { 
EZ0+S{ 
o
*(
(
,:(

(
*{ 
|
(
o
,|
(
*(rps
z0 { 
EQ!+d{ 
o
*(
&(
*{ 
|
(
o
,s
}
*(
*s
}
} 
*(*s
zs
z0 #rgp(0{ 
E  S *{ 
o
*(
,rops
z(
{ 
3 { 
s
o
*{ 
o
*{ 
|
(
o
,rops
z(
{ 
s 
o
*s
}
} 
*0
(
*0m{ 
EG+G{ 
o
*(
*{ 
|

(
o
,|
g} 
***(*0 { 
Ei8+b{ 
o
*(
(
,H(

(
j*{ 
|
(
o
,|
(
j*(j*s
z } 
} 
| 
g} 
*s
zs
zs
z0_{ 
E0$+9{ 
o
l*{ 
o
o*{
s
*(
o
*(*(
*s
zs
zs
z0>{ 
E+{ 
o
*(
s
*(*s
z0{Y 
o

+&(
{ 
( 
o
,
#(
-o

s

k

**

3?0H

+4{ 
{ 
o 
(
o
,{ 
o
*X
{ 
o
2*0
{ 
 rp({ 
@ { 
o
~ 
2t{ 
o
Z{ 
s
} 
{ 
o
+!(
{ 
( 
(
o
(
-o

} 
} 
*s
} 
{ 
{ 
o
|
g} 
*^. nr%p(
(
(

*:( 
}
*j{
,{
*r[ps
z2o
g**N{
}
**"}
*:( 
}
*06{
o
(
#{
o
(
js
*0

{
o
(
#*0

{
o
(
j*2(
*2{
o

*2{
o
*"}
*"{
*s
*>}
}
*{
*{
*( 
*^~
s

~
*
*
*
*
*Fr p ( *Fr p (*
s**Jr

p (*0
}
*(
**2rp(U*0s 
}"( 
r $p(0}$}#s
}&s
}'s
}s
}s
} s
}*}+s},{,os
}-~s
}/}s
}0uY|*s{$
o
}1*{s%
*}2{}2*0r~{-"
r$
% psU ~ *N{,

(
r$p(or$p(
rp(
,(D}(,o}%+s }%{%o -{,{o,(]{%(ioSu3}oSu}oSuE}oSuF}{soW{;soW{ soW{fsoW{
soW{%o { %o ( 
u{,o
 {{su
oWo
&( {,( { z}#{'o
&{o
&
, 
(
*A4

N s
(
&*0Xr)%p(nr$p(noSuE}{ooSuF}{o
(i*0poSuE}{so
o(4
2o,&o*,o (r sds
({o*0 {"%
rS%p(0r)%p(nrk%p(n(p(m{%o s 
{&oo
{'o
&


, 
(
*tv
0(_
{o"
%*(0H
r)%p(nrk%p(n(p{&o
s
o
+(
(z(
-}

}#
oQ

,(

{'o
&(l{o
&{&o
r %p({o
 r%p(,

{(oX( {%o ,

{2o(q}#{,{zr$p(
rp(
,(H*(Jf{} `X0=([(`
oV-{,{oW}(a*-40{"%(
{!,ou
.ou5

.'.+Z..
.;+M(+
(t+](+(u+J(+

(v
 +7
(&p+ ou ((w+#r

,(
*

:{,o*6{,o*0


 s5

}

}

}

{
r m&p(0
{
o r &p(
{
o oi
,A{.,{%ooUr&p("+8{%oUo}.+{%o-{%s>o(ps6 
}

{
o oj(
9
{
o oir'p({*
{
o oio
-@r 'p%{+%X}+ (
{ *
{
o oio

{
o 
{
o oirpokoi(
ok
{
o {%o s 

{
o

( 29{"%

(
{ 
o!oXr'p({&o
o
(
+6
(
o ,oo o!+r'p(
- 


,

(


{
o om_(s
{

{
o o!
{
o ol
{
o op(
s o{!,B
{
o ssL
{
o 
{
o 
{
( zU 
{
o s} 7 s
(
&

{

(j*AL Cc s

x0 o,*o#( r 'po#(o#o%o0-+o${%oQ( 


 o'+3(r s

{(1,
o

{X i2*05u  
o
  rpou  (*. ( 
*0ju0
-,&
.o
=s
o
Q,ooo>sL

o
 o}((z*0"
{"%(
{!,sz,.{%o , !{2o3
{2oo(t,(


-u0
<o s
ux
+oQ (F,,

,2
o

o=
o>

{2o
-1os
{o%
Qo
ooj+os]
*o0%o{)
o%sL
 (y}(*Y]km } !{X})*Z{#3

 (*B{#(*03{#.)r(p 
({#
*0{oX{oX{oX{oX{
oX{o^}}!}{&o
{o^}}.{*o
{ o
}+{,4{o
+ o
o /o
o
-
,o


rM(p(
rp(
,{%ooD*
08{,{oW%{%
X&}{oX* %{X%}*0%(1,@{o#oY{o--(ro>
{ o+j,'o&,o&o'{o!o+@o&,8o&,0o&o&(

-{o!oo&o'*0 o ,io+T
{ ooo#( , )o(g

sL
{ o
o !o!s 

-*:XI0i2
(x
0k({soZ

{ (
o

-s

{ (
o
o !(
o
&{o\*0X {oRo
o^,(o+-

o^o,o)-

o\o*{o[(x*0 ! }!{(
o
r (p ({(
o
&o
oS
uY9 o@ 
{&o
o
+E
(
os

~

sr)p 
-~ 


 

o(

o3g{&o
o
-UuoY
oS
,M (
~
sr)p 


oo

oo(|{{%o o]{&o
o
+8(
o,&{oo%-&ssLo
- 

(

{o]{&o
s
o

+{

(
o,i{ooo

-ossLoo{(,ooY+}((z

(
:y

}

{o
-

{o
&*(qRiE n0"o
8o
E{-99U98p{%o ,{{/oQo_{/(y8_{{.{1o\8Cs


+d{({{2o,E
[ {o
&{
o(
o
&
o
{ o
r3)p(
X 

{32 {o\(x8{-3l{ {.(


o

,{0o(
o
-6{,ouE{{.{0ooo\{{.{0o\+#r)p 
:%


{ - 

(o


,o

*A 

0 # {"%

(
{&oQo
,c{&oQo
o oVu/,o{(, {&oQo
ooY+}((z
, 
(
* 
0Y$
{"%(
o-o-{&oo
&{&o
-

{'o
&
,(
*LN
0Ku%Y{-<
oS
os
{%o
(
o
s}{*0&

({
"%
{: }{&o
s
o
+`(
o
o,V
P-o-
o -,osLo+o{oW(z(
- }

,
(
*<m
0  ' {!: 

({
"%
{-o
o 
o!
,Ro
o
o"
,?{-o
o 
o#
&{&o
o 
o$
,o(z
,
(
}*
 {-o
o 
o%
-{-o
o 
o&
*0({%o 
3{%o -+(


toU{}1 o
{ / o{0o,1o'
+ o(
o&o

-

,o

oo)
-

so&,?o*
+ o+
oC
 oDo&o 
-

,o

(
&, *
 (l 

+

a,/
{1o{0o{/ouoV*0)

({
"%
{!, {#.{}({&o
o
+4(
o,$ossL{o
- 

o(

(l
,
(
*BA  
J(js>(*0uo
s,
o
(r)p(0o
}Co
}Go
}Ho
};o
s,
}@o
s}J*{9*"}9*{L*"}L*{:*"}:*{;*"};*{<*"}<*{M*"}M*{=*"}=*{>~R-s-
R~Rs.
*{?*0?*,4o*
+ o+
r *pr*p(1o
-
,o


}?*
#-
{@~S-s-
S~Ss.
*0[+o/
s0
}@o1
+,o2
{@(3
(3
(4
sco5
o
-
,o


*8P
{A*"}A*{N*"}N*{B*0?,,4o'
+o(
r*pr*p(1o
-
,o


}B*
#-
{C*Zr*p("}C*{D*"}D*{E*"}E*{G*"}G*{H*"}H*2{Jo*{I*"}I*{K*"}K*Brsp (*Brp 0u(*2rp(*6rp
((
*2r
BrWp(0u
*~(7
*Br
{8*p"
 }
8*{>*Nr+p(}>*{@*:(( [*{F*"}F*6({J*{O*"}O*{P*"}P*{Q*"}Q*N({Jo*s*0|8oD
o+|LoA*s*00-(
( 
,*(7
(8

(E,

0}9(9
*
o:
}:r"*p};}=s;
}>s;
}@}C}H(9
o<
}I}K( 
}>(( r **p(
rp(
,}=rZ*p(
rp(
,}<(*0r}9(9
o:
}:r"*p};}=s;
}>s;
}@}C}H(9
o<
}I}K( 
o * 0}9(9
o:
}:r"*p};}=s;
}>s;
}@}C}H(9
o<
}I}K( 
r *p({8}8{:}:{;};{=}={>-+{>s,
}>{?-+{?s=
}?{@-+{@s,
}@{A}A{B-+{Bs>
}B{C}C{D}D{E}E{F}F{G}G{9}9{J}J{H}H{J}J{I}I{<}<o(o ( o ( { K}K{L}L*{J,*( { >{@(s}J*0.{E,
,*rV+p(
,(?
,}E*(
o@
rx+p(
,(?
,}E*(
oA

+F
-6oC
(D

oB

&%rx+p(
(?
,rx+p(
}E6
Xi2( 
,#rx+p(
(?
,rx+p(
}E*w ow

*ow

*.( 7*0T( 
r +p(0rS%p(0(((sE
}\}]}^}`*{a*{b*{c*{\*N(jsF
( * {_*"}_*{d*{e*"}e*0N/{`({`,% ,
((oP(q&+

(( &(**(*r+p(0oR(or+p((-((* , (oQtZo}](*(r",p(}[((of*"}a*"}b*"}c*"}d*0Q0(



- +{\o
&{[
s,(
&*6{[o*{f*{h*{h,{h,,{h+rV,p(}h*{g*N3}h}g*js
}f}g( 
*f( 
}jsH
}i*0T{ilssoI
{ i)ssoI
{issoI
{ iissoI
{issoI
{i;ssoI
{i


ssoI
s{
ioI
{irssoI
{i ssoI
{issoI
*0'1{ioJ
{iosoI
*{ioJ
or,p ({isoI
*V{isoI
*0:2
{ioK
-rn-p  ({jo*{p*{q*0U3(-2{o-#{n(o}o{ooU{o*{n(o
oU*r( 
(}n(*V( 
} o(*"}p*"}q*0( 
r-p(0r-p(0,{y+r-p(}y}|}}}{sL
} s M
} s N
} { s o O
{ s oO
{ s oO
{ s oO
{ s oO
{ s oO
(*{z*{|*{}*{{*0!4 
   ( {~*2{ o P
*2{ oQ
*2{ oR
*{ *{ * { ~ S
(T
r\.p(} *{ * { ~ S
(T
r .p(} *{ * { ~ S
(T
r.p(} *J{ oU
o * (r/p(0}~(*Z(}~(*05   ( r"/p(0r/p(0os!
{ o V
rB/p({ o W
r /p( 

o}~({ o X
{ o Y
&(*036  (r+p(0s"
( }~*07{{.{{+r0p(  ({z.{yoF+r 0p{|o ({yoCr0p{|o  ({y{|ooL
.+r 1p{|o   (}{(*0 8  

({z3oX+r[2p({ oP
 r23p({ s Z
o[
+(\
o(]
- 

(*]y({ oP
 r3p({ o R
r3p((*{zr4p{|o  { z (*0@9

+
{ z3*X

 i2r 4p{z  

(*0T:(^

{ { zoU
o{ oU
o{z.{z}z{yo:*>((*0;{yooo?
-*s_
o`
+~oa

oo(oo
(3-{yooo?

,5oo
+o

o
-


o`

,o

ob
=v*  

05<sc
+ood
oo-oe
(*0<=sc
o d
oooo3(o-*0 >{ o P
,N{ oQ
sZ
o[
+(\
os!

((]
- 

(}~o-oos z%(M0v?{ o V


r4p({ of

{ o W
rQ5p({ og
&{ oh
&o-o{ oP
-(*04@,)u
, { { 3{ {  **("
*:{ { a *~( 
o} o} * ~( 
o S} oU} * :o&(i
*0ZAs'
r5poj

,oi

(
-2((}(
 
} { { ( } * 0Bs'
{ 3

(} *08C,4{ 
Y E*{ { ((*(*:( 
} * Jr5pr6p(k
*0 sl
}  sl
}  sl
}  sl
} s m
}  sn
}  so
}  sl
}  so
}  sp
}  sq
}  sq
}  so
}  sr
} @ ss
} ( 
*{ *2{ ot
*2{ ou
*2{ ot
*2{ ou
*2{ ot
*2{ ou
*2{ ot
*2{ ou
*{ *2{ ov
*0Ds?
}
*2{ o w
*{ *"} *0Es
( 7o
{ o x
{ o y
{ o ooz
-sM

{ o oo{ 
oY
&{ o|
-{ sc
o}
,8{ o|
r
6poo ({ o ~
od
*0FE R!=8 { o oo 
&8{{ ooo 
&8_ry6p ( 8J{ ooo 
&{ oo 
8{ ooo 
&{ oo 
oh
&8{ o 
{ o 
&{ o 
o;{ o oz
-sM
{ o o{
oW
r7poo o (oY
&{ oo 
-s 

{ o  
o oo 
-ooo 
&oEDD 8 { o oo 
rj7p({ o oo 
8 { ooo 
r7p({ o oo 
8G{ ooo 
r&8poo ({ o oo 
oR
r 8poo ({ ooo 
o h
&{ oo 
,{ oo 
oh
8&(7
{ oooo 
r8p({ o o 
,{ oo 
+rV9po ({ o oo 
{ o o 
{ o ooo 
: (7o8{ ooo 
 r9p({ o oo 
{ o oz
-sM
{ o 
o{
oW
r:poo o ( o Y
&+(r :p o o ({ (7osPo 
*6{ o 
*0G{ oz
-*oR
*V(O{ o 
*V(O{ o 
*0?{ o 
,**V(O{ o 
*V(O{ o 
*0!?(N
r;p (*0?{ o 
-**0_H{ o 
-*,?,<o 
+( 

oo,X( 
-

o 
Y*!'H6{ o 
*boo(N*0G{ o z
-*oR
*0G{ oz
-( 
**0G{ o z
-( 
**0[I-Ks 
{ o 
o 

+( 
o-od
( 
-

*{ o~
*$>Voo(L*0{ o 
-**0oo(L
. **0J?{ o 
,*{ o 
,*{ o 
,*{ o 
,**0$?(N
-r;p ( *o* ( 
} } }}*{ *{*{*{*0i( 
r<p(
rp(
}r<p(
rp(
}r<p(
}{(
,( 
}(h*b{-*{oX*B{o<*^{-*{o*0#J{(^
o8s
o./o3{oo@+{oo=o.Jr=p o  o

( ( m8o;( 

r =po  o  o o  o o  oo oo oo ( o (o


r =p  o( o 
  o o   o o  oo oo oo ( o
 (n
 P*"A4r 0K{(^
o8s
r1>p oS
  oT ( {o

{oSo=oo,XoTooor>p(ooo( 

o ( o

-oo(

o
 
+!(o
oY.

oQ( {o3sZ
o[

8
(\
o ooS@r
?p 

o o 
oo 
( o sOo,oo+o( ,o( +o( o
o
(]
:!  

(n*0vL{(^
o8o

+:o
{oo
r{?p 
-
,o

o 

( o


s
(n*F]
0cM{(^
o8r ?p  ( { oHo

+o
(o
-
,o


*>X
( ( s)}s
}}*0N {oQ
s 
r ?p o{oJo
+5
o

oo3 r?p o ( 


-
,

o
o

( *=A~
oo}
*o{*0oS
O(t^
F}{oStE}*(h*jr'@p (s`*ro{ o4-f{o.-Y{o0-L{o,-{o2-rq@p ( *r @p  -( * 

( s 
{ o
o
+!(
{oC&(
-

o 

o 
1 {o41 (o-*
 {o40o
-{o3( {o
> '{o,=){o2={o4-0{o.-#{o0-rq@p ( 8{o0,3( r@{p  o0 (
8 {o.,0( rAp 


{o4 
 
(+o
rjCp(rCp  {o4 {o0 {o. {o
o
( ( * .0{oOo 3
(z*(ro 
-*{-8{{s}{oJ(+oo( {o,%{oOo 3 (p*(q*(u*0Po 
8 ( 
s
{o5o
+$o

{ o

(}
 o,oo 
o
-


,o

ou
12{o
o
rDp( o 
( {( 
:\

*-1^


 0Po 
8 ( 
s
{o5o
+$o

(}
 o,oo 
o
-


,o

ou
12{o
o
rDp( o 
( {( 
:\

*-1^


 0kQo 
,a{o5sZ
o[

+.(\
(},(s,({o
&+
(]
- 

*!;\r{oooo*0 R o 
,x{o5o
+Qo
(},@{oooo#(
rIEp(
,({o
&+o

-
,o

(u*]w
0S{o
s
 s 
o
o
8(
o 
9(|,Xr]Ep {o, {o2 {oOo  ( + \{o5o
+%o

(}
 (,{
 o
&+
-

o


,o

(
:0

(z*2

*0T8
!

{o5o
+ho
{
o 
,9{
o
/o

oooL.
oooo#s

o
-


,o

,<.+(+({o
&o 
1{o4= *%u 

0T8
j

{o5o
+ho
{
o 
,9{
o
1o

oooL.
oooo#s

o
-


,o

,<.+(+({o
&o 
1{o4='*u 

0Uo 
8( 

{o5o

8 

o
o{ooL.3X({  o
o ,9(  

1

-

-


,

3
+

o
:l


,

,

+

,
({( 
:

*0 


 0 Vo 
+f( 
{o5o
+%o

(}
 ,o
,oo1
-


,o

,
- 

({( 

*%2W

sz0Wo 

8( 
(|,Sr]Ep{ o,  {o2  {oOo  
+o
(},({+ o

-

(  d{o5o

,o

( 
:I

* *

0r-p(0r"Fp(0r6Fp(oo{oK(o
rlFp 
oo  o,ooo+ ( o*0o
{oOo Y E+
+({oOo X
+{oOo X
{o,{o2X*03X{oM,"o( 
{o
o**0EY{o
o

+(
o,(
-

**"30Z
o
+"
(

{-{2
3 3X+
( 
-
 

,#{o
oXX{oOo 2 *

8
o
o( {o
X X{(
+&
~o-O
_o,3/X+
--
,J{o
X XX{oOo 2&+0.3{oOo /X o
:=


,

,,rFp 

 l
( ( o
18r@Gp   l( (o
0**

/;|F

0LR{ossLo
+o
( o
-
,o


oo

*'A
0P[rGp(0rGp(0{ooB
    ooo*0\rGp(0r"Fp(0
o is
o
8 

ro
G
(3p ,o+

o
  
o
  
o
  


( 
( , [ryHpo
   o
  ({/ ( o 
{/oX,
+ 
o

X

i?
 :o
: 9 ooo(o
*o
{o9,oo( (~-.rHp 

 l

( ( o
o
0 *0 ]{oIo

+Xo
r?Ip 
o

-
,o


oo   

( o o(oo

*dv
0^o-+oo
o( 9 o{1oq( { 1oqor Ip 

oo oo {. ( { ..o


{.
({.*oC0-_{o
o
+~(
(|,XrJp { o, {o2 {oOo  ( v{oC-( (
:v

{o3sZ
o [
+(\

( (]
- 

* 0%`o-+oo
o ( :rJp 

oo ooo 
 ( o{ooM 
rK
 po(oo {
1o{q
(oo*0oLGa{(o{ooK(+PrLp 
{
3o){o+(o**0@o,(*rzLp(oTor>p((*0Ab{oo
{ooL{oQs7

o;*0Nc
{oOo 1 7oo

+o
X
( X
o
-
,o


*!!B
0sd{,*{oo
o,*o#

*o3)0,e{ oOo , {oOoo


o@{oo<>{oo;o
8 o
ooo
oo
3zoos

os
(
o
o
+"o

(

o

-
+o
X 
2-ooo4o
:U


,o

{o%{X}*=

0

 f{o


 i  i 

~S
~S
#{o
.{o
- 
s

-+
+6

s 

rLpX (
o
&X i2rLp 
o
o{o*o
8 o


-

oRoo+

oRoo

oQ
9 

(

oQ

( 
~S
(
,X+L 
.>+, .%q.

oQ
(
(
.Xo 
2X i2o


XoQ

oRoY

o  YER+P
oT
-

o 
& -q-~S
(T
,g -

oQ -+P

o o.A 
oR
,

o 
3& o 
-
 (+ o
:L


,o



( # s
+[
 -q-(
 .(
l(
l[rLp#Y@Z o
&XX i2 rMp o
{o
l[#Y@Z o*A

0g~S
(T
,*
@s
rDMp(
o
&

+M3rTMpo
&+43rfMpo
&
+rLp (
o
&
X

~Si2#


(
,(
(
%O
XW#
,8rxMp 
hZYY(
Z s
,1

?[is
O o*0

Y,

+rMpo
&Y

0,

rMpo
&rMp o 
-oo+

oo  s


rMpo(
(
rM(
p o 
o 

(
Xo

(
X (
{oooo#r#pooo
(
o{oJsZ
~- s
~o
+o
X 
o
Y( X o
2*0 i{9 ( 
{rMp(
 (
o
(
s
rNp(9
o
(9
o 
{o7

(
o
o
o
o
*0vj{9j{9_(
{ r6Np(
 

(
o


(
s
(r
dN
 p{o7
o
rNp{o7(
o
{o
o
81(
r
Op  {oC-r|Op+%r Op{oEoo (
{oG {oD o
{ oHsZ

o[
+(\

(]
- 

( o 

{oC:CrOpo
o
-rPpo
o
8s
sM
o[
 
+ L(\
o19oo
+o
o
o

-

,o

(]
-d 

o
o19
 o
o
+o

o
-,o

o


oY 

&o
0o
+(



( o 
( 
-

(
:

rP
{poo
4-
+IrPpo
{o3o
+o
( o

-

,o

o

,o

*A^$ "

Y9h 

&D7 W

Tk
0yk{9m{9b(
{ r6Np(
 (
o
(
s
rQpo
rOQpo
{o6s
o
o
8(

r Qp {oL
  {o
o${oo#o
{ oo%o
+o
rQp
oh
oio
o

-

,o

o
(
:8

o

,o

*AL

,8

 XTn
0 l {, !  {,w(
{r6Np(
 (
o
(
s
rQpo
r=Rpo
r}Rpo
( o 

,o

*K2}
0ER{oJo
+o
( X ( o
-
,o


*(:
0 m ( o19oo

+o
Xr

Sp( o
-
,o


o19oo
+
XrSp( 
-

o
o


,

*#B
a# 
0rSp

 Zs
,+r)poo {oooL {oF-r)p+rbSpo  oo {oooo#r#pooo
(
o
*0
0n{{s
{oQs
o*0
:{{s}{{oQs
o*(
{{oD{{oDo
*o
o
(
,*o
o
(
,**V(
}}*{*{*v( 
~ S
}~
}* {~S
(T
rtSp({* {~S
(T
rSp(}*{~S
(
,(%{{(
(
}~S
}*s
}s
}s
}( 
}}(*{*{*0oraTp(
(
,*(
-*((
,*(
s

s

(
s
o
o
+?(
r Tp  o
{oo#(
o
(
-

o

o
(
 
,o

$&rTp (o*(gL< 
/$0praTp(
(
,*(
-*((
,*(?
-*(
s


(
  
(
,o




{o
1(i&rT
p 
(oH&rTp (o$&rTp (o*4EU
8=u!8= $ 8=$0q{o
-*o* ~ -s

~(* ~ -s

~(*0q{o
-*o*0 r{o
-*{o
o
+L(
o
+ !(

o
1 
o
3 
o
&(
-

(
-

*4.b"Y{0Iq{o
-*o#h >rUp(oeo#o*"}*"}*-*{oooo#r Up(
*0hs
o
+ Ao

{{oo#o
-+-,
o
/ 
o

-

,o

*

NZ

(r<p(
(
-(((((*0t{o
s
s
o
o
8(
{o

rUp  o
  o
  o
 (
oo
+#o
rUp
o 
o( 
o

-

,o

(!
(
:K

(!
* 0 

+0 urUp("
{o
s
s
o
o

+?(
rOVp {o
o {o
o(#
(
-

(!
*4L 0 u riVp("
{ o
s
s
o
o

+?(
rOVp {o$
o%
{o
o(#
(
-

(!
*4L 0vs&
{o
(*0{w{oo'
-s(
{oo)
s*
o+
o,
oo
+
o

(
 
-

o


,

o
&*Ni
0LxrVp("
{ o-
s.
~-s

~o/
o0
8(1
rOVpo o o(#
{oo$

~-s2
~o3
o
+ Y(
rVp(4

o5
+(6
rVpo (7
(8
-

(!
(
- 

(!
(9
:

*(,fF=0 y8 o :


o ;
-*  o <
 i/rWps=
z (

{o
+( (
{o

oX i2o>
9s*0 z 8 o:
o ;
-*  o <
 i/r=Wps=
z (

 (?
 
s{o@
{ oA
((
 
(o>
9l*0E{{oJo

+o
oo3o
-
,o


**%7
0 m oooB
{oJo

+"o
rVpoo oC
o

-
,o

o
{oJo
+
(
-

o
o


,

*#.Q
s 
0 n|oooD
&ooo

(
XoE
{oJo
+
(
-

o
o


,

*H
^(
ooo
*^(F
oooG
*(F
{o
o{o
ooG
e*(
{o
o{o
oo
e*(
{o$
o%
{o$
o%
o
e*b(F
oooG
e*^(
o
o 
o
*{*{*{*"}*{*:((X*2{oH
*{*2{oH
*{*0V{oI
-G{oJ
&{oI
-{oJ
&%{oX}o(*0E}{oK
+ (L
%{X}o(M
-

*

*6sN
}sN
}( 
}}}*0@( 
ryWp(0o%s,
(o#(q(o$(*0 +( 
r Wp(0oSo/
s0
(oSo1
+,o2
((3
(3
(4
sco5
o
-
,o


o`(ob(q(*38k
{ *{*{* (
(oO
(
(oO
a*(

,*(P
oP
(Q
,*t$(*N(

,*(*"}*"}*"}*0G(

,*(o
,&(o
,(ooR
**0 oS
r+p(*0 o T
rep(*0 o U
r p (*0~s
o *0/ o

o(o s
s V

oW
oX
(Y
 
o e
o[
8 o 
toO
o8
o\
,]
o]

rXpoZ

rXpoZ
rpoE
r#YpoC

o]

r=Ypo:

(^
o]

o8

o_

o`

o

:po,u

o`
,

rWpo
(6o)
0s 
( 

&*Y A

, 
(6

oX
,,
,,
op
ob
+ (c

rkYpok ruYp(a
r Yp(6ok
r Yp(6ok


ruYp(a

*0S ( 

o8
(
,
o8
+
(d
-

*-C0 se
}se
}

rWpsf
rWpsf
rWprpsf
rWpsf
rGXpsf
r_Xpsf
rwXpsf
r Xpsf
rXpsf
}( 
}%-&(
sg
}}}}*FrYp(
(6*0 
-RrYp
+R*0D r Yp(
r Yp(rZp(

(7
reZrp}Z
  p((
 
r Zp(7
rZp  

(
rpo rZprprZp(h
o r [p o r A[po r u[poV
o r [pr[po r [po r \po r a\p(7
r \p 



(
o r \prprZp(h
o r \prprp(h
o r ]prprp(h
o r =]prU]po r ]prpo r]prpo r ]prpo r+^prpo r u[poV
o r M^po r Zpo r Zprprp(h
o r k^p(7
r ^p  (
o * 0 rpr}Zp(rp(h
r_po r!_pr1_p(
o r !_prO_p(
o r i_p(7
r _p (
o 

r_p(7
r_p (
or` pr'`p(
o r K`po r c`po  ru`p(7
r `p (
o 
r`po * 0  rpo 
r`p(6o , o;
1

r`po ( 7
r`p 

(6(6(
rpo ,rpr6cpo *0  rpoX 
r`p(6ok
,o;
1

r`pok
r`p 

(7

(6(6(
rpok
oE
o;
Yoi

,rpr6cpok

rdcprvcp(k
*0V sj
o;
1ok
(.+ om
(/X on
2o
*0v 
(

_ol
_ol

*0, o E

, 
(6

o 
rkYpo ruYp(a
,,
r Yp(6o r uYp(a
,,
r Yp(6o 
rzcp 
o6
(6o7
(6(
*0M 
rWpoo
&rWpoo
&(
,o{

(
,o|
s5

*04(7

o8
*0 rcp(s
o G
o[
8 
ton
,

o

r5po
&o}

rTdpoi
sr dp oE
([
(
o
&,o;
1rdpo
&o
&
o
:f u,o


o
*#0P {ob

rTdp{oi
srdp (
{((*0K ( {od
,(
(({oe
op
sq

{oe
o[
+o
t
.
o
-
o,u


o=
or

os
Xst
(
 r eprWpokoirWpokoi(u
}ov
{
 (r0ep(
,@ow

+
(x
o o 2o 
(y
-


oz
*R*|

)50 o{
8 ( |
oO
o\
&(,m(

(
 rXep(rpeov
pr|eprXep(r e-
(
p(
(
(}
:e

*
 0A(r ep(

rpep(

r|epr ep(

r ep(

*0@ ( 
o
repo repo {oi
rYp(
o
s~
&((({op
ob
+(c
((d
-

r]fpo 

rfporhprohpo{oi
(
(6{ok
(6riprip(h
(
o
riprip(h
o r iprip(h
(
o
ri
  prip(h
o o
o 
orepo &r|epo &rpepo &r epo &rip(
,+o

{oi
rjp(
o

o
{-+s
s'


repo 
r|epo 
rpepo 
r epo 
(
*k 0 , Sr5jpoC
(6op
rp(o&rWjpr jpo&r jp(o&+Mr5jp(op
rprYpo&rWjprepo&r jprjpo~o&,&rWpo6
o&rWpo7
o&*0 r 'kpom
*r6cp*0 ( o~
*0 rOkpo6
o7
(u
*0' r5p (r kp(
*0 
o=
.oX
9 
o G
o[
+io
t

{og
o 
u
(

+
- u,o

-4rTdpo2sr dp oE


(,
o


*'v 0h - Wo=


3L{op
ob

+ (c
o8
{(
,'(d
-

*o:
-***-J0 ( (4(s(
( o=
39(rpep(r|ep(r ep(8o=
.
oX
,io?
(

(7
r mp (
r pep( (r|ep
rpep(
r|ep(
r ep(
*0K o=
3{ok
oY
((

(r ep(+8(

+oC


(
,o?


(l
(*0 o G
o[
8 o 
t
{og
o 
u-6rTdpo2sr dp oE
(+1oO
{o 

(
 (
, 
(o
:fu,o



*
0
Y % -&rep~
~
~
~ 
~
o 
(oC
(6~
(*0} rp~
o 
r`
`po r, mprmpo r p(o r p(o,rm~p
o * 0  r prmp(r@np(h
~
o 
r`
`prDn
o r m
pop,rm

po r prYpo r pr kpo r Wjprlnpo , rmp~
o * 0
$ (
%-&rep(rnpo 
(rpep(
,ruYprop (&*r ep(
,ruYpr8op ( &*rtopsj
oM
o 
+y
o 


( 
(t
-
{oi
(r opo
&(7
r op  
o
&o

:{u
,
o

(6

(

rop(sj
( 
-_o 
&o
&oH
op
1N{op
ob
+!(c
o
( (d
-

o
(o
o
(o
(ropo
rp(h
ruYprop (&*  & .0 r *ppo 
rHpprpr`pp(rp(h
o r pprpr}Zp(rp(h
o r pprprpp(rp(h
o r pprprpp(rp(h
o r pprprqp(rp(h
o r 2qprpr>qp(rp(h
o r Vqprprfqp(rp(h
o r qprpr qp(rp(h
o r qprprqp(rp(h
o r qprpr0rp(rp(h
o r Hrprpr^rp(rp(h
o o V
s 

o 
r rp(
9o 
o 
2 er rp{(oo 
{( 
,e{{rrp o?
o 
o
o+){( rsp(r rp
srTsp o?
oV
o 
(->rTdp{oi
srsp o?
oV
(*iT0 s 

o  T(F,{oi

oH
o[
8no
{t
og

t9?oO
o8
o\
9%9(7
r4tp 

o 





(
o=
.o=
:oX
9(o , Lo-r"*p(
-o+A
rDtpo6
o7
(
 

rmpo o n
1
;o 
&
o
&r_po 

r!_prprp(h
o 
r`tpr tp
(
o 
r!_poX

o

o,:  u

o
Q*A  0 (7
r tp (6(
o - *r`pp({(6on&r}Zp({(6on&rpp({(6on&rpp({(6on&rqp({(6on&r>qp({(6on&rfqp({(6
(
:o;
Yok
~ 
.o;
Yok
~ 
3o;
Yoi
(
C

(F,rTdpsrt
 p o A
o 
((
: r "upo , ~~
rXu
rJu
 p(6
pok~,([
 
(6 ~ 
( 
rpp( (
on&* C0 r~upsj
{op
ob
8 ( c


oO
o8
o\
,/o:
,rrupo
&(o
&rpo
&+Ko6
rvp( 
,o6
r2qp( 
-%rupo
&(o
&rpo
&(d
:[

rvpo
&o
*0
 o 6rnpo 
,*rnp~
o 
r vp~
o r >vprHvpr vpo r vprHvpr
wpo rwprHvprwpo r xprHvprxpo r 5zprHvprczpo r _po 

r!_przpor!_
 pr>{po *0
{op
ob
8(c

N % -&reprn{po 

oO
o8
o\
9o:
,p(o 9 -,r{pr{p oA
(&8 r {pr|p o A
(&+druYpr`|p o ?
o8
(&+1r{pr|p o?
o8
(&(d
:

*r|
A.p?o0  
o{
8(|
{op
ob
8 ( c

(oO
o8
o\
,<
o:
-fruYpr`|p o?

o8
(&+2r{pr|op?
o8
 &(d
(
:_

(}
:$

*:0
( 
-rprp(h

N

% -&rep~
~
~ 
~
*o0( rp~
~
o 
r pep(
,r`pr}po + r`prDnpo ,

r`po r mprmpo r pr kpo r Wjprlnpo , rmp~


o * 0
 oY
([
,rdp(h


(
-((

rprp(h

o , .rDnprmpoC
(6r@np(h
((**0{ i(
s 


+{I
-o 
o 
om(6o 
+o 
o 
(6o 
X
+o

 o 

i2oJo

oh
 
ow

o 
o
-


,o

*|'

0 
{ r'kpoo
&-
*J{{(*0H-*{oe
o[
8
o
t
o=
@oO
o 
9oC
{sLrL}po{

o 
o+ 

rpo3

(o
-


o,

rp}pot(
-&oi
(T(E,{{rTdpoA
sr }p  
oA

o 

oo

:u

,
o

*ALl+ 

E  T20j(
-a{og
o 
,oG
o 
&*{{rTdp{oi
sr dp 
oE
o*0ko

or}porWp{o{
(6o)
&o
or~porWp{o|
(6o)
&*:{(*0+o 
or@~por ~pr~po)
&*0Oo 
o{ok
~ 
( 
o 
-~ 
(
rGXp(6o)
&r_Xp{oi
( 
(6o)
&rwXp{oi
(
(6o)
&r Xp{oi
( 
(6o)
&rXp{ok
{oi
(
(
(6o)
&o


r~
o
 pr~
r~
prpo)
po)
9 
{ op
ob

r~
 pr po)


r p or por po*0 {oc

+(c
o6
rvp( 
-
+
-

(d

-8{op
o 
1 %{op
rvp{o|
s5
o 
*#,O^(((*0
 r p o 
{op
o 
1 urY pr p r( p  r r p(&r pr{pr( p 

rr p(&rrn{pruYpr(
o&*p0  ;r po 
r pr p r p  r . p(&*~}}(
s 
}*0( 
r \ p(.rn p(0rx p(
rp(
}}}s 
}( }(
o
s


s 

o
 
o 
   s
}4sq}*0){
( 
t

|(+
3*0){
(
t

|(+
3*{*{r p{ (r p (0}(2*Fr p  ( *(.* { rP p { ((1*0`{o 
(9
o 
r p({o
&{o
{o
{o
}(0*0"{,{o
t
o*{r

p{ (}{(/*0mrt p (0{r p({r p(


{%(
{o
{o
&
,(
*9)b
0 $ 
{%(
3s
s
}{o
{r po
s
}s
}s
}{o

,(
*rt
0{
{{

{
(^
8(^
(
((
iY(
o
 

r  p   (4
o
 


r- rZpp(4
( 4 o
(0*sA
 _ `  {(n(


o

o
&(4.9r p     (4  (4o

}
Bs

o
{
{
o, 

o
-Hr p !o,! 
{
+r` p!

o
!(4o
@;(E,rt p """(4(M(09(5(l(0r p  ( 4  io
 ,##o
### (
$ $E##8o
3r p % %%(4(M(0 i.<rL p && & i &(4(08(
 (
(
&{{{(+oY>r p  ' ' ''(4(M(0) io
8
o
8 { %((
o


,((
s
(,ouo
(
o
 jo
o
iY(
o
o
o
io
Y=\0r p  ) ))(4(M(003+(0+rp p  * * *(9 o
,

o
o
&*A  %; 

3@!a>

h00~{,u

%(
(
(
(
( 
r p(
 (
o
(
s
o
o
o

,
(
*
is
>}}*0T
.-{(l
-.3{(l
- *}{o
o-s*06
{o
-r p  (o0*{,*}{,

{o1{,

{o1*0I{r p (}{oSuK}{oSuK}*r}}}(d* s m}{o


{X}*>{on*6{oo*n
3(k{op*~ou
3(k{oq*jr` p (sj*}}( 
s
}sm}{X}*{o
&{o
-{X}*0 -r p  ( *o.-*
u,
{
+{
%{X}oo/-+r p {oOo(sz{o
*J( 
s
}*R{sto
*:{o
&*02{o
r

p ({o
o r*0{ouo
o s*0{o
( s*:{oM*V( 
} }*0I}( 
 rJ p(o
}o
}{( }*
*J{{s
*{*|{o +|oDo>3(}*(|*s~*0{9 
~
%(
~
{o
-.{oP
rz p $o
~
{ o

(
{(
t

,(

o@o{ 33( * {oP


o
oC
oE|o
+*Sb0d{9( } 
~
%(
~
{o
-.{oP
r p $o
~

(
{(
t

{o
,(

%o(
? o{
~o
-~o,
&

@( 8 o E~

,( 
, sY

~

o[~

oZ|o
+,~

o\

{( }*(Sn3

.<V}( 
(z*0 {u^
o >-Mo
,Es
o
o
+
o
tx

o
 
-

o
u,o


s
o+o>3o
*0O0{
Y E

(0@JXcoz 8 s
*s
*s
*s
*s
*s
*s
*s
*s
*s
*s
*s
*r p{ 7(
(*0oP
 X(
(
,*(
(
,

*(
(
,* (
(
,*](
(
,*^(
(
,
(
,
*`(
(
,*\(
(
,*[(
(
,*Z(
(
,*Y(
(
,**s
(
s 
s 
*( 
*0o
u
(
z

*_(

s

/s
-

~
 {o 
o
 
i
i

2


Y N0
o 
X 
Y+

Y + N,/o

+!{o 
o
 

o

-s
z{
o
,jo
(&G-2- s
3 
o 
&X
?3(F&*As * 0t<
-s 
s * o ( 
- s
z}o o
}*( s
(  N ( (  No
( *{*"}*{*"}*{*"}*V( 
}}*{*{*
*f|oD|oD*s *:( 
( * 0 ( 
r<p(
rp(
},r<p(
}-{-(
,( 
}-s 
}}}"}#s
}s
}s

} s

}*0){.
( 
t 

|.(

+
3 *0){.
(
t 

|.(

+
3 *0){/
(
t

+|/(
3*0){/
(
t

+|/(
3*0){0
(
t

|0(+
3*0){0
(
t

|0(+
3*0){1
(
t

|1(+
3*0){1
(
t

|1(+
3*0){2
(
t

|2(+
3*0){2
(
t

|2(+
3*0){3
(
t

|3(+
3*0){3
(
t

|3(+
3*{*0$
{%(
{r2 p ({r
{*{oOoo

p{ (}+{*-({*{oOo o 

{)o
&(
,(
*
0C{%

(
{.{.{+r
 p{ (r {op 

{ 
&(9
o 
{ *o 
r` p((
{ )o
-r p  ({o
ri p{o
((
, 
(
*A68
0S{%

({*r p({+r$ p ({'o

(
{*r po({.{+rop{(roWp  ({oo
r po ({$oor po o ({$oos
so{o
{oo
({o
&
, 
(
*AFH
{0%( 
{.{+r p{ ({opo
r pop ({opo
o q-{r p oo oo oo o B(o3o(8oqr

p oo oo oo oU oY

(o^,2{

o+-o^o,
o \ o*o ,(
{*%A0^
(
{.{+r p{ (r& p o  o  ({r p({%o o
{%o o{oStEo o -o o "o{oStF

s


{%

(
{o
8(
s
o @ o o o ,moo
+ Bo
o )
 o+
 o

{3
o

-

{o+

o

,o

o
,)oooo
s

o
( 
:

,(

+ (
((
-

o

,(
*A|dO



#ANQ

0  rn p (0{r p (}oStE}$s


o'}%sE
}&s
}'s
}(s
}sE
})*0{r5 p{ ({*,Z{&o
&{*(o 
&+;{ (+
sosotoV{ o!
,{&o
{o
{(o
{'o
{)o
}*}(*n
r` p (s*6{o
&*0P{.
, Er p o o o (o * 0{/
,o *0{3
,o *0{0
,o *0{1
,o *0{2
,o *0w{*r p (s
(s"
}*{*o
{*(
r# p 
{oN(
o
{*o
*b{.}(*0  
 ,{&{'{8 ( 

E7+K
+brS p,
 r p +r p((+1{,)((+r p (
r(9u
p  o#&

o 
(

(M
(E,
o 
 (r; p  ( (+?{ (+sosotoV{ o!
,
((*AL 0{%(
{o
}!{!>3{s$
o 
+ (
((
-

{o%
{o&
{((o'
&{!r p{! (9o
8 ( 

r o
o
 p%-o&o
 o
sosLo
 o (
o
  
:s

((

{o
r p{o
({o(
r p{o(
({o)
{%o{o
&{)o
&

,(
*ALD` U 

0

s
{ %
(
 
{ o

8%
(
o Eo8r+ p (
r ] p 

oo 

oo 

oo 

(8 
o
or
(
+o/



pX  

+)-&+!r% po B(


 ( 
(
:


o
8 ( 
r m p oo oo oo ({o*
&{ooo+
&(
:q


1 (

,

(
-!,
(-+
(+(+(
o
8 (
{ o,
(/{ oo-
+AosoosootoV{$oooo,&oo+o_oo)o]r p  o o oo oo (oo((
:

*Ad,8dz  /

n30(
9{vl#
{ {Y

?Z(.

+nr p  ({$o,<(/


(
{{Y

r" p (5(F.


,{+(

s

o
sz*

o 

 .0a{r p(oo4o- (oo{+o+oo(*0T{ o!


-{ (+
+7{oSt|
 soso*0 
sC}
}
{
o,srR p 

{Ds

oo {

(
&*(*0|!(0
-

oo {

oo (-

{(o
&*0<
{%(
{so1

,(
{o
&*#%
0=
{%(
{so1

,(
{o
&*$&
0O{o2
87{%(
{o3


,(
{8

{6o
 o3x{7-o
P oo
 s

(o
%(
ooo 
ooo s


,(

(+r{6{39 (+Xo
 (%
{ 6o

,( 
ooo {6{7s

(Y
:*(2

 &

0{r p({oStE
o%(
s4
s

8 
oo(19:{%
o
{&+
3=o{+{o
$o
!o"{ooo;{(o5
+oX i?o6
+(7
o (8
-

oo(1,; o(o"{%
oo!

oo

oo!(

ooooooso(192r p oo oo oo 

oo! (

o
+$(:



o!(
o
&
((;
-

,H

o9

o<
+(=
(>
{%o(?
-

o

,'ooo

o
(s  o3"

o
 +ri p((

,(
(*Ad
 5+x1

%{"Y}"{"2}"{%{"o-{"* %{#X}#{#/}#{#*0_o r p ("rp(0{%o!orp(rCp 


o! ((*0rGp(0o-:rp o o o(+[o

+J
rbp o i2
o(*0o{,9(


X

%(
(
{-rp(
 (
o
(
s
(
(
r'p (9
o
(9
o 
(^
(
o
o
o

,
(
*

v}8}9}6}7*v}8}9}6}7*0c( 
r-p(0rKp(0o!orup(s 
}?}@}A}H}B(*0){L
( 
tA

|L(+
3*0){L
(
tA

|L(+
3*{?* {K-(o#(D
}K{K*{I*{@*{A*{B*{J* ,{J+rp(}J*o rp({E%-&sA
}E{EoB
*&(*0Z$
{?%(
{Ir5p{Ao! {I B(}H(
,(
*MO
0

{?%(
{C,{CoC
- { CoD
2 
{CoE
&{CoF
-}CoG
+(H
o((I
-

({

,
C

*b$  0"{C-{D,{D
}D**0{E,{E
} E**0[{Ao/oJ

{Ao/oK
oL
+(M

%X(N
-

*.K0

({
?%
r+p(0{I.{F+rp{Ao! {I B{F ({D,Q
+?{DoO
ooU3"{DoP
{Do
-}D+X
{Do
2{HoS3!}H{F-oXrp({F,Z{FoUoQ
&oX-"{FoR
{-1
Co{F
C,
-}F}C}D}E,E{G%-&sS
}G{GoUoT
r p({GoUoU
{F-{C-{H3(
,
(
*A
0p$
{?%(
{Irp{Ao! {I B({Hrup(}H(
,(
*ce
(0 {?%
{Crp({Frpp({Irp{Ao! {I B({G
}G(


, 
(
*|~
{0?d%(
{I@%{G-{F,{FoR
sV
}G{F,S{FoW
++(X
{G(Y
(Z
ssLo[
(\
-


{C9 {G,|{Co]
o^
+O(_
oG
+$(H

{Go
  sLo[
s
(I
-

(`
-

}C}F(
,(
{J,{Jo *AdY8  1\ CE0$
{?%(
r+p(0{BrJp(oY-g{Ir|p{Ao! {I B({Cr)p({Fr p({Grp(}B(
,(
*
0<$
{?%(
{I,{I+rUp{Ao! {I B(o,R{F%-&sa
}F{Foob
rpo ({Fooc
+`rBp({C%-&sd
}C{CooC
-{Cos
oe
{CooD
o 
, !{D%-&s
}D{Do
(
,(
*A/1
0#{I.}I{L
,o*( 
rp(0rp(0}M}N}O*{M*{N*{O*(

,(

,**(

,*o*.(*2{Mof
* - *(P
oP
(Q
,*tD(*0r(

,*{M{M(2,*{O{O.*{N i{N i.*
+{N {N (a
,*X
{N i2*J( 
s S
}P*{P*0w
{ P%(
{PoRoT
,4{PoRog
(

,7{PoRog
o c+{PoRoU

,(
*jl
2sS
}P*0orp("

{P%(
{PooT
,]{Poog
ooh
+(i
odr9p(
((j
-

,(

*

*T,  0 .{P%

(
{Pok
&
, 
(
* "
0orp("({P(% 
{PooT
9d{Poog
o{(

9.},

(-}oo
-,

(-}{@sK}oh

+0
{ 
od-{
-
 


(i


oau o b

(j

ooo
-oh


+B
(i
{od-)oau { obo{.
(j
-



}

,( 
*AL=@O   

0+
{P%(
{Pol
&
,(
* 
2rn p(0*2{Pom
*jr'@p (s*0|
o h
+T(i
o
d,oaov-,
&
+$

;oaov3,
-

on

(j
-

*
aj( 
so
}Qsp
}Rryp(
|S(q
- }S*0,
{ Q%

(
{Qor

, 
(
* 
0  rp(0o!rp({Q%

(
(*
{Qos
rpo! ({Qot
{ Rsou

, 
(
*#\ 
0J{Q%

(
{Qor
{Qov
&{Rsow
&
, 
(
*=?
(brp(0s( *0Kr1p(0{Q%
{Rox
-

{Qor


, 
2* ?
0,
{Q%

(

(
{Qos

, 
(
* 
rso
}Qsp
}R(i*R{Qoy
{Q
S%(*0

#?{Qoy
l#
?Z(z
({
(|
{Qo}
o~
+'( 

oo3
-o
 ,
Y,
-


( 


,(
*U4  Z{Qo}
o~
*Z{Qo}
o~
*2rn p (0*0)
{ Q%(
{Qo 

,(
*
jr'@p (s*o!*"s*s*
*v{VoOo { To
Y*0j(U
(
,

!
(
s

o
,-!\\\\\\\\(
o
jXa
!_(53f
!_*j(U! a!_*0yr p(0{To
{VoOo 3 'rp {To
(*(>
, {To
oFoG**{To
rQp (rt p (0{To
o G*0t{Uo


({
T%
{To
s

,
o
+(
,

(

soG(
-!


"*
/
A$eN}Vs
}T**jr p (s<*Js 
}U( 
*0+
{T%(
{To
&
,(
* 
0*rp(
- rp
(
s
~W-As
W~Wo
o
+n
(

o
(
o
.T{Uo 
o 
-A{Uo 
o 
&o
(?
- 
# 

, 
o
=sBsIl(


+ A(@{Uo 
& 0u(?,=sBsI*%Y0**K{0rp (
r9p @s
o 
(
o

o

(
o
(
 
,#o
rpo
o
(u
s
z(4(l(m(5.&&&(E,**4#~#~#~#~0
;{VoOo
(?
-r (ps
 zrgp(
{ VoOo ,

r p(
 uu(
}}r p(
(
,.
+v~v}v~
(}`~}
`
} v(
}w
~(rp({*:o
o
Y*{[{_{_ iKs
o 
&*0s
( ,ouo
(
o
o j o
o
iY(
o


+so
iY (
o
iY 0#{[o
o
&>{[o
{[o
X

Js
o 

jo
2
v{&[
o&
*
{ b{]oC*0_( 
}]}^}[}\ }_  }`sE
}a}b( } c*0{[o
&*0{[o
&{_ i.G{^(
, o
&

(E,{\{]soZ(H  &{\{]soZ(Hk(
{_ (
&{_(
{ ` i/
{`+
{[
Ls

s
o
i&*
i(08
 (
{ _ (

o
t%o

o
{[o
&
."{\{]soZ(H  &{\{]soZ(Hq
{c(+{\{]oY

s

,o

&{\{]soZ(H
.(F*(H*47G7?v %

 ? ~( 
 rp(}d*{e*"}e*{f*"}f*{g*"}g*2rp(*0Kryp(u[,(^*u\,(`*s
sv
{doN*"}d*{h*"}h*{i*"}i*{j*"}j*{k*"}k*"(m*  r p(ps
o
*"(e*( 
*V(d,

(do
*( 
rp(rp(}l}m*  ryp({m{loW*0){n
(
tL

|n(+
3*0){n
(
tL

|n(+
3*0){o
(
tM

|o(+
3*0){o
(
tM

|o(+
3*0){p
(
tN

|p(+
3*0){p
(
tN

|p(+
3*0){q
(
tO

|q(+
3*0){q
(
tO

|q(+
3*0){r
(
tP

|r(+
3*0){r
(
tP

|r(+
3*0){s
(
t

|s(+
3*0){s
(
t

|s(+
3*0){t
(
t

|t(+
3*0){t
(
t

|t(+
3*0){u
(
tQ

|u(+
3*0){u
(
tQ

|u(+
3*0){v
(
tR

|v(+
3*0){v
(
tR

|v(+
3*0){w
( 
tS

|w(+
3*0){w
( 
tS

|w(+
3*0){x
( 
tT

|x(+
3*0){x
( 
tT

|x(+
3*0){y
( 
tU

|y(+
3*0){y
( 
tU

|y(+
3*0){z
( 
tV

|z( +
3*0){z
( 
tV

|z( +
3*0){{
( 
tW

|{(!
 +
3*0){{
( 
tW

|{(!
 +
3*{|*"}|*{}*"}}*{~*"}~*"( *08uX,tX( *u_,t_(*u`,t`(*u],t](*u^,t^(*u ,t ( *u,t(*u[,( t[
*0O{n,>{no
/&( 
((
( E*,ro
 &0pO{(o),>{oo
/&( 
((
( E*,ro
 &0pO{(p),>{po
/&( 
((
( E*,ro
 &0pO{(q),>{qo
/&( 
((
( E*,ro
 &0pO{(r),>{ro
/&( 
((
( E*,ro
 &0pO{(s),>{so
/&( 
((
( E*,ro
 &0pO{(t),>{to
/&( 
((
( E*,ro
 &0pO{(u),>{uo
/&( 
((
( E*,ro
 &0pO{(v),>{vo
/&( 
((
( E*,ro
 &0pO{(w),>{wo
/&( 
((
( E*,ro
 &0pO{(x),>{xo
/&( 
((
( E*,ro
 &0pO{(y),>{yo
/&( 
((
( E*,ro
 &0pO{(z),>{zo
/&( 
((
( E*,ro
 &0pG{({),>{{o
/&( 
(*(E,ro
 &p(()
r p(0rp(0} } } } * ( 
{ } } { } { } * { *{ * z{ ( 
r
p({p({o}o*{
*{*V










v "

({r}r* { * { r
}r'@

} p*0
.(3{ { (
t
* 0 } } } } } } s 
}s 
}( 
s
} } s
} s 
} s 
} } } { 3 (+} *0){
( 
t

|("
 +
3*0){
( 
t

|("
 +
3*0){
(
t

|(+
3*0){
(
t

|(+
3*0){
(
t

|(+
3*0){
(
t

|(+
3*{*"}*{*"}*{*"}*0D

Das könnte Ihnen auch gefallen