<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
           targetNamespace="urn:app-config"
           xmlns="urn:app-config"
           elementFormDefault="qualified">

	<xs:annotation>
		<xs:documentation>
			Copyright (C) 2005 Matthew Ward
		
			This program is free software; you can redistribute it and/or modify
			it under the terms of the GNU General Public License as published by
			the Free Software Foundation; either version 2 of the License, or
			(at your option) any later version.

			This program is distributed in the hope that it will be useful,
			but WITHOUT ANY WARRANTY; without even the implied warranty of
			MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
			GNU General Public License for more details.
			
			You should have received a copy of the GNU General Public License
			along with this program; if not, write to the Free Software
			Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
		</xs:documentation>
	</xs:annotation>

	<xs:element name="configuration">
		<xs:complexType>
			<xs:choice minOccurs="0" maxOccurs="unbounded">
				<xs:element name="startup" type="startup" minOccurs="0" maxOccurs="1"/>
				<xs:element name="runtime" type="runtime" minOccurs="0" maxOccurs="1"/>
				<xs:element name="system.runtime.remoting" type="system.runtime.remoting" minOccurs="0" maxOccurs="1"/>
				<xs:element name="system.network" type="system.network" minOccurs="0" maxOccurs="1"/>
				<xs:element name="mscorlib" type="mscorlib" minOccurs="0" maxOccurs="1"/>
				<xs:element name="configSections" type="configSections" minOccurs="0" maxOccurs="unbounded"/>
				<xs:element name="system.diagnostics" type="system.diagnostics" minOccurs="0" maxOccurs="unbounded"/>
				<xs:element name="location" type="location" minOccurs="0" maxOccurs="1"/>
				<xs:element name="system.web" type="system.web" minOccurs="0" maxOccurs="1"/>
			</xs:choice>
		</xs:complexType>
	</xs:element>

	<xs:complexType name="startup">
		<xs:choice minOccurs="0" maxOccurs="unbounded">
			<xs:element name="requiredRuntime" minOccurs="0" maxOccurs="1">
				<xs:complexType>
					<xs:attribute name="version" type="xs:string"/>
					<xs:attribute name="safemode" type="trueFalseEnum"/>
				</xs:complexType>
			</xs:element>
			<xs:element name="supportedRuntime" minOccurs="0" maxOccurs="1">
				<xs:complexType>
					<xs:attribute name="version" type="xs:string"/>
				</xs:complexType>
			</xs:element>		
		</xs:choice>
	</xs:complexType>

	<xs:complexType name="runtime">
		<xs:choice minOccurs="0" maxOccurs="unbounded">
			<xs:element name="developmentMode" minOccurs="0" maxOccurs="1">
				<xs:complexType>
					<xs:attribute name="developerInstallation" type="trueFalseEnum"/>				
				</xs:complexType>
			</xs:element>
			<xs:element name="assemblyBinding" minOccurs="0" maxOccurs="1">
				<xs:complexType>
					<xs:choice>
						<xs:element name="dependentAssembly" type="dependentAssembly" minOccurs="0" maxOccurs="unbounded"/>
						<xs:element name="probing" type="probing" minOccurs="0" maxOccurs="1"/>
						<xs:element name="publisherPolicy" type="publisherPolicy" minOccurs="0" maxOccurs="1"/>						
						<xs:element name="qualifyAssembly" type="qualifyAssembly" minOccurs="0" maxOccurs="1"/>						
					</xs:choice>
					<xs:attribute name="appliesTo" type="xs:string" use="required"/>
				</xs:complexType>				
			</xs:element>			
			<xs:element name="gcConcurrent" minOccurs="0" maxOccurs="1">
				<xs:complexType>
					<xs:attribute name="enabled" type="trueFalseEnum" use="required"/>				
				</xs:complexType>
			</xs:element>
		</xs:choice>
	</xs:complexType>
	
	<xs:complexType name="system.runtime.remoting">
		<xs:choice minOccurs="0" maxOccurs="unbounded">
			<xs:element name="application" minOccurs="0" maxOccurs="1">
				<xs:complexType>
					<xs:choice minOccurs="0" maxOccurs="unbounded">
						<xs:element name="lifetime" type="lifetime" minOccurs="0" maxOccurs="1"/>
						<xs:element name="service" type="service" minOccurs="0" maxOccurs="unbounded"/>
						<xs:element name="client" type="client" minOccurs="0" maxOccurs="unbounded"/>
						<xs:element name="channels" type="applicationChannels" minOccurs="0" maxOccurs="1"/>
						<xs:element name="soapInterop" type="soapInterop" minOccurs="0" maxOccurs="1"/>
					</xs:choice>
					<xs:attribute name="name" type="xs:string"/>
				</xs:complexType>
			</xs:element>
			<xs:element name="channels" minOccurs="0" maxOccurs="1">
				<xs:complexType>
						<xs:choice minOccurs="1" maxOccurs="unbounded">
							<xs:element name="channel" type="channel" minOccurs="1" maxOccurs="unbounded"/>
						</xs:choice>
				</xs:complexType>
			</xs:element>
			<xs:element name="channelSinkProviders" minOccurs="0" maxOccurs="1">
				<xs:complexType>
					<xs:choice minOccurs="0" maxOccurs="unbounded">
						<xs:element name="serverProviders" type="serverProviders" minOccurs="1" maxOccurs="1"/>
						<xs:element name="clientProviders" type="clientProviders" minOccurs="1" maxOccurs="1"/>
					</xs:choice>
				</xs:complexType>
			</xs:element>
			<xs:element name="debug" minOccurs="0" maxOccurs="1">
				<xs:complexType>
					<xs:attribute name="loadTypes" type="trueFalseEnum" use="required"/>				
				</xs:complexType>
			</xs:element>
		</xs:choice>
	</xs:complexType>
	
	<xs:complexType name="system.network">
		<xs:choice minOccurs="0" maxOccurs="unbounded">
			<xs:element name="authenticationModules" minOccurs="0" maxOccurs="unbounded">
				<xs:complexType>
					<xs:choice minOccurs="0" maxOccurs="unbounded">
						<xs:element name="add" minOccurs="0" maxOccurs="unbounded">
							<xs:complexType>
								<xs:attribute name="type" type="xs:string" use="required"/>
							</xs:complexType>
						</xs:element>
						<xs:element name="clear" minOccurs="0" maxOccurs="unbounded"/>				
						<xs:element name="remove" minOccurs="0" maxOccurs="unbounded">
							<xs:complexType>
								<xs:attribute name="name" type="xs:string" use="required"/>
							</xs:complexType>
						</xs:element>				
					</xs:choice>
				</xs:complexType>
			</xs:element>
			<xs:element name="connectionManagement" minOccurs="0" maxOccurs="unbounded">
				<xs:complexType>
					<xs:choice minOccurs="0" maxOccurs="unbounded">
						<xs:element name="add" minOccurs="0" maxOccurs="unbounded">
							<xs:complexType>
								<xs:attribute name="address" type="xs:string" use="required"/>
								<xs:attribute name="maxconnection" type="xs:integer" default="2"/>
							</xs:complexType>
						</xs:element>
						<xs:element name="clear" minOccurs="0" maxOccurs="unbounded"/>				
						<xs:element name="remove" minOccurs="0" maxOccurs="unbounded">
							<xs:complexType>
								<xs:attribute name="name" type="xs:string" use="required"/>
							</xs:complexType>
						</xs:element>				
					</xs:choice>				
				</xs:complexType>
			</xs:element>
			<xs:element name="defaultProxy" type="defaultProxy" minOccurs="0" maxOccurs="unbounded"/>
			<xs:element name="webRequestModules" minOccurs="0" maxOccurs="unbounded">
				<xs:complexType>
					<xs:choice minOccurs="0" maxOccurs="unbounded">
						<xs:element name="add" minOccurs="0" maxOccurs="unbounded">
							<xs:complexType>
								<xs:attribute name="prefix" type="xs:string" use="required"/>
								<xs:attribute name="type" type="xs:string" use="required"/>
							</xs:complexType>
						</xs:element>
						<xs:element name="clear" minOccurs="0" maxOccurs="unbounded"/>				
						<xs:element name="remove" minOccurs="0" maxOccurs="unbounded">
							<xs:complexType>
								<xs:attribute name="name" type="xs:string" use="required"/>
							</xs:complexType>
						</xs:element>				
					</xs:choice>				
				</xs:complexType>
			</xs:element>
		</xs:choice>
	</xs:complexType>

	<xs:complexType name="defaultProxy">
		<xs:choice minOccurs="0" maxOccurs="unbounded">
			<xs:element name="proxy" minOccurs="0" maxOccurs="unbounded">
				<xs:complexType>
					<xs:attribute name="usesystemdefault" type="trueFalseEnum"/>
					<xs:attribute name="bypassonlocal" type="trueFalseEnum"/>
					<xs:attribute name="proxyaddress" type="xs:string"/>
				</xs:complexType>
			</xs:element>
			<xs:element name="bypasslist" minOccurs="0" maxOccurs="unbounded">				
				<xs:complexType>
					<xs:choice minOccurs="0" maxOccurs="unbounded">
						<xs:element name="add" minOccurs="0" maxOccurs="unbounded">
							<xs:complexType>
								<xs:attribute name="address" type="xs:string" use="required"/>
							</xs:complexType>
						</xs:element>
						<xs:element name="clear" minOccurs="0" maxOccurs="unbounded"/>				
						<xs:element name="remove" minOccurs="0" maxOccurs="unbounded">
							<xs:complexType>
								<xs:attribute name="name" type="xs:string" use="required"/>
							</xs:complexType>
						</xs:element>				
					</xs:choice>				
				</xs:complexType>
			</xs:element>
			<xs:element name="module" minOccurs="0" maxOccurs="unbounded">
				<xs:complexType>
					<xs:attribute name="type" type="xs:string" use="required"/>
				</xs:complexType>
			</xs:element>				
		</xs:choice>				
	</xs:complexType>
	
	<xs:complexType name="mscorlib">
		<xs:sequence minOccurs="0" maxOccurs="unbounded">
			<xs:element name="cryptographySettings">
				<xs:complexType>
					<xs:choice minOccurs="0" maxOccurs="unbounded">
						<xs:element name="cryptoNameMappings" type="cryptoNameMappings" minOccurs="0" maxOccurs="unbounded"/>
						<xs:element name="oidMap" minOccurs="0" maxOccurs="unbounded">
							<xs:complexType>
								<xs:sequence minOccurs="0" maxOccurs="unbounded">
									<xs:element name="oidEntry" minOccurs="0" maxOccurs="unbounded">
										<xs:complexType>
											<xs:attribute name="OID" type="xs:string" use="required"/>
											<xs:attribute name="name" type="xs:string" use="required"/>
										</xs:complexType>
									</xs:element>
								</xs:sequence>
							</xs:complexType>
						</xs:element>
					</xs:choice>
				</xs:complexType>
			</xs:element>
		</xs:sequence>
	</xs:complexType>
	
	<xs:complexType name="cryptoNameMappings">
		<xs:choice minOccurs="0" maxOccurs="unbounded">
			<xs:element name="cryptoClasses" minOccurs="0" maxOccurs="unbounded">
				<xs:complexType>
					<xs:choice minOccurs="0" maxOccurs="unbounded">
						<xs:element name="cryptoClass" minOccurs="0" maxOccurs="unbounded">
							<xs:complexType>
								<xs:anyAttribute/>
							</xs:complexType>
						</xs:element>
					</xs:choice>
				</xs:complexType>
			</xs:element>
			<xs:element name="nameEntry"  minOccurs="0" maxOccurs="unbounded">
				<xs:complexType>
					<xs:attribute name="name" type="xs:string" use="required"/>
					<xs:attribute name="class" type="xs:string" use="required"/>
				</xs:complexType>
			</xs:element>
		</xs:choice>
	</xs:complexType>
	
	<xs:complexType name="configSections">
		<xs:choice minOccurs="0" maxOccurs="unbounded">
			<xs:element name="section" type="section" minOccurs="0" maxOccurs="unbounded">
			</xs:element>
			<xs:element name="sectionGroup" minOccurs="0" maxOccurs="unbounded">
				<xs:complexType>
					<xs:choice minOccurs="0" maxOccurs="unbounded">
						<xs:element name="section" type="section" minOccurs="0" maxOccurs="unbounded"/>
					</xs:choice>
					<xs:attribute name="name" type="xs:string" use="required"/>
				</xs:complexType>
			</xs:element>
			<xs:element name="remove" minOccurs="0" maxOccurs="unbounded">
				<xs:complexType>
					<xs:attribute name="name" type="xs:string" use="required"/>
				</xs:complexType>
			</xs:element>
			<xs:element name="clear" minOccurs="0" maxOccurs="unbounded"/>
		</xs:choice>
	</xs:complexType>

	<xs:complexType name="section">
		<xs:attribute name="name" type="xs:string" use="required"/>
		<xs:attribute name="type" type="xs:string" use="required"/>
		<xs:attribute name="allowDefinition">
			<xs:simpleType>
				<xs:restriction base="xs:string">
					<xs:enumeration value="Everywhere"/>
					<xs:enumeration value="MachineOnly"/>
					<xs:enumeration value="MachineToApplication"/>
				</xs:restriction>
			</xs:simpleType>
		</xs:attribute>
		<xs:attribute name="allowLocation" type="trueFalseEnum"/>	
	</xs:complexType>
	
	<xs:complexType name="system.diagnostics">
		<xs:choice minOccurs="0" maxOccurs="unbounded">
			<xs:element name="assert" minOccurs="0" maxOccurs="unbounded">
				<xs:complexType>
					<xs:attribute name="assertuienabled" type="trueFalseEnum" default="true"/>
					<xs:attribute name="logfilename" type="xs:string"/>
				</xs:complexType>
			</xs:element>
			<xs:element name="switches" minOccurs="0" maxOccurs="unbounded">
				<xs:complexType>
					<xs:sequence minOccurs="0" maxOccurs="unbounded">
						<xs:element name="add" minOccurs="0" maxOccurs="unbounded">
							<xs:complexType>
								<xs:attribute name="name" type="xs:string" use="required"/>
								<xs:attribute name="value" type="xs:string" use="required"/>							
							</xs:complexType>
						</xs:element>
					</xs:sequence>
				</xs:complexType>
			</xs:element>
			<xs:element name="trace" minOccurs="0" maxOccurs="unbounded">
				<xs:complexType>
					<xs:sequence minOccurs="0" maxOccurs="unbounded">
						<xs:element name="listeners" minOccurs="0" maxOccurs="unbounded">
							<xs:complexType>
							<xs:choice minOccurs="0" maxOccurs="unbounded">
								<xs:element name="add" minOccurs="0" maxOccurs="unbounded">
									<xs:complexType>
										<xs:attribute name="name" type="xs:string"/>
										<xs:attribute name="type" type="xs:string" use="required"/>							
										<xs:attribute name="initializeData" type="xs:string"/>							
									</xs:complexType>
								</xs:element>
								<xs:element name="remove" minOccurs="0" maxOccurs="unbounded">
									<xs:complexType>
										<xs:attribute name="name" type="xs:string" use="required"/>
									</xs:complexType>
								</xs:element>
							</xs:choice>
							</xs:complexType>
						</xs:element>
					</xs:sequence>
					<xs:attribute name="autoflush" type="xs:string"/>
					<xs:attribute name="indentsize" type="xs:string"/>
				</xs:complexType>
			</xs:element>
		</xs:choice>
	</xs:complexType>

	<xs:complexType name="location">
		<xs:attribute name="path" type="xs:string"/>
		<xs:attribute name="allowOverride" type="trueFalseEnum"/>	
	</xs:complexType>

	<xs:simpleType name="trueFalseEnum">
		<xs:restriction base="xs:string">
			<xs:enumeration value="true"/>							
			<xs:enumeration value="false"/>
		</xs:restriction>
	</xs:simpleType>
	
	<xs:simpleType name="yesNoEnum">
		<xs:restriction base="xs:string">
			<xs:enumeration value="yes"/>							
			<xs:enumeration value="no"/>
		</xs:restriction>
	</xs:simpleType>
	
	<xs:complexType name="dependentAssembly">
		<xs:choice minOccurs="0" maxOccurs="unbounded">
			<xs:element name="assemblyIdentity" minOccurs="1" maxOccurs="1">
				<xs:complexType>
					<xs:attribute name="name" type="xs:string" use="required"/>				
					<xs:attribute name="publicKeyToken" type="xs:string"/>				
					<xs:attribute name="culture" type="xs:string"/>				
				</xs:complexType>
			</xs:element>
			<xs:element name="codeBase" minOccurs="0" maxOccurs="1">
				<xs:complexType>
					<xs:attribute name="version" type="xs:string" use="required"/>				
					<xs:attribute name="href" type="xs:anyURI" use="required"/>				
				</xs:complexType>
			</xs:element>
			<xs:element name="bindingRedirect" minOccurs="0" maxOccurs="unbounded">
				<xs:complexType>
					<xs:attribute name="oldVersion" type="xs:string" use="required"/>				
					<xs:attribute name="newVersion" type="xs:string" use="required"/>				
				</xs:complexType>
			</xs:element>
			<xs:element name="publisherPolicy" type="publisherPolicy" minOccurs="0" maxOccurs="1"/>		
		</xs:choice>
	</xs:complexType>

	<xs:complexType name="probing">
		<xs:attribute name="privatePath" type="xs:string" use="required"/>
	</xs:complexType>

	<xs:complexType name="publisherPolicy">
		<xs:attribute name="apply" type="yesNoEnum" use="required"/>
	</xs:complexType>

	<xs:complexType name="qualifyAssembly">
		<xs:attribute name="partialName" type="xs:string" use="required"/>
		<xs:attribute name="fullName" type="xs:string" use="required"/>
	</xs:complexType>

	<xs:complexType name="lifetime">
		<xs:attribute name="leaseTime" type="xs:string" default="5M"/>
		<xs:attribute name="sponsorshipTimeout" type="xs:string" default="2M"/>
		<xs:attribute name="renewOnCallTime" type="xs:string" default="2M"/>
		<xs:attribute name="leaseManagerPollTime" type="xs:string" default="10"/>	
	</xs:complexType>

	<xs:complexType name="service">
		<xs:choice minOccurs="0" maxOccurs="unbounded">
			<xs:element name="wellknown" minOccurs="1" maxOccurs="unbounded">
				<xs:complexType>
					<xs:attribute name="displayName" type="xs:string"/>
					<xs:attribute name="mode" use="required">
						<xs:simpleType>
							<xs:restriction base="xs:string">
								<xs:enumeration value="Singleton"/>
								<xs:enumeration value="SingleCall"/>
							</xs:restriction>
						</xs:simpleType>
					</xs:attribute>
					<xs:attribute name="type" type="xs:string" use="required"/>
					<xs:attribute name="objectUri" type="xs:string" use="required"/>
				</xs:complexType>
			</xs:element>
			<xs:element name="activated" type="activated" minOccurs="1" maxOccurs="unbounded"/>
		</xs:choice>
	</xs:complexType>

	<xs:complexType name="client">
		<xs:choice  minOccurs="0" maxOccurs="unbounded">
			<xs:element name="wellknown" minOccurs="1" maxOccurs="unbounded">
				<xs:complexType>
					<xs:attribute name="displayName" type="xs:string"/>
					<xs:attribute name="type" type="xs:string" use="required"/>
					<xs:attribute name="url" type="xs:anyURI" use="required"/>
				</xs:complexType>
			</xs:element>
			<xs:element name="activated" type="activated" minOccurs="1" maxOccurs="unbounded"/>
		</xs:choice>
		<xs:attribute name="url" type="xs:string"/>
		<xs:attribute name="displayName" type="xs:string"/>
	</xs:complexType>

	<xs:complexType name="applicationChannels">
		<xs:sequence minOccurs="1" maxOccurs="unbounded">
			<xs:element name="channel">
				<xs:complexType>
					<xs:choice minOccurs="0" maxOccurs="1">
						<xs:element name="serverProviders" type="serverProviders" minOccurs="0" maxOccurs="1"/>
						<xs:element name="clientProviders" type="clientProviders" minOccurs="0" maxOccurs="1"/>
					</xs:choice>
					<xs:attribute name="ref" type="xs:string"/>
					<xs:attribute name="displayName" type="xs:string"/>
					<xs:attribute name="port" type="xs:string"/>
					<xs:attribute name="type" type="xs:string"/>
					<xs:attribute name="customChannelProperty" type="xs:string"/>	
				</xs:complexType>
			</xs:element>
		</xs:sequence>
	</xs:complexType>
	
	<xs:complexType name="soapInterop">
		<xs:choice minOccurs="0" maxOccurs="unbounded">
			<xs:element name="preLoad" minOccurs="1" maxOccurs="unbounded">
				<xs:complexType>
					<xs:attribute name="type" type="xs:string"/>
					<xs:attribute name="assembly" type="xs:string"/>
				</xs:complexType>
			</xs:element>
			<xs:element name="interopXmlElement" minOccurs="1" maxOccurs="unbounded">
				<xs:complexType>
					<xs:attribute name="clr" type="xs:string" use="required"/>
					<xs:attribute name="xml" type="xs:string" use="required"/>
				</xs:complexType>
			</xs:element>	
			<xs:element name="interopXmlType" minOccurs="1" maxOccurs="unbounded">
				<xs:complexType>
					<xs:attribute name="clr" type="xs:string" use="required"/>
					<xs:attribute name="xml" type="xs:string" use="required"/>
				</xs:complexType>
			</xs:element>			
		</xs:choice>
	</xs:complexType>

	<xs:complexType name="channel">
		<xs:choice minOccurs="0" maxOccurs="unbounded">
			<xs:element name="serverProviders" type="serverProviders" minOccurs="1" maxOccurs="1"/>
			<xs:element name="clientProviders" type="clientProviders" minOccurs="1" maxOccurs="1"/>
		</xs:choice>
		<xs:attribute name="id" type="xs:string" use="required"/>
		<xs:attribute name="type" type="xs:string" use="required"/>
		<xs:attribute name="displayName" type="xs:string"/>
		<xs:attribute name="customChannelProperty" type="xs:string"/>
		<xs:attribute name="delayLoadAsClientChannel" type="trueFalseEnum"/>
	</xs:complexType>

	<xs:complexType name="activated">
		<xs:attribute name="type" type="xs:string" use="required"/>
	</xs:complexType>
	
	<xs:complexType name="serverProviders">
		<xs:choice minOccurs="0" maxOccurs="unbounded">
			<xs:element name="formatter" type="formatter" minOccurs="0" maxOccurs="1"/>
			<xs:element name="provider" type="provider" minOccurs="0" maxOccurs="unbounded"/>
		</xs:choice>
	</xs:complexType>

	<xs:complexType name="clientProviders">
		<xs:choice minOccurs="0" maxOccurs="unbounded">
			<xs:element name="formatter" type="formatter" minOccurs="0" maxOccurs="1"/>
			<xs:element name="provider" type="provider" minOccurs="0" maxOccurs="unbounded"/>
		</xs:choice>
	</xs:complexType>

	<xs:complexType name="formatter">
		<xs:attribute name="ref" type="xs:string"/>
		<xs:attribute name="type" type="xs:string"/>
		<xs:attribute name="customFormatterProperty" type="xs:string"/>
		<xs:attribute name="includeVersions" type="trueFalseEnum" default="true"/>
		<xs:attribute name="strictBinding" type="trueFalseEnum" default="false"/>
		<xs:attribute name="typeFilterLevel" type="typeFilterLevelEnum" default="Low"/>	
	</xs:complexType>

	<xs:simpleType name="typeFilterLevelEnum">
		<xs:restriction base="xs:string">
			<xs:enumeration value="Low"/>
			<xs:enumeration value="High"/>
		</xs:restriction>
	</xs:simpleType>
	
	<xs:complexType name="provider">
		<xs:attribute name="ref" type="xs:string"/>
		<xs:attribute name="type" type="xs:string"/>
		<xs:attribute name="customChannelSinkProperty" type="xs:string"/>		
	</xs:complexType>

	<xs:complexType name="system.web">
		<xs:choice minOccurs="0" maxOccurs="unbounded">
			<xs:element name="authentication" type="authentication" minOccurs="0" maxOccurs="unbounded"/>
			<xs:element name="authorization" type="authorization" minOccurs="0" maxOccurs="unbounded"/>
			<xs:element name="browserCaps" type="browserCaps" minOccurs="0" maxOccurs="unbounded"/>
			<xs:element name="clientTarget" type="clientTarget" minOccurs="0" maxOccurs="unbounded"/>
			<xs:element name="compilation" type="compilation" minOccurs="0" maxOccurs="unbounded"/>
			<xs:element name="customErrors" type="customErrors" minOccurs="0" maxOccurs="unbounded"/>
			<xs:element name="globalization" type="globalization" minOccurs="0" maxOccurs="unbounded"/>
			<xs:element name="httpHandlers" type="httpHandlers" minOccurs="0" maxOccurs="unbounded"/>
			<xs:element name="httpModules" type="httpModules" minOccurs="0" maxOccurs="unbounded"/>
			<xs:element name="httpRuntime" type="httpRuntime" minOccurs="0" maxOccurs="unbounded"/>
			<xs:element name="identity" type="identity" minOccurs="0" maxOccurs="unbounded"/>
			<xs:element name="machineKey" type="machineKey" minOccurs="0" maxOccurs="unbounded"/>
			<xs:element name="pages" type="pages" minOccurs="0" maxOccurs="unbounded"/>
			<xs:element name="processModel"  type="processModel" minOccurs="0" maxOccurs="unbounded"/>
			<xs:element name="securityPolicy" type="securityPolicy" minOccurs="0" maxOccurs="unbounded"/>
			<xs:element name="sessionState" type="sessionState" minOccurs="0" maxOccurs="unbounded"/>
			<xs:element name="trace" type="trace" minOccurs="0" maxOccurs="unbounded"/>
			<xs:element name="trust" type="trust" minOccurs="0" maxOccurs="unbounded"/>
			<xs:element name="webServices" type="webServices" minOccurs="0" maxOccurs="unbounded"/>
		</xs:choice>
	</xs:complexType>

	<xs:complexType name="authentication">
		<xs:choice minOccurs="0" maxOccurs="unbounded">
			<xs:element name="forms" minOccurs="0" maxOccurs="unbounded">
				<xs:complexType>
					<xs:sequence minOccurs="0" maxOccurs="unbounded">
						<xs:element name="credentials" minOccurs="0" maxOccurs="unbounded">
							<xs:complexType>
								<xs:sequence minOccurs="0" maxOccurs="unbounded">
									<xs:element name="user" minOccurs="0" maxOccurs="unbounded">
										<xs:complexType>
											<xs:attribute name="name" type="xs:string"/>
											<xs:attribute name="password" type="xs:string"/>
										</xs:complexType>
									</xs:element>
								</xs:sequence>
								<xs:attribute name="passwordFormat">
									<xs:simpleType>
										<xs:restriction base="xs:string">
											<xs:enumeration value="Clear"/>
											<xs:enumeration value="MD5"/>
											<xs:enumeration value="SHA1"/>
										</xs:restriction>
									</xs:simpleType>
								</xs:attribute>
							</xs:complexType>
						</xs:element>
					</xs:sequence>
				</xs:complexType>
			</xs:element>
			<xs:element name="passport" minOccurs="0" maxOccurs="unbounded">
				<xs:complexType>
					<xs:attribute name="redirectUrl" type="xs:anyURI" use="required"/> 
				</xs:complexType>
			</xs:element>
		</xs:choice>
		<xs:attribute name="mode">
			<xs:simpleType>
				<xs:restriction base="xs:string">
					<xs:enumeration value="Windows"/>
					<xs:enumeration value="Forms"/>
					<xs:enumeration value="Passport"/>
					<xs:enumeration value="None"/>
				</xs:restriction>
			</xs:simpleType>
		</xs:attribute>
	</xs:complexType>

	<xs:complexType name="authorization">
		<xs:choice minOccurs="0" maxOccurs="unbounded">
			<xs:element name="allow" minOccurs="0" maxOccurs="unbounded">
				<xs:complexType>
					<xs:attribute name="users" type="xs:string"/>
					<xs:attribute name="roles" type="xs:string"/>
					<xs:attribute name="verbs" type="xs:string"/>
				</xs:complexType>
			</xs:element>
			<xs:element name="deny" minOccurs="0" maxOccurs="unbounded">
				<xs:complexType>
					<xs:attribute name="users" type="xs:string"/>
					<xs:attribute name="roles" type="xs:string"/>
				</xs:complexType>
			</xs:element>		
		</xs:choice>
	</xs:complexType>
	
	<xs:complexType name="browserCaps" mixed="true">
		<xs:choice minOccurs="0" maxOccurs="unbounded">
			<xs:element name="use" minOccurs="0" maxOccurs="unbounded">
				<xs:complexType mixed="true">
					<xs:attribute name="var" type="xs:string"/>
					<xs:attribute name="as" type="xs:string"/>
				</xs:complexType>
			</xs:element>
			<xs:element name="filter" minOccurs="0" maxOccurs="unbounded">
				<xs:complexType mixed="true">
					<xs:sequence minOccurs="0" maxOccurs="unbounded">
						<xs:element name="case" minOccurs="0" maxOccurs="unbounded">
							<xs:complexType mixed="true">
								<xs:attribute name="match" type="xs:string" use="required"/>
								<xs:attribute name="with" type="xs:string" use="required"/>								
							</xs:complexType>
						</xs:element>
					</xs:sequence>
					<xs:attribute name="match" type="xs:string"/>
					<xs:attribute name="with" type="xs:string"/>
				</xs:complexType>
			</xs:element>		
			<xs:element name="result" minOccurs="0" maxOccurs="unbounded">
				<xs:complexType>
					<xs:attribute name="type" type="xs:string" use="required"/>
				</xs:complexType>
			</xs:element>			
		</xs:choice>
	</xs:complexType>
	
	<xs:complexType name="clientTarget">
		<xs:choice minOccurs="0" maxOccurs="unbounded">
			<xs:element name="add" minOccurs="0" maxOccurs="unbounded">
				<xs:complexType>
					<xs:attribute name="add" type="xs:string" use="required"/>
					<xs:attribute name="useragent" type="xs:string" use="required"/>
				</xs:complexType>
			</xs:element>
			<xs:element name="remove" minOccurs="0" maxOccurs="unbounded">
				<xs:complexType>
					<xs:attribute name="alias" type="xs:string" use="required"/>
				</xs:complexType>
			</xs:element>		
			<xs:element name="clear" minOccurs="0" maxOccurs="unbounded"/>		
		</xs:choice>
	</xs:complexType>
	
	<xs:complexType name="compilation">
		<xs:choice minOccurs="0" maxOccurs="unbounded">
			<xs:element name="compilers" minOccurs="0" maxOccurs="unbounded">
				<xs:complexType>
					<xs:sequence minOccurs="0" maxOccurs="unbounded">
						<xs:element name="compiler" minOccurs="0" maxOccurs="unbounded">
							<xs:complexType>			
								<xs:attribute name="language" type="xs:string" use="required"/>
								<xs:attribute name="extension" type="xs:string" use="required"/>
								<xs:attribute name="type" type="xs:string" use="required"/>
								<xs:attribute name="warninglevel" type="xs:string"/>
								<xs:attribute name="compilerOptions" type="xs:string"/>
							</xs:complexType>
						</xs:element>
					</xs:sequence>
				</xs:complexType>
			</xs:element>
			<xs:element name="assemblies" minOccurs="0" maxOccurs="unbounded">
				<xs:complexType>
					<xs:choice minOccurs="0" maxOccurs="unbounded">
						<xs:element name="add" minOccurs="0" maxOccurs="unbounded">
							<xs:complexType>
								<xs:attribute name="assembly" type="xs:string" use="required"/>
							</xs:complexType>
						</xs:element>
						<xs:element name="remove" minOccurs="0" maxOccurs="unbounded">
							<xs:complexType>
								<xs:attribute name="assembly" type="xs:string" use="required"/>
							</xs:complexType>
						</xs:element>		
						<xs:element name="clear" minOccurs="0" maxOccurs="unbounded"/>		
					</xs:choice>
				</xs:complexType>
			</xs:element>		
		</xs:choice>
		<xs:attribute name="debug" type="trueFalseEnum" default="false"/>
		<xs:attribute name="defaultLanguage" type="xs:string" default="vb"/>
		<xs:attribute name="explicit" type="trueFalseEnum" default="true"/>
		<xs:attribute name="batch" type="trueFalseEnum"/>
		<xs:attribute name="batchTimeout" type="xs:string"/>
		<xs:attribute name="maxBatchGeneratedFileSize" type="xs:string"/>
		<xs:attribute name="maxBatchFileSize" type="xs:string"/>
		<xs:attribute name="numRecompilesBeforeApprestart" type="xs:string"/>
		<xs:attribute name="strict" type="trueFalseEnum"/>
		<xs:attribute name="tempDirectory" type="xs:string"/>
	</xs:complexType>
	
	<xs:complexType name="customErrors">
		<xs:choice minOccurs="0" maxOccurs="unbounded">
			<xs:element name="error" minOccurs="0" maxOccurs="unbounded">
				<xs:complexType>
					<xs:attribute name="StatusCode" type="xs:string"/>
					<xs:attribute name="Redirect" type="xs:string"/>
				</xs:complexType>
			</xs:element>
		</xs:choice>
		<xs:attribute name="mode" use="required">
			<xs:simpleType>
				<xs:restriction base="xs:string">
					<xs:enumeration value="On"/>
					<xs:enumeration value="Off"/>
					<xs:enumeration value="RemoteOnly"/>
				</xs:restriction>
			</xs:simpleType>
		</xs:attribute>
		<xs:attribute name="defaultRedirect" type="xs:string"/>
	</xs:complexType>
	
	<xs:complexType name="globalization">
		<xs:attribute name="requestEncoding" type="xs:string"/>
		<xs:attribute name="responseEncoding" type="xs:string"/>
		<xs:attribute name="fileEncoding" type="xs:string"/>
		<xs:attribute name="culture" type="xs:string"/>
		<xs:attribute name="uiCulture" type="xs:string"/>
	</xs:complexType>
	
	<xs:complexType name="httpHandlers">
		<xs:choice minOccurs="0" maxOccurs="unbounded">
			<xs:element name="add" minOccurs="0" maxOccurs="unbounded">
				<xs:complexType>
					<xs:attribute name="verb" type="xs:string" use="required"/>
					<xs:attribute name="path" type="xs:string" use="required"/>
					<xs:attribute name="type" type="xs:string" use="required"/>
					<xs:attribute name="validate" type="trueFalseEnum"/>
				</xs:complexType>
			</xs:element>
			<xs:element name="remove" minOccurs="0" maxOccurs="unbounded">
				<xs:complexType>
					<xs:attribute name="verb" type="xs:string" use="required"/>
					<xs:attribute name="path" type="xs:string" use="required"/>
				</xs:complexType>
			</xs:element>		
			<xs:element name="clear" minOccurs="0" maxOccurs="unbounded"/>		
		</xs:choice>
	</xs:complexType>
	
	<xs:complexType name="httpModules">
		<xs:choice minOccurs="0" maxOccurs="unbounded">
			<xs:element name="add" minOccurs="0" maxOccurs="unbounded">
				<xs:complexType>
					<xs:attribute name="name" type="xs:string" use="required"/>
					<xs:attribute name="type" type="xs:string" use="required"/>
				</xs:complexType>
			</xs:element>
			<xs:element name="remove" minOccurs="0" maxOccurs="unbounded">
				<xs:complexType>
					<xs:attribute name="name" type="xs:string" use="required"/>
				</xs:complexType>
			</xs:element>		
			<xs:element name="clear" minOccurs="0" maxOccurs="unbounded"/>		
		</xs:choice>
	</xs:complexType>
	
	<xs:complexType name="httpRuntime">
		<xs:attribute name="appRequestQueueLimit" type="xs:string"/>
		<xs:attribute name="executionTimeout" type="xs:string"/>
		<xs:attribute name="maxRequestLength" type="xs:string"/>
		<xs:attribute name="minFreeLocalRequestFreeThreads" type="xs:string"/>
		<xs:attribute name="minFreeThreads" type="xs:string"/>
		<xs:attribute name="useFullyQualifiedRedirectUrl" type="trueFalseEnum"/>
		<xs:attribute name="versionHeader" type="xs:string"/>
	</xs:complexType>
	
	<xs:complexType name="machineKey">
		<xs:attribute name="validationKey" type="xs:string" use="required"/>
		<xs:attribute name="decryptionKey" type="xs:string" use="required"/>
		<xs:attribute name="validation" use="required">
			<xs:simpleType>
				<xs:restriction base="xs:string">
					<xs:enumeration value="SHA1"/>
					<xs:enumeration value="MD5"/>
					<xs:enumeration value="3DES"/>
				</xs:restriction>
			</xs:simpleType>
		</xs:attribute>
	</xs:complexType>
	
	<xs:complexType name="identity">
		<xs:attribute name="impersonate" type="trueFalseEnum" use="required"/>
		<xs:attribute name="userName" type="xs:string"/>
		<xs:attribute name="password" type="xs:string"/>
	</xs:complexType>
	
	<xs:complexType name="pages">
		<xs:attribute name="buffer" type="trueFalseEnum"/>
		<xs:attribute name="enableSessionState">
			<xs:simpleType>
				<xs:restriction base="xs:string">
					<xs:enumeration value="true"/>
					<xs:enumeration value="false"/>
					<xs:enumeration value="ReadOnly"/>
				</xs:restriction>
			</xs:simpleType>
		</xs:attribute>
		<xs:attribute name="enableViewState" type="trueFalseEnum"/>
		<xs:attribute name="enableViewStateMac" type="trueFalseEnum"/>
		<xs:attribute name="smartNavigation" type="trueFalseEnum"/>
		<xs:attribute name="pageBaseType" type="xs:string"/>
		<xs:attribute name="userControlBaseType" type="xs:string"/>
		<xs:attribute name="autoEventWireUp" type="trueFalseEnum"/>
		<xs:attribute name="validateRequest" type="trueFalseEnum" default="true"/>
	</xs:complexType>
	
	<xs:complexType name="processModel">
		<xs:attribute name="clientConnectedCheck" type="xs:string"/>
		<xs:attribute name="comAuthenticationLevel">
			<xs:simpleType>
				<xs:restriction base="xs:string">
					<xs:enumeration value="Default"/>
					<xs:enumeration value="None"/>
					<xs:enumeration value="Connect"/>
					<xs:enumeration value="Call"/>
					<xs:enumeration value="Pkt"/>
					<xs:enumeration value="PktIntegrity"/>
					<xs:enumeration value="PktPrivacy"/>
				</xs:restriction>
			</xs:simpleType>
		</xs:attribute>
		<xs:attribute name="comImpersonationLevel">
			<xs:simpleType>
				<xs:restriction base="xs:string">
					<xs:enumeration value="Default"/>
					<xs:enumeration value="Anonymous"/>
					<xs:enumeration value="Identify"/>
					<xs:enumeration value="Impersonate"/>
					<xs:enumeration value="Delegate"/>
				</xs:restriction>
			</xs:simpleType>
		</xs:attribute>	
		<xs:attribute name="cpuMask" type="xs:string"/>	
		<xs:attribute name="enable" type="trueFalseEnum"/>
		<xs:attribute name="idleTimeout" type="xs:string"/>
		<xs:attribute name="logLevel">
			<xs:simpleType>
				<xs:restriction base="xs:string">
					<xs:enumeration value="All"/>
					<xs:enumeration value="None"/>
					<xs:enumeration value="Errors"/>
				</xs:restriction>
			</xs:simpleType>
		</xs:attribute>	
		<xs:attribute name="maxWorkerThreads" type="xs:integer" default="20"/>
		<xs:attribute name="maxIoThreads" type="xs:integer" default="20"/>
		<xs:attribute name="password" type="xs:string"/>
		<xs:attribute name="pingFrequency" type="xs:string"/>
		<xs:attribute name="pingTimeout" type="xs:string" default="5"/>
		<xs:attribute name="requestLimit" type="xs:string"/>
		<xs:attribute name="requestQueueLimit" type="xs:string"/>
		<xs:attribute name="responseDeadlockInterval" type="xs:string"/>
		<xs:attribute name="responseRestartDeadlockInterval" type="xs:string"/>
		<xs:attribute name="serverErrorMessageFile" type="xs:string"/>
		<xs:attribute name="shutdownTimeout" type="xs:string"/>
		<xs:attribute name="timeout" type="xs:string"/>
		<xs:attribute name="userName" type="xs:string"/>
		<xs:attribute name="webGarden" type="trueFalseEnum"/>
	</xs:complexType>
	
	<xs:complexType name="securityPolicy">
		<xs:choice minOccurs="0" maxOccurs="unbounded">
			<xs:element name="securityPolicy">
				<xs:complexType>
					<xs:choice minOccurs="0" maxOccurs="unbounded">
						<xs:element name="trustLevel">
							<xs:complexType>
								<xs:attribute name="policyFile" type="xs:string" use="required"/>
								<xs:attribute name="name" type="trustLevelEnum" use="required"/>
							</xs:complexType>
						</xs:element>
					</xs:choice>
				</xs:complexType>
			</xs:element>
		</xs:choice>
	</xs:complexType>
	
	<xs:simpleType name="trustLevelEnum">
		<xs:restriction base="xs:string">
			<xs:enumeration value="Full"/>
			<xs:enumeration value="High"/>
			<xs:enumeration value="Medium"/>
			<xs:enumeration value="Low"/>
			<xs:enumeration value="Minimal"/>
		</xs:restriction>
	</xs:simpleType>
	
	<xs:complexType name="sessionState">
		<xs:attribute name="mode" use="required">
			<xs:simpleType>
				<xs:restriction base="xs:string">
					<xs:enumeration value="Off"/>
					<xs:enumeration value="InProc"/>
					<xs:enumeration value="StateServer"/>
					<xs:enumeration value="SQLServer"/>
				</xs:restriction>
			</xs:simpleType>
		</xs:attribute>
		<xs:attribute name="cookieless" type="trueFalseEnum"/>
		<xs:attribute name="timeout" type="xs:string"/>
		<xs:attribute name="stateConnectionString" type="xs:string"/>
		<xs:attribute name="sqlConnectionString" type="xs:string"/>
		<xs:attribute name="stateNetworkTimeout" type="xs:string"/>
	</xs:complexType>
	
	<xs:complexType name="trace">
		<xs:attribute name="enabled" type="trueFalseEnum" default="false"/>
		<xs:attribute name="localOnly" type="trueFalseEnum" default="true"/>
		<xs:attribute name="pageOutput" type="trueFalseEnum" default="false"/>
		<xs:attribute name="requestLimit" type="xs:integer" default="10"/>
		<xs:attribute name="traceMode" default="SortByTime">
			<xs:simpleType>
				<xs:restriction base="xs:string">
					<xs:enumeration value="SortByTime"/>
					<xs:enumeration value="SortByCategory"/>
				</xs:restriction>
			</xs:simpleType>
		</xs:attribute>
	</xs:complexType>

	<xs:complexType name="trust">
		<xs:attribute name="level" type="trustLevelEnum" use="required"/>
		<xs:attribute name="orginUrl" type="xs:string"/>
	</xs:complexType>

	<xs:complexType name="webServices">
		<xs:choice minOccurs="0" maxOccurs="unbounded">
			<xs:element name="protocols" minOccurs="0" maxOccurs="unbounded">
				<xs:complexType>
					<xs:choice minOccurs="0" maxOccurs="unbounded">
						<xs:element name="add" minOccurs="0" maxOccurs="unbounded">
							<xs:complexType>
								<xs:attribute name="name" type="xs:string" use="required"/>
							</xs:complexType>
						</xs:element>
						<xs:element name="remove" minOccurs="0" maxOccurs="unbounded">
							<xs:complexType>
								<xs:attribute name="name" type="xs:string" use="required"/>
							</xs:complexType>
						</xs:element>		
						<xs:element name="clear" minOccurs="0" maxOccurs="unbounded"/>		
					</xs:choice>
				</xs:complexType>
			</xs:element>
			<xs:element name="serviceDescriptionTypes" minOccurs="0" maxOccurs="unbounded">
				<xs:complexType>
					<xs:choice minOccurs="0" maxOccurs="unbounded">
						<xs:element name="add" minOccurs="0" maxOccurs="unbounded">
							<xs:complexType>
								<xs:attribute name="type" type="xs:string" use="required"/>
							</xs:complexType>
						</xs:element>
					</xs:choice>
				</xs:complexType>
			</xs:element>
			<xs:element name="soapExtensionTypes" type="soapExtension" minOccurs="0" maxOccurs="unbounded"/>
			<xs:element name="soapExtensionReflectorTypes" type="soapExtension" minOccurs="0" maxOccurs="unbounded"/>	
			<xs:element name="soapExtensionImporterTypes" type="soapExtension" minOccurs="0" maxOccurs="unbounded"/>	
			<xs:element name="wsdlHelpGenerator" minOccurs="0" maxOccurs="unbounded">
				<xs:complexType>
					<xs:attribute name="href" type="xs:anyURI" use="required"/>
				</xs:complexType>
			</xs:element>		
		</xs:choice>
	</xs:complexType>

	<xs:complexType name="soapExtension">
		<xs:choice minOccurs="0" maxOccurs="unbounded">
			<xs:element name="add" minOccurs="0" maxOccurs="unbounded">
				<xs:complexType>
					<xs:attribute name="type" type="xs:string" use="required"/>
					<xs:attribute name="priority" type="xs:string" use="required"/>
					<xs:attribute name="group" type="xs:string" use="required"/>
				</xs:complexType>
			</xs:element>
			<xs:element name="remove" minOccurs="0" maxOccurs="unbounded">
				<xs:complexType>
					<xs:attribute name="type" type="xs:string" use="required"/>
				</xs:complexType>
			</xs:element>		
			<xs:element name="clear" minOccurs="0" maxOccurs="unbounded"/>		
		</xs:choice>
	</xs:complexType>

</xs:schema>
