[
  {
    "path": ".gitignore",
    "content": "## Ignore Visual Studio temporary files, build results, and\n## files generated by popular Visual Studio add-ons.\n\n# User-specific files\n*.suo\n*.user\n*.userosscache\n*.sln.docstates\n\n# User-specific files (MonoDevelop/Xamarin Studio)\n*.userprefs\n\n# Build results\n[Dd]ebug/\n[Dd]ebugPublic/\n[Rr]elease/\n[Rr]eleases/\nx64/\nx86/\nbuild/\nbld/\n[Bb]in/\n[Oo]bj/\n\n# Visual Studo 2015 cache/options directory\n.vs/\n\n# MSTest test Results\n[Tt]est[Rr]esult*/\n[Bb]uild[Ll]og.*\n\n# NUNIT\n*.VisualState.xml\nTestResult.xml\n\n# Build Results of an ATL Project\n[Dd]ebugPS/\n[Rr]eleasePS/\ndlldata.c\n\n*_i.c\n*_p.c\n*_i.h\n*.ilk\n*.meta\n*.obj\n*.pch\n*.pdb\n*.pgc\n*.pgd\n*.rsp\n*.sbr\n*.tlb\n*.tli\n*.tlh\n*.tmp\n*.tmp_proj\n*.log\n*.vspscc\n*.vssscc\n.builds\n*.pidb\n*.svclog\n*.scc\n\n# Chutzpah Test files\n_Chutzpah*\n\n# Visual C++ cache files\nipch/\n*.aps\n*.ncb\n*.opensdf\n*.sdf\n*.cachefile\n\n# Visual Studio profiler\n*.psess\n*.vsp\n*.vspx\n\n# TFS 2012 Local Workspace\n$tf/\n\n# Guidance Automation Toolkit\n*.gpState\n\n# ReSharper is a .NET coding add-in\n_ReSharper*/\n*.[Rr]e[Ss]harper\n*.DotSettings.user\n\n# JustCode is a .NET coding addin-in\n.JustCode\n\n# TeamCity is a build add-in\n_TeamCity*\n\n# DotCover is a Code Coverage Tool\n*.dotCover\n\n# NCrunch\n_NCrunch_*\n.*crunch*.local.xml\n\n# MightyMoose\n*.mm.*\nAutoTest.Net/\n\n# Web workbench (sass)\n.sass-cache/\n\n# Installshield output folder\n[Ee]xpress/\n\n# DocProject is a documentation generator add-in\nDocProject/buildhelp/\nDocProject/Help/*.HxT\nDocProject/Help/*.HxC\nDocProject/Help/*.hhc\nDocProject/Help/*.hhk\nDocProject/Help/*.hhp\nDocProject/Help/Html2\nDocProject/Help/html\n\n# Click-Once directory\npublish/\n\n# Publish Web Output\n*.[Pp]ublish.xml\n*.azurePubxml\n# TODO: Comment the next line if you want to checkin your web deploy settings \n# but database connection strings (with potential passwords) will be unencrypted\n*.pubxml\n*.publishproj\n\n# NuGet Packages\n*.nupkg\n.nuget/nuget.exe\n# The packages folder can be ignored because of Package Restore\n**/packages/*\n# except build/, which is used as an MSBuild target.\n!**/packages/build/\n# Uncomment if necessary however generally it will be regenerated when needed\n#!**/packages/repositories.config\n\n# Windows Azure Build Output\ncsx/\n*.build.csdef\n\n# Windows Store app package directory\nAppPackages/\n\n# Others\n*.[Cc]ache\nClientBin/\n[Ss]tyle[Cc]op.*\n~$*\n*~\n*.dbmdl\n*.dbproj.schemaview\n*.pfx\n*.publishsettings\nnode_modules/\nbower_components/\n\n# RIA/Silverlight projects\nGenerated_Code/\n\n# Backup & report files from converting an old project file\n# to a newer Visual Studio version. Backup files are not needed,\n# because we have git ;-)\n_UpgradeReport_Files/\nBackup*/\nUpgradeLog*.XML\nUpgradeLog*.htm\n\n# SQL Server files\n*.mdf\n*.ldf\n\n# Business Intelligence projects\n*.rdl.data\n*.bim.layout\n*.bim_*.settings\n\n# Microsoft Fakes\nFakesAssemblies/\n\n# Node.js Tools for Visual Studio\n.ntvs_analysis.dat\n\n# Visual Studio 6 build log\n*.plg\n\n# Visual Studio 6 workspace options file\n*.opt\n"
  },
  {
    "path": ".nuget/AlexaSkillsKit.Lib.nuspec",
    "content": "<?xml version=\"1.0\"?>\n<package>\n  <metadata>\n    <id>AlexaSkillsKit.NET</id>\n    <version>1.6.0</version>\n    <title>AlexaSkillsKit.NET</title>\n    <authors>Stefan Negritoiu (FreeBusy) and contributors</authors>\n    <owners>Stefan Negritoiu (FreeBusy)</owners>\n    <projectUrl>https://github.com/AreYouFreeBusy/AlexaSkillsKit.NET</projectUrl>\n    <licenseUrl>http://opensource.org/licenses/MIT</licenseUrl>\n    <iconUrl>https://developer.amazon.com/public/binaries/content/gallery/developerportalpublic/solutions/alexa/dp_image_kit_02.png</iconUrl>\n    <requireLicenseAcceptance>false</requireLicenseAcceptance>\n    <description>\n.NET library that simplifies Alexa skills development; same object model as Amazon's AlexaSkillsKit for Java\n    </description>\n    <releaseNotes>\n1.4.0: Ability to override request validation policy and support for SSML output speech type\n1.5.0: Fully implement certificate verification requirement and support for Standard cards\n1.6.0: Implement support for Context object (Device Location, Audio Player, etc.), PlaybackController, Display, Dialog directives, and VideoApp. See project README for new interfaces.\n    </releaseNotes>\n    <copyright>Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors</copyright>\n    <tags>amazon echo alexa speechlet</tags>\n    <dependencies>\n      <dependency id=\"Microsoft.AspNet.WebApi.Client\" version=\"5.2.3\" />\n      <dependency id=\"Newtonsoft.Json\" version=\"7.0.1\" />\n      <dependency id=\"BouncyCastle\" version=\"1.8.1\" />\n    </dependencies>\n  </metadata>\n  <files>\n    <file src=\"..\\AlexaSkillsKit.Lib\\bin\\Release\\AlexaSkillsKit.dll\" target=\"lib\\net45\" /> \n  </files> \n</package>"
  },
  {
    "path": ".nuget/NuGet.Config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n  <solution>\n    <add key=\"disableSourceControlIntegration\" value=\"true\" />\n  </solution>\n</configuration>"
  },
  {
    "path": ".nuget/pack.cmd",
    "content": "msbuild /property:Configuration=Release ..\\AlexaSkillsKit.Lib\\AlexaSkillsKit.Lib.csproj\nnuget pack AlexaSkillsKit.Lib.nuspec"
  },
  {
    "path": "AlexaSkillsKit.Lib/AlexaSkillsKit.Lib.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"12.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProjectGuid>{0EC882A8-AACA-4BD5-B449-72F20FDB8586}</ProjectGuid>\n    <OutputType>Library</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>AlexaSkillsKit</RootNamespace>\n    <AssemblyName>AlexaSkillsKit</AssemblyName>\n    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\n    <FileAlignment>512</FileAlignment>\n    <SolutionDir Condition=\"$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'\">..\\</SolutionDir>\n    <RestorePackages>true</RestorePackages>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\Release\\</OutputPath>\n    <DefineConstants>TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"BouncyCastle.Crypto, Version=1.8.1.0, Culture=neutral, PublicKeyToken=0e99375e54769942\">\n      <HintPath>..\\packages\\BouncyCastle.1.8.1\\lib\\BouncyCastle.Crypto.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Newtonsoft.Json, Version=7.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\Newtonsoft.Json.7.0.1\\lib\\net45\\Newtonsoft.Json.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.Core\" />\n    <Reference Include=\"System.Net\" />\n    <Reference Include=\"System.Net.Http\" />\n    <Reference Include=\"System.Net.Http.Formatting\">\n      <HintPath>..\\packages\\Microsoft.AspNet.WebApi.Client.5.2.3\\lib\\net45\\System.Net.Http.Formatting.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Runtime.Caching\" />\n    <Reference Include=\"Microsoft.CSharp\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"AsyncHelpers.cs\" />\n    <Compile Include=\"Authentication\\SpeechletRequestValidationResult.cs\" />\n    <Compile Include=\"Authentication\\SpeechletRequestSignatureVerifier.cs\" />\n    <Compile Include=\"Authentication\\SpeechletRequestTimestampVerifier.cs\" />\n    <Compile Include=\"Interfaces\\AudioPlayer\\Directives\\AudioPlayerPlayDirective.cs\" />\n    <Compile Include=\"Interfaces\\AudioPlayer\\Directives\\AudioPlayerClearQueueDirective.cs\" />\n    <Compile Include=\"Interfaces\\AudioPlayer\\Directives\\AudioPlayerStopDirective.cs\" />\n    <Compile Include=\"Interfaces\\AudioPlayer\\AudioItem.cs\" />\n    <Compile Include=\"Interfaces\\AudioPlayer\\AudioItemStream.cs\" />\n    <Compile Include=\"Interfaces\\AudioPlayer\\AudioPlayerInterface.cs\" />\n    <Compile Include=\"Interfaces\\AudioPlayer\\AudioPlayerState.cs\" />\n    <Compile Include=\"Interfaces\\AudioPlayer\\IAudioPlayerSpeechlet.cs\" />\n    <Compile Include=\"Interfaces\\AudioPlayer\\IAudioPlayerSpeechletAsync.cs\" />\n    <Compile Include=\"Interfaces\\Display\\Directives\\HintDirective.cs\" />\n    <Compile Include=\"Interfaces\\Display\\Directives\\DisplayRenderTemplateDirective.cs\" />\n    <Compile Include=\"Interfaces\\Display\\DisplayInterface.cs\" />\n    <Compile Include=\"Interfaces\\Display\\DisplayImage.cs\" />\n    <Compile Include=\"Interfaces\\Display\\DisplayImageSource.cs\" />\n    <Compile Include=\"Interfaces\\Display\\DisplayTemplate.cs\" />\n    <Compile Include=\"Interfaces\\Display\\IDisplaySpeechlet.cs\" />\n    <Compile Include=\"Interfaces\\Display\\IDisplaySpeechletAsync.cs\" />\n    <Compile Include=\"Interfaces\\Display\\ListItem.cs\" />\n    <Compile Include=\"Interfaces\\Display\\TextField.cs\" />\n    <Compile Include=\"Interfaces\\Display\\TextContent.cs\" />\n    <Compile Include=\"Interfaces\\Dialog\\Directives\\DialogConfirmIntentDirective.cs\" />\n    <Compile Include=\"Interfaces\\Dialog\\Directives\\DialogDelegateDirective.cs\" />\n    <Compile Include=\"Interfaces\\Dialog\\Directives\\DialogDirective.cs\" />\n    <Compile Include=\"Interfaces\\Dialog\\Directives\\DialogConfirmSlotDirective.cs\" />\n    <Compile Include=\"Interfaces\\Dialog\\Directives\\DialogElicitSlotDirective.cs\" />\n    <Compile Include=\"Interfaces\\VideoApp\\Directives\\VideoAppLaunchDirective.cs\" />\n    <Compile Include=\"Interfaces\\VideoApp\\VideoItem.cs\" />\n    <Compile Include=\"Interfaces\\VideoApp\\VideoItemMetadata.cs\" />\n    <Compile Include=\"Helpers\\DateTimeHelpers.cs\" />\n    <Compile Include=\"Json\\CamelCasePropertyNamesExceptDictionaryKeysContractResolver.cs\" />\n    <Compile Include=\"Json\\Deserializer.cs\" />\n    <Compile Include=\"Json\\SpeechletRequestEnvelope.cs\" />\n    <Compile Include=\"Json\\SpeechletRequestParserExtensions.cs\" />\n    <Compile Include=\"Json\\SpeechletRequestParser.cs\" />\n    <Compile Include=\"Json\\SpeechletResponseEnvelope.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n    <Compile Include=\"Sdk.cs\" />\n    <Compile Include=\"Slu\\ConfirmationStatusEnum.cs\" />\n    <Compile Include=\"Slu\\Intent.cs\" />\n    <Compile Include=\"Slu\\Resolutions.cs\" />\n    <Compile Include=\"Slu\\ResolutionsPerAuthority.cs\" />\n    <Compile Include=\"Slu\\ResolutionsPerAuthorityStatus.cs\" />\n    <Compile Include=\"Slu\\ResolutionsPerAuthorityValue.cs\" />\n    <Compile Include=\"Slu\\ResolutionsPerAuthorityValueValue.cs\" />\n    <Compile Include=\"Slu\\Slot.cs\" />\n    <Compile Include=\"Speechlet\\Application.cs\" />\n    <Compile Include=\"Interfaces\\AudioPlayer\\Directives\\AudioPlayerDirective.cs\" />\n    <Compile Include=\"Interfaces\\AudioPlayer\\AudioPlayerPlaybackFailedRequest.cs\" />\n    <Compile Include=\"Interfaces\\AudioPlayer\\AudioPlayerRequest.cs\" />\n    <Compile Include=\"Interfaces\\AudioPlayer\\AudioPlayerResponse.cs\" />\n    <Compile Include=\"Speechlet\\Cause.cs\" />\n    <Compile Include=\"Speechlet\\Context.cs\" />\n    <Compile Include=\"Speechlet\\Device.cs\" />\n    <Compile Include=\"Speechlet\\Directive.cs\" />\n    <Compile Include=\"Interfaces\\Display\\DisplayRequest.cs\" />\n    <Compile Include=\"Speechlet\\Error.cs\" />\n    <Compile Include=\"Speechlet\\ExtendedSpeechletRequest.cs\" />\n    <Compile Include=\"Speechlet\\IntentRequest.cs\" />\n    <Compile Include=\"Speechlet\\ISpeechletWithContext.cs\" />\n    <Compile Include=\"Speechlet\\ISpeechlet.cs\" />\n    <Compile Include=\"Speechlet\\ISpeechletWithContextAsync.cs\" />\n    <Compile Include=\"Speechlet\\ISpeechletAsync.cs\" />\n    <Compile Include=\"Speechlet\\ISpeechletBase.cs\" />\n    <Compile Include=\"Speechlet\\ISpeechletInterface.cs\" />\n    <Compile Include=\"Speechlet\\ISpeechletInterfaceState.cs\" />\n    <Compile Include=\"Speechlet\\ISpeechletResponse.cs\" />\n    <Compile Include=\"Speechlet\\LaunchRequest.cs\" />\n    <Compile Include=\"Interfaces\\AudioPlayer\\PlaybackControllerRequest.cs\" />\n    <Compile Include=\"Speechlet\\PlaybackState.cs\" />\n    <Compile Include=\"Speechlet\\Session.cs\" />\n    <Compile Include=\"Speechlet\\SessionEndedRequest.cs\" />\n    <Compile Include=\"Speechlet\\SessionStartedRequest.cs\" />\n    <Compile Include=\"Speechlet\\Speechlet.cs\" />\n    <Compile Include=\"Speechlet\\SpeechletAsync.cs\" />\n    <Compile Include=\"Speechlet\\SpeechletBase.cs\" />\n    <Compile Include=\"Speechlet\\SpeechletException.cs\" />\n    <Compile Include=\"Speechlet\\SpeechletRequest.cs\" />\n    <Compile Include=\"Speechlet\\SpeechletService.cs\" />\n    <Compile Include=\"Speechlet\\SpeechletValidationException.cs\" />\n    <Compile Include=\"Speechlet\\SpeechletResponse.cs\" />\n    <Compile Include=\"Speechlet\\SupportedInterfaces.cs\" />\n    <Compile Include=\"Speechlet\\SystemRequest.cs\" />\n    <Compile Include=\"Speechlet\\SystemExceptionEncounteredRequest.cs\" />\n    <Compile Include=\"Speechlet\\SystemState.cs\" />\n    <Compile Include=\"Speechlet\\User.cs\" />\n    <Compile Include=\"UI\\Image.cs\" />\n    <Compile Include=\"UI\\AskForPermissionsConsentCard.cs\" />\n    <Compile Include=\"UI\\StandardCard.cs\" />\n    <Compile Include=\"UI\\SsmlOutputSpeech.cs\" />\n    <Compile Include=\"UI\\Reprompt.cs\" />\n    <Compile Include=\"UI\\Card.cs\" />\n    <Compile Include=\"UI\\OutputSpeech.cs\" />\n    <Compile Include=\"UI\\PlainTextOutputSpeech.cs\" />\n    <Compile Include=\"UI\\LinkAccountCard.cs\" />\n    <Compile Include=\"UI\\SimpleCard.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"app.config\" />\n    <None Include=\"packages.config\" />\n  </ItemGroup>\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n</Project>"
  },
  {
    "path": "AlexaSkillsKit.Lib/AsyncHelpers.cs",
    "content": "﻿// As discussed at http://stackoverflow.com/a/5097066\n\nusing System;\nusing System.Collections.Generic;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace AlexaSkillsKit\n{\n    public static class AsyncHelpers\n    {\n        /// <summary>\n        /// Execute's an async Task<T> method which has a void return value synchronously\n        /// </summary>\n        /// <param name=\"task\">Task<T> method to execute</param>\n        public static void RunSync(Func<Task> task) {\n            var oldContext = SynchronizationContext.Current;\n            var synch = new ExclusiveSynchronizationContext();\n            SynchronizationContext.SetSynchronizationContext(synch);\n            synch.Post(async _ => {\n                try {\n                    await task();\n                }\n                catch (Exception e) {\n                    synch.InnerException = e;\n                    throw;\n                }\n                finally {\n                    synch.EndMessageLoop();\n                }\n            }, null);\n            synch.BeginMessageLoop();\n\n            SynchronizationContext.SetSynchronizationContext(oldContext);\n        }\n\n        /// <summary>\n        /// Execute's an async Task<T> method which has a T return type synchronously\n        /// </summary>\n        /// <typeparam name=\"T\">Return Type</typeparam>\n        /// <param name=\"task\">Task<T> method to execute</param>\n        /// <returns></returns>\n        public static T RunSync<T>(Func<Task<T>> task) {\n            var oldContext = SynchronizationContext.Current;\n            var synch = new ExclusiveSynchronizationContext();\n            SynchronizationContext.SetSynchronizationContext(synch);\n            T ret = default(T);\n            synch.Post(async _ => {\n                try {\n                    ret = await task();\n                }\n                catch (Exception e) {\n                    synch.InnerException = e;\n                    throw;\n                }\n                finally {\n                    synch.EndMessageLoop();\n                }\n            }, null);\n            synch.BeginMessageLoop();\n            SynchronizationContext.SetSynchronizationContext(oldContext);\n            return ret;\n        }\n\n        private class ExclusiveSynchronizationContext : SynchronizationContext\n        {\n            private bool done;\n            public Exception InnerException { get; set; }\n            readonly AutoResetEvent workItemsWaiting = new AutoResetEvent(false);\n            readonly Queue<Tuple<SendOrPostCallback, object>> items =\n                new Queue<Tuple<SendOrPostCallback, object>>();\n\n            public override void Send(SendOrPostCallback d, object state) {\n                throw new NotSupportedException(\"We cannot send to our same thread\");\n            }\n\n            public override void Post(SendOrPostCallback d, object state) {\n                lock (items) {\n                    items.Enqueue(Tuple.Create(d, state));\n                }\n                workItemsWaiting.Set();\n            }\n\n            public void EndMessageLoop() {\n                Post(_ => done = true, null);\n            }\n\n            public void BeginMessageLoop() {\n                while (!done) {\n                    Tuple<SendOrPostCallback, object> task = null;\n                    lock (items) {\n                        if (items.Count > 0) {\n                            task = items.Dequeue();\n                        }\n                    }\n                    if (task != null) {\n                        task.Item1(task.Item2);\n                        if (InnerException != null) // the method threw an exeption\n                    {\n                            throw new AggregateException(\"AsyncHelpers.Run method threw an exception.\", InnerException);\n                        }\n                    }\n                    else {\n                        workItemsWaiting.WaitOne();\n                    }\n                }\n            }\n\n            public override SynchronizationContext CreateCopy() {\n                return this;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "AlexaSkillsKit.Lib/Authentication/SpeechletRequestSignatureVerifier.cs",
    "content": "﻿// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing System.Net;\nusing System.Net.Http;\nusing System.Runtime.Caching;\nusing System.Text;\nusing System.Text.RegularExpressions;\nusing System.Threading.Tasks;\nusing Org.BouncyCastle.X509;\nusing Org.BouncyCastle.Security.Certificates;\n\nnamespace AlexaSkillsKit.Authentication\n{\n    public class SpeechletRequestSignatureVerifier\n    {\n        private static Func<string, string> _getCertCacheKey = (string url) => string.Format(\"{0}_{1}\", Sdk.SIGNATURE_CERT_URL_REQUEST_HEADER, url);\n\n        private static CacheItemPolicy _policy = new CacheItemPolicy {\n            Priority = CacheItemPriority.Default,\n            AbsoluteExpiration = DateTimeOffset.UtcNow.AddHours(24)\n        };\n\n\n        /// <summary>\n        /// Verifying the Signature Certificate URL per requirements documented at\n        /// https://developer.amazon.com/public/solutions/alexa/alexa-skills-kit/docs/developing-an-alexa-skill-as-a-web-service\n        /// </summary>\n        public static bool VerifyCertificateUrl(string certChainUrl) {\n            if (String.IsNullOrEmpty(certChainUrl)) {\n                return false;\n            }\n\n            Uri certChainUri;\n            if (!Uri.TryCreate(certChainUrl, UriKind.Absolute, out certChainUri)) {\n                return false;\n            }\n\n            return\n                certChainUri.Host.Equals(Sdk.SIGNATURE_CERT_URL_HOST, StringComparison.OrdinalIgnoreCase) &&\n                certChainUri.PathAndQuery.StartsWith(Sdk.SIGNATURE_CERT_URL_PATH) &&\n                certChainUri.Scheme == Uri.UriSchemeHttps &&\n                certChainUri.Port == 443;\n        }\n\n\n        /// <summary>\n        /// Verifies request signature and manages the caching of the signature certificate\n        /// </summary>\n        public static bool VerifyRequestSignature(\n            byte[] serializedSpeechletRequest, string expectedSignature, string certChainUrl) {\n\n            string certCacheKey = _getCertCacheKey(certChainUrl);\n            X509Certificate cert = MemoryCache.Default.Get(certCacheKey) as X509Certificate;\n            if (cert == null ||\n                !CheckRequestSignature(serializedSpeechletRequest, expectedSignature, cert)) {\n\n                // download the cert \n                // if we don't have it in cache or\n                // if we have it but it's stale because the current request was signed with a newer cert\n                // (signaled by signature check fail with cached cert)\n                cert = RetrieveAndVerifyCertificate(certChainUrl);\n                if (cert == null) return false;\n\n                MemoryCache.Default.Set(certCacheKey, cert, _policy);\n            }\n\n            return CheckRequestSignature(serializedSpeechletRequest, expectedSignature, cert);\n        }\n\n\n        /// <summary>\n        /// Verifies request signature and manages the caching of the signature certificate\n        /// </summary>\n        public async static Task<bool> VerifyRequestSignatureAsync(\n            byte[] serializedSpeechletRequest, string expectedSignature, string certChainUrl) {\n\n            string certCacheKey = _getCertCacheKey(certChainUrl);\n            X509Certificate cert = MemoryCache.Default.Get(certCacheKey) as X509Certificate;\n            if (cert == null ||\n                !CheckRequestSignature(serializedSpeechletRequest, expectedSignature, cert)) {\n\n                // download the cert \n                // if we don't have it in cache or \n                // if we have it but it's stale because the current request was signed with a newer cert\n                // (signaled by signature check fail with cached cert)\n                cert = await RetrieveAndVerifyCertificateAsync(certChainUrl);\n                if (cert == null) return false;\n\n                MemoryCache.Default.Set(certCacheKey, cert, _policy);\n            }\n\n            return CheckRequestSignature(serializedSpeechletRequest, expectedSignature, cert);\n        }\n\n\n        /// <summary>\n        /// \n        /// </summary>\n        public static X509Certificate RetrieveAndVerifyCertificate(string certChainUrl) {\n            // making requests to externally-supplied URLs is an open invitation to DoS\n            // so restrict host to an Alexa controlled subdomain/path\n            if (!VerifyCertificateUrl(certChainUrl)) return null;\n\n            var webClient = new WebClient();\n            var content = webClient.DownloadString(certChainUrl);\n\n            var pemReader = new Org.BouncyCastle.OpenSsl.PemReader(new StringReader(content));\n            var cert = (X509Certificate)pemReader.ReadObject();\n            try {\n                cert.CheckValidity();\n                if (!CheckCertSubjectNames(cert)) return null;\n            }\n            catch (CertificateExpiredException) {\n                return null;\n            }\n            catch (CertificateNotYetValidException) {\n                return null;\n            }\n\n            return cert;\n        }\n\n\n        /// <summary>\n        /// \n        /// </summary>\n        public async static Task<X509Certificate> RetrieveAndVerifyCertificateAsync(string certChainUrl) {\n            // making requests to externally-supplied URLs is an open invitation to DoS\n            // so restrict host to an Alexa controlled subdomain/path\n            if (!VerifyCertificateUrl(certChainUrl)) return null;\n\n            var httpClient = new HttpClient();\n            var httpResponse = await httpClient.GetAsync(certChainUrl);\n            var content = await httpResponse.Content.ReadAsStringAsync();\n            if (String.IsNullOrEmpty(content)) return null;\n\n            var pemReader = new Org.BouncyCastle.OpenSsl.PemReader(new StringReader(content));\n            var cert = (X509Certificate)pemReader.ReadObject();\n            try {\n                cert.CheckValidity(); \n                if (!CheckCertSubjectNames(cert)) return null;\n            }\n            catch (CertificateExpiredException) {\n                return null;\n            }\n            catch (CertificateNotYetValidException) {\n                return null;\n            }\n\n            return cert;\n        }\n\n\n        /// <summary>\n        /// \n        /// </summary>\n        public static bool CheckRequestSignature(\n            byte[] serializedSpeechletRequest, string expectedSignature, Org.BouncyCastle.X509.X509Certificate cert) {\n\n            byte[] expectedSig = null;\n            try {\n                expectedSig = Convert.FromBase64String(expectedSignature);\n            }\n            catch (FormatException) {\n                return false;\n            }\n\n            var publicKey = (Org.BouncyCastle.Crypto.Parameters.RsaKeyParameters)cert.GetPublicKey();\n            var signer = Org.BouncyCastle.Security.SignerUtilities.GetSigner(Sdk.SIGNATURE_ALGORITHM);\n            signer.Init(false, publicKey);\n            signer.BlockUpdate(serializedSpeechletRequest, 0, serializedSpeechletRequest.Length);            \n\n            return signer.VerifySignature(expectedSig);\n        }\n\n\n        /// <summary>\n        /// \n        /// </summary>\n        private static bool CheckCertSubjectNames(X509Certificate cert) {\n            bool found = false;\n            ArrayList subjectNamesList = (ArrayList)cert.GetSubjectAlternativeNames();\n            for (int i=0; i < subjectNamesList.Count; i++) {\n                ArrayList subjectNames = (ArrayList)subjectNamesList[i];\n                for (int j = 0; j < subjectNames.Count; j++) {\n                    if (subjectNames[j] is String && subjectNames[j].Equals(Sdk.ECHO_API_DOMAIN_NAME)) {\n                        found = true;\n                        break;\n                    }\n                }\n            }\n\n            return found;\n        }\n    }\n}\n"
  },
  {
    "path": "AlexaSkillsKit.Lib/Authentication/SpeechletRequestTimestampVerifier.cs",
    "content": "﻿// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nusing System;\nusing System.Diagnostics;\nusing AlexaSkillsKit.Json;\n\nnamespace AlexaSkillsKit.Authentication\n{\n    public class SpeechletRequestTimestampVerifier\n    {\n        /// <summary>\n        /// Verifies request timestamp\n        /// </summary>\n        public static bool VerifyRequestTimestamp(SpeechletRequestEnvelope requestEnvelope, DateTime referenceTimeUtc) {\n            // verify timestamp is within tolerance\n            var diff = referenceTimeUtc - requestEnvelope.Request.Timestamp;\n            Debug.WriteLine(\"Request was timestamped {0:0.00} seconds ago.\", diff.TotalSeconds);\n            return (Math.Abs((decimal)diff.TotalSeconds) <= Sdk.TIMESTAMP_TOLERANCE_SEC);\n        }\n    }\n}"
  },
  {
    "path": "AlexaSkillsKit.Lib/Authentication/SpeechletRequestValidationResult.cs",
    "content": "﻿// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nusing System;\n\nnamespace AlexaSkillsKit.Authentication\n{\n    [Flags]\n    public enum SpeechletRequestValidationResult\n    {\n        OK = 0,\n        NoSignatureHeader = 1,\n        NoCertHeader = 2,\n        InvalidSignature = 4,\n        InvalidTimestamp = 8,\n        InvalidJson = 16,\n        InvalidApplicationId = 32,\n        NoContent = 64,\n        InvalidVersion = 128\n    }\n}"
  },
  {
    "path": "AlexaSkillsKit.Lib/Helpers/DateTimeHelpers.cs",
    "content": "﻿// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nusing System;\nusing Newtonsoft.Json;\nusing Newtonsoft.Json.Linq;\n\nnamespace AlexaSkillsKit.Helpers\n{\n    public class DateTimeHelpers\n    {\n        public static DateTime FromAlexaTimestamp(JObject requestJson) {\n            try {\n                return requestJson[\"timestamp\"].Value<DateTime>();\n            }\n            catch (Exception ex) \n            when (ex is InvalidCastException || ex is FormatException) {\n                try {\n                    return FromUnixTimeMilliseconds(requestJson[\"timestamp\"].Value<string>()).DateTime;\n                }\n                catch (ArgumentOutOfRangeException) {\n                    throw ex;\n                }\n            }\n        }\n\n\n        /// <summary>\n        /// Mirror DateTimeOffset.FromUnixTimeMilliseconds method signature introduced in .NET Framework 4.6\n        /// https://msdn.microsoft.com/en-us/library/system.datetimeoffset.fromunixtimemilliseconds(v=vs.110).aspx\n        /// </summary>\n        /// <param name=\"timestamp\">\n        /// A Unix time, expressed as the number of milliseconds that have elapsed since 1970-01-01T00:00:00Z (January 1, 1970, at 12:00 AM UTC). For Unix times before this date, its value is negative.\n        /// </param>\n        /// <returns>\n        /// A date and time value that represents the same moment in time as the Unix time.\n        /// </returns>\n        public static DateTimeOffset FromUnixTimeMilliseconds(string timestamp) {\n            long milliseconds;\n            if (!long.TryParse(timestamp, out milliseconds) ||\n                milliseconds < -62135596800000 ||\n                milliseconds > 253402300799999) {\n                throw new ArgumentOutOfRangeException(\"timestamp\");\n            }\n\n            var epoch = new DateTimeOffset(1970, 1, 1, 0, 0, 0, TimeZoneInfo.Utc.BaseUtcOffset);\n            return epoch.AddMilliseconds(milliseconds);\n        }\n    }\n}\n"
  },
  {
    "path": "AlexaSkillsKit.Lib/Interfaces/AudioPlayer/AudioItem.cs",
    "content": "﻿// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nnamespace AlexaSkillsKit.Interfaces.AudioPlayer\n{\n    /// <summary>\n    /// https://developer.amazon.com/docs/custom-skills/audioplayer-interface-reference.html#play\n    /// </summary>\n    public class AudioItem\n    {\n        public virtual AudioItemStream Stream {\n            get;\n            set;\n        }\n    }\n}"
  },
  {
    "path": "AlexaSkillsKit.Lib/Interfaces/AudioPlayer/AudioItemStream.cs",
    "content": "﻿// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nnamespace AlexaSkillsKit.Interfaces.AudioPlayer\n{\n    /// <summary>\n    /// https://developer.amazon.com/docs/custom-skills/audioplayer-interface-reference.html#play\n    /// </summary>\n    public class AudioItemStream\n    {\n        public virtual string Url {\n            get;\n            set;\n        }\n\n        public virtual string Token {\n            get;\n            set;\n        }\n\n        public virtual string ExpectedPreviousToken {\n            get;\n            set;\n        }\n\n        public virtual long OffsetInMilliseconds {\n            get;\n            set;\n        }\n    }\n}"
  },
  {
    "path": "AlexaSkillsKit.Lib/Interfaces/AudioPlayer/AudioPlayerInterface.cs",
    "content": "﻿// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nusing AlexaSkillsKit.Speechlet;\nusing Newtonsoft.Json.Linq;\n\nnamespace AlexaSkillsKit.Interfaces.AudioPlayer\n{\n    public class AudioPlayerInterface : ISpeechletInterface\n    {\n        public static AudioPlayerInterface FromJson(JObject json)\n        {\n            if (json == null) return null;\n\n            return new AudioPlayerInterface();\n        }\n    }\n}"
  },
  {
    "path": "AlexaSkillsKit.Lib/Interfaces/AudioPlayer/AudioPlayerPlaybackFailedRequest.cs",
    "content": "﻿// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nusing AlexaSkillsKit.Speechlet;\nusing Newtonsoft.Json.Linq;\n\nnamespace AlexaSkillsKit.Interfaces.AudioPlayer\n{\n    /// <summary>\n    /// https://developer.amazon.com/docs/custom-skills/audioplayer-interface-reference.html#playbackfailed\n    /// </summary>\n    public class AudioPlayerPlaybackFailedRequest : AudioPlayerRequest\n    {\n        public AudioPlayerPlaybackFailedRequest(string subtype, JObject json) : base(subtype, json) {\n            Error = Error.FromJson(json.Value<JObject>(\"error\"));\n            CurrentPlaybackState = PlaybackState.FromJson(json.Value<JObject>(\"currentPlaybackState\"));\n        }\n\n        public Error Error {\n            get;\n            private set;\n        }\n\n        public PlaybackState CurrentPlaybackState {\n            get;\n            private set;\n        }\n    }\n}"
  },
  {
    "path": "AlexaSkillsKit.Lib/Interfaces/AudioPlayer/AudioPlayerRequest.cs",
    "content": "﻿// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nusing AlexaSkillsKit.Speechlet;\nusing Newtonsoft.Json.Linq;\n\nnamespace AlexaSkillsKit.Interfaces.AudioPlayer\n{\n    /// <summary>\n    /// https://developer.amazon.com/docs/custom-skills/audioplayer-interface-reference.html#requests\n    /// </summary>\n    public class AudioPlayerRequest : ExtendedSpeechletRequest\n    {\n        public static readonly string TypeName = \"AudioPlayer\";\n\n        public AudioPlayerRequest(string subtype, JObject json) : base(TypeName, subtype, json) {\n            Token = json.Value<string>(\"token\");\n            OffsetInMilliseconds = json.Value<long?>(\"offsetInMilliseconds\");\n        }\n\n        public string Token {\n            get;\n            private set;\n        }\n\n        public long? OffsetInMilliseconds {\n            get;\n            private set;\n        }\n    }\n}"
  },
  {
    "path": "AlexaSkillsKit.Lib/Interfaces/AudioPlayer/AudioPlayerResponse.cs",
    "content": "﻿// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nusing AlexaSkillsKit.Interfaces.AudioPlayer.Directives;\nusing AlexaSkillsKit.Speechlet;\nusing System.Collections.Generic;\n\nnamespace AlexaSkillsKit.Interfaces.AudioPlayer\n{\n    /// <summary>\n    /// https://developer.amazon.com/docs/custom-skills/request-and-response-json-reference.html#response-to-audioplayer-or-playbackcontroller-example-directives-only\n    /// </summary>\n    public class AudioPlayerResponse : ISpeechletResponse\n    {\n        public virtual IEnumerable<AudioPlayerDirective> Directives {\n            get;\n            set;\n        }\n    }\n}"
  },
  {
    "path": "AlexaSkillsKit.Lib/Interfaces/AudioPlayer/AudioPlayerState.cs",
    "content": "﻿// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nusing AlexaSkillsKit.Speechlet;\nusing Newtonsoft.Json.Linq;\nusing System;\n\nnamespace AlexaSkillsKit.Interfaces.AudioPlayer\n{\n    public class AudioPlayerState : ISpeechletInterfaceState\n    {\n        public static AudioPlayerState FromJson(JObject json) {\n            if (json == null) return null;\n\n            PlayerActivityEnum playerActivity = PlayerActivityEnum.NONE;\n            Enum.TryParse(json.Value<string>(\"playerActivity\"), out playerActivity);\n            return new AudioPlayerState {\n                OffsetInMilliseconds = json.Value<long?>(\"offsetInMilliseconds\"),\n                Token = json.Value<string>(\"token\"),\n                PlayerActivity = playerActivity\n            };\n        }\n\n        public long? OffsetInMilliseconds {\n            get;\n            private set;\n        }\n\n        public string Token {\n            get;\n            private set;\n        }\n\n        public PlayerActivityEnum PlayerActivity {\n            get;\n            private set;\n        }\n\n        public enum PlayerActivityEnum\n        {\n            NONE = 0, // default in case parsing fails\n            PLAYING,\n            PAUSED,\n            FINISHED,\n            BUFFER_UNDERRUN,\n            IDLE,\n            STOPPED\n        }\n    }\n}"
  },
  {
    "path": "AlexaSkillsKit.Lib/Interfaces/AudioPlayer/Directives/AudioPlayerClearQueueDirective.cs",
    "content": "﻿// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nnamespace AlexaSkillsKit.Interfaces.AudioPlayer.Directives\n{\n    /// <summary>\n    /// https://developer.amazon.com/docs/custom-skills/audioplayer-interface-reference.html#clearqueue\n    /// </summary>\n    public class AudioPlayerClearQueueDirective : AudioPlayerDirective\n    {\n        public AudioPlayerClearQueueDirective() : base(\"ClearQueue\") {\n\n        }\n\n        public virtual ClearBehaviorEnum ClearBehavior {\n            get;\n            set;\n        }\n\n        public enum ClearBehaviorEnum\n        {\n            CLEAR_ENQUEUED,\n            CLEAR_ALL\n        }\n    }\n}"
  },
  {
    "path": "AlexaSkillsKit.Lib/Interfaces/AudioPlayer/Directives/AudioPlayerDirective.cs",
    "content": "﻿// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nusing AlexaSkillsKit.Speechlet;\n\nnamespace AlexaSkillsKit.Interfaces.AudioPlayer.Directives\n{\n    /// <summary>\n    /// https://developer.amazon.com/docs/custom-skills/audioplayer-interface-reference.html#directives\n    /// </summary>\n    public class AudioPlayerDirective : Directive\n    {\n        public AudioPlayerDirective(string subtype) : base($\"AudioPlayer.{subtype}\") {\n\n        }\n    }\n}"
  },
  {
    "path": "AlexaSkillsKit.Lib/Interfaces/AudioPlayer/Directives/AudioPlayerPlayDirective.cs",
    "content": "﻿// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nnamespace AlexaSkillsKit.Interfaces.AudioPlayer.Directives\n{\n    /// <summary>\n    /// https://developer.amazon.com/docs/custom-skills/audioplayer-interface-reference.html#play\n    /// </summary>\n    public class AudioPlayerPlayDirective : AudioPlayerDirective\n    {\n        public AudioPlayerPlayDirective() : base(\"Play\") {\n\n        }\n\n        public virtual PlayBehaviorEnum PlayBehavior {\n            get;\n            set;\n        }\n\n        public virtual AudioItem AudioItem {\n            get;\n            set;\n        }\n\n        public enum PlayBehaviorEnum\n        {\n            REPLACE_ALL,\n            ENQUEUE,\n            REPLACE_ENQUEUED\n        }\n    }\n}"
  },
  {
    "path": "AlexaSkillsKit.Lib/Interfaces/AudioPlayer/Directives/AudioPlayerStopDirective.cs",
    "content": "﻿// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nnamespace AlexaSkillsKit.Interfaces.AudioPlayer.Directives\n{\n    /// <summary>\n    /// https://developer.amazon.com/docs/custom-skills/audioplayer-interface-reference.html#stop\n    /// </summary>\n    public class AudioPlayerStopDirective : AudioPlayerDirective\n    {\n        public AudioPlayerStopDirective() : base(\"Stop\") {\n\n        }\n    }\n}"
  },
  {
    "path": "AlexaSkillsKit.Lib/Interfaces/AudioPlayer/IAudioPlayerSpeechlet.cs",
    "content": "﻿// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nusing AlexaSkillsKit.Speechlet;\n\nnamespace AlexaSkillsKit.Interfaces.AudioPlayer\n{\n    public interface IAudioPlayerSpeechlet\n    {\n        AudioPlayerResponse OnAudioPlayer(AudioPlayerRequest audioRequest, Context context);\n        AudioPlayerResponse OnPlaybackController(PlaybackControllerRequest playbackRequest, Context context);\n        void OnSystemExceptionEncountered(SystemExceptionEncounteredRequest systemRequest, Context context);\n    }\n}"
  },
  {
    "path": "AlexaSkillsKit.Lib/Interfaces/AudioPlayer/IAudioPlayerSpeechletAsync.cs",
    "content": "﻿// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nusing AlexaSkillsKit.Speechlet;\nusing System.Threading.Tasks;\n\nnamespace AlexaSkillsKit.Interfaces.AudioPlayer\n{\n    public interface IAudioPlayerSpeechletAsync\n    {\n        Task<AudioPlayerResponse> OnAudioPlayerAsync(AudioPlayerRequest audioRequest, Context context);\n        Task<AudioPlayerResponse> OnPlaybackControllerAsync(PlaybackControllerRequest playbackRequest, Context context);\n        Task OnSystemExceptionEncounteredAsync(SystemExceptionEncounteredRequest systemRequest, Context context);\n    }\n}"
  },
  {
    "path": "AlexaSkillsKit.Lib/Interfaces/AudioPlayer/PlaybackControllerRequest.cs",
    "content": "﻿// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nusing AlexaSkillsKit.Speechlet;\nusing Newtonsoft.Json.Linq;\n\nnamespace AlexaSkillsKit.Interfaces.AudioPlayer\n{\n    /// <summary>\n    /// https://developer.amazon.com/docs/custom-skills/playback-controller-interface-reference.html#requests\n    /// </summary>\n    public class PlaybackControllerRequest : ExtendedSpeechletRequest\n    {\n        public static readonly string TypeName = \"PlaybackController\";\n\n        public PlaybackControllerRequest(string subtype, JObject json) : base(TypeName, subtype, json) {\n        }\n    }\n}"
  },
  {
    "path": "AlexaSkillsKit.Lib/Interfaces/Dialog/Directives/DialogConfirmIntentDirective.cs",
    "content": "﻿// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nnamespace AlexaSkillsKit.Interfaces.Dialog.Directives\n{\n    /// <summary>\n    /// https://developer.amazon.com/docs/custom-skills/dialog-interface-reference.html#confirmintent\n    /// </summary>\n    public class DialogConfirmIntentDirective : DialogDirective\n    {\n        public DialogConfirmIntentDirective() : base(\"ConfirmIntent\") {\n\n        }\n    }\n}"
  },
  {
    "path": "AlexaSkillsKit.Lib/Interfaces/Dialog/Directives/DialogConfirmSlotDirective.cs",
    "content": "﻿// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nnamespace AlexaSkillsKit.Interfaces.Dialog.Directives\n{\n    /// <summary>\n    /// https://developer.amazon.com/docs/custom-skills/dialog-interface-reference.html#confirmslot\n    /// </summary>\n    public class DialogConfirmSlotDirective : DialogDirective\n    {\n        public DialogConfirmSlotDirective() : base(\"ConfirmSlot\") {\n\n        }\n\n        public virtual string SlotToConfirm {\n            get;\n            set;\n        }\n    }\n}"
  },
  {
    "path": "AlexaSkillsKit.Lib/Interfaces/Dialog/Directives/DialogDelegateDirective.cs",
    "content": "﻿// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nnamespace AlexaSkillsKit.Interfaces.Dialog.Directives\n{\n    /// <summary>\n    /// https://developer.amazon.com/docs/custom-skills/dialog-interface-reference.html#delegate\n    /// </summary>\n    public class DialogDelegateDirective : DialogDirective\n    {\n        public DialogDelegateDirective() : base(\"Delegate\") {\n\n        }\n    }\n}"
  },
  {
    "path": "AlexaSkillsKit.Lib/Interfaces/Dialog/Directives/DialogDirective.cs",
    "content": "﻿// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nusing AlexaSkillsKit.Slu;\nusing AlexaSkillsKit.Speechlet;\n\nnamespace AlexaSkillsKit.Interfaces.Dialog.Directives\n{\n    /// <summary>\n    /// https://developer.amazon.com/docs/custom-skills/dialog-interface-reference.html#directives\n    /// </summary>\n    public class DialogDirective: Directive\n    {\n        public DialogDirective(string subtype) : base($\"Dialog.{subtype}\") {\n\n        }\n\n        public virtual Intent UpdatedIntent {\n            get;\n            set;\n        }\n    }\n}"
  },
  {
    "path": "AlexaSkillsKit.Lib/Interfaces/Dialog/Directives/DialogElicitSlotDirective.cs",
    "content": "﻿// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nnamespace AlexaSkillsKit.Interfaces.Dialog.Directives\n{\n    /// <summary>\n    /// https://developer.amazon.com/docs/custom-skills/dialog-interface-reference.html#elicitslot\n    /// </summary>\n    public class DialogElicitSlotDirective : DialogDirective\n    {\n        public DialogElicitSlotDirective() : base(\"ElicitSlot\") {\n\n        }\n\n        public virtual string SlotToElicit {\n            get;\n            set;\n        }\n    }\n}"
  },
  {
    "path": "AlexaSkillsKit.Lib/Interfaces/Display/Directives/DisplayRenderTemplateDirective.cs",
    "content": "﻿// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nusing AlexaSkillsKit.Speechlet;\n\nnamespace AlexaSkillsKit.Interfaces.Display.Directives\n{\n    /// <summary>\n    /// https://developer.amazon.com/docs/custom-skills/display-interface-reference.html#form-of-the-displayrendertemplate-directive\n    /// </summary>\n    public class DisplayRenderTemplateDirective : Directive\n    {\n        public DisplayRenderTemplateDirective() : base(\"Display.RenderTemplate\") {\n\n        }\n\n        public virtual DisplayTemplate Template {\n            get;\n            set;\n        }\n    }\n}"
  },
  {
    "path": "AlexaSkillsKit.Lib/Interfaces/Display/Directives/HintDirective.cs",
    "content": "﻿// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nusing AlexaSkillsKit.Speechlet;\n\nnamespace AlexaSkillsKit.Interfaces.Display.Directives\n{\n    /// <summary>\n    /// https://developer.amazon.com/docs/custom-skills/display-interface-reference.html#hint-directive\n    /// </summary>\n    public class HintDirective : Directive\n    {\n        public HintDirective() : base(\"Hint\") {\n\n        }\n\n        public virtual TextField Hint {\n            get;\n            set;\n        }\n    }\n}"
  },
  {
    "path": "AlexaSkillsKit.Lib/Interfaces/Display/DisplayImage.cs",
    "content": "﻿// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nusing System.Collections.Generic;\n\nnamespace AlexaSkillsKit.Interfaces.Display\n{\n    /// <summary>\n    /// https://developer.amazon.com/docs/custom-skills/display-interface-reference.html#image-object-specifications\n    /// </summary>\n    public class DisplayImage\n    {\n        public virtual string ContentDescription {\n            get;\n            set;\n        }\n\n        public virtual IEnumerable<DisplayImageSource> Sources {\n            get;\n            set;\n        }\n    }\n}"
  },
  {
    "path": "AlexaSkillsKit.Lib/Interfaces/Display/DisplayImageSource.cs",
    "content": "﻿// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nnamespace AlexaSkillsKit.Interfaces.Display\n{\n    /// <summary>\n    /// https://developer.amazon.com/docs/custom-skills/display-interface-reference.html#image-object-specifications\n    /// </summary>\n    public class DisplayImageSource\n    {\n        public virtual string Url {\n            get;\n            set;\n        }\n\n        public virtual ImageSizeEnum Size {\n            get;\n            set;\n        }\n\n        public virtual int WidthPixels {\n            get;\n            set;\n        }\n\n        public virtual int HeightPixels {\n            get;\n            set;\n        }\n\n        public enum ImageSizeEnum\n        {\n            X_SMALL,\n            SMALL,\n            MEDIUM,\n            LARGE,\n            X_LARGE\n        }\n    }\n}"
  },
  {
    "path": "AlexaSkillsKit.Lib/Interfaces/Display/DisplayInterface.cs",
    "content": "﻿// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nusing AlexaSkillsKit.Speechlet;\nusing Newtonsoft.Json.Linq;\n\nnamespace AlexaSkillsKit.Interfaces.Display\n{\n    /// <summary>\n    /// https://developer.amazon.com/docs/custom-skills/display-interface-reference.html#determining-the-version-of-the-supported-display\n    /// </summary>\n    public class DisplayInterface: ISpeechletInterface\n    {\n        private const string DefaultTemplateVersion = \"1\";\n        private const string DefaultMarkupVersion = \"1\";\n\n        public static DisplayInterface FromJson(JObject json) {\n            if (json == null) return null;\n\n            return new DisplayInterface {\n                TemplateVersion = json.Value<string>(\"templateVersion\") ?? DefaultTemplateVersion,\n                MarkupVersion = json.Value<string>(\"markupVersion\") ?? DefaultMarkupVersion,\n                Token = json.Value<string>(\"token\")\n            };\n        }\n\n        public string TemplateVersion {\n            get;\n            private set;\n        }\n\n        public string MarkupVersion {\n            get;\n            private set;\n        }\n\n        public string Token {\n            get;\n            private set;\n        }\n    }\n}"
  },
  {
    "path": "AlexaSkillsKit.Lib/Interfaces/Display/DisplayRequest.cs",
    "content": "﻿// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nusing AlexaSkillsKit.Speechlet;\nusing Newtonsoft.Json.Linq;\n\nnamespace AlexaSkillsKit.Interfaces.Display\n{\n    /// <summary>\n    /// https://developer.amazon.com/docs/custom-skills/display-interface-reference.html#touch-selection-events\n    /// </summary>\n    public class DisplayRequest : ExtendedSpeechletRequest\n    {\n        public static readonly string TypeName = \"Display\";\n\n        public DisplayRequest(string subtype, JObject json) : base(TypeName, subtype, json) {\n            Token = json.Value<string>(\"token\");\n        }\n\n        public string Token {\n            get;\n            private set;\n        }\n    }\n}"
  },
  {
    "path": "AlexaSkillsKit.Lib/Interfaces/Display/DisplayTemplate.cs",
    "content": "﻿// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nusing System.Collections.Generic;\n\nnamespace AlexaSkillsKit.Interfaces.Display\n{\n    /// <summary>\n    /// https://developer.amazon.com/docs/custom-skills/display-interface-reference.html#display-template-elements\n    /// </summary>\n    public class DisplayTemplate\n    {\n        public virtual string Type {\n            get;\n            set;\n        }\n\n        public virtual string Token {\n            get;\n            set;\n        }\n\n        public virtual string Title {\n            get;\n            set;\n        }\n\n        public virtual TextContent TextContent {\n            get;\n            set;\n        }\n\n        public virtual ButtonStateEnum BackButton {\n            get;\n            set;\n        }\n\n        public virtual DisplayImage BackgroundImage {\n            get;\n            set;\n        }\n\n        public virtual DisplayImage Image {\n            get;\n            set;\n        }\n\n        public virtual IEnumerable<ListItem> ListItems {\n            get;\n            set;\n        }\n\n        public enum ButtonStateEnum\n        {\n            HIDDEN,\n            VISIBLE\n        }\n    }\n}"
  },
  {
    "path": "AlexaSkillsKit.Lib/Interfaces/Display/IDisplaySpeechlet.cs",
    "content": "﻿// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nusing AlexaSkillsKit.Speechlet;\n\nnamespace AlexaSkillsKit.Interfaces.Display\n{\n    public interface IDisplaySpeechlet\n    {\n        SpeechletResponse OnDisplay(DisplayRequest displayRequest, Context context);\n    }\n}"
  },
  {
    "path": "AlexaSkillsKit.Lib/Interfaces/Display/IDisplaySpeechletAsync.cs",
    "content": "﻿// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nusing AlexaSkillsKit.Speechlet;\nusing System.Threading.Tasks;\n\nnamespace AlexaSkillsKit.Interfaces.Display\n{\n    public interface IDisplaySpeechletAsync\n    {\n        Task<SpeechletResponse> OnDisplayAsync(DisplayRequest displayRequest, Context context);\n    }\n}"
  },
  {
    "path": "AlexaSkillsKit.Lib/Interfaces/Display/ListItem.cs",
    "content": "﻿// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nnamespace AlexaSkillsKit.Interfaces.Display\n{\n    /// <summary>\n    /// https://developer.amazon.com/docs/custom-skills/display-interface-reference.html#display-template-elements\n    /// </summary>\n    public class ListItem\n    {\n        public virtual string Token {\n            get;\n            set;\n        }\n\n        public virtual DisplayImage Image {\n            get;\n            set;\n        }\n\n        public virtual TextContent TextContent {\n            get;\n            set;\n        }\n    }\n}"
  },
  {
    "path": "AlexaSkillsKit.Lib/Interfaces/Display/TextContent.cs",
    "content": "﻿// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nnamespace AlexaSkillsKit.Interfaces.Display\n{\n    /// <summary>\n    /// https://developer.amazon.com/docs/custom-skills/display-interface-reference.html#textcontent-object-specifications\n    /// </summary>\n    public class TextContent\n    {\n        public virtual TextField PrimaryText {\n            get;\n            set;\n        }\n\n        public virtual TextField SecondaryText {\n            get;\n            set;\n        }\n\n        public virtual TextField TertiaryText {\n            get;\n            set;\n        }\n    }\n}"
  },
  {
    "path": "AlexaSkillsKit.Lib/Interfaces/Display/TextField.cs",
    "content": "﻿// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nnamespace AlexaSkillsKit.Interfaces.Display\n{\n    /// <summary>\n    /// https://developer.amazon.com/docs/custom-skills/display-interface-reference.html#textcontent-object-specifications\n    /// </summary>\n    public class TextField\n    {\n        public virtual TextTypeEnum Type {\n            get;\n            set;\n        }\n\n        public virtual string Text {\n            get;\n            set;\n        }\n\n        public enum TextTypeEnum\n        {\n            PlainText,\n            RichText\n        }\n    }\n}"
  },
  {
    "path": "AlexaSkillsKit.Lib/Interfaces/VideoApp/Directives/VideoAppLaunchDirective.cs",
    "content": "﻿// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nusing AlexaSkillsKit.Speechlet;\n\nnamespace AlexaSkillsKit.Interfaces.VideoApp.Directives\n{\n    /// <summary>\n    /// https://developer.amazon.com/docs/custom-skills/videoapp-interface-reference.html#videoapp-directives\n    /// </summary>\n    public class VideoAppLaunchDirective : Directive\n    {\n        public VideoAppLaunchDirective() : base(\"VideoApp.Launch\") {\n\n        }\n\n        public virtual VideoItem VideoItem {\n            get;\n            set;\n        }\n    }\n}"
  },
  {
    "path": "AlexaSkillsKit.Lib/Interfaces/VideoApp/VideoItem.cs",
    "content": "﻿// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nnamespace AlexaSkillsKit.Interfaces.VideoApp\n{\n    /// <summary>\n    /// https://developer.amazon.com/docs/custom-skills/videoapp-interface-reference.html#parameters-of-response\n    /// </summary>\n    public class VideoItem\n    {\n        public virtual string Source {\n            get;\n            set;\n        }\n\n        public virtual VideoItemMetadata Metadata {\n            get;\n            set;\n        }\n    }\n}"
  },
  {
    "path": "AlexaSkillsKit.Lib/Interfaces/VideoApp/VideoItemMetadata.cs",
    "content": "﻿// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nnamespace AlexaSkillsKit.Interfaces.VideoApp\n{\n    /// <summary>\n    /// https://developer.amazon.com/docs/custom-skills/videoapp-interface-reference.html#parameters-of-response\n    /// </summary>\n    public class VideoItemMetadata\n    {\n        public virtual string Title {\n            get;\n            set;\n        }\n\n        public virtual string Subtitle {\n            get;\n            set;\n        }\n    }\n}"
  },
  {
    "path": "AlexaSkillsKit.Lib/Json/CamelCasePropertyNamesExceptDictionaryKeysContractResolver.cs",
    "content": "﻿// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nusing Newtonsoft.Json.Serialization;\nusing System;\n\nnamespace AlexaSkillsKit.Json\n{\n    public class CamelCasePropertyNamesExceptDictionaryKeysContractResolver : CamelCasePropertyNamesContractResolver\n    {\n        protected override JsonDictionaryContract CreateDictionaryContract(Type objectType) {\n            var contract = base.CreateDictionaryContract(objectType);\n            contract.DictionaryKeyResolver = propertyName => propertyName;\n            return contract;\n        }\n    }\n}"
  },
  {
    "path": "AlexaSkillsKit.Lib/Json/Deserializer.cs",
    "content": "﻿// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nusing Newtonsoft.Json.Linq;\nusing System;\nusing System.Collections.Generic;\n\nnamespace AlexaSkillsKit.Json\n{\n    public class Deserializer<T>\n    {\n        private static IDictionary<string, Func<JObject, T>> deserializers = new Dictionary<string, Func<JObject, T>>();\n\n        public static void RegisterDeserializer(string name, Func<JObject, T> fromJson) {\n            deserializers.Add(name, fromJson);\n        }\n\n        public static T FromJson(JProperty json) {\n            if (json == null || !deserializers.ContainsKey(json.Name)) return default(T);\n\n            return deserializers[json.Name](json.Value as JObject);\n        }\n    }\n}\n"
  },
  {
    "path": "AlexaSkillsKit.Lib/Json/SpeechletRequestEnvelope.cs",
    "content": "﻿// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nusing System;\nusing Newtonsoft.Json;\nusing Newtonsoft.Json.Linq;\nusing AlexaSkillsKit.Speechlet;\nusing AlexaSkillsKit.Authentication;\n\nnamespace AlexaSkillsKit.Json\n{\n    public class SpeechletRequestEnvelope\n    {\n        public static SpeechletRequestParser RequestParser { get; } = new SpeechletRequestParser();\n\n        static SpeechletRequestEnvelope() {\n            RequestParser.AddStandard();\n            RequestParser.AddSystem();\n            RequestParser.AddAudioPlayer();\n            RequestParser.AddPlaybackController();\n            RequestParser.AddDisplay();\n        }\n\n        /// <summary>\n        /// \n        /// </summary>\n        /// <param name=\"content\"></param>\n        /// <returns></returns>\n        public static SpeechletRequestEnvelope FromJson(string content) {\n            if (String.IsNullOrEmpty(content)) {\n                throw new SpeechletValidationException(SpeechletRequestValidationResult.NoContent, \"Request content is empty\");\n            }\n\n            JObject json = JsonConvert.DeserializeObject<JObject>(content, Sdk.DeserializationSettings);\n            return FromJson(json);\n        }\n\n\n        /// <summary>\n        /// \n        /// </summary>\n        /// <param name=\"json\"></param>\n        /// <returns></returns>\n        public static SpeechletRequestEnvelope FromJson(JObject json) {\n            var version = json.Value<string>(\"version\");\n            if (version != null && version != Sdk.VERSION) {\n                throw new SpeechletValidationException(SpeechletRequestValidationResult.InvalidVersion, \"Request must conform to 1.0 schema.\");\n            }\n\n            return new SpeechletRequestEnvelope {\n                Version = version,\n                Request = RequestParser.Parse(json.Value<JObject>(\"request\")),\n                Session = Session.FromJson(json.Value<JObject>(\"session\")),\n                Context = Context.FromJson(json.Value<JObject>(\"context\"))\n            };\n        }\n\n\n        public virtual SpeechletRequest Request {\n            get;\n            set;\n        }\n\n        public virtual Session Session {\n            get;\n            set;\n        }\n\n        public virtual string Version {\n            get;\n            set;\n        }\n\n        public virtual Context Context {\n            get;\n            set;\n        }\n    }\n}"
  },
  {
    "path": "AlexaSkillsKit.Lib/Json/SpeechletRequestParser.cs",
    "content": "﻿// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nusing AlexaSkillsKit.Speechlet;\nusing Newtonsoft.Json.Linq;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\n\nnamespace AlexaSkillsKit.Json\n{\n    public class SpeechletRequestParser\n    {\n        private IDictionary<string, Func<string, JObject, SpeechletRequest>> resolvers\n            = new Dictionary<string, Func<string, JObject, SpeechletRequest>>();\n\n        private SpeechletRequest Parse(string type, string subtype, JObject json) {\n            if (json == null || !resolvers.ContainsKey(type)) return null;\n\n            return resolvers[type](subtype, json);\n        }\n\n        public SpeechletRequest Parse(JObject json) {\n            var requestTypeParts = json?.Value<string>(\"type\")?.Split('.');\n            if (requestTypeParts == null) {\n                throw new ArgumentException(\"json\");\n            }\n\n            var requestType = requestTypeParts.Length > 1 ? requestTypeParts[0] : string.Empty;\n            var requestSubtype = requestTypeParts.Last();\n\n            var request = Parse(requestType, requestSubtype, json);\n            if (request == null) {\n                throw new ArgumentException(\"json\");\n            }\n\n            return request;\n        }\n\n        public void AddInterface(string name, Func<string, JObject, SpeechletRequest> resolver) {\n            resolvers[name] = resolver;\n        }\n    }\n}"
  },
  {
    "path": "AlexaSkillsKit.Lib/Json/SpeechletRequestParserExtensions.cs",
    "content": "﻿// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nusing AlexaSkillsKit.Interfaces.AudioPlayer;\nusing AlexaSkillsKit.Interfaces.Display;\nusing AlexaSkillsKit.Speechlet;\n\nnamespace AlexaSkillsKit.Json\n{\n    public static class SpeechletRequestParserExtensions\n    {\n        public static void AddStandard(this SpeechletRequestParser parser) {\n            parser.AddInterface(string.Empty, (subtype, json) => {\n                switch (subtype) {\n                    case \"LaunchRequest\":\n                        return new LaunchRequest(json);\n                    case \"IntentRequest\":\n                        return new IntentRequest(json);\n                    case \"SessionEndedRequest\":\n                        return new SessionEndedRequest(json);\n                }\n                return null;\n            });\n        }\n\n        public static void AddSystem(this SpeechletRequestParser parser) {\n            parser.AddInterface(SystemRequest.TypeName, (subtype, json) => {\n                switch (subtype) {\n                    case \"ExceptionEncountered\":\n                        return new SystemExceptionEncounteredRequest(subtype, json);\n                }\n                return null;\n            });\n        }\n\n        public static void AddAudioPlayer(this SpeechletRequestParser parser) {\n            parser.AddInterface(AudioPlayerRequest.TypeName, (subtype, json) => {\n                switch (subtype) {\n                    case \"PlaybackFailed\":\n                        return new AudioPlayerPlaybackFailedRequest(subtype, json);\n                    default:\n                        return new AudioPlayerRequest(subtype, json);\n                }\n            });\n        }\n\n        public static void AddPlaybackController(this SpeechletRequestParser parser) {\n            parser.AddInterface(PlaybackControllerRequest.TypeName, (subtype, json) => new PlaybackControllerRequest(subtype, json));\n        }\n\n        public static void AddDisplay(this SpeechletRequestParser parser) {\n            parser.AddInterface(DisplayRequest.TypeName, (subtype, json) => new DisplayRequest(subtype, json));\n        }\n    }\n}"
  },
  {
    "path": "AlexaSkillsKit.Lib/Json/SpeechletResponseEnvelope.cs",
    "content": "﻿// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nusing System.Collections.Generic;\nusing Newtonsoft.Json;\nusing AlexaSkillsKit.Speechlet;\n\nnamespace AlexaSkillsKit.Json\n{\n    public class SpeechletResponseEnvelope\n    {\n        private static JsonSerializerSettings _serializerSettings = new JsonSerializerSettings() {\n            NullValueHandling = NullValueHandling.Ignore, \n            ContractResolver = new CamelCasePropertyNamesExceptDictionaryKeysContractResolver(),\n            Converters = new List<JsonConverter> { new Newtonsoft.Json.Converters.StringEnumConverter() }\n        };\n\n\n        /// <summary>\n        /// \n        /// </summary>\n        /// <returns></returns>\n        public virtual string ToJson() {\n            return JsonConvert.SerializeObject(this, _serializerSettings);\n        }\n\n\n        public virtual ISpeechletResponse Response {\n            get;\n            set;\n        }\n\n        public virtual Dictionary<string, string> SessionAttributes {\n            get;\n            set;\n        }\n\n        public virtual string Version {\n            get;\n            set;\n        }\n    }\n}"
  },
  {
    "path": "AlexaSkillsKit.Lib/Properties/AssemblyInfo.cs",
    "content": "﻿// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nusing System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"AlexaSkillsKit\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"\")]\n[assembly: AssemblyProduct(\"AlexaSkillsKit\")]\n[assembly: AssemblyCopyright(\"Copyright © 2018 Stefan Negritoiu (FreeBusy) and contributors\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible \n// to COM components.  If you need to access a type in this assembly from \n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid(\"5471ba5b-32c1-486c-851b-dbb8d9c53f13\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version \n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Build and Revision Numbers \n// by using the '*' as shown below:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n[assembly: AssemblyVersion(\"1.6.0\")]\n[assembly: AssemblyFileVersion(\"1.6.0\")]\n"
  },
  {
    "path": "AlexaSkillsKit.Lib/Sdk.cs",
    "content": "﻿// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nusing System;\nusing Newtonsoft.Json;\n\nnamespace AlexaSkillsKit\n{\n    public static class Sdk\n    {\n        public const string VERSION = \"1.0\";\n        public const string CHARACTER_ENCODING = \"UTF-8\";\n        public const string ECHO_API_DOMAIN_NAME = \"echo-api.amazon.com\";\n        public const string SIGNATURE_CERT_URL_REQUEST_HEADER = \"SignatureCertChainUrl\";\n        public const string SIGNATURE_CERT_URL_HOST = \"s3.amazonaws.com\";\n        public const string SIGNATURE_CERT_URL_PATH = \"/echo.api/\";\n        public const string SIGNATURE_CERT_TYPE = \"X.509\";\n        public const string SIGNATURE_REQUEST_HEADER = \"Signature\";\n        public const string SIGNATURE_ALGORITHM = \"SHA1withRSA\";\n        public const string SIGNATURE_KEY_TYPE = \"RSA\";\n        public const int TIMESTAMP_TOLERANCE_SEC = 150;\n\n        public static JsonSerializerSettings DeserializationSettings = new JsonSerializerSettings {\n            MissingMemberHandling = MissingMemberHandling.Ignore\n        };\n    }\n}"
  },
  {
    "path": "AlexaSkillsKit.Lib/Slu/ConfirmationStatusEnum.cs",
    "content": "﻿// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nnamespace AlexaSkillsKit.Slu\n{\n    public enum ConfirmationStatusEnum\n    {\n        NONE,\n        CONFIRMED,\n        DENIED\n    }\n}"
  },
  {
    "path": "AlexaSkillsKit.Lib/Slu/Intent.cs",
    "content": "﻿// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nusing System.Collections.Generic;\nusing System.Linq;\nusing Newtonsoft.Json.Linq;\nusing System;\n\nnamespace AlexaSkillsKit.Slu\n{\n    /// <summary>\n    /// https://developer.amazon.com/docs/custom-skills/request-types-reference.html#intent-object\n    /// </summary>\n    public class Intent\n    {\n        /// <summary>\n        /// \n        /// </summary>\n        /// <param name=\"json\"></param>\n        /// <returns></returns>\n        public static Intent FromJson(JObject json) {\n            if (json == null) return null;\n\n            var slots = json.Value<JObject>(\"slots\")?.Children<JProperty>()\n                .ToDictionary(x => x.Name, x => Slot.FromJson(x.Value as JObject));\n            ConfirmationStatusEnum confirmationStatus;\n            Enum.TryParse(json.Value<string>(\"confirmationStatus\"), out confirmationStatus);\n\n            return new Intent {\n                Name = json.Value<string>(\"name\"),\n                ConfirmationStatus = confirmationStatus,\n                Slots = slots ?? new Dictionary<string, Slot>()\n            };\n        }\n\n        public virtual string Name {\n            get;\n            set;\n        }\n\n        public virtual ConfirmationStatusEnum ConfirmationStatus {\n            get;\n            set;\n        }\n\n        public virtual IDictionary<string, Slot> Slots {\n            get;\n            set;\n        }\n    }\n}"
  },
  {
    "path": "AlexaSkillsKit.Lib/Slu/Resolutions.cs",
    "content": "﻿// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nusing Newtonsoft.Json.Linq;\nusing System.Collections.Generic;\nusing System.Linq;\n\nnamespace AlexaSkillsKit.Slu\n{\n    /// <summary>\n    /// https://developer.amazon.com/docs/custom-skills/request-types-reference.html#resolutions-object\n    /// </summary>\n    public class Resolutions\n    {\n        public static Resolutions FromJson(JObject json) {\n            if (json == null) return null;\n\n            var resolutionsPerAuthority = json.Value<JArray>(\"resolutionsPerAuthority\")?.Children()\n                .Select(x => Slu.ResolutionsPerAuthority.FromJson(x.Value<JObject>()));\n            return new Resolutions {\n                ResolutionsPerAuthority = resolutionsPerAuthority\n            };\n        }\n\n        public virtual IEnumerable<ResolutionsPerAuthority> ResolutionsPerAuthority {\n            get;\n            set;\n        }\n    }\n}"
  },
  {
    "path": "AlexaSkillsKit.Lib/Slu/ResolutionsPerAuthority.cs",
    "content": "﻿// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nusing Newtonsoft.Json.Linq;\nusing System.Collections.Generic;\nusing System.Linq;\n\nnamespace AlexaSkillsKit.Slu\n{\n    public class ResolutionsPerAuthority\n    {\n        public static ResolutionsPerAuthority FromJson(JObject json) {\n            if (json == null) return null;\n\n            var values = json.Value<JArray>(\"values\")?.Children()\n                .Select(x => ResolutionsPerAuthorityValue.FromJson(x.Value<JObject>()));\n            return new ResolutionsPerAuthority {\n                Authority = json.Value<string>(\"authority\"),\n                Status = ResolutionsPerAuthorityStatus.FromJson(json.Value<JObject>(\"status\")),\n                Values = values\n            };\n        }\n\n        public virtual string Authority {\n            get;\n            set;\n        }\n\n        public virtual ResolutionsPerAuthorityStatus Status {\n            get;\n            set;\n        }\n\n        public virtual IEnumerable<ResolutionsPerAuthorityValue> Values {\n            get;\n            set;\n        }\n    }\n}"
  },
  {
    "path": "AlexaSkillsKit.Lib/Slu/ResolutionsPerAuthorityStatus.cs",
    "content": "﻿// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nusing Newtonsoft.Json.Linq;\n\nnamespace AlexaSkillsKit.Slu\n{\n    public class ResolutionsPerAuthorityStatus\n    {\n        public static ResolutionsPerAuthorityStatus FromJson(JObject json) {\n            if (json == null) return null;\n\n            return new ResolutionsPerAuthorityStatus {\n                Code = json.Value<string>(\"code\")\n            };\n        }\n\n        public virtual string Code {\n            get;\n            set;\n        }\n    }\n}"
  },
  {
    "path": "AlexaSkillsKit.Lib/Slu/ResolutionsPerAuthorityValue.cs",
    "content": "﻿// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nusing Newtonsoft.Json.Linq;\n\nnamespace AlexaSkillsKit.Slu\n{\n    public class ResolutionsPerAuthorityValue\n    {\n        public static ResolutionsPerAuthorityValue FromJson(JObject json) {\n            if (json == null) return null;\n\n            return new ResolutionsPerAuthorityValue {\n                Value = ResolutionsPerAuthorityValueValue.FromJson(json.Value<JObject>(\"value\"))\n            };\n        }\n\n        public virtual ResolutionsPerAuthorityValueValue Value {\n            get;\n            set;\n        }\n    }\n}"
  },
  {
    "path": "AlexaSkillsKit.Lib/Slu/ResolutionsPerAuthorityValueValue.cs",
    "content": "﻿// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nusing Newtonsoft.Json.Linq;\n\nnamespace AlexaSkillsKit.Slu\n{\n    public class ResolutionsPerAuthorityValueValue\n    {\n        public static ResolutionsPerAuthorityValueValue FromJson(JObject json) {\n            if (json == null) return null;\n\n            return new ResolutionsPerAuthorityValueValue {\n                Name = json.Value<string>(\"name\"),\n                Id = json.Value<string>(\"id\")\n            };\n        }\n\n        public virtual string Name {\n            get;\n            set;\n        }\n\n        public virtual string Id {\n            get;\n            set;\n        }\n    }\n}"
  },
  {
    "path": "AlexaSkillsKit.Lib/Slu/Slot.cs",
    "content": "﻿// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nusing Newtonsoft.Json;\nusing Newtonsoft.Json.Linq;\nusing System;\n\nnamespace AlexaSkillsKit.Slu\n{\n    /// <summary>\n    /// https://developer.amazon.com/docs/custom-skills/request-types-reference.html#slot-object\n    /// </summary>\n    public class Slot\n    {\n        /// <summary>\n        /// \n        /// </summary>\n        /// <param name=\"json\"></param>\n        /// <returns></returns>\n        public static Slot FromJson(JObject json) {\n            if (json == null) return null;\n\n            ConfirmationStatusEnum confirmationStatus;\n            Enum.TryParse(json.Value<string>(\"confirmationStatus\"), out confirmationStatus);\n            return new Slot {\n                Name = json.Value<string>(\"name\"),\n                Value = json.Value<string>(\"value\"),\n                ConfirmationStatus = confirmationStatus,\n                Resolutions = Resolutions.FromJson(json.Value<JObject>(\"resolutions\"))\n            };\n        }\n        \n        public virtual string Name {\n            get;\n            set;\n        }\n\n        public virtual string Value {\n            get;\n            set;\n        }\n\n        public virtual ConfirmationStatusEnum ConfirmationStatus {\n            get;\n            set;\n        }\n\n        [JsonIgnore]\n        public virtual Resolutions Resolutions {\n            get;\n            set;\n        }\n    }\n}"
  },
  {
    "path": "AlexaSkillsKit.Lib/Speechlet/Application.cs",
    "content": "﻿// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nusing System;\nusing Newtonsoft.Json.Linq;\n\nnamespace AlexaSkillsKit.Speechlet\n{\n    public class Application\n    {\n        /// <summary>\n        /// \n        /// </summary>\n        /// <param name=\"json\"></param>\n        /// <returns></returns>\n        public static Application FromJson(JObject json) {\n            return new Application {\n                Id = json.Value<string>(\"applicationId\")\n            };\n        }\n\n        public virtual string Id {\n            get;\n            set;\n        }\n    }\n}"
  },
  {
    "path": "AlexaSkillsKit.Lib/Speechlet/Cause.cs",
    "content": "﻿// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nusing Newtonsoft.Json.Linq;\n\nnamespace AlexaSkillsKit.Speechlet\n{\n    /// <summary>\n    /// https://developer.amazon.com/docs/custom-skills/audioplayer-interface-reference.html#system-exceptionencountered\n    /// </summary>\n    public class Cause\n    {\n        public static Cause FromJson(JObject json) {\n            if (json == null) return null;\n\n            return new Cause {\n                RequestId = json.Value<string>(\"requestId\")\n            };\n        }\n\n        public string RequestId {\n            get;\n            private set;\n        }\n    }\n}"
  },
  {
    "path": "AlexaSkillsKit.Lib/Speechlet/Context.cs",
    "content": "﻿// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nusing AlexaSkillsKit.Interfaces.AudioPlayer;\nusing Newtonsoft.Json.Linq;\n\nnamespace AlexaSkillsKit.Speechlet\n{\n    /// <summary>\n    /// https://developer.amazon.com/docs/custom-skills/request-and-response-json-reference.html#context-object\n    /// </summary>\n    public class Context\n    {\n        public static Context FromJson(JObject json) {\n            if (json == null) return null;\n\n            return new Context {\n                System = SystemState.FromJson(json.Value<JObject>(\"System\")),\n                AudioPlayer = AudioPlayerState.FromJson(json.Value<JObject>(\"AudioPlayer\"))\n            };\n        }\n\n        public SystemState System {\n            get;\n            private set;\n        }\n\n        public AudioPlayerState AudioPlayer {\n            get;\n            private set;\n        }\n    }\n}"
  },
  {
    "path": "AlexaSkillsKit.Lib/Speechlet/Device.cs",
    "content": "﻿// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nusing Newtonsoft.Json.Linq;\n\nnamespace AlexaSkillsKit.Speechlet\n{\n    /// <summary>\n    /// https://developer.amazon.com/docs/custom-skills/request-and-response-json-reference.html#system-object\n    /// </summary>\n    public class Device\n    {\n        public static Device FromJson(JObject json) {\n            if (json == null) return null;\n\n            return new Device {\n                DeviceId = json.Value<string>(\"deviceId\"),\n                SupportedInterfaces = SupportedInterfaces.FromJson(json.Value<JObject>(\"supportedInterfaces\"))\n            };\n        }\n\n        public string DeviceId {\n            get;\n            private set;\n        }\n\n        public SupportedInterfaces SupportedInterfaces {\n            get;\n            private set;\n        }\n    }\n}"
  },
  {
    "path": "AlexaSkillsKit.Lib/Speechlet/Directive.cs",
    "content": "﻿// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nnamespace AlexaSkillsKit.Speechlet\n{\n    /// <summary>\n    /// https://developer.amazon.com/docs/custom-skills/request-and-response-json-reference.html#response-object\n    /// </summary>\n    public class Directive\n    {\n        public Directive(string type) {\n            Type = type;\n        }\n\n        public virtual string Type {\n            get;\n            private set;\n        }\n    }\n}"
  },
  {
    "path": "AlexaSkillsKit.Lib/Speechlet/Error.cs",
    "content": "﻿// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nusing Newtonsoft.Json.Linq;\nusing System;\n\nnamespace AlexaSkillsKit.Speechlet\n{\n    /// <summary>\n    /// https://developer.amazon.com/docs/custom-skills/audioplayer-interface-reference.html#playbackfailed\n    /// https://developer.amazon.com/docs/custom-skills/audioplayer-interface-reference.html#system-exceptionencountered\n    /// </summary>\n    public class Error\n    {\n        public static Error FromJson(JObject json) {\n            if (json == null) return null;\n\n            TypeEnum type = TypeEnum.NONE;\n            Enum.TryParse(json.Value<string>(\"type\"), out type);\n            return new Error {\n                Type = type,\n                Message = json.Value<string>(\"message\")\n            };\n        }\n\n        public TypeEnum Type {\n            get;\n            private set;\n        }\n\n        public string Message {\n            get;\n            private set;\n        }\n\n        public enum TypeEnum\n        {\n            NONE = 0, // default in case parsing fails\n            INVALID_RESPONSE,\n            DEVICE_COMMUNICATION_ERROR,\n            INTERNAL_ERROR,\n            MEDIA_ERROR_UNKNOWN,\n            MEDIA_ERROR_INVALID_REQUEST,\n            MEDIA_ERROR_SERVICE_UNAVAILABLE,\n            MEDIA_ERROR_INTERNAL_SERVER_ERROR,\n            MEDIA_ERROR_INTERNAL_DEVICE_ERROR\n        }\n    }\n}"
  },
  {
    "path": "AlexaSkillsKit.Lib/Speechlet/ExtendedSpeechletRequest.cs",
    "content": "﻿// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nusing Newtonsoft.Json.Linq;\n\nnamespace AlexaSkillsKit.Speechlet\n{\n    /// <summary>\n    /// https://developer.amazon.com/docs/custom-skills/request-and-response-json-reference.html#request-body-parameters\n    /// https://developer.amazon.com/docs/custom-skills/audioplayer-interface-reference.html#requests\n    /// https://developer.amazon.com/docs/custom-skills/playback-controller-interface-reference.html#requests\n    /// </summary>\n    public class ExtendedSpeechletRequest : SpeechletRequest\n    {\n        public ExtendedSpeechletRequest(string type, string subtype, JObject json) : base(json) {\n            Type = type;\n            Subtype = subtype;\n        }\n\n        public string Type {\n            get;\n            private set;\n        }\n\n        public string Subtype {\n            get;\n            private set;\n        }\n    }\n}"
  },
  {
    "path": "AlexaSkillsKit.Lib/Speechlet/ISpeechlet.cs",
    "content": "﻿// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nusing System;\n\nnamespace AlexaSkillsKit.Speechlet\n{\n    [Obsolete(\"Does not support context object. Implement ISpeechletWithContext instead\")]\n    public interface ISpeechlet : ISpeechletBase\n    {\n        SpeechletResponse OnIntent(IntentRequest intentRequest, Session session);\n        SpeechletResponse OnLaunch(LaunchRequest launchRequest, Session session);\n        void OnSessionStarted(SessionStartedRequest sessionStartedRequest, Session session);\n        void OnSessionEnded(SessionEndedRequest sessionEndedRequest, Session session);\n    }\n}"
  },
  {
    "path": "AlexaSkillsKit.Lib/Speechlet/ISpeechletAsync.cs",
    "content": "﻿// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nusing System;\nusing System.Threading.Tasks;\n\nnamespace AlexaSkillsKit.Speechlet\n{\n    [Obsolete(\"Does not support context object. Implement ISpeechletWithContextAsync instead\")]\n    public interface ISpeechletAsync : ISpeechletBase\n    {\n        Task<SpeechletResponse> OnIntentAsync(IntentRequest intentRequest, Session session);\n        Task<SpeechletResponse> OnLaunchAsync(LaunchRequest launchRequest, Session session);\n        Task OnSessionStartedAsync(SessionStartedRequest sessionStartedRequest, Session session);\n        Task OnSessionEndedAsync(SessionEndedRequest sessionEndedRequest, Session session);\n    }\n}"
  },
  {
    "path": "AlexaSkillsKit.Lib/Speechlet/ISpeechletBase.cs",
    "content": "﻿// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nusing System;\nusing AlexaSkillsKit.Authentication;\nusing AlexaSkillsKit.Json;\n\nnamespace AlexaSkillsKit.Speechlet\n{\n    public interface ISpeechletBase\n    {\n        bool OnRequestValidation(SpeechletRequestValidationResult result, DateTime referenceTimeUtc, SpeechletRequestEnvelope requestEnvelope);\n    }\n}"
  },
  {
    "path": "AlexaSkillsKit.Lib/Speechlet/ISpeechletInterface.cs",
    "content": "﻿// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nnamespace AlexaSkillsKit.Speechlet\n{\n    public interface ISpeechletInterface\n    {\n    }\n}"
  },
  {
    "path": "AlexaSkillsKit.Lib/Speechlet/ISpeechletInterfaceState.cs",
    "content": "﻿// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nnamespace AlexaSkillsKit.Speechlet\n{\n    public interface ISpeechletInterfaceState\n    {\n    }\n}"
  },
  {
    "path": "AlexaSkillsKit.Lib/Speechlet/ISpeechletResponse.cs",
    "content": "﻿// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nnamespace AlexaSkillsKit.Speechlet\n{\n    public interface ISpeechletResponse\n    {\n    }\n}"
  },
  {
    "path": "AlexaSkillsKit.Lib/Speechlet/ISpeechletWithContext.cs",
    "content": "﻿// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nnamespace AlexaSkillsKit.Speechlet\n{\n    public interface ISpeechletWithContext\n    {\n        SpeechletResponse OnIntent(IntentRequest intentRequest, Session session, Context context);\n        SpeechletResponse OnLaunch(LaunchRequest launchRequest, Session session, Context context);\n        void OnSessionStarted(SessionStartedRequest sessionStartedRequest, Session session, Context context);\n        void OnSessionEnded(SessionEndedRequest sessionEndedRequest, Session session, Context context);\n    }\n}"
  },
  {
    "path": "AlexaSkillsKit.Lib/Speechlet/ISpeechletWithContextAsync.cs",
    "content": "﻿// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nusing System.Threading.Tasks;\n\nnamespace AlexaSkillsKit.Speechlet\n{\n    public interface ISpeechletWithContextAsync\n    {\n        Task<SpeechletResponse> OnIntentAsync(IntentRequest intentRequest, Session session, Context context);\n        Task<SpeechletResponse> OnLaunchAsync(LaunchRequest launchRequest, Session session, Context context);\n        Task OnSessionStartedAsync(SessionStartedRequest sessionStartedRequest, Session session, Context context);\n        Task OnSessionEndedAsync(SessionEndedRequest sessionEndedRequest, Session session, Context context);\n    }\n}"
  },
  {
    "path": "AlexaSkillsKit.Lib/Speechlet/IntentRequest.cs",
    "content": "﻿// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nusing AlexaSkillsKit.Slu;\nusing Newtonsoft.Json.Linq;\nusing System;\n\nnamespace AlexaSkillsKit.Speechlet\n{\n    public class IntentRequest : SpeechletRequest\n    {\n        public IntentRequest(JObject json) : base(json) {\n            Intent = Intent.FromJson(json.Value<JObject>(\"intent\"));\n\n            DialogStateEnum dialogState = DialogStateEnum.UNKNOWN;\n            Enum.TryParse(json.Value<string>(\"dialogState\"), out dialogState);\n            DialogState = dialogState;\n        }\n\n        public virtual Intent Intent {\n            get;\n            private set;\n        }\n\n        public virtual DialogStateEnum DialogState {\n            get;\n            private set;\n        }\n\n        public enum DialogStateEnum\n        {\n            UNKNOWN = 0, // default in case parsing fails\n            STARTED,\n            IN_PROGRESS,\n            COMPLETED\n        }\n    }\n}"
  },
  {
    "path": "AlexaSkillsKit.Lib/Speechlet/LaunchRequest.cs",
    "content": "﻿// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nusing Newtonsoft.Json.Linq;\n\nnamespace AlexaSkillsKit.Speechlet\n{\n    public class LaunchRequest : SpeechletRequest\n    {\n        public LaunchRequest(JObject json) : base(json) {\n        }\n    }\n}"
  },
  {
    "path": "AlexaSkillsKit.Lib/Speechlet/Person.cs",
    "content": "// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nusing System;\nusing Newtonsoft.Json.Linq;\n\nnamespace AlexaSkillsKit.Speechlet\n{\n    public class Person\n    {\n        /// <summary>\n        /// \n        /// </summary>\n        /// <param name=\"json\"></param>\n        /// <returns></returns>\n        public static Person FromJson(JObject json) {\n            if (json == null) return null;\n\n            return new Person{\n                PersonId = json.Value<string>(\"personId\"),\n                AccessToken = json.Value<string>(\"accessToken\")\n            };\n        }\n\n        public string PersonId{\n            get;\n            private set;\n        }\n\n        public virtual string AccessToken{\n            get;\n            set;\n        }\n\n    }\n}\n"
  },
  {
    "path": "AlexaSkillsKit.Lib/Speechlet/PlaybackState.cs",
    "content": "﻿// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nusing Newtonsoft.Json.Linq;\nusing System;\n\nnamespace AlexaSkillsKit.Speechlet\n{\n    /// <summary>\n    /// https://developer.amazon.com/docs/custom-skills/audioplayer-interface-reference.html#playbackfailed\n    /// </summary>\n    public class PlaybackState\n    {\n        public static PlaybackState FromJson(JObject json) {\n            if (json == null) return null;\n\n            PlayerActivityEnum playerActivity = PlayerActivityEnum.NONE;\n            Enum.TryParse(json.Value<string>(\"playerActivity\"), out playerActivity);\n            return new PlaybackState {\n                Token = json.Value<string>(\"token\"),\n                OffsetInMilliseconds = json.Value<long?>(\"offsetInMilliseconds\"),\n                PlayerActivity = playerActivity\n            };\n        }\n\n        public string Token {\n            get;\n            private set;\n        }\n\n        public long? OffsetInMilliseconds {\n            get;\n            private set;\n        }\n\n        public PlayerActivityEnum PlayerActivity {\n            get;\n            private set;\n        }\n\n        public enum PlayerActivityEnum\n        {\n            NONE = 0, // default in case parsing fails\n            PLAYING,\n            PAUSED,\n            FINISHED,\n            BUFFER_UNDERRUN,\n            IDLE\n        }\n    }\n}"
  },
  {
    "path": "AlexaSkillsKit.Lib/Speechlet/Session.cs",
    "content": "﻿// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nusing System;\nusing System.Collections.Generic;\nusing Newtonsoft.Json.Linq;\n\nnamespace AlexaSkillsKit.Speechlet\n{\n    public class Session\n    {\n        public const string INTENT_SEQUENCE = \"intentSequence\";\n        public const string SEPARATOR = \";\";\n\n        /// <summary>\n        /// \n        /// </summary>\n        /// <param name=\"json\"></param>\n        /// <returns></returns>\n        public static Session FromJson(JObject json) {\n            if (json == null) return null;\n\n            var attributes = new Dictionary<string, string>();\n            var jsonAttributes = json.Value<JObject>(\"attributes\");\n            if (jsonAttributes != null) {\n                foreach (var attrib in jsonAttributes.Children()) {\n                    attributes.Add(attrib.Value<JProperty>().Name, attrib.Value<JProperty>().Value.ToString());\n                }\n            }\n\n            return new Session {\n                SessionId = json.Value<string>(\"sessionId\"),\n                IsNew = json.Value<bool>(\"new\"),\n                User = User.FromJson(json.Value<JObject>(\"user\")),\n                Application = Application.FromJson(json.Value<JObject>(\"application\")),\n                Attributes = attributes\n            };\n        }\n\n        public virtual string SessionId {\n            get;\n            set;\n        }\n\n        public virtual bool IsNew {\n            get;\n            set;\n        }\n\n        public virtual Application Application {\n            get;\n            set;\n        }\n\n        public virtual User User {\n            get;\n            set;\n        }\n\n        public virtual Dictionary<string, string> Attributes {\n            get;\n            set;\n        }\n\n        public virtual string[] IntentSequence {\n            get {\n                return !Attributes.ContainsKey(INTENT_SEQUENCE) || String.IsNullOrEmpty(Attributes[INTENT_SEQUENCE]) ?\n                    new string[0] : \n                    Attributes[INTENT_SEQUENCE].Split(\n                        new string[1] { SEPARATOR }, StringSplitOptions.RemoveEmptyEntries);\n            }\n        }\n    }\n}"
  },
  {
    "path": "AlexaSkillsKit.Lib/Speechlet/SessionEndedRequest.cs",
    "content": "﻿// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nusing Newtonsoft.Json.Linq;\nusing System;\n\nnamespace AlexaSkillsKit.Speechlet\n{\n    public class SessionEndedRequest : SpeechletRequest\n    {\n        public SessionEndedRequest(JObject json) : base(json) {\n\n            ReasonEnum reason = ReasonEnum.UNKNOWN;\n            Enum.TryParse(json.Value<string>(\"reason\"), out reason);\n            Reason = reason;\n            Error = Error.FromJson(json.Value<JObject>(\"error\"));\n        }\n\n        public virtual ReasonEnum Reason {\n            get;\n            private set;\n        }\n\n        public Error Error {\n            get;\n            private set;\n        }\n\n        public enum ReasonEnum\n        {\n            NONE = 0, // default in case parsing fails (backwards compatibility)\n            UNKNOWN = 0, // default in case parsing fails\n            ERROR,\n            USER_INITIATED,\n            EXCEEDED_MAX_REPROMPTS,\n        }\n    }\n}"
  },
  {
    "path": "AlexaSkillsKit.Lib/Speechlet/SessionStartedRequest.cs",
    "content": "﻿// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nnamespace AlexaSkillsKit.Speechlet\n{\n    public class SessionStartedRequest : SpeechletRequest\n    {\n        public SessionStartedRequest(SpeechletRequest other) : base(other) {\n        }\n    }\n}"
  },
  {
    "path": "AlexaSkillsKit.Lib/Speechlet/Speechlet.cs",
    "content": "﻿// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nusing System;\n\nnamespace AlexaSkillsKit.Speechlet\n{\n    [Obsolete(\"Does not support context object. Derive from SpeechletBase instead and implement ISpeechletWithContext\")]\n    public abstract class Speechlet : SpeechletBase, ISpeechlet\n    {\n        public abstract SpeechletResponse OnIntent(IntentRequest intentRequest, Session session);\n        public abstract SpeechletResponse OnLaunch(LaunchRequest launchRequest, Session session);\n        public abstract void OnSessionStarted(SessionStartedRequest sessionStartedRequest, Session session);\n        public abstract void OnSessionEnded(SessionEndedRequest sessionEndedRequest, Session session);\n    }\n}"
  },
  {
    "path": "AlexaSkillsKit.Lib/Speechlet/SpeechletAsync.cs",
    "content": "﻿// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nusing System;\nusing System.Threading.Tasks;\n\nnamespace AlexaSkillsKit.Speechlet\n{\n    [Obsolete(\"Does not support context object. Derive from SpeechletBase instead and implement ISpeechletWithContextAsync\")]\n    public abstract class SpeechletAsync : SpeechletBase, ISpeechletAsync\n    {\n        public abstract Task<SpeechletResponse> OnIntentAsync(IntentRequest intentRequest, Session session);\n        public abstract Task<SpeechletResponse> OnLaunchAsync(LaunchRequest launchRequest, Session session);\n        public abstract Task OnSessionEndedAsync(SessionEndedRequest sessionEndedRequest, Session session);\n        public abstract Task OnSessionStartedAsync(SessionStartedRequest sessionStartedRequest, Session session);\n    }\n}"
  },
  {
    "path": "AlexaSkillsKit.Lib/Speechlet/SpeechletBase.cs",
    "content": "﻿// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nusing AlexaSkillsKit.Authentication;\nusing AlexaSkillsKit.Json;\nusing Newtonsoft.Json.Linq;\nusing System;\nusing System.Net.Http;\nusing System.Threading.Tasks;\n\nnamespace AlexaSkillsKit.Speechlet\n{\n    public class SpeechletBase : ISpeechletBase\n    {\n        public SpeechletService Service { get; }\n\n        protected SpeechletBase() {\n            Service = new SpeechletService(this);\n        }\n\n\n        /// <summary>\n        /// Processes Alexa request AND validates request signature\n        /// </summary>\n        /// <param name=\"httpRequest\"></param>\n        /// <returns></returns>\n        public HttpResponseMessage GetResponse(HttpRequestMessage httpRequest) {\n            return AsyncHelpers.RunSync(async () => await Service.GetResponseAsync(httpRequest));\n        }\n\n        public async Task<HttpResponseMessage> GetResponseAsync(HttpRequestMessage httpRequest) {\n            return await Service.GetResponseAsync(httpRequest);\n        }\n\n\n        /// <summary>\n        /// Processes Alexa request but does NOT validate request signature \n        /// </summary>\n        /// <param name=\"requestContent\"></param>\n        /// <returns></returns>\n        public string ProcessRequest(string requestContent) {\n            return AsyncHelpers.RunSync(async () => await ProcessRequestAsync(requestContent));\n        }\n\n        public async Task<string> ProcessRequestAsync(string requestContent) {\n            var requestEnvelope = SpeechletRequestEnvelope.FromJson(requestContent);\n            return (await Service.ProcessRequestAsync(requestEnvelope))?.ToJson();\n        }\n\n\n        /// <summary>\n        /// Processes Alexa request but does NOT validate request signature \n        /// </summary>\n        /// <param name=\"requestJson\"></param>\n        /// <returns></returns>\n        public virtual string ProcessRequest(JObject requestJson) {\n            return AsyncHelpers.RunSync(async () => await ProcessRequestAsync(requestJson));\n        }\n\n        public async Task<string> ProcessRequestAsync(JObject requestJson) {\n            var requestEnvelope = SpeechletRequestEnvelope.FromJson(requestJson);\n            return (await Service.ProcessRequestAsync(requestEnvelope))?.ToJson();\n        }\n\n\n        /// <summary>\n        /// Opportunity to set policy for handling requests with invalid signatures and/or timestamps\n        /// </summary>\n        /// <returns>true if request processing should continue, otherwise false</returns>\n        public virtual bool OnRequestValidation(\n            SpeechletRequestValidationResult result, DateTime referenceTimeUtc, SpeechletRequestEnvelope requestEnvelope) {\n            \n            return result == SpeechletRequestValidationResult.OK;\n        }\n    }\n}"
  },
  {
    "path": "AlexaSkillsKit.Lib/Speechlet/SpeechletException.cs",
    "content": "﻿// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nusing System;\n\nnamespace AlexaSkillsKit.Speechlet\n{\n    public class SpeechletException : Exception\n    {\n        public SpeechletException() : base() {\n\n        }\n\n        public SpeechletException(string message) : base(message) {\n\n        }\n\n        public SpeechletException(string message, Exception cause) : base(message, cause) {\n\n        }\n    }\n}"
  },
  {
    "path": "AlexaSkillsKit.Lib/Speechlet/SpeechletRequest.cs",
    "content": "﻿// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nusing AlexaSkillsKit.Helpers;\nusing Newtonsoft.Json.Linq;\nusing System;\n\nnamespace AlexaSkillsKit.Speechlet\n{\n    public abstract class SpeechletRequest\n    {\n        protected SpeechletRequest(JObject json) {\n            RequestId = json.Value<string>(\"requestId\");\n            Timestamp = DateTimeHelpers.FromAlexaTimestamp(json);\n            Locale = json.Value<string>(\"locale\");\n        }\n\n        protected SpeechletRequest(SpeechletRequest other) {\n            RequestId = other.RequestId;\n            Timestamp = other.Timestamp;\n            Locale = other.Locale;\n        }\n\n        public string RequestId {\n            get;\n            private set;\n        }\n\n        public DateTime Timestamp {\n            get;\n            private set;\n        }\n\n        public string Locale {\n            get;\n            private set;\n        }\n    }\n}"
  },
  {
    "path": "AlexaSkillsKit.Lib/Speechlet/SpeechletResponse.cs",
    "content": "﻿// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nusing AlexaSkillsKit.UI;\nusing System.Collections.Generic;\n\nnamespace AlexaSkillsKit.Speechlet\n{\n    /// <summary>\n    /// https://developer.amazon.com/docs/custom-skills/request-and-response-json-reference.html#response-object\n    /// </summary>\n    public class SpeechletResponse : ISpeechletResponse\n    {\n        /// <summary>\n        /// Set default ShouldEndSession value to false for the sake of backwards compatibility\n        /// </summary>\n        public SpeechletResponse() {\n            ShouldEndSession = false;\n        }\n\n        public virtual Card Card {\n            get;\n            set;\n        }\n\n        public virtual IEnumerable<Directive> Directives {\n            get;\n            set;\n        }\n\n        public virtual OutputSpeech OutputSpeech {\n            get;\n            set;\n        }\n\n        public virtual Reprompt Reprompt {\n            get;\n            set;\n        }\n\n        public virtual bool? ShouldEndSession {\n            get;\n            set;\n        }\n    }\n}"
  },
  {
    "path": "AlexaSkillsKit.Lib/Speechlet/SpeechletService.cs",
    "content": "﻿// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nusing AlexaSkillsKit.Authentication;\nusing AlexaSkillsKit.Interfaces.AudioPlayer;\nusing AlexaSkillsKit.Interfaces.Display;\nusing AlexaSkillsKit.Json;\nusing Newtonsoft.Json;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Net;\nusing System.Net.Http;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnamespace AlexaSkillsKit.Speechlet\n{\n    public class SpeechletService\n    {\n        private ISpeechletBase speechlet;\n\n        private IDictionary<string, Func<ExtendedSpeechletRequest, Context, Task<ISpeechletResponse>>> handlers\n            = new Dictionary<string, Func<ExtendedSpeechletRequest, Context, Task<ISpeechletResponse>>>();\n\n        public string ApplicationId { get; set; }\n\n\n        public void AddHandler<T>(string type, Func<T, Context, Task<ISpeechletResponse>> handler) where T : SpeechletRequest {\n            handlers[type] = (request, context) => handler(request as T, context);\n        }\n\n\n        public SpeechletService(ISpeechletBase speechlet) {\n            this.speechlet = speechlet;\n\n            if (speechlet is IAudioPlayerSpeechletAsync || speechlet is IAudioPlayerSpeechlet) {\n                AddHandler<AudioPlayerRequest>(AudioPlayerRequest.TypeName, async (request, context) => {\n                    return (speechlet as IAudioPlayerSpeechlet)?.OnAudioPlayer(request, context) ??\n                        await (speechlet as IAudioPlayerSpeechletAsync).OnAudioPlayerAsync(request, context);\n                });\n\n                AddHandler<PlaybackControllerRequest>(PlaybackControllerRequest.TypeName, async (request, context) => {\n                    return (speechlet as IAudioPlayerSpeechlet)?.OnPlaybackController(request, context) ??\n                        await (speechlet as IAudioPlayerSpeechletAsync).OnPlaybackControllerAsync(request, context);\n                });\n\n                AddHandler<SystemExceptionEncounteredRequest>(SystemRequest.TypeName, async (request, context) => {\n                    (speechlet as IAudioPlayerSpeechlet)?.OnSystemExceptionEncountered(request, context);\n                    await (speechlet as IAudioPlayerSpeechletAsync).OnSystemExceptionEncounteredAsync(request, context);\n                    return null;\n                });\n            }\n\n            if (speechlet is IDisplaySpeechletAsync) {\n                AddHandler<DisplayRequest>(DisplayRequest.TypeName, async (request, context) => {\n                    return (speechlet as IDisplaySpeechlet)?.OnDisplay(request, context) ??\n                        await (speechlet as IDisplaySpeechletAsync).OnDisplayAsync(request, context);\n                });\n            }\n        }\n\n\n        /// <summary>\n        /// Processes Alexa request AND validates request signature\n        /// </summary>\n        /// <param name=\"httpRequest\"></param>\n        /// <returns></returns>\n        public async Task<HttpResponseMessage> GetResponseAsync(HttpRequestMessage httpRequest) {\n            string chainUrl = null;\n            if (httpRequest.Headers.Contains(Sdk.SIGNATURE_CERT_URL_REQUEST_HEADER)) {\n                chainUrl = httpRequest.Headers.GetValues(Sdk.SIGNATURE_CERT_URL_REQUEST_HEADER).FirstOrDefault(x => !string.IsNullOrEmpty(x));\n            }\n\n            string signature = null;\n            if (httpRequest.Headers.Contains(Sdk.SIGNATURE_REQUEST_HEADER)) {\n                signature = httpRequest.Headers.GetValues(Sdk.SIGNATURE_REQUEST_HEADER).FirstOrDefault(x => !string.IsNullOrEmpty(x));\n            }\n\n            var content = await httpRequest.Content.ReadAsStringAsync();\n\n            try {\n                var alexaRequest = await GetRequestAsync(content, chainUrl, signature);\n                var alexaResponse = await ProcessRequestAsync(alexaRequest);\n                var json = alexaResponse?.ToJson();\n\n                return (json == null) ?\n                    new HttpResponseMessage(HttpStatusCode.InternalServerError) :\n                    new HttpResponseMessage(HttpStatusCode.OK) {\n                        Content = new StringContent(json, Encoding.UTF8, \"application/json\")\n                    };\n            }\n            catch (SpeechletValidationException ex) {\n                return new HttpResponseMessage(HttpStatusCode.BadRequest) {\n                    ReasonPhrase = ex.ValidationResult.ToString()\n                };\n            }\n        }\n\n\n        public async Task<SpeechletRequestEnvelope> GetRequestAsync(string content, string chainUrl, string signature) {\n            var validationResult = SpeechletRequestValidationResult.OK;\n\n            if (string.IsNullOrEmpty(chainUrl)) {\n                validationResult |= SpeechletRequestValidationResult.NoCertHeader;\n            }\n\n            if (string.IsNullOrEmpty(signature)) {\n                validationResult |= SpeechletRequestValidationResult.NoSignatureHeader;\n            }\n\n            // attempt to verify signature only if we were able to locate certificate and signature headers\n            if (validationResult == SpeechletRequestValidationResult.OK) {\n                var alexaBytes = Encoding.UTF8.GetBytes(content);\n\n                if (!await SpeechletRequestSignatureVerifier.VerifyRequestSignatureAsync(alexaBytes, signature, chainUrl)) {\n                    validationResult |= SpeechletRequestValidationResult.InvalidSignature;\n                }\n            }\n\n            SpeechletRequestEnvelope result = null;\n            try {\n                result = SpeechletRequestEnvelope.FromJson(content);\n            }\n            catch (SpeechletValidationException ex) {\n                validationResult |= ex.ValidationResult;\n            }\n            catch (Exception ex)\n            when (ex is JsonReaderException || ex is InvalidCastException || ex is FormatException) {\n                validationResult |= SpeechletRequestValidationResult.InvalidJson;\n            }\n\n            var success = false;\n\n            // attempt to verify timestamp only if we were able to parse request body\n            if (result != null) {\n                var now = DateTime.UtcNow; // reference time for this request\n\n                if (!SpeechletRequestTimestampVerifier.VerifyRequestTimestamp(result, now)) {\n                    validationResult |= SpeechletRequestValidationResult.InvalidTimestamp;\n                }\n\n                if (!string.IsNullOrEmpty(ApplicationId) && result.Context.System.Application.Id != ApplicationId) {\n                    validationResult |= SpeechletRequestValidationResult.InvalidApplicationId;\n                }\n\n                success = speechlet?.OnRequestValidation(validationResult, now, result) ?? (validationResult == SpeechletRequestValidationResult.OK);\n            }\n\n            if (!success) {\n                throw new SpeechletValidationException(validationResult);\n            }\n\n            return result;\n        }\n\n\n        /// <summary>\n        /// \n        /// </summary>\n        /// <param name=\"requestEnvelope\"></param>\n        /// <returns></returns>\n        public async Task<SpeechletResponseEnvelope> ProcessRequestAsync(SpeechletRequestEnvelope requestEnvelope) {\n            var session = requestEnvelope.Session;\n            var context = requestEnvelope.Context;\n            var request = requestEnvelope.Request;\n\n            var response = !(request is ExtendedSpeechletRequest) ?\n                await HandleStandardRequestAsync(request, session, context) :\n                await HandleExtendedRequestAsync(request as ExtendedSpeechletRequest, context);\n\n            if (response == null) {\n                response = new SpeechletResponse();\n            }\n\n            var responseEnvelope = new SpeechletResponseEnvelope {\n                Version = requestEnvelope.Version,\n                Response = response,\n                SessionAttributes = session?.Attributes\n            };\n\n            return responseEnvelope;\n        }\n\n\n        /// <summary>\n        /// \n        /// </summary>\n        private async Task<ISpeechletResponse> HandleStandardRequestAsync(\n            SpeechletRequest request, Session session, Context context) {\n            \n            #pragma warning disable 612, 618\n            if (session != null) {\n                // Do session management prior to calling OnSessionStarted and OnIntentAsync \n                // to allow dev to change session values if behavior is not desired\n                DoSessionManagement(request as IntentRequest, session);\n\n                if (session.IsNew) {\n                    var sessionStartedRequest = new SessionStartedRequest(request);\n                    if (speechlet is ISpeechletWithContext)\n                        (speechlet as ISpeechletWithContext).OnSessionStarted(sessionStartedRequest, session, context);\n                    else if (speechlet is ISpeechletWithContextAsync)\n                        await (speechlet as ISpeechletWithContextAsync).OnSessionStartedAsync(sessionStartedRequest, session, context);\n                    else if (speechlet is ISpeechlet)\n                        (speechlet as ISpeechlet).OnSessionStarted(sessionStartedRequest, session);\n                    else if (speechlet is ISpeechletAsync)\n                        await (speechlet as ISpeechletAsync).OnSessionStartedAsync(sessionStartedRequest, session);\n                }\n            }\n            #pragma warning restore 612, 618\n\n            #pragma warning disable 612, 618\n            if (request is LaunchRequest) {\n                // process launch request\n                if (speechlet is ISpeechletWithContext)\n                    return (speechlet as ISpeechletWithContext).OnLaunch(request as LaunchRequest, session, context);\n                else if (speechlet is ISpeechletWithContextAsync)\n                    return await (speechlet as ISpeechletWithContextAsync).OnLaunchAsync(request as LaunchRequest, session, context);\n                else if (speechlet is ISpeechlet)\n                    return (speechlet as ISpeechlet).OnLaunch(request as LaunchRequest, session);\n                else if (speechlet is ISpeechletAsync)\n                    return await (speechlet as ISpeechletAsync).OnLaunchAsync(request as LaunchRequest, session);\n            }\n            else if (request is IntentRequest) {\n                // process intent request\n                if (speechlet is ISpeechletWithContext)\n                    return (speechlet as ISpeechletWithContext).OnIntent(request as IntentRequest, session, context);\n                else if (speechlet is ISpeechletWithContextAsync)\n                    return await (speechlet as ISpeechletWithContextAsync).OnIntentAsync(request as IntentRequest, session, context);\n                else if (speechlet is ISpeechlet)\n                    return (speechlet as ISpeechlet).OnIntent(request as IntentRequest, session);\n                else if (speechlet is ISpeechletAsync)\n                    return await (speechlet as ISpeechletAsync).OnIntentAsync(request as IntentRequest, session);\n            }\n            else if (request is SessionEndedRequest) {\n                // process session ended request\n                if (speechlet is ISpeechletWithContext)\n                    (speechlet as ISpeechletWithContext).OnSessionEnded(request as SessionEndedRequest, session, context);\n                else if (speechlet is ISpeechletWithContextAsync)\n                    await (speechlet as ISpeechletWithContextAsync).OnSessionEndedAsync(request as SessionEndedRequest, session, context);\n                else if (speechlet is ISpeechlet)\n                    (speechlet as ISpeechlet).OnSessionEnded(request as SessionEndedRequest, session);\n                else if (speechlet is ISpeechletAsync)\n                    await (speechlet as ISpeechletAsync).OnSessionEndedAsync(request as SessionEndedRequest, session);\n            }\n            #pragma warning restore 612, 618\n\n            return null;\n        }\n\n\n        private async Task<ISpeechletResponse> HandleExtendedRequestAsync(ExtendedSpeechletRequest request, Context context) {\n            return handlers.ContainsKey(request.Type) ? (await handlers[request.Type].Invoke(request, context)) : null;\n        }\n\n\n        /// <summary>\n        /// \n        /// </summary>\n        private void DoSessionManagement(IntentRequest request, Session session) {\n            if (request == null) return;\n\n            if (session.Attributes == null) {\n                session.Attributes = new Dictionary<string, string>();\n            }\n\n            if (session.IsNew) {\n                session.Attributes[Session.INTENT_SEQUENCE] = request.Intent.Name;\n            }\n            else {\n                // if the session was started as a result of a launch request \n                // a first intent isn't yet set, so set it to the current intent\n                if (!session.Attributes.ContainsKey(Session.INTENT_SEQUENCE)) {\n                    session.Attributes[Session.INTENT_SEQUENCE] = request.Intent.Name;\n                }\n                else {\n                    session.Attributes[Session.INTENT_SEQUENCE] += Session.SEPARATOR + request.Intent.Name;\n                }\n            }\n\n            // Auto-session management: copy all slot values from current intent into session\n            foreach (var slot in request.Intent.Slots.Values) {\n                session.Attributes[slot.Name] = slot.Value;\n            }\n        }\n    }\n}"
  },
  {
    "path": "AlexaSkillsKit.Lib/Speechlet/SpeechletValidationException.cs",
    "content": "﻿// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nusing AlexaSkillsKit.Authentication;\nusing System;\n\nnamespace AlexaSkillsKit.Speechlet\n{\n    public class SpeechletValidationException : SpeechletException\n    {\n        public SpeechletRequestValidationResult ValidationResult { get; }\n\n        public SpeechletValidationException(SpeechletRequestValidationResult validationResult) : base() {\n            ValidationResult = validationResult;\n        }\n\n        public SpeechletValidationException(SpeechletRequestValidationResult validationResult, string message) : base(message) {\n            ValidationResult = validationResult;\n        }\n\n        public SpeechletValidationException(SpeechletRequestValidationResult validationResult, string message, Exception cause) : base(message, cause) {\n            ValidationResult = validationResult;\n        }\n    }\n}"
  },
  {
    "path": "AlexaSkillsKit.Lib/Speechlet/SupportedInterfaces.cs",
    "content": "﻿// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nusing System.Collections.Generic;\nusing Newtonsoft.Json.Linq;\nusing System.Linq;\nusing AlexaSkillsKit.Interfaces.Display;\nusing AlexaSkillsKit.Interfaces.AudioPlayer;\nusing AlexaSkillsKit.Json;\n\nnamespace AlexaSkillsKit.Speechlet\n{\n    /// <summary>\n    /// https://developer.amazon.com/docs/custom-skills/request-and-response-json-reference.html#system-object\n    /// </summary>\n    public class SupportedInterfaces : Dictionary<string, ISpeechletInterface>\n    {\n        /// <summary>\n        /// Register supported interfaces for deserialization\n        /// </summary>\n        static SupportedInterfaces() {\n            Deserializer<ISpeechletInterface>.RegisterDeserializer(\"Display\", DisplayInterface.FromJson);\n            Deserializer<ISpeechletInterface>.RegisterDeserializer(\"AudioPlayer\", AudioPlayerInterface.FromJson);\n        }\n\n        public static SupportedInterfaces FromJson(JObject json) {\n            if (json == null) return null;\n\n            var dictionary = json.Children<JProperty>()\n                .ToDictionary(x => x.Name, x => Deserializer<ISpeechletInterface>.FromJson(x));\n\n            return new SupportedInterfaces(dictionary);\n        }\n\n        private SupportedInterfaces(IDictionary<string, ISpeechletInterface> dictionary) : base(dictionary) { }\n    }\n}"
  },
  {
    "path": "AlexaSkillsKit.Lib/Speechlet/SystemExceptionEncounteredRequest.cs",
    "content": "﻿// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nusing Newtonsoft.Json.Linq;\n\nnamespace AlexaSkillsKit.Speechlet\n{\n    /// <summary>\n    /// https://developer.amazon.com/docs/custom-skills/audioplayer-interface-reference.html#system-exceptionencountered\n    /// </summary>\n    public class SystemExceptionEncounteredRequest : SystemRequest\n    {\n        public SystemExceptionEncounteredRequest(string subtype, JObject json) : base(subtype, json) {\n            Error = Error.FromJson(json.Value<JObject>(\"error\"));\n            Cause = Cause.FromJson(json.Value<JObject>(\"cause\"));\n        }\n\n        public Error Error {\n            get;\n            private set;\n        }\n\n        public Cause Cause {\n            get;\n            private set;\n        }\n    }\n}"
  },
  {
    "path": "AlexaSkillsKit.Lib/Speechlet/SystemRequest.cs",
    "content": "﻿// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nusing Newtonsoft.Json.Linq;\n\nnamespace AlexaSkillsKit.Speechlet\n{\n    /// <summary>\n    /// https://developer.amazon.com/docs/custom-skills/audioplayer-interface-reference.html#system-exceptionencountered\n    /// </summary>\n    public class SystemRequest : ExtendedSpeechletRequest\n    {\n        public static readonly string TypeName = \"System\";\n\n        public SystemRequest(string subtype, JObject json) : base(TypeName, subtype, json) {\n        }\n    }\n}"
  },
  {
    "path": "AlexaSkillsKit.Lib/Speechlet/SystemState.cs",
    "content": "﻿// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nusing Newtonsoft.Json.Linq;\n\nnamespace AlexaSkillsKit.Speechlet\n{\n    /// <summary>\n    /// https://developer.amazon.com/docs/custom-skills/request-and-response-json-reference.html#system-object\n    /// </summary>\n    public class SystemState : ISpeechletInterfaceState\n    {\n        public static SystemState FromJson(JObject json) {\n            if (json == null) return null;\n\n            return new SystemState {\n                Application = Application.FromJson(json.Value<JObject>(\"application\")),\n                User = User.FromJson(json.Value<JObject>(\"user\")),\n                Device = Device.FromJson(json.Value<JObject>(\"device\")),\n                Person = Person.FromJson(json.Value<JObject>(\"person\")),\n                ApiEndpoint = json.Value<string>(\"apiEndpoint\"),\n                ApiAccessToken = json.Value<string>(\"apiAccessToken\")\n            };\n        }\n\n        public Application Application {\n            get;\n            private set;\n        }\n\n        public User User {\n            get;\n            private set;\n        }\n\n        public Person Person {\n            get;\n            private set;\n        }\n\n        public Device Device {\n            get;\n            private set;\n        }\n\n        public string ApiEndpoint {\n            get;\n            private set;\n        }\n\n        public string ApiAccessToken {\n            get;\n            private set;\n        }\n    }\n}\n"
  },
  {
    "path": "AlexaSkillsKit.Lib/Speechlet/User.cs",
    "content": "﻿// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nusing System;\nusing Newtonsoft.Json.Linq;\n\nnamespace AlexaSkillsKit.Speechlet\n{\n    public class User\n    {\n        /// <summary>\n        /// \n        /// </summary>\n        /// <param name=\"json\"></param>\n        /// <returns></returns>\n        public static User FromJson(JObject json) {\n            return new User {\n                Id = json.Value<string>(\"userId\"),\n                AccessToken = json.Value<string>(\"accessToken\")\n            };\n        }\n\n        public virtual string Id {\n            get;\n            set;\n        }\n\n        public virtual string AccessToken {\n            get;\n            set;\n        }\n    }\n}"
  },
  {
    "path": "AlexaSkillsKit.Lib/UI/AskForPermissionsConsentCard.cs",
    "content": "﻿// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nusing System.Collections.Generic;\n\nnamespace AlexaSkillsKit.UI\n{\n    /// <summary>\n    /// https://developer.amazon.com/docs/custom-skills/device-address-api.html#permissions-card\n    /// </summary>\n    public class AskForPermissionsConsentCard : Card\n    {\n        public override string Type {\n            get { return \"AskForPermissionsConsent\"; }\n        }\n\n        public virtual IEnumerable<string> Permissions {\n            get;\n            set;\n        }\n    }\n}"
  },
  {
    "path": "AlexaSkillsKit.Lib/UI/Card.cs",
    "content": "﻿// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nusing System;\n\nnamespace AlexaSkillsKit.UI\n{\n    public abstract class Card\n    {\n        public abstract string Type {\n            get;\n        }    \n    }\n}"
  },
  {
    "path": "AlexaSkillsKit.Lib/UI/Image.cs",
    "content": "﻿// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nusing System;\nusing System.Collections.Generic;\n\nnamespace AlexaSkillsKit.UI\n{\n    public class Image\n    {\n        public virtual string SmallImageUrl {\n            get;\n            set;\n        }\n\n        public virtual string LargeImageUrl {\n            get;\n            set;\n        }\n    }\n}"
  },
  {
    "path": "AlexaSkillsKit.Lib/UI/LinkAccountCard.cs",
    "content": "﻿// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nusing System;\nusing System.Collections.Generic;\n\nnamespace AlexaSkillsKit.UI\n{\n    public class LinkAccountCard : Card\n    {\n        public override string Type {\n            get { return \"LinkAccount\"; }\n        }\n    }\n}"
  },
  {
    "path": "AlexaSkillsKit.Lib/UI/OutputSpeech.cs",
    "content": "﻿// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nusing System;\nusing System.Collections.Generic;\n\nnamespace AlexaSkillsKit.UI\n{\n    public abstract class OutputSpeech\n    {\n        public abstract string Type {\n            get;\n        }\n    }\n}"
  },
  {
    "path": "AlexaSkillsKit.Lib/UI/PlainTextOutputSpeech.cs",
    "content": "﻿// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nnamespace AlexaSkillsKit.UI\n{\n    public class PlainTextOutputSpeech : OutputSpeech\n    {\n        public override string Type {\n            get { return \"PlainText\";  }\n        }\n\n        public virtual string Text {\n            get;\n            set;\n        }\n        \n        public static implicit operator PlainTextOutputSpeech(string spokenText)\n        {\n            return new PlainTextOutputSpeech()\n            {\n                Text = spokenText\n            };\n        }\n    }\n}"
  },
  {
    "path": "AlexaSkillsKit.Lib/UI/Reprompt.cs",
    "content": "﻿// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nusing System;\nusing System.Collections.Generic;\n\nnamespace AlexaSkillsKit.UI\n{\n    public class Reprompt\n    {\n        public OutputSpeech OutputSpeech {\n            get;\n            set;\n        }\n    }\n}\n"
  },
  {
    "path": "AlexaSkillsKit.Lib/UI/SimpleCard.cs",
    "content": "﻿// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nnamespace AlexaSkillsKit.UI\n{\n    public class SimpleCard : Card\n    {\n        public override string Type {\n            get { return \"Simple\"; }\n        }\n\n        public virtual string Title {\n            get;\n            set;\n        }\n\n        public virtual string Content {\n            get;\n            set;\n        }\n    }\n}"
  },
  {
    "path": "AlexaSkillsKit.Lib/UI/SsmlOutputSpeech.cs",
    "content": "﻿// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nusing System;\nusing System.Collections.Generic;\n\nnamespace AlexaSkillsKit.UI\n{\n    public class SsmlOutputSpeech : OutputSpeech\n    {\n        public override string Type {\n            get { return \"SSML\";  }\n        }\n\n        public virtual string Ssml {\n            get;\n            set;\n        }\n    }\n}"
  },
  {
    "path": "AlexaSkillsKit.Lib/UI/StandardCard.cs",
    "content": "﻿// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nnamespace AlexaSkillsKit.UI\n{\n    public class StandardCard : Card\n    {\n        public override string Type {\n            get { return \"Standard\"; }\n        }\n\n        public virtual string Title {\n            get;\n            set;\n        }\n\n        public virtual string Text {\n            get;\n            set;\n        }\n\n        public virtual Image Image {\n            get;\n            set;\n        }\n    }\n}"
  },
  {
    "path": "AlexaSkillsKit.Lib/app.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n  <runtime>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n      <dependentAssembly>\n        <assemblyIdentity name=\"Newtonsoft.Json\" publicKeyToken=\"30ad4fe6b2a6aeed\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-7.0.0.0\" newVersion=\"7.0.0.0\" />\n      </dependentAssembly>\n    </assemblyBinding>\n  </runtime>\n</configuration>"
  },
  {
    "path": "AlexaSkillsKit.Lib/packages.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n  <package id=\"BouncyCastle\" version=\"1.8.1\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.AspNet.WebApi.Client\" version=\"5.2.3\" targetFramework=\"net45\" userInstalled=\"true\" />\n  <package id=\"Newtonsoft.Json\" version=\"7.0.1\" targetFramework=\"net45\" userInstalled=\"true\" />\n</packages>"
  },
  {
    "path": "AlexaSkillsKit.Sample/AlexaSkillsKit.Sample.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"12.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProductVersion>\n    </ProductVersion>\n    <SchemaVersion>2.0</SchemaVersion>\n    <ProjectGuid>{9FDEF793-5832-4D37-B0D5-62C55AB1C12E}</ProjectGuid>\n    <ProjectTypeGuids>{349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}</ProjectTypeGuids>\n    <OutputType>Library</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>Sample</RootNamespace>\n    <AssemblyName>Sample</AssemblyName>\n    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\n    <MvcBuildViews>false</MvcBuildViews>\n    <UseIISExpress>true</UseIISExpress>\n    <IISExpressSSLPort />\n    <IISExpressAnonymousAuthentication />\n    <IISExpressWindowsAuthentication />\n    <IISExpressUseClassicPipelineMode />\n    <SolutionDir Condition=\"$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'\">..\\</SolutionDir>\n    <RestorePackages>true</RestorePackages>\n    <UseGlobalApplicationHostFile />\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\</OutputPath>\n    <DefineConstants>TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"Antlr3.Runtime, Version=3.5.0.2, Culture=neutral, PublicKeyToken=eb42632606e9261f, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\Antlr.3.5.0.2\\lib\\Antlr3.Runtime.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\EntityFramework.6.1.3\\lib\\net45\\EntityFramework.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"EntityFramework.SqlServer, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\EntityFramework.6.1.3\\lib\\net45\\EntityFramework.SqlServer.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Microsoft.AspNet.Identity.Core, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\Microsoft.AspNet.Identity.Core.2.2.1\\lib\\net45\\Microsoft.AspNet.Identity.Core.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Microsoft.AspNet.Identity.EntityFramework, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\Microsoft.AspNet.Identity.EntityFramework.2.2.1\\lib\\net45\\Microsoft.AspNet.Identity.EntityFramework.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Microsoft.AspNet.Identity.Owin, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\Microsoft.AspNet.Identity.Owin.2.2.1\\lib\\net45\\Microsoft.AspNet.Identity.Owin.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Microsoft.CSharp\" />\n    <Reference Include=\"Microsoft.Owin, Version=3.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\Microsoft.Owin.3.0.1\\lib\\net45\\Microsoft.Owin.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Microsoft.Owin.Host.SystemWeb, Version=3.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\Microsoft.Owin.Host.SystemWeb.3.0.1\\lib\\net45\\Microsoft.Owin.Host.SystemWeb.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Microsoft.Owin.Security, Version=3.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\Microsoft.Owin.Security.3.0.1\\lib\\net45\\Microsoft.Owin.Security.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Microsoft.Owin.Security.Cookies, Version=3.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\Microsoft.Owin.Security.Cookies.3.0.1\\lib\\net45\\Microsoft.Owin.Security.Cookies.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Microsoft.Owin.Security.Facebook, Version=3.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\Microsoft.Owin.Security.Facebook.3.0.1\\lib\\net45\\Microsoft.Owin.Security.Facebook.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Microsoft.Owin.Security.Google, Version=3.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\Microsoft.Owin.Security.Google.3.0.1\\lib\\net45\\Microsoft.Owin.Security.Google.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Microsoft.Owin.Security.MicrosoftAccount, Version=3.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\Microsoft.Owin.Security.MicrosoftAccount.3.0.1\\lib\\net45\\Microsoft.Owin.Security.MicrosoftAccount.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Microsoft.Owin.Security.OAuth, Version=3.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\Microsoft.Owin.Security.OAuth.3.0.1\\lib\\net45\\Microsoft.Owin.Security.OAuth.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Microsoft.Owin.Security.Twitter, Version=3.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\Microsoft.Owin.Security.Twitter.3.0.1\\lib\\net45\\Microsoft.Owin.Security.Twitter.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Microsoft.Web.Infrastructure, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\packages\\Microsoft.Web.Infrastructure.1.0.0.0\\lib\\net40\\Microsoft.Web.Infrastructure.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Newtonsoft.Json, Version=7.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\Newtonsoft.Json.7.0.1\\lib\\net45\\Newtonsoft.Json.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"NLog, Version=3.2.1.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\NLog.3.2.1\\lib\\net45\\NLog.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Owin\">\n      <HintPath>..\\packages\\Owin.1.0\\lib\\net40\\Owin.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.Data\" />\n    <Reference Include=\"System.Drawing\" />\n    <Reference Include=\"System.ComponentModel.DataAnnotations\" />\n    <Reference Include=\"System.Core\" />\n    <Reference Include=\"System.Data.DataSetExtensions\" />\n    <Reference Include=\"System.Net.Http.Formatting\">\n      <HintPath>..\\packages\\Microsoft.AspNet.WebApi.Client.5.2.3\\lib\\net45\\System.Net.Http.Formatting.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Web\" />\n    <Reference Include=\"System.Web.Abstractions\" />\n    <Reference Include=\"System.Web.ApplicationServices\" />\n    <Reference Include=\"System.Web.Helpers, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\Microsoft.AspNet.WebPages.3.2.3\\lib\\net45\\System.Web.Helpers.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Web.Http, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\Microsoft.AspNet.WebApi.Core.5.2.3\\lib\\net45\\System.Web.Http.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Web.Http.Owin, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\Microsoft.AspNet.WebApi.Owin.5.2.3\\lib\\net45\\System.Web.Http.Owin.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Web.Http.WebHost, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\Microsoft.AspNet.WebApi.WebHost.5.2.3\\lib\\net45\\System.Web.Http.WebHost.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Web.Mvc, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\Microsoft.AspNet.Mvc.5.2.3\\lib\\net45\\System.Web.Mvc.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Web.Optimization\">\n      <HintPath>..\\packages\\Microsoft.AspNet.Web.Optimization.1.1.3\\lib\\net40\\System.Web.Optimization.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Web.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\Microsoft.AspNet.Razor.3.2.3\\lib\\net45\\System.Web.Razor.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Web.WebPages, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\Microsoft.AspNet.WebPages.3.2.3\\lib\\net45\\System.Web.WebPages.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Web.WebPages.Deployment, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\Microsoft.AspNet.WebPages.3.2.3\\lib\\net45\\System.Web.WebPages.Deployment.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\Microsoft.AspNet.WebPages.3.2.3\\lib\\net45\\System.Web.WebPages.Razor.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Xml.Linq\" />\n    <Reference Include=\"System.Web.Routing\" />\n    <Reference Include=\"System.Xml\" />\n    <Reference Include=\"System.Configuration\" />\n    <Reference Include=\"System.Runtime.Serialization\" />\n    <Reference Include=\"System.Net.Http\">\n    </Reference>\n    <Reference Include=\"System.Net.Http.WebRequest\">\n    </Reference>\n    <Reference Include=\"WebGrease, Version=1.6.5135.21930, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\WebGrease.1.6.0\\lib\\WebGrease.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"App_Start\\BundleConfig.cs\" />\n    <Compile Include=\"App_Start\\FilterConfig.cs\" />\n    <Compile Include=\"App_Start\\IdentityConfig.cs\" />\n    <Compile Include=\"App_Start\\RouteConfig.cs\" />\n    <Compile Include=\"App_Start\\Startup.Auth.cs\" />\n    <Compile Include=\"App_Start\\WebApiConfig.cs\" />\n    <Compile Include=\"Areas\\HelpPage\\ApiDescriptionExtensions.cs\" />\n    <Compile Include=\"Areas\\HelpPage\\App_Start\\HelpPageConfig.cs\" />\n    <Compile Include=\"Areas\\HelpPage\\Controllers\\HelpController.cs\" />\n    <Compile Include=\"Areas\\HelpPage\\HelpPageAreaRegistration.cs\" />\n    <Compile Include=\"Areas\\HelpPage\\HelpPageConfigurationExtensions.cs\" />\n    <Compile Include=\"Areas\\HelpPage\\ModelDescriptions\\CollectionModelDescription.cs\" />\n    <Compile Include=\"Areas\\HelpPage\\ModelDescriptions\\ComplexTypeModelDescription.cs\" />\n    <Compile Include=\"Areas\\HelpPage\\ModelDescriptions\\DictionaryModelDescription.cs\" />\n    <Compile Include=\"Areas\\HelpPage\\ModelDescriptions\\EnumTypeModelDescription.cs\" />\n    <Compile Include=\"Areas\\HelpPage\\ModelDescriptions\\EnumValueDescription.cs\" />\n    <Compile Include=\"Areas\\HelpPage\\ModelDescriptions\\IModelDocumentationProvider.cs\" />\n    <Compile Include=\"Areas\\HelpPage\\ModelDescriptions\\KeyValuePairModelDescription.cs\" />\n    <Compile Include=\"Areas\\HelpPage\\ModelDescriptions\\ModelDescription.cs\" />\n    <Compile Include=\"Areas\\HelpPage\\ModelDescriptions\\ModelDescriptionGenerator.cs\" />\n    <Compile Include=\"Areas\\HelpPage\\ModelDescriptions\\ModelNameAttribute.cs\" />\n    <Compile Include=\"Areas\\HelpPage\\ModelDescriptions\\ModelNameHelper.cs\" />\n    <Compile Include=\"Areas\\HelpPage\\ModelDescriptions\\ParameterAnnotation.cs\" />\n    <Compile Include=\"Areas\\HelpPage\\ModelDescriptions\\ParameterDescription.cs\" />\n    <Compile Include=\"Areas\\HelpPage\\ModelDescriptions\\SimpleTypeModelDescription.cs\" />\n    <Compile Include=\"Areas\\HelpPage\\Models\\HelpPageApiModel.cs\" />\n    <Compile Include=\"Areas\\HelpPage\\SampleGeneration\\HelpPageSampleGenerator.cs\" />\n    <Compile Include=\"Areas\\HelpPage\\SampleGeneration\\HelpPageSampleKey.cs\" />\n    <Compile Include=\"Areas\\HelpPage\\SampleGeneration\\ImageSample.cs\" />\n    <Compile Include=\"Areas\\HelpPage\\SampleGeneration\\InvalidSample.cs\" />\n    <Compile Include=\"Areas\\HelpPage\\SampleGeneration\\ObjectGenerator.cs\" />\n    <Compile Include=\"Areas\\HelpPage\\SampleGeneration\\SampleDirection.cs\" />\n    <Compile Include=\"Areas\\HelpPage\\SampleGeneration\\TextSample.cs\" />\n    <Compile Include=\"Areas\\HelpPage\\XmlDocumentationProvider.cs\" />\n    <Compile Include=\"Controllers\\AccountController.cs\" />\n    <Compile Include=\"Controllers\\HomeController.cs\" />\n    <Compile Include=\"Controllers\\ValuesController.cs\" />\n    <Compile Include=\"Global.asax.cs\">\n      <DependentUpon>Global.asax</DependentUpon>\n    </Compile>\n    <Compile Include=\"Models\\AccountBindingModels.cs\" />\n    <Compile Include=\"Models\\AccountViewModels.cs\" />\n    <Compile Include=\"Models\\IdentityModels.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n    <Compile Include=\"Providers\\ApplicationOAuthProvider.cs\" />\n    <Compile Include=\"Results\\ChallengeResult.cs\" />\n    <Compile Include=\"Speechlet\\AlexaController.cs\" />\n    <Compile Include=\"Speechlet\\SampleSessionSpeechlet.cs\" />\n    <Compile Include=\"Startup.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Content Include=\"Areas\\HelpPage\\HelpPage.css\" />\n    <Content Include=\"Content\\bootstrap.css\" />\n    <Content Include=\"Content\\bootstrap.min.css\" />\n    <Content Include=\"favicon.ico\" />\n    <Content Include=\"fonts\\glyphicons-halflings-regular.svg\" />\n    <Content Include=\"Global.asax\" />\n    <Content Include=\"Scripts\\bootstrap.js\" />\n    <Content Include=\"Scripts\\bootstrap.min.js\" />\n    <Content Include=\"NLog.config\">\n      <CopyToOutputDirectory>Always</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Areas\\HelpPage\\Views\\Web.config\" />\n    <Content Include=\"Areas\\HelpPage\\Views\\Shared\\_Layout.cshtml\" />\n    <Content Include=\"Areas\\HelpPage\\Views\\Help\\ResourceModel.cshtml\" />\n    <Content Include=\"Areas\\HelpPage\\Views\\Help\\Index.cshtml\" />\n    <Content Include=\"Areas\\HelpPage\\Views\\Help\\DisplayTemplates\\TextSample.cshtml\" />\n    <Content Include=\"Areas\\HelpPage\\Views\\Help\\DisplayTemplates\\SimpleTypeModelDescription.cshtml\" />\n    <Content Include=\"Areas\\HelpPage\\Views\\Help\\DisplayTemplates\\Samples.cshtml\" />\n    <Content Include=\"Areas\\HelpPage\\Views\\Help\\DisplayTemplates\\Parameters.cshtml\" />\n    <Content Include=\"Areas\\HelpPage\\Views\\Help\\DisplayTemplates\\ModelDescriptionLink.cshtml\" />\n    <Content Include=\"Areas\\HelpPage\\Views\\Help\\DisplayTemplates\\KeyValuePairModelDescription.cshtml\" />\n    <Content Include=\"Areas\\HelpPage\\Views\\Help\\DisplayTemplates\\InvalidSample.cshtml\" />\n    <Content Include=\"Areas\\HelpPage\\Views\\Help\\DisplayTemplates\\ImageSample.cshtml\" />\n    <Content Include=\"Areas\\HelpPage\\Views\\Help\\DisplayTemplates\\HelpPageApiModel.cshtml\" />\n    <Content Include=\"Areas\\HelpPage\\Views\\Help\\DisplayTemplates\\EnumTypeModelDescription.cshtml\" />\n    <Content Include=\"Areas\\HelpPage\\Views\\Help\\DisplayTemplates\\DictionaryModelDescription.cshtml\" />\n    <Content Include=\"Areas\\HelpPage\\Views\\Help\\DisplayTemplates\\ComplexTypeModelDescription.cshtml\" />\n    <Content Include=\"Areas\\HelpPage\\Views\\Help\\DisplayTemplates\\CollectionModelDescription.cshtml\" />\n    <Content Include=\"Areas\\HelpPage\\Views\\Help\\DisplayTemplates\\ApiGroup.cshtml\" />\n    <Content Include=\"Areas\\HelpPage\\Views\\Help\\Api.cshtml\" />\n    <None Include=\"NLog.xsd\">\n      <SubType>Designer</SubType>\n    </None>\n    <None Include=\"Scripts\\jquery-1.10.2.intellisense.js\" />\n    <Content Include=\"Scripts\\jquery-1.10.2.js\" />\n    <Content Include=\"Scripts\\jquery-1.10.2.min.js\" />\n    <None Include=\"Scripts\\jquery.validate-vsdoc.js\" />\n    <Content Include=\"Scripts\\jquery.validate.js\" />\n    <Content Include=\"Scripts\\jquery.validate.min.js\" />\n    <Content Include=\"Scripts\\jquery.validate.unobtrusive.js\" />\n    <Content Include=\"Scripts\\jquery.validate.unobtrusive.min.js\" />\n    <Content Include=\"Scripts\\modernizr-2.6.2.js\" />\n    <Content Include=\"Scripts\\respond.js\" />\n    <Content Include=\"Scripts\\respond.min.js\" />\n    <Content Include=\"Speechlet\\SampleSessionUtterances.txt\" />\n    <Content Include=\"Web.config\" />\n    <Content Include=\"Web.Debug.config\">\n      <DependentUpon>Web.config</DependentUpon>\n    </Content>\n    <Content Include=\"Web.Release.config\">\n      <DependentUpon>Web.config</DependentUpon>\n    </Content>\n    <Content Include=\"Areas\\HelpPage\\Views\\_ViewStart.cshtml\" />\n    <Content Include=\"Content\\Site.css\" />\n    <Content Include=\"Scripts\\_references.js\" />\n    <Content Include=\"Views\\Web.config\" />\n    <Content Include=\"Views\\_ViewStart.cshtml\" />\n    <Content Include=\"Views\\Home\\Index.cshtml\" />\n    <Content Include=\"Views\\Shared\\Error.cshtml\" />\n    <Content Include=\"Views\\Shared\\_Layout.cshtml\" />\n    <Content Include=\"Scripts\\jquery-1.10.2.min.map\" />\n    <Content Include=\"Speechlet\\SampleSessionIntentSchema.json\" />\n  </ItemGroup>\n  <ItemGroup>\n    <WCFMetadata Include=\"Service References\\\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Content Include=\"fonts\\glyphicons-halflings-regular.woff\" />\n    <Content Include=\"fonts\\glyphicons-halflings-regular.ttf\" />\n    <Content Include=\"fonts\\glyphicons-halflings-regular.eot\" />\n    <Content Include=\"packages.config\">\n      <SubType>Designer</SubType>\n    </Content>\n    <None Include=\"Project_Readme.html\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\AlexaSkillsKit.Lib\\AlexaSkillsKit.Lib.csproj\">\n      <Project>{0ec882a8-aaca-4bd5-b449-72f20fdb8586}</Project>\n      <Name>AlexaSkillsKit.Lib</Name>\n    </ProjectReference>\n  </ItemGroup>\n  <PropertyGroup>\n    <VisualStudioVersion Condition=\"'$(VisualStudioVersion)' == ''\">10.0</VisualStudioVersion>\n    <VSToolsPath Condition=\"'$(VSToolsPath)' == ''\">$(MSBuildExtensionsPath32)\\Microsoft\\VisualStudio\\v$(VisualStudioVersion)</VSToolsPath>\n  </PropertyGroup>\n  <Import Project=\"$(MSBuildBinPath)\\Microsoft.CSharp.targets\" />\n  <Import Project=\"$(VSToolsPath)\\WebApplications\\Microsoft.WebApplication.targets\" Condition=\"'$(VSToolsPath)' != ''\" />\n  <Import Project=\"$(MSBuildExtensionsPath32)\\Microsoft\\VisualStudio\\v10.0\\WebApplications\\Microsoft.WebApplication.targets\" Condition=\"false\" />\n  <Target Name=\"MvcBuildViews\" AfterTargets=\"AfterBuild\" Condition=\"'$(MvcBuildViews)'=='true'\">\n    <AspNetCompiler VirtualPath=\"temp\" PhysicalPath=\"$(WebProjectOutputDir)\" />\n  </Target>\n  <ProjectExtensions>\n    <VisualStudio>\n      <FlavorProperties GUID=\"{349c5851-65df-11da-9384-00065b846f21}\">\n        <WebProjectProperties>\n          <UseIIS>True</UseIIS>\n          <AutoAssignPort>True</AutoAssignPort>\n          <DevelopmentServerPort>58080</DevelopmentServerPort>\n          <DevelopmentServerVPath>/</DevelopmentServerVPath>\n          <IISUrl>http://localhost:58080/</IISUrl>\n          <NTLMAuthentication>False</NTLMAuthentication>\n          <UseCustomServer>False</UseCustomServer>\n          <CustomServerUrl>\n          </CustomServerUrl>\n          <SaveServerSettingsInUserFile>False</SaveServerSettingsInUserFile>\n        </WebProjectProperties>\n      </FlavorProperties>\n    </VisualStudio>\n  </ProjectExtensions>\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it.\n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target> -->\n</Project>"
  },
  {
    "path": "AlexaSkillsKit.Sample/App_Start/BundleConfig.cs",
    "content": "﻿using System.Web;\nusing System.Web.Optimization;\n\nnamespace Sample\n{\n    public class BundleConfig\n    {\n        // For more information on bundling, visit http://go.microsoft.com/fwlink/?LinkId=301862\n        public static void RegisterBundles(BundleCollection bundles) {\n            bundles.Add(new ScriptBundle(\"~/bundles/jquery\").Include(\n                        \"~/Scripts/jquery-{version}.js\"));\n\n            // Use the development version of Modernizr to develop with and learn from. Then, when you're\n            // ready for production, use the build tool at http://modernizr.com to pick only the tests you need.\n            bundles.Add(new ScriptBundle(\"~/bundles/modernizr\").Include(\n                        \"~/Scripts/modernizr-*\"));\n\n            bundles.Add(new ScriptBundle(\"~/bundles/bootstrap\").Include(\n                      \"~/Scripts/bootstrap.js\",\n                      \"~/Scripts/respond.js\"));\n\n            bundles.Add(new StyleBundle(\"~/Content/css\").Include(\n                      \"~/Content/bootstrap.css\",\n                      \"~/Content/site.css\"));\n        }\n    }\n}\n"
  },
  {
    "path": "AlexaSkillsKit.Sample/App_Start/FilterConfig.cs",
    "content": "﻿using System.Web;\nusing System.Web.Mvc;\n\nnamespace Sample\n{\n    public class FilterConfig\n    {\n        public static void RegisterGlobalFilters(GlobalFilterCollection filters) {\n            filters.Add(new HandleErrorAttribute());\n        }\n    }\n}\n"
  },
  {
    "path": "AlexaSkillsKit.Sample/App_Start/IdentityConfig.cs",
    "content": "﻿using System.Threading.Tasks;\nusing Microsoft.AspNet.Identity;\nusing Microsoft.AspNet.Identity.EntityFramework;\nusing Microsoft.AspNet.Identity.Owin;\nusing Microsoft.Owin;\nusing Sample.Models;\n\nnamespace Sample\n{\n    // Configure the application user manager used in this application. UserManager is defined in ASP.NET Identity and is used by the application.\n\n    public class ApplicationUserManager : UserManager<ApplicationUser>\n    {\n        public ApplicationUserManager(IUserStore<ApplicationUser> store)\n            : base(store)\n        {\n        }\n\n        public static ApplicationUserManager Create(IdentityFactoryOptions<ApplicationUserManager> options, IOwinContext context)\n        {\n            var manager = new ApplicationUserManager(new UserStore<ApplicationUser>(context.Get<ApplicationDbContext>()));\n            // Configure validation logic for usernames\n            manager.UserValidator = new UserValidator<ApplicationUser>(manager)\n            {\n                AllowOnlyAlphanumericUserNames = false,\n                RequireUniqueEmail = true\n            };\n            // Configure validation logic for passwords\n            manager.PasswordValidator = new PasswordValidator\n            {\n                RequiredLength = 6,\n                RequireNonLetterOrDigit = true,\n                RequireDigit = true,\n                RequireLowercase = true,\n                RequireUppercase = true,\n            };\n            var dataProtectionProvider = options.DataProtectionProvider;\n            if (dataProtectionProvider != null)\n            {\n                manager.UserTokenProvider = new DataProtectorTokenProvider<ApplicationUser>(dataProtectionProvider.Create(\"ASP.NET Identity\"));\n            }\n            return manager;\n        }\n    }\n}\n"
  },
  {
    "path": "AlexaSkillsKit.Sample/App_Start/RouteConfig.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Web;\nusing System.Web.Mvc;\nusing System.Web.Routing;\n\nnamespace Sample\n{\n    public class RouteConfig\n    {\n        public static void RegisterRoutes(RouteCollection routes) {\n            routes.IgnoreRoute(\"{resource}.axd/{*pathInfo}\");\n\n            routes.MapRoute(\n                name: \"Default\",\n                url: \"{controller}/{action}/{id}\",\n                defaults: new { controller = \"Home\", action = \"Index\", id = UrlParameter.Optional }\n            );\n        }\n    }\n}\n"
  },
  {
    "path": "AlexaSkillsKit.Sample/App_Start/Startup.Auth.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing Microsoft.AspNet.Identity;\nusing Microsoft.AspNet.Identity.EntityFramework;\nusing Microsoft.Owin;\nusing Microsoft.Owin.Security.Cookies;\nusing Microsoft.Owin.Security.Google;\nusing Microsoft.Owin.Security.OAuth;\nusing Owin;\nusing Sample.Providers;\nusing Sample.Models;\n\nnamespace Sample\n{\n    public partial class Startup\n    {\n        public static OAuthAuthorizationServerOptions OAuthOptions { get; private set; }\n\n        public static string PublicClientId { get; private set; }\n\n        // For more information on configuring authentication, please visit http://go.microsoft.com/fwlink/?LinkId=301864\n        public void ConfigureAuth(IAppBuilder app)\n        {\n            // Configure the db context and user manager to use a single instance per request\n            app.CreatePerOwinContext(ApplicationDbContext.Create);\n            app.CreatePerOwinContext<ApplicationUserManager>(ApplicationUserManager.Create);\n\n            // Enable the application to use a cookie to store information for the signed in user\n            // and to use a cookie to temporarily store information about a user logging in with a third party login provider\n            app.UseCookieAuthentication(new CookieAuthenticationOptions());\n            app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie);\n\n            // Configure the application for OAuth based flow\n            PublicClientId = \"self\";\n            OAuthOptions = new OAuthAuthorizationServerOptions\n            {\n                TokenEndpointPath = new PathString(\"/Token\"),\n                Provider = new ApplicationOAuthProvider(PublicClientId),\n                AuthorizeEndpointPath = new PathString(\"/api/Account/ExternalLogin\"),\n                AccessTokenExpireTimeSpan = TimeSpan.FromDays(14),\n                AllowInsecureHttp = true\n            };\n\n            // Enable the application to use bearer tokens to authenticate users\n            app.UseOAuthBearerTokens(OAuthOptions);\n\n            // Uncomment the following lines to enable logging in with third party login providers\n            //app.UseMicrosoftAccountAuthentication(\n            //    clientId: \"\",\n            //    clientSecret: \"\");\n\n            //app.UseTwitterAuthentication(\n            //    consumerKey: \"\",\n            //    consumerSecret: \"\");\n\n            //app.UseFacebookAuthentication(\n            //    appId: \"\",\n            //    appSecret: \"\");\n\n            //app.UseGoogleAuthentication(new GoogleOAuth2AuthenticationOptions()\n            //{\n            //    ClientId = \"\",\n            //    ClientSecret = \"\"\n            //});\n        }\n    }\n}\n"
  },
  {
    "path": "AlexaSkillsKit.Sample/App_Start/WebApiConfig.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Net.Http;\nusing System.Web.Http;\nusing Microsoft.Owin.Security.OAuth;\nusing Newtonsoft.Json.Serialization;\n\nnamespace Sample\n{\n    public static class WebApiConfig\n    {\n        public static void Register(HttpConfiguration config)\n        {\n            // Web API configuration and services\n            // Configure Web API to use only bearer token authentication.\n            config.SuppressDefaultHostAuthentication();\n            config.Filters.Add(new HostAuthenticationFilter(OAuthDefaults.AuthenticationType));\n\n            // Web API routes\n            config.MapHttpAttributeRoutes();\n\n            config.Routes.MapHttpRoute(\n                name: \"DefaultApi\",\n                routeTemplate: \"api/{controller}/{id}\",\n                defaults: new { id = RouteParameter.Optional }\n            );\n        }\n    }\n}\n"
  },
  {
    "path": "AlexaSkillsKit.Sample/Areas/HelpPage/ApiDescriptionExtensions.cs",
    "content": "using System;\nusing System.Text;\nusing System.Web;\nusing System.Web.Http.Description;\n\nnamespace Sample.Areas.HelpPage\n{\n    public static class ApiDescriptionExtensions\n    {\n        /// <summary>\n        /// Generates an URI-friendly ID for the <see cref=\"ApiDescription\"/>. E.g. \"Get-Values-id_name\" instead of \"GetValues/{id}?name={name}\"\n        /// </summary>\n        /// <param name=\"description\">The <see cref=\"ApiDescription\"/>.</param>\n        /// <returns>The ID as a string.</returns>\n        public static string GetFriendlyId(this ApiDescription description)\n        {\n            string path = description.RelativePath;\n            string[] urlParts = path.Split('?');\n            string localPath = urlParts[0];\n            string queryKeyString = null;\n            if (urlParts.Length > 1)\n            {\n                string query = urlParts[1];\n                string[] queryKeys = HttpUtility.ParseQueryString(query).AllKeys;\n                queryKeyString = String.Join(\"_\", queryKeys);\n            }\n\n            StringBuilder friendlyPath = new StringBuilder();\n            friendlyPath.AppendFormat(\"{0}-{1}\",\n                description.HttpMethod.Method,\n                localPath.Replace(\"/\", \"-\").Replace(\"{\", String.Empty).Replace(\"}\", String.Empty));\n            if (queryKeyString != null)\n            {\n                friendlyPath.AppendFormat(\"_{0}\", queryKeyString.Replace('.', '-'));\n            }\n            return friendlyPath.ToString();\n        }\n    }\n}"
  },
  {
    "path": "AlexaSkillsKit.Sample/Areas/HelpPage/App_Start/HelpPageConfig.cs",
    "content": "// Uncomment the following to provide samples for PageResult<T>. Must also add the Microsoft.AspNet.WebApi.OData\n// package to your project.\n////#define Handle_PageResultOfT\n\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Diagnostics.CodeAnalysis;\nusing System.Linq;\nusing System.Net.Http.Headers;\nusing System.Reflection;\nusing System.Web;\nusing System.Web.Http;\n#if Handle_PageResultOfT\nusing System.Web.Http.OData;\n#endif\n\nnamespace Sample.Areas.HelpPage\n{\n    /// <summary>\n    /// Use this class to customize the Help Page.\n    /// For example you can set a custom <see cref=\"System.Web.Http.Description.IDocumentationProvider\"/> to supply the documentation\n    /// or you can provide the samples for the requests/responses.\n    /// </summary>\n    public static class HelpPageConfig\n    {\n        [SuppressMessage(\"Microsoft.Globalization\", \"CA1303:Do not pass literals as localized parameters\",\n            MessageId = \"Sample.Areas.HelpPage.TextSample.#ctor(System.String)\",\n            Justification = \"End users may choose to merge this string with existing localized resources.\")]\n        [SuppressMessage(\"Microsoft.Naming\", \"CA2204:Literals should be spelled correctly\",\n            MessageId = \"bsonspec\",\n            Justification = \"Part of a URI.\")]\n        public static void Register(HttpConfiguration config)\n        {\n            //// Uncomment the following to use the documentation from XML documentation file.\n            //config.SetDocumentationProvider(new XmlDocumentationProvider(HttpContext.Current.Server.MapPath(\"~/App_Data/XmlDocument.xml\")));\n\n            //// Uncomment the following to use \"sample string\" as the sample for all actions that have string as the body parameter or return type.\n            //// Also, the string arrays will be used for IEnumerable<string>. The sample objects will be serialized into different media type \n            //// formats by the available formatters.\n            //config.SetSampleObjects(new Dictionary<Type, object>\n            //{\n            //    {typeof(string), \"sample string\"},\n            //    {typeof(IEnumerable<string>), new string[]{\"sample 1\", \"sample 2\"}}\n            //});\n\n            // Extend the following to provide factories for types not handled automatically (those lacking parameterless\n            // constructors) or for which you prefer to use non-default property values. Line below provides a fallback\n            // since automatic handling will fail and GeneratePageResult handles only a single type.\n#if Handle_PageResultOfT\n            config.GetHelpPageSampleGenerator().SampleObjectFactories.Add(GeneratePageResult);\n#endif\n\n            // Extend the following to use a preset object directly as the sample for all actions that support a media\n            // type, regardless of the body parameter or return type. The lines below avoid display of binary content.\n            // The BsonMediaTypeFormatter (if available) is not used to serialize the TextSample object.\n            config.SetSampleForMediaType(\n                new TextSample(\"Binary JSON content. See http://bsonspec.org for details.\"),\n                new MediaTypeHeaderValue(\"application/bson\"));\n\n            //// Uncomment the following to use \"[0]=foo&[1]=bar\" directly as the sample for all actions that support form URL encoded format\n            //// and have IEnumerable<string> as the body parameter or return type.\n            //config.SetSampleForType(\"[0]=foo&[1]=bar\", new MediaTypeHeaderValue(\"application/x-www-form-urlencoded\"), typeof(IEnumerable<string>));\n\n            //// Uncomment the following to use \"1234\" directly as the request sample for media type \"text/plain\" on the controller named \"Values\"\n            //// and action named \"Put\".\n            //config.SetSampleRequest(\"1234\", new MediaTypeHeaderValue(\"text/plain\"), \"Values\", \"Put\");\n\n            //// Uncomment the following to use the image on \"../images/aspNetHome.png\" directly as the response sample for media type \"image/png\"\n            //// on the controller named \"Values\" and action named \"Get\" with parameter \"id\".\n            //config.SetSampleResponse(new ImageSample(\"../images/aspNetHome.png\"), new MediaTypeHeaderValue(\"image/png\"), \"Values\", \"Get\", \"id\");\n\n            //// Uncomment the following to correct the sample request when the action expects an HttpRequestMessage with ObjectContent<string>.\n            //// The sample will be generated as if the controller named \"Values\" and action named \"Get\" were having string as the body parameter.\n            //config.SetActualRequestType(typeof(string), \"Values\", \"Get\");\n\n            //// Uncomment the following to correct the sample response when the action returns an HttpResponseMessage with ObjectContent<string>.\n            //// The sample will be generated as if the controller named \"Values\" and action named \"Post\" were returning a string.\n            //config.SetActualResponseType(typeof(string), \"Values\", \"Post\");\n        }\n\n#if Handle_PageResultOfT\n        private static object GeneratePageResult(HelpPageSampleGenerator sampleGenerator, Type type)\n        {\n            if (type.IsGenericType)\n            {\n                Type openGenericType = type.GetGenericTypeDefinition();\n                if (openGenericType == typeof(PageResult<>))\n                {\n                    // Get the T in PageResult<T>\n                    Type[] typeParameters = type.GetGenericArguments();\n                    Debug.Assert(typeParameters.Length == 1);\n\n                    // Create an enumeration to pass as the first parameter to the PageResult<T> constuctor\n                    Type itemsType = typeof(List<>).MakeGenericType(typeParameters);\n                    object items = sampleGenerator.GetSampleObject(itemsType);\n\n                    // Fill in the other information needed to invoke the PageResult<T> constuctor\n                    Type[] parameterTypes = new Type[] { itemsType, typeof(Uri), typeof(long?), };\n                    object[] parameters = new object[] { items, null, (long)ObjectGenerator.DefaultCollectionSize, };\n\n                    // Call PageResult(IEnumerable<T> items, Uri nextPageLink, long? count) constructor\n                    ConstructorInfo constructor = type.GetConstructor(parameterTypes);\n                    return constructor.Invoke(parameters);\n                }\n            }\n\n            return null;\n        }\n#endif\n    }\n}"
  },
  {
    "path": "AlexaSkillsKit.Sample/Areas/HelpPage/Controllers/HelpController.cs",
    "content": "using System;\nusing System.Web.Http;\nusing System.Web.Mvc;\nusing Sample.Areas.HelpPage.ModelDescriptions;\nusing Sample.Areas.HelpPage.Models;\n\nnamespace Sample.Areas.HelpPage.Controllers\n{\n    /// <summary>\n    /// The controller that will handle requests for the help page.\n    /// </summary>\n    public class HelpController : Controller\n    {\n        private const string ErrorViewName = \"Error\";\n\n        public HelpController()\n            : this(GlobalConfiguration.Configuration)\n        {\n        }\n\n        public HelpController(HttpConfiguration config)\n        {\n            Configuration = config;\n        }\n\n        public HttpConfiguration Configuration { get; private set; }\n\n        public ActionResult Index()\n        {\n            ViewBag.DocumentationProvider = Configuration.Services.GetDocumentationProvider();\n            return View(Configuration.Services.GetApiExplorer().ApiDescriptions);\n        }\n\n        public ActionResult Api(string apiId)\n        {\n            if (!String.IsNullOrEmpty(apiId))\n            {\n                HelpPageApiModel apiModel = Configuration.GetHelpPageApiModel(apiId);\n                if (apiModel != null)\n                {\n                    return View(apiModel);\n                }\n            }\n\n            return View(ErrorViewName);\n        }\n\n        public ActionResult ResourceModel(string modelName)\n        {\n            if (!String.IsNullOrEmpty(modelName))\n            {\n                ModelDescriptionGenerator modelDescriptionGenerator = Configuration.GetModelDescriptionGenerator();\n                ModelDescription modelDescription;\n                if (modelDescriptionGenerator.GeneratedModels.TryGetValue(modelName, out modelDescription))\n                {\n                    return View(modelDescription);\n                }\n            }\n\n            return View(ErrorViewName);\n        }\n    }\n}"
  },
  {
    "path": "AlexaSkillsKit.Sample/Areas/HelpPage/HelpPage.css",
    "content": ".help-page h1,\n.help-page .h1,\n.help-page h2,\n.help-page .h2,\n.help-page h3,\n.help-page .h3,\n#body.help-page,\n.help-page-table th,\n.help-page-table pre,\n.help-page-table p {\n    font-family: \"Segoe UI Light\", Frutiger, \"Frutiger Linotype\", \"Dejavu Sans\", \"Helvetica Neue\", Arial, sans-serif;\n}\n\n.help-page pre.wrapped {\n    white-space: -moz-pre-wrap;\n    white-space: -pre-wrap;\n    white-space: -o-pre-wrap;\n    white-space: pre-wrap;\n}\n\n.help-page .warning-message-container {\n    margin-top: 20px;\n    padding: 0 10px;\n    color: #525252;\n    background: #EFDCA9; \n    border: 1px solid #CCCCCC;\n}\n\n.help-page-table {\n    width: 100%;\n    border-collapse: collapse;\n    text-align: left;\n    margin: 0px 0px 20px 0px;\n    border-top: 1px solid #D4D4D4;\n}\n\n.help-page-table th {\n    text-align: left;\n    font-weight: bold;\n    border-bottom: 1px solid #D4D4D4;\n    padding: 5px 6px 5px 6px;\n}\n\n.help-page-table td {\n    border-bottom: 1px solid #D4D4D4;\n    padding: 10px 8px 10px 8px;\n    vertical-align: top;\n}\n\n.help-page-table pre,\n.help-page-table p {\n    margin: 0px;\n    padding: 0px;\n    font-family: inherit;\n    font-size: 100%;\n}\n\n.help-page-table tbody tr:hover td {\n    background-color: #F3F3F3;\n}\n\n.help-page a:hover {\n    background-color: transparent;\n}\n\n.help-page .sample-header {\n    border: 2px solid #D4D4D4;\n    background: #00497E;\n    color: #FFFFFF;\n    padding: 8px 15px;\n    border-bottom: none;\n    display: inline-block;\n    margin: 10px 0px 0px 0px;\n}\n\n.help-page .sample-content {\n    display: block;\n    border-width: 0;\n    padding: 15px 20px;\n    background: #FFFFFF;\n    border: 2px solid #D4D4D4;\n    margin: 0px 0px 10px 0px;\n}\n\n.help-page .api-name {\n    width: 40%;\n}\n\n.help-page .api-documentation {\n    width: 60%;\n}\n\n.help-page .parameter-name {\n    width: 20%;\n}\n\n.help-page .parameter-documentation {\n    width: 40%;\n}\n\n.help-page .parameter-type {\n    width: 20%;\n}\n\n.help-page .parameter-annotations {\n    width: 20%;\n}\n\n.help-page h1,\n.help-page .h1 {\n    font-size: 36px;\n    line-height: normal;\n}\n\n.help-page h2,\n.help-page .h2 {\n    font-size: 24px;\n}\n\n.help-page h3,\n.help-page .h3 {\n    font-size: 20px;\n}\n\n#body.help-page {\n    font-size: 14px;\n    line-height: 143%;\n    color: #333;\n}\n\n.help-page a {\n    color: #0000EE;\n    text-decoration: none;\n}\n"
  },
  {
    "path": "AlexaSkillsKit.Sample/Areas/HelpPage/HelpPageAreaRegistration.cs",
    "content": "using System.Web.Http;\nusing System.Web.Mvc;\n\nnamespace Sample.Areas.HelpPage\n{\n    public class HelpPageAreaRegistration : AreaRegistration\n    {\n        public override string AreaName\n        {\n            get\n            {\n                return \"HelpPage\";\n            }\n        }\n\n        public override void RegisterArea(AreaRegistrationContext context)\n        {\n            context.MapRoute(\n                \"HelpPage_Default\",\n                \"Help/{action}/{apiId}\",\n                new { controller = \"Help\", action = \"Index\", apiId = UrlParameter.Optional });\n\n            HelpPageConfig.Register(GlobalConfiguration.Configuration);\n        }\n    }\n}"
  },
  {
    "path": "AlexaSkillsKit.Sample/Areas/HelpPage/HelpPageConfigurationExtensions.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Collections.ObjectModel;\nusing System.ComponentModel;\nusing System.Diagnostics;\nusing System.Diagnostics.CodeAnalysis;\nusing System.Globalization;\nusing System.Linq;\nusing System.Net.Http;\nusing System.Net.Http.Headers;\nusing System.Web.Http;\nusing System.Web.Http.Controllers;\nusing System.Web.Http.Description;\nusing Sample.Areas.HelpPage.ModelDescriptions;\nusing Sample.Areas.HelpPage.Models;\n\nnamespace Sample.Areas.HelpPage\n{\n    public static class HelpPageConfigurationExtensions\n    {\n        private const string ApiModelPrefix = \"MS_HelpPageApiModel_\";\n\n        /// <summary>\n        /// Sets the documentation provider for help page.\n        /// </summary>\n        /// <param name=\"config\">The <see cref=\"HttpConfiguration\"/>.</param>\n        /// <param name=\"documentationProvider\">The documentation provider.</param>\n        public static void SetDocumentationProvider(this HttpConfiguration config, IDocumentationProvider documentationProvider)\n        {\n            config.Services.Replace(typeof(IDocumentationProvider), documentationProvider);\n        }\n\n        /// <summary>\n        /// Sets the objects that will be used by the formatters to produce sample requests/responses.\n        /// </summary>\n        /// <param name=\"config\">The <see cref=\"HttpConfiguration\"/>.</param>\n        /// <param name=\"sampleObjects\">The sample objects.</param>\n        public static void SetSampleObjects(this HttpConfiguration config, IDictionary<Type, object> sampleObjects)\n        {\n            config.GetHelpPageSampleGenerator().SampleObjects = sampleObjects;\n        }\n\n        /// <summary>\n        /// Sets the sample request directly for the specified media type and action.\n        /// </summary>\n        /// <param name=\"config\">The <see cref=\"HttpConfiguration\"/>.</param>\n        /// <param name=\"sample\">The sample request.</param>\n        /// <param name=\"mediaType\">The media type.</param>\n        /// <param name=\"controllerName\">Name of the controller.</param>\n        /// <param name=\"actionName\">Name of the action.</param>\n        public static void SetSampleRequest(this HttpConfiguration config, object sample, MediaTypeHeaderValue mediaType, string controllerName, string actionName)\n        {\n            config.GetHelpPageSampleGenerator().ActionSamples.Add(new HelpPageSampleKey(mediaType, SampleDirection.Request, controllerName, actionName, new[] { \"*\" }), sample);\n        }\n\n        /// <summary>\n        /// Sets the sample request directly for the specified media type and action with parameters.\n        /// </summary>\n        /// <param name=\"config\">The <see cref=\"HttpConfiguration\"/>.</param>\n        /// <param name=\"sample\">The sample request.</param>\n        /// <param name=\"mediaType\">The media type.</param>\n        /// <param name=\"controllerName\">Name of the controller.</param>\n        /// <param name=\"actionName\">Name of the action.</param>\n        /// <param name=\"parameterNames\">The parameter names.</param>\n        public static void SetSampleRequest(this HttpConfiguration config, object sample, MediaTypeHeaderValue mediaType, string controllerName, string actionName, params string[] parameterNames)\n        {\n            config.GetHelpPageSampleGenerator().ActionSamples.Add(new HelpPageSampleKey(mediaType, SampleDirection.Request, controllerName, actionName, parameterNames), sample);\n        }\n\n        /// <summary>\n        /// Sets the sample request directly for the specified media type of the action.\n        /// </summary>\n        /// <param name=\"config\">The <see cref=\"HttpConfiguration\"/>.</param>\n        /// <param name=\"sample\">The sample response.</param>\n        /// <param name=\"mediaType\">The media type.</param>\n        /// <param name=\"controllerName\">Name of the controller.</param>\n        /// <param name=\"actionName\">Name of the action.</param>\n        public static void SetSampleResponse(this HttpConfiguration config, object sample, MediaTypeHeaderValue mediaType, string controllerName, string actionName)\n        {\n            config.GetHelpPageSampleGenerator().ActionSamples.Add(new HelpPageSampleKey(mediaType, SampleDirection.Response, controllerName, actionName, new[] { \"*\" }), sample);\n        }\n\n        /// <summary>\n        /// Sets the sample response directly for the specified media type of the action with specific parameters.\n        /// </summary>\n        /// <param name=\"config\">The <see cref=\"HttpConfiguration\"/>.</param>\n        /// <param name=\"sample\">The sample response.</param>\n        /// <param name=\"mediaType\">The media type.</param>\n        /// <param name=\"controllerName\">Name of the controller.</param>\n        /// <param name=\"actionName\">Name of the action.</param>\n        /// <param name=\"parameterNames\">The parameter names.</param>\n        public static void SetSampleResponse(this HttpConfiguration config, object sample, MediaTypeHeaderValue mediaType, string controllerName, string actionName, params string[] parameterNames)\n        {\n            config.GetHelpPageSampleGenerator().ActionSamples.Add(new HelpPageSampleKey(mediaType, SampleDirection.Response, controllerName, actionName, parameterNames), sample);\n        }\n\n        /// <summary>\n        /// Sets the sample directly for all actions with the specified media type.\n        /// </summary>\n        /// <param name=\"config\">The <see cref=\"HttpConfiguration\"/>.</param>\n        /// <param name=\"sample\">The sample.</param>\n        /// <param name=\"mediaType\">The media type.</param>\n        public static void SetSampleForMediaType(this HttpConfiguration config, object sample, MediaTypeHeaderValue mediaType)\n        {\n            config.GetHelpPageSampleGenerator().ActionSamples.Add(new HelpPageSampleKey(mediaType), sample);\n        }\n\n        /// <summary>\n        /// Sets the sample directly for all actions with the specified type and media type.\n        /// </summary>\n        /// <param name=\"config\">The <see cref=\"HttpConfiguration\"/>.</param>\n        /// <param name=\"sample\">The sample.</param>\n        /// <param name=\"mediaType\">The media type.</param>\n        /// <param name=\"type\">The parameter type or return type of an action.</param>\n        public static void SetSampleForType(this HttpConfiguration config, object sample, MediaTypeHeaderValue mediaType, Type type)\n        {\n            config.GetHelpPageSampleGenerator().ActionSamples.Add(new HelpPageSampleKey(mediaType, type), sample);\n        }\n\n        /// <summary>\n        /// Specifies the actual type of <see cref=\"System.Net.Http.ObjectContent{T}\"/> passed to the <see cref=\"System.Net.Http.HttpRequestMessage\"/> in an action.\n        /// The help page will use this information to produce more accurate request samples.\n        /// </summary>\n        /// <param name=\"config\">The <see cref=\"HttpConfiguration\"/>.</param>\n        /// <param name=\"type\">The type.</param>\n        /// <param name=\"controllerName\">Name of the controller.</param>\n        /// <param name=\"actionName\">Name of the action.</param>\n        public static void SetActualRequestType(this HttpConfiguration config, Type type, string controllerName, string actionName)\n        {\n            config.GetHelpPageSampleGenerator().ActualHttpMessageTypes.Add(new HelpPageSampleKey(SampleDirection.Request, controllerName, actionName, new[] { \"*\" }), type);\n        }\n\n        /// <summary>\n        /// Specifies the actual type of <see cref=\"System.Net.Http.ObjectContent{T}\"/> passed to the <see cref=\"System.Net.Http.HttpRequestMessage\"/> in an action.\n        /// The help page will use this information to produce more accurate request samples.\n        /// </summary>\n        /// <param name=\"config\">The <see cref=\"HttpConfiguration\"/>.</param>\n        /// <param name=\"type\">The type.</param>\n        /// <param name=\"controllerName\">Name of the controller.</param>\n        /// <param name=\"actionName\">Name of the action.</param>\n        /// <param name=\"parameterNames\">The parameter names.</param>\n        public static void SetActualRequestType(this HttpConfiguration config, Type type, string controllerName, string actionName, params string[] parameterNames)\n        {\n            config.GetHelpPageSampleGenerator().ActualHttpMessageTypes.Add(new HelpPageSampleKey(SampleDirection.Request, controllerName, actionName, parameterNames), type);\n        }\n\n        /// <summary>\n        /// Specifies the actual type of <see cref=\"System.Net.Http.ObjectContent{T}\"/> returned as part of the <see cref=\"System.Net.Http.HttpRequestMessage\"/> in an action.\n        /// The help page will use this information to produce more accurate response samples.\n        /// </summary>\n        /// <param name=\"config\">The <see cref=\"HttpConfiguration\"/>.</param>\n        /// <param name=\"type\">The type.</param>\n        /// <param name=\"controllerName\">Name of the controller.</param>\n        /// <param name=\"actionName\">Name of the action.</param>\n        public static void SetActualResponseType(this HttpConfiguration config, Type type, string controllerName, string actionName)\n        {\n            config.GetHelpPageSampleGenerator().ActualHttpMessageTypes.Add(new HelpPageSampleKey(SampleDirection.Response, controllerName, actionName, new[] { \"*\" }), type);\n        }\n\n        /// <summary>\n        /// Specifies the actual type of <see cref=\"System.Net.Http.ObjectContent{T}\"/> returned as part of the <see cref=\"System.Net.Http.HttpRequestMessage\"/> in an action.\n        /// The help page will use this information to produce more accurate response samples.\n        /// </summary>\n        /// <param name=\"config\">The <see cref=\"HttpConfiguration\"/>.</param>\n        /// <param name=\"type\">The type.</param>\n        /// <param name=\"controllerName\">Name of the controller.</param>\n        /// <param name=\"actionName\">Name of the action.</param>\n        /// <param name=\"parameterNames\">The parameter names.</param>\n        public static void SetActualResponseType(this HttpConfiguration config, Type type, string controllerName, string actionName, params string[] parameterNames)\n        {\n            config.GetHelpPageSampleGenerator().ActualHttpMessageTypes.Add(new HelpPageSampleKey(SampleDirection.Response, controllerName, actionName, parameterNames), type);\n        }\n\n        /// <summary>\n        /// Gets the help page sample generator.\n        /// </summary>\n        /// <param name=\"config\">The <see cref=\"HttpConfiguration\"/>.</param>\n        /// <returns>The help page sample generator.</returns>\n        public static HelpPageSampleGenerator GetHelpPageSampleGenerator(this HttpConfiguration config)\n        {\n            return (HelpPageSampleGenerator)config.Properties.GetOrAdd(\n                typeof(HelpPageSampleGenerator),\n                k => new HelpPageSampleGenerator());\n        }\n\n        /// <summary>\n        /// Sets the help page sample generator.\n        /// </summary>\n        /// <param name=\"config\">The <see cref=\"HttpConfiguration\"/>.</param>\n        /// <param name=\"sampleGenerator\">The help page sample generator.</param>\n        public static void SetHelpPageSampleGenerator(this HttpConfiguration config, HelpPageSampleGenerator sampleGenerator)\n        {\n            config.Properties.AddOrUpdate(\n                typeof(HelpPageSampleGenerator),\n                k => sampleGenerator,\n                (k, o) => sampleGenerator);\n        }\n\n        /// <summary>\n        /// Gets the model description generator.\n        /// </summary>\n        /// <param name=\"config\">The configuration.</param>\n        /// <returns>The <see cref=\"ModelDescriptionGenerator\"/></returns>\n        public static ModelDescriptionGenerator GetModelDescriptionGenerator(this HttpConfiguration config)\n        {\n            return (ModelDescriptionGenerator)config.Properties.GetOrAdd(\n                typeof(ModelDescriptionGenerator),\n                k => InitializeModelDescriptionGenerator(config));\n        }\n\n        /// <summary>\n        /// Gets the model that represents an API displayed on the help page. The model is initialized on the first call and cached for subsequent calls.\n        /// </summary>\n        /// <param name=\"config\">The <see cref=\"HttpConfiguration\"/>.</param>\n        /// <param name=\"apiDescriptionId\">The <see cref=\"ApiDescription\"/> ID.</param>\n        /// <returns>\n        /// An <see cref=\"HelpPageApiModel\"/>\n        /// </returns>\n        public static HelpPageApiModel GetHelpPageApiModel(this HttpConfiguration config, string apiDescriptionId)\n        {\n            object model;\n            string modelId = ApiModelPrefix + apiDescriptionId;\n            if (!config.Properties.TryGetValue(modelId, out model))\n            {\n                Collection<ApiDescription> apiDescriptions = config.Services.GetApiExplorer().ApiDescriptions;\n                ApiDescription apiDescription = apiDescriptions.FirstOrDefault(api => String.Equals(api.GetFriendlyId(), apiDescriptionId, StringComparison.OrdinalIgnoreCase));\n                if (apiDescription != null)\n                {\n                    model = GenerateApiModel(apiDescription, config);\n                    config.Properties.TryAdd(modelId, model);\n                }\n            }\n\n            return (HelpPageApiModel)model;\n        }\n\n        private static HelpPageApiModel GenerateApiModel(ApiDescription apiDescription, HttpConfiguration config)\n        {\n            HelpPageApiModel apiModel = new HelpPageApiModel()\n            {\n                ApiDescription = apiDescription,\n            };\n\n            ModelDescriptionGenerator modelGenerator = config.GetModelDescriptionGenerator();\n            HelpPageSampleGenerator sampleGenerator = config.GetHelpPageSampleGenerator();\n            GenerateUriParameters(apiModel, modelGenerator);\n            GenerateRequestModelDescription(apiModel, modelGenerator, sampleGenerator);\n            GenerateResourceDescription(apiModel, modelGenerator);\n            GenerateSamples(apiModel, sampleGenerator);\n\n            return apiModel;\n        }\n\n        private static void GenerateUriParameters(HelpPageApiModel apiModel, ModelDescriptionGenerator modelGenerator)\n        {\n            ApiDescription apiDescription = apiModel.ApiDescription;\n            foreach (ApiParameterDescription apiParameter in apiDescription.ParameterDescriptions)\n            {\n                if (apiParameter.Source == ApiParameterSource.FromUri)\n                {\n                    HttpParameterDescriptor parameterDescriptor = apiParameter.ParameterDescriptor;\n                    Type parameterType = null;\n                    ModelDescription typeDescription = null;\n                    ComplexTypeModelDescription complexTypeDescription = null;\n                    if (parameterDescriptor != null)\n                    {\n                        parameterType = parameterDescriptor.ParameterType;\n                        typeDescription = modelGenerator.GetOrCreateModelDescription(parameterType);\n                        complexTypeDescription = typeDescription as ComplexTypeModelDescription;\n                    }\n\n                    // Example:\n                    // [TypeConverter(typeof(PointConverter))]\n                    // public class Point\n                    // {\n                    //     public Point(int x, int y)\n                    //     {\n                    //         X = x;\n                    //         Y = y;\n                    //     }\n                    //     public int X { get; set; }\n                    //     public int Y { get; set; }\n                    // }\n                    // Class Point is bindable with a TypeConverter, so Point will be added to UriParameters collection.\n                    // \n                    // public class Point\n                    // {\n                    //     public int X { get; set; }\n                    //     public int Y { get; set; }\n                    // }\n                    // Regular complex class Point will have properties X and Y added to UriParameters collection.\n                    if (complexTypeDescription != null\n                        && !IsBindableWithTypeConverter(parameterType))\n                    {\n                        foreach (ParameterDescription uriParameter in complexTypeDescription.Properties)\n                        {\n                            apiModel.UriParameters.Add(uriParameter);\n                        }\n                    }\n                    else if (parameterDescriptor != null)\n                    {\n                        ParameterDescription uriParameter =\n                            AddParameterDescription(apiModel, apiParameter, typeDescription);\n\n                        if (!parameterDescriptor.IsOptional)\n                        {\n                            uriParameter.Annotations.Add(new ParameterAnnotation() { Documentation = \"Required\" });\n                        }\n\n                        object defaultValue = parameterDescriptor.DefaultValue;\n                        if (defaultValue != null)\n                        {\n                            uriParameter.Annotations.Add(new ParameterAnnotation() { Documentation = \"Default value is \" + Convert.ToString(defaultValue, CultureInfo.InvariantCulture) });\n                        }\n                    }\n                    else\n                    {\n                        Debug.Assert(parameterDescriptor == null);\n\n                        // If parameterDescriptor is null, this is an undeclared route parameter which only occurs\n                        // when source is FromUri. Ignored in request model and among resource parameters but listed\n                        // as a simple string here.\n                        ModelDescription modelDescription = modelGenerator.GetOrCreateModelDescription(typeof(string));\n                        AddParameterDescription(apiModel, apiParameter, modelDescription);\n                    }\n                }\n            }\n        }\n\n        private static bool IsBindableWithTypeConverter(Type parameterType)\n        {\n            if (parameterType == null)\n            {\n                return false;\n            }\n\n            return TypeDescriptor.GetConverter(parameterType).CanConvertFrom(typeof(string));\n        }\n\n        private static ParameterDescription AddParameterDescription(HelpPageApiModel apiModel,\n            ApiParameterDescription apiParameter, ModelDescription typeDescription)\n        {\n            ParameterDescription parameterDescription = new ParameterDescription\n            {\n                Name = apiParameter.Name,\n                Documentation = apiParameter.Documentation,\n                TypeDescription = typeDescription,\n            };\n\n            apiModel.UriParameters.Add(parameterDescription);\n            return parameterDescription;\n        }\n\n        private static void GenerateRequestModelDescription(HelpPageApiModel apiModel, ModelDescriptionGenerator modelGenerator, HelpPageSampleGenerator sampleGenerator)\n        {\n            ApiDescription apiDescription = apiModel.ApiDescription;\n            foreach (ApiParameterDescription apiParameter in apiDescription.ParameterDescriptions)\n            {\n                if (apiParameter.Source == ApiParameterSource.FromBody)\n                {\n                    Type parameterType = apiParameter.ParameterDescriptor.ParameterType;\n                    apiModel.RequestModelDescription = modelGenerator.GetOrCreateModelDescription(parameterType);\n                    apiModel.RequestDocumentation = apiParameter.Documentation;\n                }\n                else if (apiParameter.ParameterDescriptor != null &&\n                    apiParameter.ParameterDescriptor.ParameterType == typeof(HttpRequestMessage))\n                {\n                    Type parameterType = sampleGenerator.ResolveHttpRequestMessageType(apiDescription);\n\n                    if (parameterType != null)\n                    {\n                        apiModel.RequestModelDescription = modelGenerator.GetOrCreateModelDescription(parameterType);\n                    }\n                }\n            }\n        }\n\n        private static void GenerateResourceDescription(HelpPageApiModel apiModel, ModelDescriptionGenerator modelGenerator)\n        {\n            ResponseDescription response = apiModel.ApiDescription.ResponseDescription;\n            Type responseType = response.ResponseType ?? response.DeclaredType;\n            if (responseType != null && responseType != typeof(void))\n            {\n                apiModel.ResourceDescription = modelGenerator.GetOrCreateModelDescription(responseType);\n            }\n        }\n\n        [SuppressMessage(\"Microsoft.Design\", \"CA1031:DoNotCatchGeneralExceptionTypes\", Justification = \"The exception is recorded as ErrorMessages.\")]\n        private static void GenerateSamples(HelpPageApiModel apiModel, HelpPageSampleGenerator sampleGenerator)\n        {\n            try\n            {\n                foreach (var item in sampleGenerator.GetSampleRequests(apiModel.ApiDescription))\n                {\n                    apiModel.SampleRequests.Add(item.Key, item.Value);\n                    LogInvalidSampleAsError(apiModel, item.Value);\n                }\n\n                foreach (var item in sampleGenerator.GetSampleResponses(apiModel.ApiDescription))\n                {\n                    apiModel.SampleResponses.Add(item.Key, item.Value);\n                    LogInvalidSampleAsError(apiModel, item.Value);\n                }\n            }\n            catch (Exception e)\n            {\n                apiModel.ErrorMessages.Add(String.Format(CultureInfo.CurrentCulture,\n                    \"An exception has occurred while generating the sample. Exception message: {0}\",\n                    HelpPageSampleGenerator.UnwrapException(e).Message));\n            }\n        }\n\n        private static bool TryGetResourceParameter(ApiDescription apiDescription, HttpConfiguration config, out ApiParameterDescription parameterDescription, out Type resourceType)\n        {\n            parameterDescription = apiDescription.ParameterDescriptions.FirstOrDefault(\n                p => p.Source == ApiParameterSource.FromBody ||\n                    (p.ParameterDescriptor != null && p.ParameterDescriptor.ParameterType == typeof(HttpRequestMessage)));\n\n            if (parameterDescription == null)\n            {\n                resourceType = null;\n                return false;\n            }\n\n            resourceType = parameterDescription.ParameterDescriptor.ParameterType;\n\n            if (resourceType == typeof(HttpRequestMessage))\n            {\n                HelpPageSampleGenerator sampleGenerator = config.GetHelpPageSampleGenerator();\n                resourceType = sampleGenerator.ResolveHttpRequestMessageType(apiDescription);\n            }\n\n            if (resourceType == null)\n            {\n                parameterDescription = null;\n                return false;\n            }\n\n            return true;\n        }\n\n        private static ModelDescriptionGenerator InitializeModelDescriptionGenerator(HttpConfiguration config)\n        {\n            ModelDescriptionGenerator modelGenerator = new ModelDescriptionGenerator(config);\n            Collection<ApiDescription> apis = config.Services.GetApiExplorer().ApiDescriptions;\n            foreach (ApiDescription api in apis)\n            {\n                ApiParameterDescription parameterDescription;\n                Type parameterType;\n                if (TryGetResourceParameter(api, config, out parameterDescription, out parameterType))\n                {\n                    modelGenerator.GetOrCreateModelDescription(parameterType);\n                }\n            }\n            return modelGenerator;\n        }\n\n        private static void LogInvalidSampleAsError(HelpPageApiModel apiModel, object sample)\n        {\n            InvalidSample invalidSample = sample as InvalidSample;\n            if (invalidSample != null)\n            {\n                apiModel.ErrorMessages.Add(invalidSample.ErrorMessage);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "AlexaSkillsKit.Sample/Areas/HelpPage/ModelDescriptions/CollectionModelDescription.cs",
    "content": "namespace Sample.Areas.HelpPage.ModelDescriptions\n{\n    public class CollectionModelDescription : ModelDescription\n    {\n        public ModelDescription ElementDescription { get; set; }\n    }\n}"
  },
  {
    "path": "AlexaSkillsKit.Sample/Areas/HelpPage/ModelDescriptions/ComplexTypeModelDescription.cs",
    "content": "using System.Collections.ObjectModel;\n\nnamespace Sample.Areas.HelpPage.ModelDescriptions\n{\n    public class ComplexTypeModelDescription : ModelDescription\n    {\n        public ComplexTypeModelDescription()\n        {\n            Properties = new Collection<ParameterDescription>();\n        }\n\n        public Collection<ParameterDescription> Properties { get; private set; }\n    }\n}"
  },
  {
    "path": "AlexaSkillsKit.Sample/Areas/HelpPage/ModelDescriptions/DictionaryModelDescription.cs",
    "content": "namespace Sample.Areas.HelpPage.ModelDescriptions\n{\n    public class DictionaryModelDescription : KeyValuePairModelDescription\n    {\n    }\n}"
  },
  {
    "path": "AlexaSkillsKit.Sample/Areas/HelpPage/ModelDescriptions/EnumTypeModelDescription.cs",
    "content": "using System.Collections.Generic;\nusing System.Collections.ObjectModel;\n\nnamespace Sample.Areas.HelpPage.ModelDescriptions\n{\n    public class EnumTypeModelDescription : ModelDescription\n    {\n        public EnumTypeModelDescription()\n        {\n            Values = new Collection<EnumValueDescription>();\n        }\n\n        public Collection<EnumValueDescription> Values { get; private set; }\n    }\n}"
  },
  {
    "path": "AlexaSkillsKit.Sample/Areas/HelpPage/ModelDescriptions/EnumValueDescription.cs",
    "content": "namespace Sample.Areas.HelpPage.ModelDescriptions\n{\n    public class EnumValueDescription\n    {\n        public string Documentation { get; set; }\n\n        public string Name { get; set; }\n\n        public string Value { get; set; }\n    }\n}"
  },
  {
    "path": "AlexaSkillsKit.Sample/Areas/HelpPage/ModelDescriptions/IModelDocumentationProvider.cs",
    "content": "using System;\nusing System.Reflection;\n\nnamespace Sample.Areas.HelpPage.ModelDescriptions\n{\n    public interface IModelDocumentationProvider\n    {\n        string GetDocumentation(MemberInfo member);\n\n        string GetDocumentation(Type type);\n    }\n}"
  },
  {
    "path": "AlexaSkillsKit.Sample/Areas/HelpPage/ModelDescriptions/KeyValuePairModelDescription.cs",
    "content": "namespace Sample.Areas.HelpPage.ModelDescriptions\n{\n    public class KeyValuePairModelDescription : ModelDescription\n    {\n        public ModelDescription KeyModelDescription { get; set; }\n\n        public ModelDescription ValueModelDescription { get; set; }\n    }\n}"
  },
  {
    "path": "AlexaSkillsKit.Sample/Areas/HelpPage/ModelDescriptions/ModelDescription.cs",
    "content": "using System;\n\nnamespace Sample.Areas.HelpPage.ModelDescriptions\n{\n    /// <summary>\n    /// Describes a type model.\n    /// </summary>\n    public abstract class ModelDescription\n    {\n        public string Documentation { get; set; }\n\n        public Type ModelType { get; set; }\n\n        public string Name { get; set; }\n    }\n}"
  },
  {
    "path": "AlexaSkillsKit.Sample/Areas/HelpPage/ModelDescriptions/ModelDescriptionGenerator.cs",
    "content": "using System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Collections.Specialized;\nusing System.ComponentModel.DataAnnotations;\nusing System.Globalization;\nusing System.Reflection;\nusing System.Runtime.Serialization;\nusing System.Web.Http;\nusing System.Web.Http.Description;\nusing System.Xml.Serialization;\nusing Newtonsoft.Json;\n\nnamespace Sample.Areas.HelpPage.ModelDescriptions\n{\n    /// <summary>\n    /// Generates model descriptions for given types.\n    /// </summary>\n    public class ModelDescriptionGenerator\n    {\n        // Modify this to support more data annotation attributes.\n        private readonly IDictionary<Type, Func<object, string>> AnnotationTextGenerator = new Dictionary<Type, Func<object, string>>\n        {\n            { typeof(RequiredAttribute), a => \"Required\" },\n            { typeof(RangeAttribute), a =>\n                {\n                    RangeAttribute range = (RangeAttribute)a;\n                    return String.Format(CultureInfo.CurrentCulture, \"Range: inclusive between {0} and {1}\", range.Minimum, range.Maximum);\n                }\n            },\n            { typeof(MaxLengthAttribute), a =>\n                {\n                    MaxLengthAttribute maxLength = (MaxLengthAttribute)a;\n                    return String.Format(CultureInfo.CurrentCulture, \"Max length: {0}\", maxLength.Length);\n                }\n            },\n            { typeof(MinLengthAttribute), a =>\n                {\n                    MinLengthAttribute minLength = (MinLengthAttribute)a;\n                    return String.Format(CultureInfo.CurrentCulture, \"Min length: {0}\", minLength.Length);\n                }\n            },\n            { typeof(StringLengthAttribute), a =>\n                {\n                    StringLengthAttribute strLength = (StringLengthAttribute)a;\n                    return String.Format(CultureInfo.CurrentCulture, \"String length: inclusive between {0} and {1}\", strLength.MinimumLength, strLength.MaximumLength);\n                }\n            },\n            { typeof(DataTypeAttribute), a =>\n                {\n                    DataTypeAttribute dataType = (DataTypeAttribute)a;\n                    return String.Format(CultureInfo.CurrentCulture, \"Data type: {0}\", dataType.CustomDataType ?? dataType.DataType.ToString());\n                }\n            },\n            { typeof(RegularExpressionAttribute), a =>\n                {\n                    RegularExpressionAttribute regularExpression = (RegularExpressionAttribute)a;\n                    return String.Format(CultureInfo.CurrentCulture, \"Matching regular expression pattern: {0}\", regularExpression.Pattern);\n                }\n            },\n        };\n\n        // Modify this to add more default documentations.\n        private readonly IDictionary<Type, string> DefaultTypeDocumentation = new Dictionary<Type, string>\n        {\n            { typeof(Int16), \"integer\" },\n            { typeof(Int32), \"integer\" },\n            { typeof(Int64), \"integer\" },\n            { typeof(UInt16), \"unsigned integer\" },\n            { typeof(UInt32), \"unsigned integer\" },\n            { typeof(UInt64), \"unsigned integer\" },\n            { typeof(Byte), \"byte\" },\n            { typeof(Char), \"character\" },\n            { typeof(SByte), \"signed byte\" },\n            { typeof(Uri), \"URI\" },\n            { typeof(Single), \"decimal number\" },\n            { typeof(Double), \"decimal number\" },\n            { typeof(Decimal), \"decimal number\" },\n            { typeof(String), \"string\" },\n            { typeof(Guid), \"globally unique identifier\" },\n            { typeof(TimeSpan), \"time interval\" },\n            { typeof(DateTime), \"date\" },\n            { typeof(DateTimeOffset), \"date\" },\n            { typeof(Boolean), \"boolean\" },\n        };\n\n        private Lazy<IModelDocumentationProvider> _documentationProvider;\n\n        public ModelDescriptionGenerator(HttpConfiguration config)\n        {\n            if (config == null)\n            {\n                throw new ArgumentNullException(\"config\");\n            }\n\n            _documentationProvider = new Lazy<IModelDocumentationProvider>(() => config.Services.GetDocumentationProvider() as IModelDocumentationProvider);\n            GeneratedModels = new Dictionary<string, ModelDescription>(StringComparer.OrdinalIgnoreCase);\n        }\n\n        public Dictionary<string, ModelDescription> GeneratedModels { get; private set; }\n\n        private IModelDocumentationProvider DocumentationProvider\n        {\n            get\n            {\n                return _documentationProvider.Value;\n            }\n        }\n\n        public ModelDescription GetOrCreateModelDescription(Type modelType)\n        {\n            if (modelType == null)\n            {\n                throw new ArgumentNullException(\"modelType\");\n            }\n\n            Type underlyingType = Nullable.GetUnderlyingType(modelType);\n            if (underlyingType != null)\n            {\n                modelType = underlyingType;\n            }\n\n            ModelDescription modelDescription;\n            string modelName = ModelNameHelper.GetModelName(modelType);\n            if (GeneratedModels.TryGetValue(modelName, out modelDescription))\n            {\n                if (modelType != modelDescription.ModelType)\n                {\n                    throw new InvalidOperationException(\n                        String.Format(\n                            CultureInfo.CurrentCulture,\n                            \"A model description could not be created. Duplicate model name '{0}' was found for types '{1}' and '{2}'. \" +\n                            \"Use the [ModelName] attribute to change the model name for at least one of the types so that it has a unique name.\",\n                            modelName,\n                            modelDescription.ModelType.FullName,\n                            modelType.FullName));\n                }\n\n                return modelDescription;\n            }\n\n            if (DefaultTypeDocumentation.ContainsKey(modelType))\n            {\n                return GenerateSimpleTypeModelDescription(modelType);\n            }\n\n            if (modelType.IsEnum)\n            {\n                return GenerateEnumTypeModelDescription(modelType);\n            }\n\n            if (modelType.IsGenericType)\n            {\n                Type[] genericArguments = modelType.GetGenericArguments();\n\n                if (genericArguments.Length == 1)\n                {\n                    Type enumerableType = typeof(IEnumerable<>).MakeGenericType(genericArguments);\n                    if (enumerableType.IsAssignableFrom(modelType))\n                    {\n                        return GenerateCollectionModelDescription(modelType, genericArguments[0]);\n                    }\n                }\n                if (genericArguments.Length == 2)\n                {\n                    Type dictionaryType = typeof(IDictionary<,>).MakeGenericType(genericArguments);\n                    if (dictionaryType.IsAssignableFrom(modelType))\n                    {\n                        return GenerateDictionaryModelDescription(modelType, genericArguments[0], genericArguments[1]);\n                    }\n\n                    Type keyValuePairType = typeof(KeyValuePair<,>).MakeGenericType(genericArguments);\n                    if (keyValuePairType.IsAssignableFrom(modelType))\n                    {\n                        return GenerateKeyValuePairModelDescription(modelType, genericArguments[0], genericArguments[1]);\n                    }\n                }\n            }\n\n            if (modelType.IsArray)\n            {\n                Type elementType = modelType.GetElementType();\n                return GenerateCollectionModelDescription(modelType, elementType);\n            }\n\n            if (modelType == typeof(NameValueCollection))\n            {\n                return GenerateDictionaryModelDescription(modelType, typeof(string), typeof(string));\n            }\n\n            if (typeof(IDictionary).IsAssignableFrom(modelType))\n            {\n                return GenerateDictionaryModelDescription(modelType, typeof(object), typeof(object));\n            }\n\n            if (typeof(IEnumerable).IsAssignableFrom(modelType))\n            {\n                return GenerateCollectionModelDescription(modelType, typeof(object));\n            }\n\n            return GenerateComplexTypeModelDescription(modelType);\n        }\n\n        // Change this to provide different name for the member.\n        private static string GetMemberName(MemberInfo member, bool hasDataContractAttribute)\n        {\n            JsonPropertyAttribute jsonProperty = member.GetCustomAttribute<JsonPropertyAttribute>();\n            if (jsonProperty != null && !String.IsNullOrEmpty(jsonProperty.PropertyName))\n            {\n                return jsonProperty.PropertyName;\n            }\n\n            if (hasDataContractAttribute)\n            {\n                DataMemberAttribute dataMember = member.GetCustomAttribute<DataMemberAttribute>();\n                if (dataMember != null && !String.IsNullOrEmpty(dataMember.Name))\n                {\n                    return dataMember.Name;\n                }\n            }\n\n            return member.Name;\n        }\n\n        private static bool ShouldDisplayMember(MemberInfo member, bool hasDataContractAttribute)\n        {\n            JsonIgnoreAttribute jsonIgnore = member.GetCustomAttribute<JsonIgnoreAttribute>();\n            XmlIgnoreAttribute xmlIgnore = member.GetCustomAttribute<XmlIgnoreAttribute>();\n            IgnoreDataMemberAttribute ignoreDataMember = member.GetCustomAttribute<IgnoreDataMemberAttribute>();\n            NonSerializedAttribute nonSerialized = member.GetCustomAttribute<NonSerializedAttribute>();\n            ApiExplorerSettingsAttribute apiExplorerSetting = member.GetCustomAttribute<ApiExplorerSettingsAttribute>();\n\n            bool hasMemberAttribute = member.DeclaringType.IsEnum ?\n                member.GetCustomAttribute<EnumMemberAttribute>() != null :\n                member.GetCustomAttribute<DataMemberAttribute>() != null;\n\n            // Display member only if all the followings are true:\n            // no JsonIgnoreAttribute\n            // no XmlIgnoreAttribute\n            // no IgnoreDataMemberAttribute\n            // no NonSerializedAttribute\n            // no ApiExplorerSettingsAttribute with IgnoreApi set to true\n            // no DataContractAttribute without DataMemberAttribute or EnumMemberAttribute\n            return jsonIgnore == null &&\n                xmlIgnore == null &&\n                ignoreDataMember == null &&\n                nonSerialized == null &&\n                (apiExplorerSetting == null || !apiExplorerSetting.IgnoreApi) &&\n                (!hasDataContractAttribute || hasMemberAttribute);\n        }\n\n        private string CreateDefaultDocumentation(Type type)\n        {\n            string documentation;\n            if (DefaultTypeDocumentation.TryGetValue(type, out documentation))\n            {\n                return documentation;\n            }\n            if (DocumentationProvider != null)\n            {\n                documentation = DocumentationProvider.GetDocumentation(type);\n            }\n\n            return documentation;\n        }\n\n        private void GenerateAnnotations(MemberInfo property, ParameterDescription propertyModel)\n        {\n            List<ParameterAnnotation> annotations = new List<ParameterAnnotation>();\n\n            IEnumerable<Attribute> attributes = property.GetCustomAttributes();\n            foreach (Attribute attribute in attributes)\n            {\n                Func<object, string> textGenerator;\n                if (AnnotationTextGenerator.TryGetValue(attribute.GetType(), out textGenerator))\n                {\n                    annotations.Add(\n                        new ParameterAnnotation\n                        {\n                            AnnotationAttribute = attribute,\n                            Documentation = textGenerator(attribute)\n                        });\n                }\n            }\n\n            // Rearrange the annotations\n            annotations.Sort((x, y) =>\n            {\n                // Special-case RequiredAttribute so that it shows up on top\n                if (x.AnnotationAttribute is RequiredAttribute)\n                {\n                    return -1;\n                }\n                if (y.AnnotationAttribute is RequiredAttribute)\n                {\n                    return 1;\n                }\n\n                // Sort the rest based on alphabetic order of the documentation\n                return String.Compare(x.Documentation, y.Documentation, StringComparison.OrdinalIgnoreCase);\n            });\n\n            foreach (ParameterAnnotation annotation in annotations)\n            {\n                propertyModel.Annotations.Add(annotation);\n            }\n        }\n\n        private CollectionModelDescription GenerateCollectionModelDescription(Type modelType, Type elementType)\n        {\n            ModelDescription collectionModelDescription = GetOrCreateModelDescription(elementType);\n            if (collectionModelDescription != null)\n            {\n                return new CollectionModelDescription\n                {\n                    Name = ModelNameHelper.GetModelName(modelType),\n                    ModelType = modelType,\n                    ElementDescription = collectionModelDescription\n                };\n            }\n\n            return null;\n        }\n\n        private ModelDescription GenerateComplexTypeModelDescription(Type modelType)\n        {\n            ComplexTypeModelDescription complexModelDescription = new ComplexTypeModelDescription\n            {\n                Name = ModelNameHelper.GetModelName(modelType),\n                ModelType = modelType,\n                Documentation = CreateDefaultDocumentation(modelType)\n            };\n\n            GeneratedModels.Add(complexModelDescription.Name, complexModelDescription);\n            bool hasDataContractAttribute = modelType.GetCustomAttribute<DataContractAttribute>() != null;\n            PropertyInfo[] properties = modelType.GetProperties(BindingFlags.Public | BindingFlags.Instance);\n            foreach (PropertyInfo property in properties)\n            {\n                if (ShouldDisplayMember(property, hasDataContractAttribute))\n                {\n                    ParameterDescription propertyModel = new ParameterDescription\n                    {\n                        Name = GetMemberName(property, hasDataContractAttribute)\n                    };\n\n                    if (DocumentationProvider != null)\n                    {\n                        propertyModel.Documentation = DocumentationProvider.GetDocumentation(property);\n                    }\n\n                    GenerateAnnotations(property, propertyModel);\n                    complexModelDescription.Properties.Add(propertyModel);\n                    propertyModel.TypeDescription = GetOrCreateModelDescription(property.PropertyType);\n                }\n            }\n\n            FieldInfo[] fields = modelType.GetFields(BindingFlags.Public | BindingFlags.Instance);\n            foreach (FieldInfo field in fields)\n            {\n                if (ShouldDisplayMember(field, hasDataContractAttribute))\n                {\n                    ParameterDescription propertyModel = new ParameterDescription\n                    {\n                        Name = GetMemberName(field, hasDataContractAttribute)\n                    };\n\n                    if (DocumentationProvider != null)\n                    {\n                        propertyModel.Documentation = DocumentationProvider.GetDocumentation(field);\n                    }\n\n                    complexModelDescription.Properties.Add(propertyModel);\n                    propertyModel.TypeDescription = GetOrCreateModelDescription(field.FieldType);\n                }\n            }\n\n            return complexModelDescription;\n        }\n\n        private DictionaryModelDescription GenerateDictionaryModelDescription(Type modelType, Type keyType, Type valueType)\n        {\n            ModelDescription keyModelDescription = GetOrCreateModelDescription(keyType);\n            ModelDescription valueModelDescription = GetOrCreateModelDescription(valueType);\n\n            return new DictionaryModelDescription\n            {\n                Name = ModelNameHelper.GetModelName(modelType),\n                ModelType = modelType,\n                KeyModelDescription = keyModelDescription,\n                ValueModelDescription = valueModelDescription\n            };\n        }\n\n        private EnumTypeModelDescription GenerateEnumTypeModelDescription(Type modelType)\n        {\n            EnumTypeModelDescription enumDescription = new EnumTypeModelDescription\n            {\n                Name = ModelNameHelper.GetModelName(modelType),\n                ModelType = modelType,\n                Documentation = CreateDefaultDocumentation(modelType)\n            };\n            bool hasDataContractAttribute = modelType.GetCustomAttribute<DataContractAttribute>() != null;\n            foreach (FieldInfo field in modelType.GetFields(BindingFlags.Public | BindingFlags.Static))\n            {\n                if (ShouldDisplayMember(field, hasDataContractAttribute))\n                {\n                    EnumValueDescription enumValue = new EnumValueDescription\n                    {\n                        Name = field.Name,\n                        Value = field.GetRawConstantValue().ToString()\n                    };\n                    if (DocumentationProvider != null)\n                    {\n                        enumValue.Documentation = DocumentationProvider.GetDocumentation(field);\n                    }\n                    enumDescription.Values.Add(enumValue);\n                }\n            }\n            GeneratedModels.Add(enumDescription.Name, enumDescription);\n\n            return enumDescription;\n        }\n\n        private KeyValuePairModelDescription GenerateKeyValuePairModelDescription(Type modelType, Type keyType, Type valueType)\n        {\n            ModelDescription keyModelDescription = GetOrCreateModelDescription(keyType);\n            ModelDescription valueModelDescription = GetOrCreateModelDescription(valueType);\n\n            return new KeyValuePairModelDescription\n            {\n                Name = ModelNameHelper.GetModelName(modelType),\n                ModelType = modelType,\n                KeyModelDescription = keyModelDescription,\n                ValueModelDescription = valueModelDescription\n            };\n        }\n\n        private ModelDescription GenerateSimpleTypeModelDescription(Type modelType)\n        {\n            SimpleTypeModelDescription simpleModelDescription = new SimpleTypeModelDescription\n            {\n                Name = ModelNameHelper.GetModelName(modelType),\n                ModelType = modelType,\n                Documentation = CreateDefaultDocumentation(modelType)\n            };\n            GeneratedModels.Add(simpleModelDescription.Name, simpleModelDescription);\n\n            return simpleModelDescription;\n        }\n    }\n}"
  },
  {
    "path": "AlexaSkillsKit.Sample/Areas/HelpPage/ModelDescriptions/ModelNameAttribute.cs",
    "content": "using System;\n\nnamespace Sample.Areas.HelpPage.ModelDescriptions\n{\n    /// <summary>\n    /// Use this attribute to change the name of the <see cref=\"ModelDescription\"/> generated for a type.\n    /// </summary>\n    [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Enum, AllowMultiple = false, Inherited = false)]\n    public sealed class ModelNameAttribute : Attribute\n    {\n        public ModelNameAttribute(string name)\n        {\n            Name = name;\n        }\n\n        public string Name { get; private set; }\n    }\n}"
  },
  {
    "path": "AlexaSkillsKit.Sample/Areas/HelpPage/ModelDescriptions/ModelNameHelper.cs",
    "content": "using System;\nusing System.Globalization;\nusing System.Linq;\nusing System.Reflection;\n\nnamespace Sample.Areas.HelpPage.ModelDescriptions\n{\n    internal static class ModelNameHelper\n    {\n        // Modify this to provide custom model name mapping.\n        public static string GetModelName(Type type)\n        {\n            ModelNameAttribute modelNameAttribute = type.GetCustomAttribute<ModelNameAttribute>();\n            if (modelNameAttribute != null && !String.IsNullOrEmpty(modelNameAttribute.Name))\n            {\n                return modelNameAttribute.Name;\n            }\n\n            string modelName = type.Name;\n            if (type.IsGenericType)\n            {\n                // Format the generic type name to something like: GenericOfAgurment1AndArgument2\n                Type genericType = type.GetGenericTypeDefinition();\n                Type[] genericArguments = type.GetGenericArguments();\n                string genericTypeName = genericType.Name;\n\n                // Trim the generic parameter counts from the name\n                genericTypeName = genericTypeName.Substring(0, genericTypeName.IndexOf('`'));\n                string[] argumentTypeNames = genericArguments.Select(t => GetModelName(t)).ToArray();\n                modelName = String.Format(CultureInfo.InvariantCulture, \"{0}Of{1}\", genericTypeName, String.Join(\"And\", argumentTypeNames));\n            }\n\n            return modelName;\n        }\n    }\n}"
  },
  {
    "path": "AlexaSkillsKit.Sample/Areas/HelpPage/ModelDescriptions/ParameterAnnotation.cs",
    "content": "using System;\n\nnamespace Sample.Areas.HelpPage.ModelDescriptions\n{\n    public class ParameterAnnotation\n    {\n        public Attribute AnnotationAttribute { get; set; }\n\n        public string Documentation { get; set; }\n    }\n}"
  },
  {
    "path": "AlexaSkillsKit.Sample/Areas/HelpPage/ModelDescriptions/ParameterDescription.cs",
    "content": "using System.Collections.Generic;\nusing System.Collections.ObjectModel;\n\nnamespace Sample.Areas.HelpPage.ModelDescriptions\n{\n    public class ParameterDescription\n    {\n        public ParameterDescription()\n        {\n            Annotations = new Collection<ParameterAnnotation>();\n        }\n\n        public Collection<ParameterAnnotation> Annotations { get; private set; }\n\n        public string Documentation { get; set; }\n\n        public string Name { get; set; }\n\n        public ModelDescription TypeDescription { get; set; }\n    }\n}"
  },
  {
    "path": "AlexaSkillsKit.Sample/Areas/HelpPage/ModelDescriptions/SimpleTypeModelDescription.cs",
    "content": "namespace Sample.Areas.HelpPage.ModelDescriptions\n{\n    public class SimpleTypeModelDescription : ModelDescription\n    {\n    }\n}"
  },
  {
    "path": "AlexaSkillsKit.Sample/Areas/HelpPage/Models/HelpPageApiModel.cs",
    "content": "using System.Collections.Generic;\nusing System.Collections.ObjectModel;\nusing System.Net.Http.Headers;\nusing System.Web.Http.Description;\nusing Sample.Areas.HelpPage.ModelDescriptions;\n\nnamespace Sample.Areas.HelpPage.Models\n{\n    /// <summary>\n    /// The model that represents an API displayed on the help page.\n    /// </summary>\n    public class HelpPageApiModel\n    {\n        /// <summary>\n        /// Initializes a new instance of the <see cref=\"HelpPageApiModel\"/> class.\n        /// </summary>\n        public HelpPageApiModel()\n        {\n            UriParameters = new Collection<ParameterDescription>();\n            SampleRequests = new Dictionary<MediaTypeHeaderValue, object>();\n            SampleResponses = new Dictionary<MediaTypeHeaderValue, object>();\n            ErrorMessages = new Collection<string>();\n        }\n\n        /// <summary>\n        /// Gets or sets the <see cref=\"ApiDescription\"/> that describes the API.\n        /// </summary>\n        public ApiDescription ApiDescription { get; set; }\n\n        /// <summary>\n        /// Gets or sets the <see cref=\"ParameterDescription\"/> collection that describes the URI parameters for the API.\n        /// </summary>\n        public Collection<ParameterDescription> UriParameters { get; private set; }\n\n        /// <summary>\n        /// Gets or sets the documentation for the request.\n        /// </summary>\n        public string RequestDocumentation { get; set; }\n\n        /// <summary>\n        /// Gets or sets the <see cref=\"ModelDescription\"/> that describes the request body.\n        /// </summary>\n        public ModelDescription RequestModelDescription { get; set; }\n\n        /// <summary>\n        /// Gets the request body parameter descriptions.\n        /// </summary>\n        public IList<ParameterDescription> RequestBodyParameters\n        {\n            get\n            {\n                return GetParameterDescriptions(RequestModelDescription);\n            }\n        }\n\n        /// <summary>\n        /// Gets or sets the <see cref=\"ModelDescription\"/> that describes the resource.\n        /// </summary>\n        public ModelDescription ResourceDescription { get; set; }\n\n        /// <summary>\n        /// Gets the resource property descriptions.\n        /// </summary>\n        public IList<ParameterDescription> ResourceProperties\n        {\n            get\n            {\n                return GetParameterDescriptions(ResourceDescription);\n            }\n        }\n\n        /// <summary>\n        /// Gets the sample requests associated with the API.\n        /// </summary>\n        public IDictionary<MediaTypeHeaderValue, object> SampleRequests { get; private set; }\n\n        /// <summary>\n        /// Gets the sample responses associated with the API.\n        /// </summary>\n        public IDictionary<MediaTypeHeaderValue, object> SampleResponses { get; private set; }\n\n        /// <summary>\n        /// Gets the error messages associated with this model.\n        /// </summary>\n        public Collection<string> ErrorMessages { get; private set; }\n\n        private static IList<ParameterDescription> GetParameterDescriptions(ModelDescription modelDescription)\n        {\n            ComplexTypeModelDescription complexTypeModelDescription = modelDescription as ComplexTypeModelDescription;\n            if (complexTypeModelDescription != null)\n            {\n                return complexTypeModelDescription.Properties;\n            }\n\n            CollectionModelDescription collectionModelDescription = modelDescription as CollectionModelDescription;\n            if (collectionModelDescription != null)\n            {\n                complexTypeModelDescription = collectionModelDescription.ElementDescription as ComplexTypeModelDescription;\n                if (complexTypeModelDescription != null)\n                {\n                    return complexTypeModelDescription.Properties;\n                }\n            }\n\n            return null;\n        }\n    }\n}"
  },
  {
    "path": "AlexaSkillsKit.Sample/Areas/HelpPage/SampleGeneration/HelpPageSampleGenerator.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Collections.ObjectModel;\nusing System.ComponentModel;\nusing System.Diagnostics.CodeAnalysis;\nusing System.Globalization;\nusing System.IO;\nusing System.Linq;\nusing System.Net.Http;\nusing System.Net.Http.Formatting;\nusing System.Net.Http.Headers;\nusing System.Web.Http.Description;\nusing System.Xml.Linq;\nusing Newtonsoft.Json;\n\nnamespace Sample.Areas.HelpPage\n{\n    /// <summary>\n    /// This class will generate the samples for the help page.\n    /// </summary>\n    public class HelpPageSampleGenerator\n    {\n        /// <summary>\n        /// Initializes a new instance of the <see cref=\"HelpPageSampleGenerator\"/> class.\n        /// </summary>\n        public HelpPageSampleGenerator()\n        {\n            ActualHttpMessageTypes = new Dictionary<HelpPageSampleKey, Type>();\n            ActionSamples = new Dictionary<HelpPageSampleKey, object>();\n            SampleObjects = new Dictionary<Type, object>();\n            SampleObjectFactories = new List<Func<HelpPageSampleGenerator, Type, object>>\n            {\n                DefaultSampleObjectFactory,\n            };\n        }\n\n        /// <summary>\n        /// Gets CLR types that are used as the content of <see cref=\"HttpRequestMessage\"/> or <see cref=\"HttpResponseMessage\"/>.\n        /// </summary>\n        public IDictionary<HelpPageSampleKey, Type> ActualHttpMessageTypes { get; internal set; }\n\n        /// <summary>\n        /// Gets the objects that are used directly as samples for certain actions.\n        /// </summary>\n        public IDictionary<HelpPageSampleKey, object> ActionSamples { get; internal set; }\n\n        /// <summary>\n        /// Gets the objects that are serialized as samples by the supported formatters.\n        /// </summary>\n        public IDictionary<Type, object> SampleObjects { get; internal set; }\n\n        /// <summary>\n        /// Gets factories for the objects that the supported formatters will serialize as samples. Processed in order,\n        /// stopping when the factory successfully returns a non-<see langref=\"null\"/> object.\n        /// </summary>\n        /// <remarks>\n        /// Collection includes just <see cref=\"ObjectGenerator.GenerateObject(Type)\"/> initially. Use\n        /// <code>SampleObjectFactories.Insert(0, func)</code> to provide an override and\n        /// <code>SampleObjectFactories.Add(func)</code> to provide a fallback.</remarks>\n        [SuppressMessage(\"Microsoft.Design\", \"CA1006:DoNotNestGenericTypesInMemberSignatures\",\n            Justification = \"This is an appropriate nesting of generic types\")]\n        public IList<Func<HelpPageSampleGenerator, Type, object>> SampleObjectFactories { get; private set; }\n\n        /// <summary>\n        /// Gets the request body samples for a given <see cref=\"ApiDescription\"/>.\n        /// </summary>\n        /// <param name=\"api\">The <see cref=\"ApiDescription\"/>.</param>\n        /// <returns>The samples keyed by media type.</returns>\n        public IDictionary<MediaTypeHeaderValue, object> GetSampleRequests(ApiDescription api)\n        {\n            return GetSample(api, SampleDirection.Request);\n        }\n\n        /// <summary>\n        /// Gets the response body samples for a given <see cref=\"ApiDescription\"/>.\n        /// </summary>\n        /// <param name=\"api\">The <see cref=\"ApiDescription\"/>.</param>\n        /// <returns>The samples keyed by media type.</returns>\n        public IDictionary<MediaTypeHeaderValue, object> GetSampleResponses(ApiDescription api)\n        {\n            return GetSample(api, SampleDirection.Response);\n        }\n\n        /// <summary>\n        /// Gets the request or response body samples.\n        /// </summary>\n        /// <param name=\"api\">The <see cref=\"ApiDescription\"/>.</param>\n        /// <param name=\"sampleDirection\">The value indicating whether the sample is for a request or for a response.</param>\n        /// <returns>The samples keyed by media type.</returns>\n        public virtual IDictionary<MediaTypeHeaderValue, object> GetSample(ApiDescription api, SampleDirection sampleDirection)\n        {\n            if (api == null)\n            {\n                throw new ArgumentNullException(\"api\");\n            }\n            string controllerName = api.ActionDescriptor.ControllerDescriptor.ControllerName;\n            string actionName = api.ActionDescriptor.ActionName;\n            IEnumerable<string> parameterNames = api.ParameterDescriptions.Select(p => p.Name);\n            Collection<MediaTypeFormatter> formatters;\n            Type type = ResolveType(api, controllerName, actionName, parameterNames, sampleDirection, out formatters);\n            var samples = new Dictionary<MediaTypeHeaderValue, object>();\n\n            // Use the samples provided directly for actions\n            var actionSamples = GetAllActionSamples(controllerName, actionName, parameterNames, sampleDirection);\n            foreach (var actionSample in actionSamples)\n            {\n                samples.Add(actionSample.Key.MediaType, WrapSampleIfString(actionSample.Value));\n            }\n\n            // Do the sample generation based on formatters only if an action doesn't return an HttpResponseMessage.\n            // Here we cannot rely on formatters because we don't know what's in the HttpResponseMessage, it might not even use formatters.\n            if (type != null && !typeof(HttpResponseMessage).IsAssignableFrom(type))\n            {\n                object sampleObject = GetSampleObject(type);\n                foreach (var formatter in formatters)\n                {\n                    foreach (MediaTypeHeaderValue mediaType in formatter.SupportedMediaTypes)\n                    {\n                        if (!samples.ContainsKey(mediaType))\n                        {\n                            object sample = GetActionSample(controllerName, actionName, parameterNames, type, formatter, mediaType, sampleDirection);\n\n                            // If no sample found, try generate sample using formatter and sample object\n                            if (sample == null && sampleObject != null)\n                            {\n                                sample = WriteSampleObjectUsingFormatter(formatter, sampleObject, type, mediaType);\n                            }\n\n                            samples.Add(mediaType, WrapSampleIfString(sample));\n                        }\n                    }\n                }\n            }\n\n            return samples;\n        }\n\n        /// <summary>\n        /// Search for samples that are provided directly through <see cref=\"ActionSamples\"/>.\n        /// </summary>\n        /// <param name=\"controllerName\">Name of the controller.</param>\n        /// <param name=\"actionName\">Name of the action.</param>\n        /// <param name=\"parameterNames\">The parameter names.</param>\n        /// <param name=\"type\">The CLR type.</param>\n        /// <param name=\"formatter\">The formatter.</param>\n        /// <param name=\"mediaType\">The media type.</param>\n        /// <param name=\"sampleDirection\">The value indicating whether the sample is for a request or for a response.</param>\n        /// <returns>The sample that matches the parameters.</returns>\n        public virtual object GetActionSample(string controllerName, string actionName, IEnumerable<string> parameterNames, Type type, MediaTypeFormatter formatter, MediaTypeHeaderValue mediaType, SampleDirection sampleDirection)\n        {\n            object sample;\n\n            // First, try to get the sample provided for the specified mediaType, sampleDirection, controllerName, actionName and parameterNames.\n            // If not found, try to get the sample provided for the specified mediaType, sampleDirection, controllerName and actionName regardless of the parameterNames.\n            // If still not found, try to get the sample provided for the specified mediaType and type.\n            // Finally, try to get the sample provided for the specified mediaType.\n            if (ActionSamples.TryGetValue(new HelpPageSampleKey(mediaType, sampleDirection, controllerName, actionName, parameterNames), out sample) ||\n                ActionSamples.TryGetValue(new HelpPageSampleKey(mediaType, sampleDirection, controllerName, actionName, new[] { \"*\" }), out sample) ||\n                ActionSamples.TryGetValue(new HelpPageSampleKey(mediaType, type), out sample) ||\n                ActionSamples.TryGetValue(new HelpPageSampleKey(mediaType), out sample))\n            {\n                return sample;\n            }\n\n            return null;\n        }\n\n        /// <summary>\n        /// Gets the sample object that will be serialized by the formatters. \n        /// First, it will look at the <see cref=\"SampleObjects\"/>. If no sample object is found, it will try to create\n        /// one using <see cref=\"DefaultSampleObjectFactory\"/> (which wraps an <see cref=\"ObjectGenerator\"/>) and other\n        /// factories in <see cref=\"SampleObjectFactories\"/>.\n        /// </summary>\n        /// <param name=\"type\">The type.</param>\n        /// <returns>The sample object.</returns>\n        [SuppressMessage(\"Microsoft.Design\", \"CA1031:DoNotCatchGeneralExceptionTypes\",\n            Justification = \"Even if all items in SampleObjectFactories throw, problem will be visible as missing sample.\")]\n        public virtual object GetSampleObject(Type type)\n        {\n            object sampleObject;\n\n            if (!SampleObjects.TryGetValue(type, out sampleObject))\n            {\n                // No specific object available, try our factories.\n                foreach (Func<HelpPageSampleGenerator, Type, object> factory in SampleObjectFactories)\n                {\n                    if (factory == null)\n                    {\n                        continue;\n                    }\n\n                    try\n                    {\n                        sampleObject = factory(this, type);\n                        if (sampleObject != null)\n                        {\n                            break;\n                        }\n                    }\n                    catch\n                    {\n                        // Ignore any problems encountered in the factory; go on to the next one (if any).\n                    }\n                }\n            }\n\n            return sampleObject;\n        }\n\n        /// <summary>\n        /// Resolves the actual type of <see cref=\"System.Net.Http.ObjectContent{T}\"/> passed to the <see cref=\"System.Net.Http.HttpRequestMessage\"/> in an action.\n        /// </summary>\n        /// <param name=\"api\">The <see cref=\"ApiDescription\"/>.</param>\n        /// <returns>The type.</returns>\n        public virtual Type ResolveHttpRequestMessageType(ApiDescription api)\n        {\n            string controllerName = api.ActionDescriptor.ControllerDescriptor.ControllerName;\n            string actionName = api.ActionDescriptor.ActionName;\n            IEnumerable<string> parameterNames = api.ParameterDescriptions.Select(p => p.Name);\n            Collection<MediaTypeFormatter> formatters;\n            return ResolveType(api, controllerName, actionName, parameterNames, SampleDirection.Request, out formatters);\n        }\n\n        /// <summary>\n        /// Resolves the type of the action parameter or return value when <see cref=\"HttpRequestMessage\"/> or <see cref=\"HttpResponseMessage\"/> is used.\n        /// </summary>\n        /// <param name=\"api\">The <see cref=\"ApiDescription\"/>.</param>\n        /// <param name=\"controllerName\">Name of the controller.</param>\n        /// <param name=\"actionName\">Name of the action.</param>\n        /// <param name=\"parameterNames\">The parameter names.</param>\n        /// <param name=\"sampleDirection\">The value indicating whether the sample is for a request or a response.</param>\n        /// <param name=\"formatters\">The formatters.</param>\n        [SuppressMessage(\"Microsoft.Design\", \"CA1021:AvoidOutParameters\", Justification = \"This is only used in advanced scenarios.\")]\n        public virtual Type ResolveType(ApiDescription api, string controllerName, string actionName, IEnumerable<string> parameterNames, SampleDirection sampleDirection, out Collection<MediaTypeFormatter> formatters)\n        {\n            if (!Enum.IsDefined(typeof(SampleDirection), sampleDirection))\n            {\n                throw new InvalidEnumArgumentException(\"sampleDirection\", (int)sampleDirection, typeof(SampleDirection));\n            }\n            if (api == null)\n            {\n                throw new ArgumentNullException(\"api\");\n            }\n            Type type;\n            if (ActualHttpMessageTypes.TryGetValue(new HelpPageSampleKey(sampleDirection, controllerName, actionName, parameterNames), out type) ||\n                ActualHttpMessageTypes.TryGetValue(new HelpPageSampleKey(sampleDirection, controllerName, actionName, new[] { \"*\" }), out type))\n            {\n                // Re-compute the supported formatters based on type\n                Collection<MediaTypeFormatter> newFormatters = new Collection<MediaTypeFormatter>();\n                foreach (var formatter in api.ActionDescriptor.Configuration.Formatters)\n                {\n                    if (IsFormatSupported(sampleDirection, formatter, type))\n                    {\n                        newFormatters.Add(formatter);\n                    }\n                }\n                formatters = newFormatters;\n            }\n            else\n            {\n                switch (sampleDirection)\n                {\n                    case SampleDirection.Request:\n                        ApiParameterDescription requestBodyParameter = api.ParameterDescriptions.FirstOrDefault(p => p.Source == ApiParameterSource.FromBody);\n                        type = requestBodyParameter == null ? null : requestBodyParameter.ParameterDescriptor.ParameterType;\n                        formatters = api.SupportedRequestBodyFormatters;\n                        break;\n                    case SampleDirection.Response:\n                    default:\n                        type = api.ResponseDescription.ResponseType ?? api.ResponseDescription.DeclaredType;\n                        formatters = api.SupportedResponseFormatters;\n                        break;\n                }\n            }\n\n            return type;\n        }\n\n        /// <summary>\n        /// Writes the sample object using formatter.\n        /// </summary>\n        /// <param name=\"formatter\">The formatter.</param>\n        /// <param name=\"value\">The value.</param>\n        /// <param name=\"type\">The type.</param>\n        /// <param name=\"mediaType\">Type of the media.</param>\n        /// <returns></returns>\n        [SuppressMessage(\"Microsoft.Design\", \"CA1031:DoNotCatchGeneralExceptionTypes\", Justification = \"The exception is recorded as InvalidSample.\")]\n        public virtual object WriteSampleObjectUsingFormatter(MediaTypeFormatter formatter, object value, Type type, MediaTypeHeaderValue mediaType)\n        {\n            if (formatter == null)\n            {\n                throw new ArgumentNullException(\"formatter\");\n            }\n            if (mediaType == null)\n            {\n                throw new ArgumentNullException(\"mediaType\");\n            }\n\n            object sample = String.Empty;\n            MemoryStream ms = null;\n            HttpContent content = null;\n            try\n            {\n                if (formatter.CanWriteType(type))\n                {\n                    ms = new MemoryStream();\n                    content = new ObjectContent(type, value, formatter, mediaType);\n                    formatter.WriteToStreamAsync(type, value, ms, content, null).Wait();\n                    ms.Position = 0;\n                    StreamReader reader = new StreamReader(ms);\n                    string serializedSampleString = reader.ReadToEnd();\n                    if (mediaType.MediaType.ToUpperInvariant().Contains(\"XML\"))\n                    {\n                        serializedSampleString = TryFormatXml(serializedSampleString);\n                    }\n                    else if (mediaType.MediaType.ToUpperInvariant().Contains(\"JSON\"))\n                    {\n                        serializedSampleString = TryFormatJson(serializedSampleString);\n                    }\n\n                    sample = new TextSample(serializedSampleString);\n                }\n                else\n                {\n                    sample = new InvalidSample(String.Format(\n                        CultureInfo.CurrentCulture,\n                        \"Failed to generate the sample for media type '{0}'. Cannot use formatter '{1}' to write type '{2}'.\",\n                        mediaType,\n                        formatter.GetType().Name,\n                        type.Name));\n                }\n            }\n            catch (Exception e)\n            {\n                sample = new InvalidSample(String.Format(\n                    CultureInfo.CurrentCulture,\n                    \"An exception has occurred while using the formatter '{0}' to generate sample for media type '{1}'. Exception message: {2}\",\n                    formatter.GetType().Name,\n                    mediaType.MediaType,\n                    UnwrapException(e).Message));\n            }\n            finally\n            {\n                if (ms != null)\n                {\n                    ms.Dispose();\n                }\n                if (content != null)\n                {\n                    content.Dispose();\n                }\n            }\n\n            return sample;\n        }\n\n        internal static Exception UnwrapException(Exception exception)\n        {\n            AggregateException aggregateException = exception as AggregateException;\n            if (aggregateException != null)\n            {\n                return aggregateException.Flatten().InnerException;\n            }\n            return exception;\n        }\n\n        // Default factory for sample objects\n        private static object DefaultSampleObjectFactory(HelpPageSampleGenerator sampleGenerator, Type type)\n        {\n            // Try to create a default sample object\n            ObjectGenerator objectGenerator = new ObjectGenerator();\n            return objectGenerator.GenerateObject(type);\n        }\n\n        [SuppressMessage(\"Microsoft.Design\", \"CA1031:DoNotCatchGeneralExceptionTypes\", Justification = \"Handling the failure by returning the original string.\")]\n        private static string TryFormatJson(string str)\n        {\n            try\n            {\n                object parsedJson = JsonConvert.DeserializeObject(str);\n                return JsonConvert.SerializeObject(parsedJson, Formatting.Indented);\n            }\n            catch\n            {\n                // can't parse JSON, return the original string\n                return str;\n            }\n        }\n\n        [SuppressMessage(\"Microsoft.Design\", \"CA1031:DoNotCatchGeneralExceptionTypes\", Justification = \"Handling the failure by returning the original string.\")]\n        private static string TryFormatXml(string str)\n        {\n            try\n            {\n                XDocument xml = XDocument.Parse(str);\n                return xml.ToString();\n            }\n            catch\n            {\n                // can't parse XML, return the original string\n                return str;\n            }\n        }\n\n        private static bool IsFormatSupported(SampleDirection sampleDirection, MediaTypeFormatter formatter, Type type)\n        {\n            switch (sampleDirection)\n            {\n                case SampleDirection.Request:\n                    return formatter.CanReadType(type);\n                case SampleDirection.Response:\n                    return formatter.CanWriteType(type);\n            }\n            return false;\n        }\n\n        private IEnumerable<KeyValuePair<HelpPageSampleKey, object>> GetAllActionSamples(string controllerName, string actionName, IEnumerable<string> parameterNames, SampleDirection sampleDirection)\n        {\n            HashSet<string> parameterNamesSet = new HashSet<string>(parameterNames, StringComparer.OrdinalIgnoreCase);\n            foreach (var sample in ActionSamples)\n            {\n                HelpPageSampleKey sampleKey = sample.Key;\n                if (String.Equals(controllerName, sampleKey.ControllerName, StringComparison.OrdinalIgnoreCase) &&\n                    String.Equals(actionName, sampleKey.ActionName, StringComparison.OrdinalIgnoreCase) &&\n                    (sampleKey.ParameterNames.SetEquals(new[] { \"*\" }) || parameterNamesSet.SetEquals(sampleKey.ParameterNames)) &&\n                    sampleDirection == sampleKey.SampleDirection)\n                {\n                    yield return sample;\n                }\n            }\n        }\n\n        private static object WrapSampleIfString(object sample)\n        {\n            string stringSample = sample as string;\n            if (stringSample != null)\n            {\n                return new TextSample(stringSample);\n            }\n\n            return sample;\n        }\n    }\n}"
  },
  {
    "path": "AlexaSkillsKit.Sample/Areas/HelpPage/SampleGeneration/HelpPageSampleKey.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Net.Http.Headers;\n\nnamespace Sample.Areas.HelpPage\n{\n    /// <summary>\n    /// This is used to identify the place where the sample should be applied.\n    /// </summary>\n    public class HelpPageSampleKey\n    {\n        /// <summary>\n        /// Creates a new <see cref=\"HelpPageSampleKey\"/> based on media type.\n        /// </summary>\n        /// <param name=\"mediaType\">The media type.</param>\n        public HelpPageSampleKey(MediaTypeHeaderValue mediaType)\n        {\n            if (mediaType == null)\n            {\n                throw new ArgumentNullException(\"mediaType\");\n            }\n\n            ActionName = String.Empty;\n            ControllerName = String.Empty;\n            MediaType = mediaType;\n            ParameterNames = new HashSet<string>(StringComparer.OrdinalIgnoreCase);\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"HelpPageSampleKey\"/> based on media type and CLR type.\n        /// </summary>\n        /// <param name=\"mediaType\">The media type.</param>\n        /// <param name=\"type\">The CLR type.</param>\n        public HelpPageSampleKey(MediaTypeHeaderValue mediaType, Type type)\n            : this(mediaType)\n        {\n            if (type == null)\n            {\n                throw new ArgumentNullException(\"type\");\n            }\n\n            ParameterType = type;\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"HelpPageSampleKey\"/> based on <see cref=\"SampleDirection\"/>, controller name, action name and parameter names.\n        /// </summary>\n        /// <param name=\"sampleDirection\">The <see cref=\"SampleDirection\"/>.</param>\n        /// <param name=\"controllerName\">Name of the controller.</param>\n        /// <param name=\"actionName\">Name of the action.</param>\n        /// <param name=\"parameterNames\">The parameter names.</param>\n        public HelpPageSampleKey(SampleDirection sampleDirection, string controllerName, string actionName, IEnumerable<string> parameterNames)\n        {\n            if (!Enum.IsDefined(typeof(SampleDirection), sampleDirection))\n            {\n                throw new InvalidEnumArgumentException(\"sampleDirection\", (int)sampleDirection, typeof(SampleDirection));\n            }\n            if (controllerName == null)\n            {\n                throw new ArgumentNullException(\"controllerName\");\n            }\n            if (actionName == null)\n            {\n                throw new ArgumentNullException(\"actionName\");\n            }\n            if (parameterNames == null)\n            {\n                throw new ArgumentNullException(\"parameterNames\");\n            }\n\n            ControllerName = controllerName;\n            ActionName = actionName;\n            ParameterNames = new HashSet<string>(parameterNames, StringComparer.OrdinalIgnoreCase);\n            SampleDirection = sampleDirection;\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"HelpPageSampleKey\"/> based on media type, <see cref=\"SampleDirection\"/>, controller name, action name and parameter names.\n        /// </summary>\n        /// <param name=\"mediaType\">The media type.</param>\n        /// <param name=\"sampleDirection\">The <see cref=\"SampleDirection\"/>.</param>\n        /// <param name=\"controllerName\">Name of the controller.</param>\n        /// <param name=\"actionName\">Name of the action.</param>\n        /// <param name=\"parameterNames\">The parameter names.</param>\n        public HelpPageSampleKey(MediaTypeHeaderValue mediaType, SampleDirection sampleDirection, string controllerName, string actionName, IEnumerable<string> parameterNames)\n            : this(sampleDirection, controllerName, actionName, parameterNames)\n        {\n            if (mediaType == null)\n            {\n                throw new ArgumentNullException(\"mediaType\");\n            }\n\n            MediaType = mediaType;\n        }\n\n        /// <summary>\n        /// Gets the name of the controller.\n        /// </summary>\n        /// <value>\n        /// The name of the controller.\n        /// </value>\n        public string ControllerName { get; private set; }\n\n        /// <summary>\n        /// Gets the name of the action.\n        /// </summary>\n        /// <value>\n        /// The name of the action.\n        /// </value>\n        public string ActionName { get; private set; }\n\n        /// <summary>\n        /// Gets the media type.\n        /// </summary>\n        /// <value>\n        /// The media type.\n        /// </value>\n        public MediaTypeHeaderValue MediaType { get; private set; }\n\n        /// <summary>\n        /// Gets the parameter names.\n        /// </summary>\n        public HashSet<string> ParameterNames { get; private set; }\n\n        public Type ParameterType { get; private set; }\n\n        /// <summary>\n        /// Gets the <see cref=\"SampleDirection\"/>.\n        /// </summary>\n        public SampleDirection? SampleDirection { get; private set; }\n\n        public override bool Equals(object obj)\n        {\n            HelpPageSampleKey otherKey = obj as HelpPageSampleKey;\n            if (otherKey == null)\n            {\n                return false;\n            }\n\n            return String.Equals(ControllerName, otherKey.ControllerName, StringComparison.OrdinalIgnoreCase) &&\n                String.Equals(ActionName, otherKey.ActionName, StringComparison.OrdinalIgnoreCase) &&\n                (MediaType == otherKey.MediaType || (MediaType != null && MediaType.Equals(otherKey.MediaType))) &&\n                ParameterType == otherKey.ParameterType &&\n                SampleDirection == otherKey.SampleDirection &&\n                ParameterNames.SetEquals(otherKey.ParameterNames);\n        }\n\n        public override int GetHashCode()\n        {\n            int hashCode = ControllerName.ToUpperInvariant().GetHashCode() ^ ActionName.ToUpperInvariant().GetHashCode();\n            if (MediaType != null)\n            {\n                hashCode ^= MediaType.GetHashCode();\n            }\n            if (SampleDirection != null)\n            {\n                hashCode ^= SampleDirection.GetHashCode();\n            }\n            if (ParameterType != null)\n            {\n                hashCode ^= ParameterType.GetHashCode();\n            }\n            foreach (string parameterName in ParameterNames)\n            {\n                hashCode ^= parameterName.ToUpperInvariant().GetHashCode();\n            }\n\n            return hashCode;\n        }\n    }\n}\n"
  },
  {
    "path": "AlexaSkillsKit.Sample/Areas/HelpPage/SampleGeneration/ImageSample.cs",
    "content": "using System;\n\nnamespace Sample.Areas.HelpPage\n{\n    /// <summary>\n    /// This represents an image sample on the help page. There's a display template named ImageSample associated with this class.\n    /// </summary>\n    public class ImageSample\n    {\n        /// <summary>\n        /// Initializes a new instance of the <see cref=\"ImageSample\"/> class.\n        /// </summary>\n        /// <param name=\"src\">The URL of an image.</param>\n        public ImageSample(string src)\n        {\n            if (src == null)\n            {\n                throw new ArgumentNullException(\"src\");\n            }\n            Src = src;\n        }\n\n        public string Src { get; private set; }\n\n        public override bool Equals(object obj)\n        {\n            ImageSample other = obj as ImageSample;\n            return other != null && Src == other.Src;\n        }\n\n        public override int GetHashCode()\n        {\n            return Src.GetHashCode();\n        }\n\n        public override string ToString()\n        {\n            return Src;\n        }\n    }\n}"
  },
  {
    "path": "AlexaSkillsKit.Sample/Areas/HelpPage/SampleGeneration/InvalidSample.cs",
    "content": "using System;\n\nnamespace Sample.Areas.HelpPage\n{\n    /// <summary>\n    /// This represents an invalid sample on the help page. There's a display template named InvalidSample associated with this class.\n    /// </summary>\n    public class InvalidSample\n    {\n        public InvalidSample(string errorMessage)\n        {\n            if (errorMessage == null)\n            {\n                throw new ArgumentNullException(\"errorMessage\");\n            }\n            ErrorMessage = errorMessage;\n        }\n\n        public string ErrorMessage { get; private set; }\n\n        public override bool Equals(object obj)\n        {\n            InvalidSample other = obj as InvalidSample;\n            return other != null && ErrorMessage == other.ErrorMessage;\n        }\n\n        public override int GetHashCode()\n        {\n            return ErrorMessage.GetHashCode();\n        }\n\n        public override string ToString()\n        {\n            return ErrorMessage;\n        }\n    }\n}"
  },
  {
    "path": "AlexaSkillsKit.Sample/Areas/HelpPage/SampleGeneration/ObjectGenerator.cs",
    "content": "using System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Diagnostics.CodeAnalysis;\nusing System.Globalization;\nusing System.Linq;\nusing System.Reflection;\n\nnamespace Sample.Areas.HelpPage\n{\n    /// <summary>\n    /// This class will create an object of a given type and populate it with sample data.\n    /// </summary>\n    public class ObjectGenerator\n    {\n        internal const int DefaultCollectionSize = 2;\n        private readonly SimpleTypeObjectGenerator SimpleObjectGenerator = new SimpleTypeObjectGenerator();\n\n        /// <summary>\n        /// Generates an object for a given type. The type needs to be public, have a public default constructor and settable public properties/fields. Currently it supports the following types:\n        /// Simple types: <see cref=\"int\"/>, <see cref=\"string\"/>, <see cref=\"Enum\"/>, <see cref=\"DateTime\"/>, <see cref=\"Uri\"/>, etc.\n        /// Complex types: POCO types.\n        /// Nullables: <see cref=\"Nullable{T}\"/>.\n        /// Arrays: arrays of simple types or complex types.\n        /// Key value pairs: <see cref=\"KeyValuePair{TKey,TValue}\"/>\n        /// Tuples: <see cref=\"Tuple{T1}\"/>, <see cref=\"Tuple{T1,T2}\"/>, etc\n        /// Dictionaries: <see cref=\"IDictionary{TKey,TValue}\"/> or anything deriving from <see cref=\"IDictionary{TKey,TValue}\"/>.\n        /// Collections: <see cref=\"IList{T}\"/>, <see cref=\"IEnumerable{T}\"/>, <see cref=\"ICollection{T}\"/>, <see cref=\"IList\"/>, <see cref=\"IEnumerable\"/>, <see cref=\"ICollection\"/> or anything deriving from <see cref=\"ICollection{T}\"/> or <see cref=\"IList\"/>.\n        /// Queryables: <see cref=\"IQueryable\"/>, <see cref=\"IQueryable{T}\"/>.\n        /// </summary>\n        /// <param name=\"type\">The type.</param>\n        /// <returns>An object of the given type.</returns>\n        public object GenerateObject(Type type)\n        {\n            return GenerateObject(type, new Dictionary<Type, object>());\n        }\n\n        [SuppressMessage(\"Microsoft.Design\", \"CA1031:DoNotCatchGeneralExceptionTypes\", Justification = \"Here we just want to return null if anything goes wrong.\")]\n        private object GenerateObject(Type type, Dictionary<Type, object> createdObjectReferences)\n        {\n            try\n            {\n                if (SimpleTypeObjectGenerator.CanGenerateObject(type))\n                {\n                    return SimpleObjectGenerator.GenerateObject(type);\n                }\n\n                if (type.IsArray)\n                {\n                    return GenerateArray(type, DefaultCollectionSize, createdObjectReferences);\n                }\n\n                if (type.IsGenericType)\n                {\n                    return GenerateGenericType(type, DefaultCollectionSize, createdObjectReferences);\n                }\n\n                if (type == typeof(IDictionary))\n                {\n                    return GenerateDictionary(typeof(Hashtable), DefaultCollectionSize, createdObjectReferences);\n                }\n\n                if (typeof(IDictionary).IsAssignableFrom(type))\n                {\n                    return GenerateDictionary(type, DefaultCollectionSize, createdObjectReferences);\n                }\n\n                if (type == typeof(IList) ||\n                    type == typeof(IEnumerable) ||\n                    type == typeof(ICollection))\n                {\n                    return GenerateCollection(typeof(ArrayList), DefaultCollectionSize, createdObjectReferences);\n                }\n\n                if (typeof(IList).IsAssignableFrom(type))\n                {\n                    return GenerateCollection(type, DefaultCollectionSize, createdObjectReferences);\n                }\n\n                if (type == typeof(IQueryable))\n                {\n                    return GenerateQueryable(type, DefaultCollectionSize, createdObjectReferences);\n                }\n\n                if (type.IsEnum)\n                {\n                    return GenerateEnum(type);\n                }\n\n                if (type.IsPublic || type.IsNestedPublic)\n                {\n                    return GenerateComplexObject(type, createdObjectReferences);\n                }\n            }\n            catch\n            {\n                // Returns null if anything fails\n                return null;\n            }\n\n            return null;\n        }\n\n        private static object GenerateGenericType(Type type, int collectionSize, Dictionary<Type, object> createdObjectReferences)\n        {\n            Type genericTypeDefinition = type.GetGenericTypeDefinition();\n            if (genericTypeDefinition == typeof(Nullable<>))\n            {\n                return GenerateNullable(type, createdObjectReferences);\n            }\n\n            if (genericTypeDefinition == typeof(KeyValuePair<,>))\n            {\n                return GenerateKeyValuePair(type, createdObjectReferences);\n            }\n\n            if (IsTuple(genericTypeDefinition))\n            {\n                return GenerateTuple(type, createdObjectReferences);\n            }\n\n            Type[] genericArguments = type.GetGenericArguments();\n            if (genericArguments.Length == 1)\n            {\n                if (genericTypeDefinition == typeof(IList<>) ||\n                    genericTypeDefinition == typeof(IEnumerable<>) ||\n                    genericTypeDefinition == typeof(ICollection<>))\n                {\n                    Type collectionType = typeof(List<>).MakeGenericType(genericArguments);\n                    return GenerateCollection(collectionType, collectionSize, createdObjectReferences);\n                }\n\n                if (genericTypeDefinition == typeof(IQueryable<>))\n                {\n                    return GenerateQueryable(type, collectionSize, createdObjectReferences);\n                }\n\n                Type closedCollectionType = typeof(ICollection<>).MakeGenericType(genericArguments[0]);\n                if (closedCollectionType.IsAssignableFrom(type))\n                {\n                    return GenerateCollection(type, collectionSize, createdObjectReferences);\n                }\n            }\n\n            if (genericArguments.Length == 2)\n            {\n                if (genericTypeDefinition == typeof(IDictionary<,>))\n                {\n                    Type dictionaryType = typeof(Dictionary<,>).MakeGenericType(genericArguments);\n                    return GenerateDictionary(dictionaryType, collectionSize, createdObjectReferences);\n                }\n\n                Type closedDictionaryType = typeof(IDictionary<,>).MakeGenericType(genericArguments[0], genericArguments[1]);\n                if (closedDictionaryType.IsAssignableFrom(type))\n                {\n                    return GenerateDictionary(type, collectionSize, createdObjectReferences);\n                }\n            }\n\n            if (type.IsPublic || type.IsNestedPublic)\n            {\n                return GenerateComplexObject(type, createdObjectReferences);\n            }\n\n            return null;\n        }\n\n        private static object GenerateTuple(Type type, Dictionary<Type, object> createdObjectReferences)\n        {\n            Type[] genericArgs = type.GetGenericArguments();\n            object[] parameterValues = new object[genericArgs.Length];\n            bool failedToCreateTuple = true;\n            ObjectGenerator objectGenerator = new ObjectGenerator();\n            for (int i = 0; i < genericArgs.Length; i++)\n            {\n                parameterValues[i] = objectGenerator.GenerateObject(genericArgs[i], createdObjectReferences);\n                failedToCreateTuple &= parameterValues[i] == null;\n            }\n            if (failedToCreateTuple)\n            {\n                return null;\n            }\n            object result = Activator.CreateInstance(type, parameterValues);\n            return result;\n        }\n\n        private static bool IsTuple(Type genericTypeDefinition)\n        {\n            return genericTypeDefinition == typeof(Tuple<>) ||\n                genericTypeDefinition == typeof(Tuple<,>) ||\n                genericTypeDefinition == typeof(Tuple<,,>) ||\n                genericTypeDefinition == typeof(Tuple<,,,>) ||\n                genericTypeDefinition == typeof(Tuple<,,,,>) ||\n                genericTypeDefinition == typeof(Tuple<,,,,,>) ||\n                genericTypeDefinition == typeof(Tuple<,,,,,,>) ||\n                genericTypeDefinition == typeof(Tuple<,,,,,,,>);\n        }\n\n        private static object GenerateKeyValuePair(Type keyValuePairType, Dictionary<Type, object> createdObjectReferences)\n        {\n            Type[] genericArgs = keyValuePairType.GetGenericArguments();\n            Type typeK = genericArgs[0];\n            Type typeV = genericArgs[1];\n            ObjectGenerator objectGenerator = new ObjectGenerator();\n            object keyObject = objectGenerator.GenerateObject(typeK, createdObjectReferences);\n            object valueObject = objectGenerator.GenerateObject(typeV, createdObjectReferences);\n            if (keyObject == null && valueObject == null)\n            {\n                // Failed to create key and values\n                return null;\n            }\n            object result = Activator.CreateInstance(keyValuePairType, keyObject, valueObject);\n            return result;\n        }\n\n        private static object GenerateArray(Type arrayType, int size, Dictionary<Type, object> createdObjectReferences)\n        {\n            Type type = arrayType.GetElementType();\n            Array result = Array.CreateInstance(type, size);\n            bool areAllElementsNull = true;\n            ObjectGenerator objectGenerator = new ObjectGenerator();\n            for (int i = 0; i < size; i++)\n            {\n                object element = objectGenerator.GenerateObject(type, createdObjectReferences);\n                result.SetValue(element, i);\n                areAllElementsNull &= element == null;\n            }\n\n            if (areAllElementsNull)\n            {\n                return null;\n            }\n\n            return result;\n        }\n\n        private static object GenerateDictionary(Type dictionaryType, int size, Dictionary<Type, object> createdObjectReferences)\n        {\n            Type typeK = typeof(object);\n            Type typeV = typeof(object);\n            if (dictionaryType.IsGenericType)\n            {\n                Type[] genericArgs = dictionaryType.GetGenericArguments();\n                typeK = genericArgs[0];\n                typeV = genericArgs[1];\n            }\n\n            object result = Activator.CreateInstance(dictionaryType);\n            MethodInfo addMethod = dictionaryType.GetMethod(\"Add\") ?? dictionaryType.GetMethod(\"TryAdd\");\n            MethodInfo containsMethod = dictionaryType.GetMethod(\"Contains\") ?? dictionaryType.GetMethod(\"ContainsKey\");\n            ObjectGenerator objectGenerator = new ObjectGenerator();\n            for (int i = 0; i < size; i++)\n            {\n                object newKey = objectGenerator.GenerateObject(typeK, createdObjectReferences);\n                if (newKey == null)\n                {\n                    // Cannot generate a valid key\n                    return null;\n                }\n\n                bool containsKey = (bool)containsMethod.Invoke(result, new object[] { newKey });\n                if (!containsKey)\n                {\n                    object newValue = objectGenerator.GenerateObject(typeV, createdObjectReferences);\n                    addMethod.Invoke(result, new object[] { newKey, newValue });\n                }\n            }\n\n            return result;\n        }\n\n        private static object GenerateEnum(Type enumType)\n        {\n            Array possibleValues = Enum.GetValues(enumType);\n            if (possibleValues.Length > 0)\n            {\n                return possibleValues.GetValue(0);\n            }\n            return null;\n        }\n\n        private static object GenerateQueryable(Type queryableType, int size, Dictionary<Type, object> createdObjectReferences)\n        {\n            bool isGeneric = queryableType.IsGenericType;\n            object list;\n            if (isGeneric)\n            {\n                Type listType = typeof(List<>).MakeGenericType(queryableType.GetGenericArguments());\n                list = GenerateCollection(listType, size, createdObjectReferences);\n            }\n            else\n            {\n                list = GenerateArray(typeof(object[]), size, createdObjectReferences);\n            }\n            if (list == null)\n            {\n                return null;\n            }\n            if (isGeneric)\n            {\n                Type argumentType = typeof(IEnumerable<>).MakeGenericType(queryableType.GetGenericArguments());\n                MethodInfo asQueryableMethod = typeof(Queryable).GetMethod(\"AsQueryable\", new[] { argumentType });\n                return asQueryableMethod.Invoke(null, new[] { list });\n            }\n\n            return Queryable.AsQueryable((IEnumerable)list);\n        }\n\n        private static object GenerateCollection(Type collectionType, int size, Dictionary<Type, object> createdObjectReferences)\n        {\n            Type type = collectionType.IsGenericType ?\n                collectionType.GetGenericArguments()[0] :\n                typeof(object);\n            object result = Activator.CreateInstance(collectionType);\n            MethodInfo addMethod = collectionType.GetMethod(\"Add\");\n            bool areAllElementsNull = true;\n            ObjectGenerator objectGenerator = new ObjectGenerator();\n            for (int i = 0; i < size; i++)\n            {\n                object element = objectGenerator.GenerateObject(type, createdObjectReferences);\n                addMethod.Invoke(result, new object[] { element });\n                areAllElementsNull &= element == null;\n            }\n\n            if (areAllElementsNull)\n            {\n                return null;\n            }\n\n            return result;\n        }\n\n        private static object GenerateNullable(Type nullableType, Dictionary<Type, object> createdObjectReferences)\n        {\n            Type type = nullableType.GetGenericArguments()[0];\n            ObjectGenerator objectGenerator = new ObjectGenerator();\n            return objectGenerator.GenerateObject(type, createdObjectReferences);\n        }\n\n        private static object GenerateComplexObject(Type type, Dictionary<Type, object> createdObjectReferences)\n        {\n            object result = null;\n\n            if (createdObjectReferences.TryGetValue(type, out result))\n            {\n                // The object has been created already, just return it. This will handle the circular reference case.\n                return result;\n            }\n\n            if (type.IsValueType)\n            {\n                result = Activator.CreateInstance(type);\n            }\n            else\n            {\n                ConstructorInfo defaultCtor = type.GetConstructor(Type.EmptyTypes);\n                if (defaultCtor == null)\n                {\n                    // Cannot instantiate the type because it doesn't have a default constructor\n                    return null;\n                }\n\n                result = defaultCtor.Invoke(new object[0]);\n            }\n            createdObjectReferences.Add(type, result);\n            SetPublicProperties(type, result, createdObjectReferences);\n            SetPublicFields(type, result, createdObjectReferences);\n            return result;\n        }\n\n        private static void SetPublicProperties(Type type, object obj, Dictionary<Type, object> createdObjectReferences)\n        {\n            PropertyInfo[] properties = type.GetProperties(BindingFlags.Public | BindingFlags.Instance);\n            ObjectGenerator objectGenerator = new ObjectGenerator();\n            foreach (PropertyInfo property in properties)\n            {\n                if (property.CanWrite)\n                {\n                    object propertyValue = objectGenerator.GenerateObject(property.PropertyType, createdObjectReferences);\n                    property.SetValue(obj, propertyValue, null);\n                }\n            }\n        }\n\n        private static void SetPublicFields(Type type, object obj, Dictionary<Type, object> createdObjectReferences)\n        {\n            FieldInfo[] fields = type.GetFields(BindingFlags.Public | BindingFlags.Instance);\n            ObjectGenerator objectGenerator = new ObjectGenerator();\n            foreach (FieldInfo field in fields)\n            {\n                object fieldValue = objectGenerator.GenerateObject(field.FieldType, createdObjectReferences);\n                field.SetValue(obj, fieldValue);\n            }\n        }\n\n        private class SimpleTypeObjectGenerator\n        {\n            private long _index = 0;\n            private static readonly Dictionary<Type, Func<long, object>> DefaultGenerators = InitializeGenerators();\n\n            [SuppressMessage(\"Microsoft.Maintainability\", \"CA1502:AvoidExcessiveComplexity\", Justification = \"These are simple type factories and cannot be split up.\")]\n            private static Dictionary<Type, Func<long, object>> InitializeGenerators()\n            {\n                return new Dictionary<Type, Func<long, object>>\n                {\n                    { typeof(Boolean), index => true },\n                    { typeof(Byte), index => (Byte)64 },\n                    { typeof(Char), index => (Char)65 },\n                    { typeof(DateTime), index => DateTime.Now },\n                    { typeof(DateTimeOffset), index => new DateTimeOffset(DateTime.Now) },\n                    { typeof(DBNull), index => DBNull.Value },\n                    { typeof(Decimal), index => (Decimal)index },\n                    { typeof(Double), index => (Double)(index + 0.1) },\n                    { typeof(Guid), index => Guid.NewGuid() },\n                    { typeof(Int16), index => (Int16)(index % Int16.MaxValue) },\n                    { typeof(Int32), index => (Int32)(index % Int32.MaxValue) },\n                    { typeof(Int64), index => (Int64)index },\n                    { typeof(Object), index => new object() },\n                    { typeof(SByte), index => (SByte)64 },\n                    { typeof(Single), index => (Single)(index + 0.1) },\n                    { \n                        typeof(String), index =>\n                        {\n                            return String.Format(CultureInfo.CurrentCulture, \"sample string {0}\", index);\n                        }\n                    },\n                    { \n                        typeof(TimeSpan), index =>\n                        {\n                            return TimeSpan.FromTicks(1234567);\n                        }\n                    },\n                    { typeof(UInt16), index => (UInt16)(index % UInt16.MaxValue) },\n                    { typeof(UInt32), index => (UInt32)(index % UInt32.MaxValue) },\n                    { typeof(UInt64), index => (UInt64)index },\n                    { \n                        typeof(Uri), index =>\n                        {\n                            return new Uri(String.Format(CultureInfo.CurrentCulture, \"http://webapihelppage{0}.com\", index));\n                        }\n                    },\n                };\n            }\n\n            public static bool CanGenerateObject(Type type)\n            {\n                return DefaultGenerators.ContainsKey(type);\n            }\n\n            public object GenerateObject(Type type)\n            {\n                return DefaultGenerators[type](++_index);\n            }\n        }\n    }\n}"
  },
  {
    "path": "AlexaSkillsKit.Sample/Areas/HelpPage/SampleGeneration/SampleDirection.cs",
    "content": "namespace Sample.Areas.HelpPage\n{\n    /// <summary>\n    /// Indicates whether the sample is used for request or response\n    /// </summary>\n    public enum SampleDirection\n    {\n        Request = 0,\n        Response\n    }\n}"
  },
  {
    "path": "AlexaSkillsKit.Sample/Areas/HelpPage/SampleGeneration/TextSample.cs",
    "content": "using System;\n\nnamespace Sample.Areas.HelpPage\n{\n    /// <summary>\n    /// This represents a preformatted text sample on the help page. There's a display template named TextSample associated with this class.\n    /// </summary>\n    public class TextSample\n    {\n        public TextSample(string text)\n        {\n            if (text == null)\n            {\n                throw new ArgumentNullException(\"text\");\n            }\n            Text = text;\n        }\n\n        public string Text { get; private set; }\n\n        public override bool Equals(object obj)\n        {\n            TextSample other = obj as TextSample;\n            return other != null && Text == other.Text;\n        }\n\n        public override int GetHashCode()\n        {\n            return Text.GetHashCode();\n        }\n\n        public override string ToString()\n        {\n            return Text;\n        }\n    }\n}"
  },
  {
    "path": "AlexaSkillsKit.Sample/Areas/HelpPage/Views/Help/Api.cshtml",
    "content": "@using System.Web.Http\n@using Sample.Areas.HelpPage.Models\n@model HelpPageApiModel\n\n@{\n    var description = Model.ApiDescription;\n    ViewBag.Title = description.HttpMethod.Method + \" \" + description.RelativePath;\n}\n\n<link type=\"text/css\" href=\"~/Areas/HelpPage/HelpPage.css\" rel=\"stylesheet\" />\n<div id=\"body\" class=\"help-page\">\n    <section class=\"featured\">\n        <div class=\"content-wrapper\">\n            <p>\n                @Html.ActionLink(\"Help Page Home\", \"Index\")\n            </p>\n        </div>\n    </section>\n    <section class=\"content-wrapper main-content clear-fix\">\n        @Html.DisplayForModel()\n    </section>\n</div>\n"
  },
  {
    "path": "AlexaSkillsKit.Sample/Areas/HelpPage/Views/Help/DisplayTemplates/ApiGroup.cshtml",
    "content": "@using System.Web.Http\n@using System.Web.Http.Controllers\n@using System.Web.Http.Description\n@using Sample.Areas.HelpPage\n@using Sample.Areas.HelpPage.Models\n@model IGrouping<HttpControllerDescriptor, ApiDescription>\n\n@{\n    var controllerDocumentation = ViewBag.DocumentationProvider != null ? \n        ViewBag.DocumentationProvider.GetDocumentation(Model.Key) : \n        null;\n}\n\n<h2 id=\"@Model.Key.ControllerName\">@Model.Key.ControllerName</h2>\n@if (!String.IsNullOrEmpty(controllerDocumentation))\n{\n    <p>@controllerDocumentation</p>\n}\n<table class=\"help-page-table\">\n    <thead>\n        <tr><th>API</th><th>Description</th></tr>\n    </thead>\n    <tbody>\n    @foreach (var api in Model)\n    {\n        <tr>\n            <td class=\"api-name\"><a href=\"@Url.Action(\"Api\", \"Help\", new { apiId = api.GetFriendlyId() })\">@api.HttpMethod.Method @api.RelativePath</a></td>\n            <td class=\"api-documentation\">\n            @if (api.Documentation != null)\n            {\n                <p>@api.Documentation</p>\n            }\n            else\n            {\n                <p>No documentation available.</p>\n            }\n            </td>\n        </tr>\n    }\n    </tbody>\n</table>"
  },
  {
    "path": "AlexaSkillsKit.Sample/Areas/HelpPage/Views/Help/DisplayTemplates/CollectionModelDescription.cshtml",
    "content": "@using Sample.Areas.HelpPage.ModelDescriptions\n@model CollectionModelDescription\n@if (Model.ElementDescription is ComplexTypeModelDescription)\n{\n    @Html.DisplayFor(m => m.ElementDescription)\n}"
  },
  {
    "path": "AlexaSkillsKit.Sample/Areas/HelpPage/Views/Help/DisplayTemplates/ComplexTypeModelDescription.cshtml",
    "content": "@using Sample.Areas.HelpPage.ModelDescriptions\n@model ComplexTypeModelDescription\n@Html.DisplayFor(m => m.Properties, \"Parameters\")"
  },
  {
    "path": "AlexaSkillsKit.Sample/Areas/HelpPage/Views/Help/DisplayTemplates/DictionaryModelDescription.cshtml",
    "content": "@using Sample.Areas.HelpPage.ModelDescriptions\n@model DictionaryModelDescription\nDictionary of @Html.DisplayFor(m => Model.KeyModelDescription.ModelType, \"ModelDescriptionLink\", new { modelDescription = Model.KeyModelDescription }) [key]\nand @Html.DisplayFor(m => Model.ValueModelDescription.ModelType, \"ModelDescriptionLink\", new { modelDescription = Model.ValueModelDescription }) [value]"
  },
  {
    "path": "AlexaSkillsKit.Sample/Areas/HelpPage/Views/Help/DisplayTemplates/EnumTypeModelDescription.cshtml",
    "content": "@using Sample.Areas.HelpPage.ModelDescriptions\n@model EnumTypeModelDescription\n\n<p>Possible enumeration values:</p>\n\n<table class=\"help-page-table\">\n    <thead>\n        <tr><th>Name</th><th>Value</th><th>Description</th></tr>\n    </thead>\n    <tbody>\n        @foreach (EnumValueDescription value in Model.Values)\n        {\n            <tr>\n                <td class=\"enum-name\"><b>@value.Name</b></td>\n                <td class=\"enum-value\">\n                    <p>@value.Value</p>\n                </td>\n                <td class=\"enum-description\">\n                    <p>@value.Documentation</p>\n                </td>\n            </tr>\n        }\n    </tbody>\n</table>"
  },
  {
    "path": "AlexaSkillsKit.Sample/Areas/HelpPage/Views/Help/DisplayTemplates/HelpPageApiModel.cshtml",
    "content": "@using System.Web.Http\n@using System.Web.Http.Description\n@using Sample.Areas.HelpPage.Models\n@using Sample.Areas.HelpPage.ModelDescriptions\n@model HelpPageApiModel\n\n@{\n    ApiDescription description = Model.ApiDescription;\n}\n<h1>@description.HttpMethod.Method @description.RelativePath</h1>\n<div>\n    <p>@description.Documentation</p>\n\n    <h2>Request Information</h2>\n\n    <h3>URI Parameters</h3>\n    @Html.DisplayFor(m => m.UriParameters, \"Parameters\")\n\n    <h3>Body Parameters</h3>\n\n    <p>@Model.RequestDocumentation</p>\n\n    @if (Model.RequestModelDescription != null)\n    {\n        @Html.DisplayFor(m => m.RequestModelDescription.ModelType, \"ModelDescriptionLink\", new { modelDescription = Model.RequestModelDescription })\n        if (Model.RequestBodyParameters != null)\n        {\n            @Html.DisplayFor(m => m.RequestBodyParameters, \"Parameters\")\n        }\n    }\n    else\n    {\n        <p>None.</p>\n    }\n\n    @if (Model.SampleRequests.Count > 0)\n    {\n        <h3>Request Formats</h3>\n        @Html.DisplayFor(m => m.SampleRequests, \"Samples\")\n    }\n\n    <h2>Response Information</h2>\n\n    <h3>Resource Description</h3>\n\n    <p>@description.ResponseDescription.Documentation</p>\n\n    @if (Model.ResourceDescription != null)\n    {\n        @Html.DisplayFor(m => m.ResourceDescription.ModelType, \"ModelDescriptionLink\", new { modelDescription = Model.ResourceDescription })\n        if (Model.ResourceProperties != null)\n        {\n            @Html.DisplayFor(m => m.ResourceProperties, \"Parameters\")\n        }\n    }\n    else\n    {\n        <p>None.</p>\n    }\n\n    @if (Model.SampleResponses.Count > 0)\n    {\n        <h3>Response Formats</h3>\n        @Html.DisplayFor(m => m.SampleResponses, \"Samples\")\n    }\n\n</div>"
  },
  {
    "path": "AlexaSkillsKit.Sample/Areas/HelpPage/Views/Help/DisplayTemplates/ImageSample.cshtml",
    "content": "@using Sample.Areas.HelpPage\n@model ImageSample\n\n<img src=\"@Model.Src\" />"
  },
  {
    "path": "AlexaSkillsKit.Sample/Areas/HelpPage/Views/Help/DisplayTemplates/InvalidSample.cshtml",
    "content": "@using Sample.Areas.HelpPage\n@model InvalidSample\n\n@if (HttpContext.Current.IsDebuggingEnabled)\n{\n    <div class=\"warning-message-container\">\n        <p>@Model.ErrorMessage</p>\n    </div>\n}\nelse\n{\n    <p>Sample not available.</p>\n}"
  },
  {
    "path": "AlexaSkillsKit.Sample/Areas/HelpPage/Views/Help/DisplayTemplates/KeyValuePairModelDescription.cshtml",
    "content": "@using Sample.Areas.HelpPage.ModelDescriptions\n@model KeyValuePairModelDescription\nPair of @Html.DisplayFor(m => Model.KeyModelDescription.ModelType, \"ModelDescriptionLink\", new { modelDescription = Model.KeyModelDescription }) [key]\nand @Html.DisplayFor(m => Model.ValueModelDescription.ModelType, \"ModelDescriptionLink\", new { modelDescription = Model.ValueModelDescription }) [value]"
  },
  {
    "path": "AlexaSkillsKit.Sample/Areas/HelpPage/Views/Help/DisplayTemplates/ModelDescriptionLink.cshtml",
    "content": "@using Sample.Areas.HelpPage.ModelDescriptions\n@model Type\n@{\n    ModelDescription modelDescription = ViewBag.modelDescription;\n    if (modelDescription is ComplexTypeModelDescription || modelDescription is EnumTypeModelDescription)\n    {\n        if (Model == typeof(Object))\n        {\n            @:Object\n        }\n        else\n        {\n            @Html.ActionLink(modelDescription.Name, \"ResourceModel\", \"Help\", new { modelName = modelDescription.Name }, null)\n        }\n    }\n    else if (modelDescription is CollectionModelDescription)\n    {\n        var collectionDescription = modelDescription as CollectionModelDescription;\n        var elementDescription = collectionDescription.ElementDescription;\n        @:Collection of @Html.DisplayFor(m => elementDescription.ModelType, \"ModelDescriptionLink\", new { modelDescription = elementDescription })\n    }\n    else\n    {\n        @Html.DisplayFor(m => modelDescription)\n    }\n}"
  },
  {
    "path": "AlexaSkillsKit.Sample/Areas/HelpPage/Views/Help/DisplayTemplates/Parameters.cshtml",
    "content": "@using System.Collections.Generic\n@using System.Collections.ObjectModel\n@using System.Web.Http.Description\n@using System.Threading\n@using Sample.Areas.HelpPage.ModelDescriptions\n@model IList<ParameterDescription>\n\n@if (Model.Count > 0)\n{\n    <table class=\"help-page-table\">\n        <thead>\n            <tr><th>Name</th><th>Description</th><th>Type</th><th>Additional information</th></tr>\n        </thead>\n        <tbody>\n            @foreach (ParameterDescription parameter in Model)\n            {\n                ModelDescription modelDescription = parameter.TypeDescription;\n                <tr>\n                    <td class=\"parameter-name\">@parameter.Name</td>\n                    <td class=\"parameter-documentation\">\n                        <p>@parameter.Documentation</p>\n                    </td>\n                    <td class=\"parameter-type\">\n                        @Html.DisplayFor(m => modelDescription.ModelType, \"ModelDescriptionLink\", new { modelDescription = modelDescription })\n                    </td>\n                    <td class=\"parameter-annotations\">\n                        @if (parameter.Annotations.Count > 0)\n                        {\n                            foreach (var annotation in parameter.Annotations)\n                            {\n                                <p>@annotation.Documentation</p>\n                            }\n                        }\n                        else\n                        {\n                            <p>None.</p>\n                        }\n                    </td>\n                </tr>\n            }\n        </tbody>\n    </table>\n}\nelse\n{\n    <p>None.</p>\n}\n\n"
  },
  {
    "path": "AlexaSkillsKit.Sample/Areas/HelpPage/Views/Help/DisplayTemplates/Samples.cshtml",
    "content": "@using System.Net.Http.Headers\n@model Dictionary<MediaTypeHeaderValue, object>\n\n@{\n    // Group the samples into a single tab if they are the same.\n    Dictionary<string, object> samples = Model.GroupBy(pair => pair.Value).ToDictionary(\n        pair => String.Join(\", \", pair.Select(m => m.Key.ToString()).ToArray()), \n        pair => pair.Key);\n    var mediaTypes = samples.Keys;\n}\n<div>\n    @foreach (var mediaType in mediaTypes)\n    {\n        <h4 class=\"sample-header\">@mediaType</h4>\n        <div class=\"sample-content\">\n            <span><b>Sample:</b></span>\n            @{\n                var sample = samples[mediaType];\n                if (sample == null)\n                {\n                    <p>Sample not available.</p>\n                }\n                else\n                {\n                    @Html.DisplayFor(s => sample);\n                }\n            }\n        </div>\n    }\n</div>"
  },
  {
    "path": "AlexaSkillsKit.Sample/Areas/HelpPage/Views/Help/DisplayTemplates/SimpleTypeModelDescription.cshtml",
    "content": "@using Sample.Areas.HelpPage.ModelDescriptions\n@model SimpleTypeModelDescription\n@Model.Documentation"
  },
  {
    "path": "AlexaSkillsKit.Sample/Areas/HelpPage/Views/Help/DisplayTemplates/TextSample.cshtml",
    "content": "@using Sample.Areas.HelpPage\n@model TextSample\n\n<pre class=\"wrapped\">\n@Model.Text\n</pre>"
  },
  {
    "path": "AlexaSkillsKit.Sample/Areas/HelpPage/Views/Help/Index.cshtml",
    "content": "@using System.Web.Http\n@using System.Web.Http.Controllers\n@using System.Web.Http.Description\n@using System.Collections.ObjectModel\n@using Sample.Areas.HelpPage.Models\n@model Collection<ApiDescription>\n\n@{\n    ViewBag.Title = \"ASP.NET Web API Help Page\";\n\n    // Group APIs by controller\n    ILookup<HttpControllerDescriptor, ApiDescription> apiGroups = Model.ToLookup(api => api.ActionDescriptor.ControllerDescriptor);\n}\n\n<link type=\"text/css\" href=\"~/Areas/HelpPage/HelpPage.css\" rel=\"stylesheet\" />\n<header class=\"help-page\">\n    <div class=\"content-wrapper\">\n        <div class=\"float-left\">\n            <h1>@ViewBag.Title</h1>\n        </div>\n    </div>\n</header>\n<div id=\"body\" class=\"help-page\">\n    <section class=\"featured\">\n        <div class=\"content-wrapper\">\n            <h2>Introduction</h2>\n            <p>\n                Provide a general description of your APIs here.\n            </p>\n        </div>\n    </section>\n    <section class=\"content-wrapper main-content clear-fix\">\n        @foreach (var group in apiGroups)\n        {\n            @Html.DisplayFor(m => group, \"ApiGroup\")\n        }\n    </section>\n</div>\n"
  },
  {
    "path": "AlexaSkillsKit.Sample/Areas/HelpPage/Views/Help/ResourceModel.cshtml",
    "content": "@using System.Web.Http\n@using Sample.Areas.HelpPage.ModelDescriptions\n@model ModelDescription\n\n<link type=\"text/css\" href=\"~/Areas/HelpPage/HelpPage.css\" rel=\"stylesheet\" />\n<div id=\"body\" class=\"help-page\">\n    <section class=\"featured\">\n        <div class=\"content-wrapper\">\n            <p>\n                @Html.ActionLink(\"Help Page Home\", \"Index\")\n            </p>\n        </div>\n    </section>\n    <h1>@Model.Name</h1>\n    <p>@Model.Documentation</p>\n    <section class=\"content-wrapper main-content clear-fix\">\n        @Html.DisplayFor(m => Model)\n    </section>\n</div>\n"
  },
  {
    "path": "AlexaSkillsKit.Sample/Areas/HelpPage/Views/Shared/_Layout.cshtml",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"utf-8\" />\n    <meta name=\"viewport\" content=\"width=device-width\" />\n    <title>@ViewBag.Title</title>\n    @RenderSection(\"scripts\", required: false)\n</head>\n<body>\n    @RenderBody()\n</body>\n</html>"
  },
  {
    "path": "AlexaSkillsKit.Sample/Areas/HelpPage/Views/Web.config",
    "content": "﻿<?xml version=\"1.0\"?>\n\n<configuration>\n  <configSections>\n    <sectionGroup name=\"system.web.webPages.razor\" type=\"System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35\">\n      <section name=\"host\" type=\"System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35\" requirePermission=\"false\" />\n      <section name=\"pages\" type=\"System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35\" requirePermission=\"false\" />\n    </sectionGroup>\n  </configSections>\n\n  <system.web.webPages.razor>\n    <host factoryType=\"System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35\" />\n    <pages pageBaseType=\"System.Web.Mvc.WebViewPage\">\n      <namespaces>\n        <add namespace=\"System.Web.Mvc\" />\n        <add namespace=\"System.Web.Mvc.Ajax\" />\n        <add namespace=\"System.Web.Mvc.Html\" />\n        <add namespace=\"System.Web.Routing\" />\n      </namespaces>\n    </pages>\n  </system.web.webPages.razor>\n\n  <appSettings>\n    <add key=\"webpages:Enabled\" value=\"false\" />\n  </appSettings>\n\n  <system.web>\n    <compilation debug=\"true\">\n      <assemblies>\n        <add assembly=\"System.Net.Http, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n      </assemblies>\n    </compilation>\n  </system.web>\n\n  <system.webServer>\n    <handlers>\n      <remove name=\"BlockViewHandler\"/>\n      <add name=\"BlockViewHandler\" path=\"*\" verb=\"*\" preCondition=\"integratedMode\" type=\"System.Web.HttpNotFoundHandler\" />\n    </handlers>\n  </system.webServer>\n</configuration>\n"
  },
  {
    "path": "AlexaSkillsKit.Sample/Areas/HelpPage/Views/_ViewStart.cshtml",
    "content": "@{\n    // Change the Layout path below to blend the look and feel of the help page with your existing web pages.\n    Layout = \"~/Areas/HelpPage/Views/Shared/_Layout.cshtml\";\n}"
  },
  {
    "path": "AlexaSkillsKit.Sample/Areas/HelpPage/XmlDocumentationProvider.cs",
    "content": "using System;\nusing System.Globalization;\nusing System.Linq;\nusing System.Reflection;\nusing System.Web.Http.Controllers;\nusing System.Web.Http.Description;\nusing System.Xml.XPath;\nusing Sample.Areas.HelpPage.ModelDescriptions;\n\nnamespace Sample.Areas.HelpPage\n{\n    /// <summary>\n    /// A custom <see cref=\"IDocumentationProvider\"/> that reads the API documentation from an XML documentation file.\n    /// </summary>\n    public class XmlDocumentationProvider : IDocumentationProvider, IModelDocumentationProvider\n    {\n        private XPathNavigator _documentNavigator;\n        private const string TypeExpression = \"/doc/members/member[@name='T:{0}']\";\n        private const string MethodExpression = \"/doc/members/member[@name='M:{0}']\";\n        private const string PropertyExpression = \"/doc/members/member[@name='P:{0}']\";\n        private const string FieldExpression = \"/doc/members/member[@name='F:{0}']\";\n        private const string ParameterExpression = \"param[@name='{0}']\";\n\n        /// <summary>\n        /// Initializes a new instance of the <see cref=\"XmlDocumentationProvider\"/> class.\n        /// </summary>\n        /// <param name=\"documentPath\">The physical path to XML document.</param>\n        public XmlDocumentationProvider(string documentPath)\n        {\n            if (documentPath == null)\n            {\n                throw new ArgumentNullException(\"documentPath\");\n            }\n            XPathDocument xpath = new XPathDocument(documentPath);\n            _documentNavigator = xpath.CreateNavigator();\n        }\n\n        public string GetDocumentation(HttpControllerDescriptor controllerDescriptor)\n        {\n            XPathNavigator typeNode = GetTypeNode(controllerDescriptor.ControllerType);\n            return GetTagValue(typeNode, \"summary\");\n        }\n\n        public virtual string GetDocumentation(HttpActionDescriptor actionDescriptor)\n        {\n            XPathNavigator methodNode = GetMethodNode(actionDescriptor);\n            return GetTagValue(methodNode, \"summary\");\n        }\n\n        public virtual string GetDocumentation(HttpParameterDescriptor parameterDescriptor)\n        {\n            ReflectedHttpParameterDescriptor reflectedParameterDescriptor = parameterDescriptor as ReflectedHttpParameterDescriptor;\n            if (reflectedParameterDescriptor != null)\n            {\n                XPathNavigator methodNode = GetMethodNode(reflectedParameterDescriptor.ActionDescriptor);\n                if (methodNode != null)\n                {\n                    string parameterName = reflectedParameterDescriptor.ParameterInfo.Name;\n                    XPathNavigator parameterNode = methodNode.SelectSingleNode(String.Format(CultureInfo.InvariantCulture, ParameterExpression, parameterName));\n                    if (parameterNode != null)\n                    {\n                        return parameterNode.Value.Trim();\n                    }\n                }\n            }\n\n            return null;\n        }\n\n        public string GetResponseDocumentation(HttpActionDescriptor actionDescriptor)\n        {\n            XPathNavigator methodNode = GetMethodNode(actionDescriptor);\n            return GetTagValue(methodNode, \"returns\");\n        }\n\n        public string GetDocumentation(MemberInfo member)\n        {\n            string memberName = String.Format(CultureInfo.InvariantCulture, \"{0}.{1}\", GetTypeName(member.DeclaringType), member.Name);\n            string expression = member.MemberType == MemberTypes.Field ? FieldExpression : PropertyExpression;\n            string selectExpression = String.Format(CultureInfo.InvariantCulture, expression, memberName);\n            XPathNavigator propertyNode = _documentNavigator.SelectSingleNode(selectExpression);\n            return GetTagValue(propertyNode, \"summary\");\n        }\n\n        public string GetDocumentation(Type type)\n        {\n            XPathNavigator typeNode = GetTypeNode(type);\n            return GetTagValue(typeNode, \"summary\");\n        }\n\n        private XPathNavigator GetMethodNode(HttpActionDescriptor actionDescriptor)\n        {\n            ReflectedHttpActionDescriptor reflectedActionDescriptor = actionDescriptor as ReflectedHttpActionDescriptor;\n            if (reflectedActionDescriptor != null)\n            {\n                string selectExpression = String.Format(CultureInfo.InvariantCulture, MethodExpression, GetMemberName(reflectedActionDescriptor.MethodInfo));\n                return _documentNavigator.SelectSingleNode(selectExpression);\n            }\n\n            return null;\n        }\n\n        private static string GetMemberName(MethodInfo method)\n        {\n            string name = String.Format(CultureInfo.InvariantCulture, \"{0}.{1}\", GetTypeName(method.DeclaringType), method.Name);\n            ParameterInfo[] parameters = method.GetParameters();\n            if (parameters.Length != 0)\n            {\n                string[] parameterTypeNames = parameters.Select(param => GetTypeName(param.ParameterType)).ToArray();\n                name += String.Format(CultureInfo.InvariantCulture, \"({0})\", String.Join(\",\", parameterTypeNames));\n            }\n\n            return name;\n        }\n\n        private static string GetTagValue(XPathNavigator parentNode, string tagName)\n        {\n            if (parentNode != null)\n            {\n                XPathNavigator node = parentNode.SelectSingleNode(tagName);\n                if (node != null)\n                {\n                    return node.Value.Trim();\n                }\n            }\n\n            return null;\n        }\n\n        private XPathNavigator GetTypeNode(Type type)\n        {\n            string controllerTypeName = GetTypeName(type);\n            string selectExpression = String.Format(CultureInfo.InvariantCulture, TypeExpression, controllerTypeName);\n            return _documentNavigator.SelectSingleNode(selectExpression);\n        }\n\n        private static string GetTypeName(Type type)\n        {\n            string name = type.FullName;\n            if (type.IsGenericType)\n            {\n                // Format the generic type name to something like: Generic{System.Int32,System.String}\n                Type genericType = type.GetGenericTypeDefinition();\n                Type[] genericArguments = type.GetGenericArguments();\n                string genericTypeName = genericType.FullName;\n\n                // Trim the generic parameter counts from the name\n                genericTypeName = genericTypeName.Substring(0, genericTypeName.IndexOf('`'));\n                string[] argumentTypeNames = genericArguments.Select(t => GetTypeName(t)).ToArray();\n                name = String.Format(CultureInfo.InvariantCulture, \"{0}{{{1}}}\", genericTypeName, String.Join(\",\", argumentTypeNames));\n            }\n            if (type.IsNested)\n            {\n                // Changing the nested type name from OuterType+InnerType to OuterType.InnerType to match the XML documentation syntax.\n                name = name.Replace(\"+\", \".\");\n            }\n\n            return name;\n        }\n    }\n}\n"
  },
  {
    "path": "AlexaSkillsKit.Sample/Content/Site.css",
    "content": "﻿body {\n    padding-top: 50px;\n    padding-bottom: 20px;\n}\n\n/* Set padding to keep content from hitting the edges */\n.body-content {\n    padding-left: 15px;\n    padding-right: 15px;\n}\n\n/* Set width on the form input elements since they're 100% wide by default */\ninput,\nselect,\ntextarea {\n    max-width: 280px;\n}\n"
  },
  {
    "path": "AlexaSkillsKit.Sample/Content/bootstrap.css",
    "content": "/* NUGET: BEGIN LICENSE TEXT\n *\n * Microsoft grants you the right to use these script files for the sole\n * purpose of either: (i) interacting through your browser with the Microsoft\n * website or online service, subject to the applicable licensing or use\n * terms; or (ii) using the files as included with a Microsoft product subject\n * to that product's license terms. Microsoft reserves all other rights to the\n * files not expressly granted by Microsoft, whether by implication, estoppel\n * or otherwise. The notices and licenses below are for informational purposes only.\n *\n * NUGET: END LICENSE TEXT */\n/*!\n * Bootstrap v3.0.0\n *\n * Copyright 2013 Twitter, Inc\n * Licensed under the Apache License v2.0\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Designed and built with all the love in the world by @mdo and @fat.\n */\n\n/*! normalize.css v2.1.0 | MIT License | git.io/normalize */\n\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nnav,\nsection,\nsummary {\n  display: block;\n}\n\naudio,\ncanvas,\nvideo {\n  display: inline-block;\n}\n\naudio:not([controls]) {\n  display: none;\n  height: 0;\n}\n\n[hidden] {\n  display: none;\n}\n\nhtml {\n  font-family: sans-serif;\n  -webkit-text-size-adjust: 100%;\n      -ms-text-size-adjust: 100%;\n}\n\nbody {\n  margin: 0;\n}\n\na:focus {\n  outline: thin dotted;\n}\n\na:active,\na:hover {\n  outline: 0;\n}\n\nh1 {\n  margin: 0.67em 0;\n  font-size: 2em;\n}\n\nabbr[title] {\n  border-bottom: 1px dotted;\n}\n\nb,\nstrong {\n  font-weight: bold;\n}\n\ndfn {\n  font-style: italic;\n}\n\nhr {\n  height: 0;\n  -moz-box-sizing: content-box;\n       box-sizing: content-box;\n}\n\nmark {\n  color: #000;\n  background: #ff0;\n}\n\ncode,\nkbd,\npre,\nsamp {\n  font-family: monospace, serif;\n  font-size: 1em;\n}\n\npre {\n  white-space: pre-wrap;\n}\n\nq {\n  quotes: \"\\201C\" \"\\201D\" \"\\2018\" \"\\2019\";\n}\n\nsmall {\n  font-size: 80%;\n}\n\nsub,\nsup {\n  position: relative;\n  font-size: 75%;\n  line-height: 0;\n  vertical-align: baseline;\n}\n\nsup {\n  top: -0.5em;\n}\n\nsub {\n  bottom: -0.25em;\n}\n\nimg {\n  border: 0;\n}\n\nsvg:not(:root) {\n  overflow: hidden;\n}\n\nfigure {\n  margin: 0;\n}\n\nfieldset {\n  padding: 0.35em 0.625em 0.75em;\n  margin: 0 2px;\n  border: 1px solid #c0c0c0;\n}\n\nlegend {\n  padding: 0;\n  border: 0;\n}\n\nbutton,\ninput,\nselect,\ntextarea {\n  margin: 0;\n  font-family: inherit;\n  font-size: 100%;\n}\n\nbutton,\ninput {\n  line-height: normal;\n}\n\nbutton,\nselect {\n  text-transform: none;\n}\n\nbutton,\nhtml input[type=\"button\"],\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n  cursor: pointer;\n  -webkit-appearance: button;\n}\n\nbutton[disabled],\nhtml input[disabled] {\n  cursor: default;\n}\n\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n  padding: 0;\n  box-sizing: border-box;\n}\n\ninput[type=\"search\"] {\n  -webkit-box-sizing: content-box;\n     -moz-box-sizing: content-box;\n          box-sizing: content-box;\n  -webkit-appearance: textfield;\n}\n\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n  -webkit-appearance: none;\n}\n\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n  padding: 0;\n  border: 0;\n}\n\ntextarea {\n  overflow: auto;\n  vertical-align: top;\n}\n\ntable {\n  border-collapse: collapse;\n  border-spacing: 0;\n}\n\n@media print {\n  * {\n    color: #000 !important;\n    text-shadow: none !important;\n    background: transparent !important;\n    box-shadow: none !important;\n  }\n  a,\n  a:visited {\n    text-decoration: underline;\n  }\n  a[href]:after {\n    content: \" (\" attr(href) \")\";\n  }\n  abbr[title]:after {\n    content: \" (\" attr(title) \")\";\n  }\n  .ir a:after,\n  a[href^=\"javascript:\"]:after,\n  a[href^=\"#\"]:after {\n    content: \"\";\n  }\n  pre,\n  blockquote {\n    border: 1px solid #999;\n    page-break-inside: avoid;\n  }\n  thead {\n    display: table-header-group;\n  }\n  tr,\n  img {\n    page-break-inside: avoid;\n  }\n  img {\n    max-width: 100% !important;\n  }\n  @page  {\n    margin: 2cm .5cm;\n  }\n  p,\n  h2,\n  h3 {\n    orphans: 3;\n    widows: 3;\n  }\n  h2,\n  h3 {\n    page-break-after: avoid;\n  }\n  .navbar {\n    display: none;\n  }\n  .table td,\n  .table th {\n    background-color: #fff !important;\n  }\n  .btn > .caret,\n  .dropup > .btn > .caret {\n    border-top-color: #000 !important;\n  }\n  .label {\n    border: 1px solid #000;\n  }\n  .table {\n    border-collapse: collapse !important;\n  }\n  .table-bordered th,\n  .table-bordered td {\n    border: 1px solid #ddd !important;\n  }\n}\n\n*,\n*:before,\n*:after {\n  -webkit-box-sizing: border-box;\n     -moz-box-sizing: border-box;\n          box-sizing: border-box;\n}\n\nhtml {\n  font-size: 62.5%;\n  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n\nbody {\n  font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n  font-size: 14px;\n  line-height: 1.428571429;\n  color: #333333;\n  background-color: #ffffff;\n}\n\ninput,\nbutton,\nselect,\ntextarea {\n  font-family: inherit;\n  font-size: inherit;\n  line-height: inherit;\n}\n\nbutton,\ninput,\nselect[multiple],\ntextarea {\n  background-image: none;\n}\n\na {\n  color: #428bca;\n  text-decoration: none;\n}\n\na:hover,\na:focus {\n  color: #2a6496;\n  text-decoration: underline;\n}\n\na:focus {\n  outline: thin dotted #333;\n  outline: 5px auto -webkit-focus-ring-color;\n  outline-offset: -2px;\n}\n\nimg {\n  vertical-align: middle;\n}\n\n.img-responsive {\n  display: block;\n  height: auto;\n  max-width: 100%;\n}\n\n.img-rounded {\n  border-radius: 6px;\n}\n\n.img-thumbnail {\n  display: inline-block;\n  height: auto;\n  max-width: 100%;\n  padding: 4px;\n  line-height: 1.428571429;\n  background-color: #ffffff;\n  border: 1px solid #dddddd;\n  border-radius: 4px;\n  -webkit-transition: all 0.2s ease-in-out;\n          transition: all 0.2s ease-in-out;\n}\n\n.img-circle {\n  border-radius: 50%;\n}\n\nhr {\n  margin-top: 20px;\n  margin-bottom: 20px;\n  border: 0;\n  border-top: 1px solid #eeeeee;\n}\n\n.sr-only {\n  position: absolute;\n  width: 1px;\n  height: 1px;\n  padding: 0;\n  margin: -1px;\n  overflow: hidden;\n  clip: rect(0 0 0 0);\n  border: 0;\n}\n\np {\n  margin: 0 0 10px;\n}\n\n.lead {\n  margin-bottom: 20px;\n  font-size: 16.099999999999998px;\n  font-weight: 200;\n  line-height: 1.4;\n}\n\n@media (min-width: 768px) {\n  .lead {\n    font-size: 21px;\n  }\n}\n\nsmall {\n  font-size: 85%;\n}\n\ncite {\n  font-style: normal;\n}\n\n.text-muted {\n  color: #999999;\n}\n\n.text-primary {\n  color: #428bca;\n}\n\n.text-warning {\n  color: #c09853;\n}\n\n.text-danger {\n  color: #b94a48;\n}\n\n.text-success {\n  color: #468847;\n}\n\n.text-info {\n  color: #3a87ad;\n}\n\n.text-left {\n  text-align: left;\n}\n\n.text-right {\n  text-align: right;\n}\n\n.text-center {\n  text-align: center;\n}\n\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\n.h1,\n.h2,\n.h3,\n.h4,\n.h5,\n.h6 {\n  font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n  font-weight: 500;\n  line-height: 1.1;\n}\n\nh1 small,\nh2 small,\nh3 small,\nh4 small,\nh5 small,\nh6 small,\n.h1 small,\n.h2 small,\n.h3 small,\n.h4 small,\n.h5 small,\n.h6 small {\n  font-weight: normal;\n  line-height: 1;\n  color: #999999;\n}\n\nh1,\nh2,\nh3 {\n  margin-top: 20px;\n  margin-bottom: 10px;\n}\n\nh4,\nh5,\nh6 {\n  margin-top: 10px;\n  margin-bottom: 10px;\n}\n\nh1,\n.h1 {\n  font-size: 36px;\n}\n\nh2,\n.h2 {\n  font-size: 30px;\n}\n\nh3,\n.h3 {\n  font-size: 24px;\n}\n\nh4,\n.h4 {\n  font-size: 18px;\n}\n\nh5,\n.h5 {\n  font-size: 14px;\n}\n\nh6,\n.h6 {\n  font-size: 12px;\n}\n\nh1 small,\n.h1 small {\n  font-size: 24px;\n}\n\nh2 small,\n.h2 small {\n  font-size: 18px;\n}\n\nh3 small,\n.h3 small,\nh4 small,\n.h4 small {\n  font-size: 14px;\n}\n\n.page-header {\n  padding-bottom: 9px;\n  margin: 40px 0 20px;\n  border-bottom: 1px solid #eeeeee;\n}\n\nul,\nol {\n  margin-top: 0;\n  margin-bottom: 10px;\n}\n\nul ul,\nol ul,\nul ol,\nol ol {\n  margin-bottom: 0;\n}\n\n.list-unstyled {\n  padding-left: 0;\n  list-style: none;\n}\n\n.list-inline {\n  padding-left: 0;\n  list-style: none;\n}\n\n.list-inline > li {\n  display: inline-block;\n  padding-right: 5px;\n  padding-left: 5px;\n}\n\ndl {\n  margin-bottom: 20px;\n}\n\ndt,\ndd {\n  line-height: 1.428571429;\n}\n\ndt {\n  font-weight: bold;\n}\n\ndd {\n  margin-left: 0;\n}\n\n@media (min-width: 768px) {\n  .dl-horizontal dt {\n    float: left;\n    width: 160px;\n    overflow: hidden;\n    clear: left;\n    text-align: right;\n    text-overflow: ellipsis;\n    white-space: nowrap;\n  }\n  .dl-horizontal dd {\n    margin-left: 180px;\n  }\n  .dl-horizontal dd:before,\n  .dl-horizontal dd:after {\n    display: table;\n    content: \" \";\n  }\n  .dl-horizontal dd:after {\n    clear: both;\n  }\n  .dl-horizontal dd:before,\n  .dl-horizontal dd:after {\n    display: table;\n    content: \" \";\n  }\n  .dl-horizontal dd:after {\n    clear: both;\n  }\n}\n\nabbr[title],\nabbr[data-original-title] {\n  cursor: help;\n  border-bottom: 1px dotted #999999;\n}\n\nabbr.initialism {\n  font-size: 90%;\n  text-transform: uppercase;\n}\n\nblockquote {\n  padding: 10px 20px;\n  margin: 0 0 20px;\n  border-left: 5px solid #eeeeee;\n}\n\nblockquote p {\n  font-size: 17.5px;\n  font-weight: 300;\n  line-height: 1.25;\n}\n\nblockquote p:last-child {\n  margin-bottom: 0;\n}\n\nblockquote small {\n  display: block;\n  line-height: 1.428571429;\n  color: #999999;\n}\n\nblockquote small:before {\n  content: '\\2014 \\00A0';\n}\n\nblockquote.pull-right {\n  padding-right: 15px;\n  padding-left: 0;\n  border-right: 5px solid #eeeeee;\n  border-left: 0;\n}\n\nblockquote.pull-right p,\nblockquote.pull-right small {\n  text-align: right;\n}\n\nblockquote.pull-right small:before {\n  content: '';\n}\n\nblockquote.pull-right small:after {\n  content: '\\00A0 \\2014';\n}\n\nq:before,\nq:after,\nblockquote:before,\nblockquote:after {\n  content: \"\";\n}\n\naddress {\n  display: block;\n  margin-bottom: 20px;\n  font-style: normal;\n  line-height: 1.428571429;\n}\n\ncode,\npre {\n  font-family: Monaco, Menlo, Consolas, \"Courier New\", monospace;\n}\n\ncode {\n  padding: 2px 4px;\n  font-size: 90%;\n  color: #c7254e;\n  white-space: nowrap;\n  background-color: #f9f2f4;\n  border-radius: 4px;\n}\n\npre {\n  display: block;\n  padding: 9.5px;\n  margin: 0 0 10px;\n  font-size: 13px;\n  line-height: 1.428571429;\n  color: #333333;\n  word-break: break-all;\n  word-wrap: break-word;\n  background-color: #f5f5f5;\n  border: 1px solid #cccccc;\n  border-radius: 4px;\n}\n\npre.prettyprint {\n  margin-bottom: 20px;\n}\n\npre code {\n  padding: 0;\n  font-size: inherit;\n  color: inherit;\n  white-space: pre-wrap;\n  background-color: transparent;\n  border: 0;\n}\n\n.pre-scrollable {\n  max-height: 340px;\n  overflow-y: scroll;\n}\n\n.container {\n  padding-right: 15px;\n  padding-left: 15px;\n  margin-right: auto;\n  margin-left: auto;\n}\n\n.container:before,\n.container:after {\n  display: table;\n  content: \" \";\n}\n\n.container:after {\n  clear: both;\n}\n\n.container:before,\n.container:after {\n  display: table;\n  content: \" \";\n}\n\n.container:after {\n  clear: both;\n}\n\n.row {\n  margin-right: -15px;\n  margin-left: -15px;\n}\n\n.row:before,\n.row:after {\n  display: table;\n  content: \" \";\n}\n\n.row:after {\n  clear: both;\n}\n\n.row:before,\n.row:after {\n  display: table;\n  content: \" \";\n}\n\n.row:after {\n  clear: both;\n}\n\n.col-xs-1,\n.col-xs-2,\n.col-xs-3,\n.col-xs-4,\n.col-xs-5,\n.col-xs-6,\n.col-xs-7,\n.col-xs-8,\n.col-xs-9,\n.col-xs-10,\n.col-xs-11,\n.col-xs-12,\n.col-sm-1,\n.col-sm-2,\n.col-sm-3,\n.col-sm-4,\n.col-sm-5,\n.col-sm-6,\n.col-sm-7,\n.col-sm-8,\n.col-sm-9,\n.col-sm-10,\n.col-sm-11,\n.col-sm-12,\n.col-md-1,\n.col-md-2,\n.col-md-3,\n.col-md-4,\n.col-md-5,\n.col-md-6,\n.col-md-7,\n.col-md-8,\n.col-md-9,\n.col-md-10,\n.col-md-11,\n.col-md-12,\n.col-lg-1,\n.col-lg-2,\n.col-lg-3,\n.col-lg-4,\n.col-lg-5,\n.col-lg-6,\n.col-lg-7,\n.col-lg-8,\n.col-lg-9,\n.col-lg-10,\n.col-lg-11,\n.col-lg-12 {\n  position: relative;\n  min-height: 1px;\n  padding-right: 15px;\n  padding-left: 15px;\n}\n\n.col-xs-1,\n.col-xs-2,\n.col-xs-3,\n.col-xs-4,\n.col-xs-5,\n.col-xs-6,\n.col-xs-7,\n.col-xs-8,\n.col-xs-9,\n.col-xs-10,\n.col-xs-11 {\n  float: left;\n}\n\n.col-xs-1 {\n  width: 8.333333333333332%;\n}\n\n.col-xs-2 {\n  width: 16.666666666666664%;\n}\n\n.col-xs-3 {\n  width: 25%;\n}\n\n.col-xs-4 {\n  width: 33.33333333333333%;\n}\n\n.col-xs-5 {\n  width: 41.66666666666667%;\n}\n\n.col-xs-6 {\n  width: 50%;\n}\n\n.col-xs-7 {\n  width: 58.333333333333336%;\n}\n\n.col-xs-8 {\n  width: 66.66666666666666%;\n}\n\n.col-xs-9 {\n  width: 75%;\n}\n\n.col-xs-10 {\n  width: 83.33333333333334%;\n}\n\n.col-xs-11 {\n  width: 91.66666666666666%;\n}\n\n.col-xs-12 {\n  width: 100%;\n}\n\n@media (min-width: 768px) {\n  .container {\n    max-width: 750px;\n  }\n  .col-sm-1,\n  .col-sm-2,\n  .col-sm-3,\n  .col-sm-4,\n  .col-sm-5,\n  .col-sm-6,\n  .col-sm-7,\n  .col-sm-8,\n  .col-sm-9,\n  .col-sm-10,\n  .col-sm-11 {\n    float: left;\n  }\n  .col-sm-1 {\n    width: 8.333333333333332%;\n  }\n  .col-sm-2 {\n    width: 16.666666666666664%;\n  }\n  .col-sm-3 {\n    width: 25%;\n  }\n  .col-sm-4 {\n    width: 33.33333333333333%;\n  }\n  .col-sm-5 {\n    width: 41.66666666666667%;\n  }\n  .col-sm-6 {\n    width: 50%;\n  }\n  .col-sm-7 {\n    width: 58.333333333333336%;\n  }\n  .col-sm-8 {\n    width: 66.66666666666666%;\n  }\n  .col-sm-9 {\n    width: 75%;\n  }\n  .col-sm-10 {\n    width: 83.33333333333334%;\n  }\n  .col-sm-11 {\n    width: 91.66666666666666%;\n  }\n  .col-sm-12 {\n    width: 100%;\n  }\n  .col-sm-push-1 {\n    left: 8.333333333333332%;\n  }\n  .col-sm-push-2 {\n    left: 16.666666666666664%;\n  }\n  .col-sm-push-3 {\n    left: 25%;\n  }\n  .col-sm-push-4 {\n    left: 33.33333333333333%;\n  }\n  .col-sm-push-5 {\n    left: 41.66666666666667%;\n  }\n  .col-sm-push-6 {\n    left: 50%;\n  }\n  .col-sm-push-7 {\n    left: 58.333333333333336%;\n  }\n  .col-sm-push-8 {\n    left: 66.66666666666666%;\n  }\n  .col-sm-push-9 {\n    left: 75%;\n  }\n  .col-sm-push-10 {\n    left: 83.33333333333334%;\n  }\n  .col-sm-push-11 {\n    left: 91.66666666666666%;\n  }\n  .col-sm-pull-1 {\n    right: 8.333333333333332%;\n  }\n  .col-sm-pull-2 {\n    right: 16.666666666666664%;\n  }\n  .col-sm-pull-3 {\n    right: 25%;\n  }\n  .col-sm-pull-4 {\n    right: 33.33333333333333%;\n  }\n  .col-sm-pull-5 {\n    right: 41.66666666666667%;\n  }\n  .col-sm-pull-6 {\n    right: 50%;\n  }\n  .col-sm-pull-7 {\n    right: 58.333333333333336%;\n  }\n  .col-sm-pull-8 {\n    right: 66.66666666666666%;\n  }\n  .col-sm-pull-9 {\n    right: 75%;\n  }\n  .col-sm-pull-10 {\n    right: 83.33333333333334%;\n  }\n  .col-sm-pull-11 {\n    right: 91.66666666666666%;\n  }\n  .col-sm-offset-1 {\n    margin-left: 8.333333333333332%;\n  }\n  .col-sm-offset-2 {\n    margin-left: 16.666666666666664%;\n  }\n  .col-sm-offset-3 {\n    margin-left: 25%;\n  }\n  .col-sm-offset-4 {\n    margin-left: 33.33333333333333%;\n  }\n  .col-sm-offset-5 {\n    margin-left: 41.66666666666667%;\n  }\n  .col-sm-offset-6 {\n    margin-left: 50%;\n  }\n  .col-sm-offset-7 {\n    margin-left: 58.333333333333336%;\n  }\n  .col-sm-offset-8 {\n    margin-left: 66.66666666666666%;\n  }\n  .col-sm-offset-9 {\n    margin-left: 75%;\n  }\n  .col-sm-offset-10 {\n    margin-left: 83.33333333333334%;\n  }\n  .col-sm-offset-11 {\n    margin-left: 91.66666666666666%;\n  }\n}\n\n@media (min-width: 992px) {\n  .container {\n    max-width: 970px;\n  }\n  .col-md-1,\n  .col-md-2,\n  .col-md-3,\n  .col-md-4,\n  .col-md-5,\n  .col-md-6,\n  .col-md-7,\n  .col-md-8,\n  .col-md-9,\n  .col-md-10,\n  .col-md-11 {\n    float: left;\n  }\n  .col-md-1 {\n    width: 8.333333333333332%;\n  }\n  .col-md-2 {\n    width: 16.666666666666664%;\n  }\n  .col-md-3 {\n    width: 25%;\n  }\n  .col-md-4 {\n    width: 33.33333333333333%;\n  }\n  .col-md-5 {\n    width: 41.66666666666667%;\n  }\n  .col-md-6 {\n    width: 50%;\n  }\n  .col-md-7 {\n    width: 58.333333333333336%;\n  }\n  .col-md-8 {\n    width: 66.66666666666666%;\n  }\n  .col-md-9 {\n    width: 75%;\n  }\n  .col-md-10 {\n    width: 83.33333333333334%;\n  }\n  .col-md-11 {\n    width: 91.66666666666666%;\n  }\n  .col-md-12 {\n    width: 100%;\n  }\n  .col-md-push-0 {\n    left: auto;\n  }\n  .col-md-push-1 {\n    left: 8.333333333333332%;\n  }\n  .col-md-push-2 {\n    left: 16.666666666666664%;\n  }\n  .col-md-push-3 {\n    left: 25%;\n  }\n  .col-md-push-4 {\n    left: 33.33333333333333%;\n  }\n  .col-md-push-5 {\n    left: 41.66666666666667%;\n  }\n  .col-md-push-6 {\n    left: 50%;\n  }\n  .col-md-push-7 {\n    left: 58.333333333333336%;\n  }\n  .col-md-push-8 {\n    left: 66.66666666666666%;\n  }\n  .col-md-push-9 {\n    left: 75%;\n  }\n  .col-md-push-10 {\n    left: 83.33333333333334%;\n  }\n  .col-md-push-11 {\n    left: 91.66666666666666%;\n  }\n  .col-md-pull-0 {\n    right: auto;\n  }\n  .col-md-pull-1 {\n    right: 8.333333333333332%;\n  }\n  .col-md-pull-2 {\n    right: 16.666666666666664%;\n  }\n  .col-md-pull-3 {\n    right: 25%;\n  }\n  .col-md-pull-4 {\n    right: 33.33333333333333%;\n  }\n  .col-md-pull-5 {\n    right: 41.66666666666667%;\n  }\n  .col-md-pull-6 {\n    right: 50%;\n  }\n  .col-md-pull-7 {\n    right: 58.333333333333336%;\n  }\n  .col-md-pull-8 {\n    right: 66.66666666666666%;\n  }\n  .col-md-pull-9 {\n    right: 75%;\n  }\n  .col-md-pull-10 {\n    right: 83.33333333333334%;\n  }\n  .col-md-pull-11 {\n    right: 91.66666666666666%;\n  }\n  .col-md-offset-0 {\n    margin-left: 0;\n  }\n  .col-md-offset-1 {\n    margin-left: 8.333333333333332%;\n  }\n  .col-md-offset-2 {\n    margin-left: 16.666666666666664%;\n  }\n  .col-md-offset-3 {\n    margin-left: 25%;\n  }\n  .col-md-offset-4 {\n    margin-left: 33.33333333333333%;\n  }\n  .col-md-offset-5 {\n    margin-left: 41.66666666666667%;\n  }\n  .col-md-offset-6 {\n    margin-left: 50%;\n  }\n  .col-md-offset-7 {\n    margin-left: 58.333333333333336%;\n  }\n  .col-md-offset-8 {\n    margin-left: 66.66666666666666%;\n  }\n  .col-md-offset-9 {\n    margin-left: 75%;\n  }\n  .col-md-offset-10 {\n    margin-left: 83.33333333333334%;\n  }\n  .col-md-offset-11 {\n    margin-left: 91.66666666666666%;\n  }\n}\n\n@media (min-width: 1200px) {\n  .container {\n    max-width: 1170px;\n  }\n  .col-lg-1,\n  .col-lg-2,\n  .col-lg-3,\n  .col-lg-4,\n  .col-lg-5,\n  .col-lg-6,\n  .col-lg-7,\n  .col-lg-8,\n  .col-lg-9,\n  .col-lg-10,\n  .col-lg-11 {\n    float: left;\n  }\n  .col-lg-1 {\n    width: 8.333333333333332%;\n  }\n  .col-lg-2 {\n    width: 16.666666666666664%;\n  }\n  .col-lg-3 {\n    width: 25%;\n  }\n  .col-lg-4 {\n    width: 33.33333333333333%;\n  }\n  .col-lg-5 {\n    width: 41.66666666666667%;\n  }\n  .col-lg-6 {\n    width: 50%;\n  }\n  .col-lg-7 {\n    width: 58.333333333333336%;\n  }\n  .col-lg-8 {\n    width: 66.66666666666666%;\n  }\n  .col-lg-9 {\n    width: 75%;\n  }\n  .col-lg-10 {\n    width: 83.33333333333334%;\n  }\n  .col-lg-11 {\n    width: 91.66666666666666%;\n  }\n  .col-lg-12 {\n    width: 100%;\n  }\n  .col-lg-push-0 {\n    left: auto;\n  }\n  .col-lg-push-1 {\n    left: 8.333333333333332%;\n  }\n  .col-lg-push-2 {\n    left: 16.666666666666664%;\n  }\n  .col-lg-push-3 {\n    left: 25%;\n  }\n  .col-lg-push-4 {\n    left: 33.33333333333333%;\n  }\n  .col-lg-push-5 {\n    left: 41.66666666666667%;\n  }\n  .col-lg-push-6 {\n    left: 50%;\n  }\n  .col-lg-push-7 {\n    left: 58.333333333333336%;\n  }\n  .col-lg-push-8 {\n    left: 66.66666666666666%;\n  }\n  .col-lg-push-9 {\n    left: 75%;\n  }\n  .col-lg-push-10 {\n    left: 83.33333333333334%;\n  }\n  .col-lg-push-11 {\n    left: 91.66666666666666%;\n  }\n  .col-lg-pull-0 {\n    right: auto;\n  }\n  .col-lg-pull-1 {\n    right: 8.333333333333332%;\n  }\n  .col-lg-pull-2 {\n    right: 16.666666666666664%;\n  }\n  .col-lg-pull-3 {\n    right: 25%;\n  }\n  .col-lg-pull-4 {\n    right: 33.33333333333333%;\n  }\n  .col-lg-pull-5 {\n    right: 41.66666666666667%;\n  }\n  .col-lg-pull-6 {\n    right: 50%;\n  }\n  .col-lg-pull-7 {\n    right: 58.333333333333336%;\n  }\n  .col-lg-pull-8 {\n    right: 66.66666666666666%;\n  }\n  .col-lg-pull-9 {\n    right: 75%;\n  }\n  .col-lg-pull-10 {\n    right: 83.33333333333334%;\n  }\n  .col-lg-pull-11 {\n    right: 91.66666666666666%;\n  }\n  .col-lg-offset-0 {\n    margin-left: 0;\n  }\n  .col-lg-offset-1 {\n    margin-left: 8.333333333333332%;\n  }\n  .col-lg-offset-2 {\n    margin-left: 16.666666666666664%;\n  }\n  .col-lg-offset-3 {\n    margin-left: 25%;\n  }\n  .col-lg-offset-4 {\n    margin-left: 33.33333333333333%;\n  }\n  .col-lg-offset-5 {\n    margin-left: 41.66666666666667%;\n  }\n  .col-lg-offset-6 {\n    margin-left: 50%;\n  }\n  .col-lg-offset-7 {\n    margin-left: 58.333333333333336%;\n  }\n  .col-lg-offset-8 {\n    margin-left: 66.66666666666666%;\n  }\n  .col-lg-offset-9 {\n    margin-left: 75%;\n  }\n  .col-lg-offset-10 {\n    margin-left: 83.33333333333334%;\n  }\n  .col-lg-offset-11 {\n    margin-left: 91.66666666666666%;\n  }\n}\n\ntable {\n  max-width: 100%;\n  background-color: transparent;\n}\n\nth {\n  text-align: left;\n}\n\n.table {\n  width: 100%;\n  margin-bottom: 20px;\n}\n\n.table thead > tr > th,\n.table tbody > tr > th,\n.table tfoot > tr > th,\n.table thead > tr > td,\n.table tbody > tr > td,\n.table tfoot > tr > td {\n  padding: 8px;\n  line-height: 1.428571429;\n  vertical-align: top;\n  border-top: 1px solid #dddddd;\n}\n\n.table thead > tr > th {\n  vertical-align: bottom;\n  border-bottom: 2px solid #dddddd;\n}\n\n.table caption + thead tr:first-child th,\n.table colgroup + thead tr:first-child th,\n.table thead:first-child tr:first-child th,\n.table caption + thead tr:first-child td,\n.table colgroup + thead tr:first-child td,\n.table thead:first-child tr:first-child td {\n  border-top: 0;\n}\n\n.table tbody + tbody {\n  border-top: 2px solid #dddddd;\n}\n\n.table .table {\n  background-color: #ffffff;\n}\n\n.table-condensed thead > tr > th,\n.table-condensed tbody > tr > th,\n.table-condensed tfoot > tr > th,\n.table-condensed thead > tr > td,\n.table-condensed tbody > tr > td,\n.table-condensed tfoot > tr > td {\n  padding: 5px;\n}\n\n.table-bordered {\n  border: 1px solid #dddddd;\n}\n\n.table-bordered > thead > tr > th,\n.table-bordered > tbody > tr > th,\n.table-bordered > tfoot > tr > th,\n.table-bordered > thead > tr > td,\n.table-bordered > tbody > tr > td,\n.table-bordered > tfoot > tr > td {\n  border: 1px solid #dddddd;\n}\n\n.table-bordered > thead > tr > th,\n.table-bordered > thead > tr > td {\n  border-bottom-width: 2px;\n}\n\n.table-striped > tbody > tr:nth-child(odd) > td,\n.table-striped > tbody > tr:nth-child(odd) > th {\n  background-color: #f9f9f9;\n}\n\n.table-hover > tbody > tr:hover > td,\n.table-hover > tbody > tr:hover > th {\n  background-color: #f5f5f5;\n}\n\ntable col[class*=\"col-\"] {\n  display: table-column;\n  float: none;\n}\n\ntable td[class*=\"col-\"],\ntable th[class*=\"col-\"] {\n  display: table-cell;\n  float: none;\n}\n\n.table > thead > tr > td.active,\n.table > tbody > tr > td.active,\n.table > tfoot > tr > td.active,\n.table > thead > tr > th.active,\n.table > tbody > tr > th.active,\n.table > tfoot > tr > th.active,\n.table > thead > tr.active > td,\n.table > tbody > tr.active > td,\n.table > tfoot > tr.active > td,\n.table > thead > tr.active > th,\n.table > tbody > tr.active > th,\n.table > tfoot > tr.active > th {\n  background-color: #f5f5f5;\n}\n\n.table > thead > tr > td.success,\n.table > tbody > tr > td.success,\n.table > tfoot > tr > td.success,\n.table > thead > tr > th.success,\n.table > tbody > tr > th.success,\n.table > tfoot > tr > th.success,\n.table > thead > tr.success > td,\n.table > tbody > tr.success > td,\n.table > tfoot > tr.success > td,\n.table > thead > tr.success > th,\n.table > tbody > tr.success > th,\n.table > tfoot > tr.success > th {\n  background-color: #dff0d8;\n  border-color: #d6e9c6;\n}\n\n.table-hover > tbody > tr > td.success:hover,\n.table-hover > tbody > tr > th.success:hover,\n.table-hover > tbody > tr.success:hover > td {\n  background-color: #d0e9c6;\n  border-color: #c9e2b3;\n}\n\n.table > thead > tr > td.danger,\n.table > tbody > tr > td.danger,\n.table > tfoot > tr > td.danger,\n.table > thead > tr > th.danger,\n.table > tbody > tr > th.danger,\n.table > tfoot > tr > th.danger,\n.table > thead > tr.danger > td,\n.table > tbody > tr.danger > td,\n.table > tfoot > tr.danger > td,\n.table > thead > tr.danger > th,\n.table > tbody > tr.danger > th,\n.table > tfoot > tr.danger > th {\n  background-color: #f2dede;\n  border-color: #eed3d7;\n}\n\n.table-hover > tbody > tr > td.danger:hover,\n.table-hover > tbody > tr > th.danger:hover,\n.table-hover > tbody > tr.danger:hover > td {\n  background-color: #ebcccc;\n  border-color: #e6c1c7;\n}\n\n.table > thead > tr > td.warning,\n.table > tbody > tr > td.warning,\n.table > tfoot > tr > td.warning,\n.table > thead > tr > th.warning,\n.table > tbody > tr > th.warning,\n.table > tfoot > tr > th.warning,\n.table > thead > tr.warning > td,\n.table > tbody > tr.warning > td,\n.table > tfoot > tr.warning > td,\n.table > thead > tr.warning > th,\n.table > tbody > tr.warning > th,\n.table > tfoot > tr.warning > th {\n  background-color: #fcf8e3;\n  border-color: #fbeed5;\n}\n\n.table-hover > tbody > tr > td.warning:hover,\n.table-hover > tbody > tr > th.warning:hover,\n.table-hover > tbody > tr.warning:hover > td {\n  background-color: #faf2cc;\n  border-color: #f8e5be;\n}\n\n@media (max-width: 768px) {\n  .table-responsive {\n    width: 100%;\n    margin-bottom: 15px;\n    overflow-x: scroll;\n    overflow-y: hidden;\n    border: 1px solid #dddddd;\n  }\n  .table-responsive > .table {\n    margin-bottom: 0;\n    background-color: #fff;\n  }\n  .table-responsive > .table > thead > tr > th,\n  .table-responsive > .table > tbody > tr > th,\n  .table-responsive > .table > tfoot > tr > th,\n  .table-responsive > .table > thead > tr > td,\n  .table-responsive > .table > tbody > tr > td,\n  .table-responsive > .table > tfoot > tr > td {\n    white-space: nowrap;\n  }\n  .table-responsive > .table-bordered {\n    border: 0;\n  }\n  .table-responsive > .table-bordered > thead > tr > th:first-child,\n  .table-responsive > .table-bordered > tbody > tr > th:first-child,\n  .table-responsive > .table-bordered > tfoot > tr > th:first-child,\n  .table-responsive > .table-bordered > thead > tr > td:first-child,\n  .table-responsive > .table-bordered > tbody > tr > td:first-child,\n  .table-responsive > .table-bordered > tfoot > tr > td:first-child {\n    border-left: 0;\n  }\n  .table-responsive > .table-bordered > thead > tr > th:last-child,\n  .table-responsive > .table-bordered > tbody > tr > th:last-child,\n  .table-responsive > .table-bordered > tfoot > tr > th:last-child,\n  .table-responsive > .table-bordered > thead > tr > td:last-child,\n  .table-responsive > .table-bordered > tbody > tr > td:last-child,\n  .table-responsive > .table-bordered > tfoot > tr > td:last-child {\n    border-right: 0;\n  }\n  .table-responsive > .table-bordered > thead > tr:last-child > th,\n  .table-responsive > .table-bordered > tbody > tr:last-child > th,\n  .table-responsive > .table-bordered > tfoot > tr:last-child > th,\n  .table-responsive > .table-bordered > thead > tr:last-child > td,\n  .table-responsive > .table-bordered > tbody > tr:last-child > td,\n  .table-responsive > .table-bordered > tfoot > tr:last-child > td {\n    border-bottom: 0;\n  }\n}\n\nfieldset {\n  padding: 0;\n  margin: 0;\n  border: 0;\n}\n\nlegend {\n  display: block;\n  width: 100%;\n  padding: 0;\n  margin-bottom: 20px;\n  font-size: 21px;\n  line-height: inherit;\n  color: #333333;\n  border: 0;\n  border-bottom: 1px solid #e5e5e5;\n}\n\nlabel {\n  display: inline-block;\n  margin-bottom: 5px;\n  font-weight: bold;\n}\n\ninput[type=\"search\"] {\n  -webkit-box-sizing: border-box;\n     -moz-box-sizing: border-box;\n          box-sizing: border-box;\n}\n\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n  margin: 4px 0 0;\n  margin-top: 1px \\9;\n  /* IE8-9 */\n\n  line-height: normal;\n}\n\ninput[type=\"file\"] {\n  display: block;\n}\n\nselect[multiple],\nselect[size] {\n  height: auto;\n}\n\nselect optgroup {\n  font-family: inherit;\n  font-size: inherit;\n  font-style: inherit;\n}\n\ninput[type=\"file\"]:focus,\ninput[type=\"radio\"]:focus,\ninput[type=\"checkbox\"]:focus {\n  outline: thin dotted #333;\n  outline: 5px auto -webkit-focus-ring-color;\n  outline-offset: -2px;\n}\n\ninput[type=\"number\"]::-webkit-outer-spin-button,\ninput[type=\"number\"]::-webkit-inner-spin-button {\n  height: auto;\n}\n\n.form-control:-moz-placeholder {\n  color: #999999;\n}\n\n.form-control::-moz-placeholder {\n  color: #999999;\n}\n\n.form-control:-ms-input-placeholder {\n  color: #999999;\n}\n\n.form-control::-webkit-input-placeholder {\n  color: #999999;\n}\n\n.form-control {\n  display: block;\n  width: 100%;\n  height: 34px;\n  padding: 6px 12px;\n  font-size: 14px;\n  line-height: 1.428571429;\n  color: #555555;\n  vertical-align: middle;\n  background-color: #ffffff;\n  border: 1px solid #cccccc;\n  border-radius: 4px;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n  -webkit-transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s;\n          transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s;\n}\n\n.form-control:focus {\n  border-color: #66afe9;\n  outline: 0;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6);\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6);\n}\n\n.form-control[disabled],\n.form-control[readonly],\nfieldset[disabled] .form-control {\n  cursor: not-allowed;\n  background-color: #eeeeee;\n}\n\ntextarea.form-control {\n  height: auto;\n}\n\n.form-group {\n  margin-bottom: 15px;\n}\n\n.radio,\n.checkbox {\n  display: block;\n  min-height: 20px;\n  padding-left: 20px;\n  margin-top: 10px;\n  margin-bottom: 10px;\n  vertical-align: middle;\n}\n\n.radio label,\n.checkbox label {\n  display: inline;\n  margin-bottom: 0;\n  font-weight: normal;\n  cursor: pointer;\n}\n\n.radio input[type=\"radio\"],\n.radio-inline input[type=\"radio\"],\n.checkbox input[type=\"checkbox\"],\n.checkbox-inline input[type=\"checkbox\"] {\n  float: left;\n  margin-left: -20px;\n}\n\n.radio + .radio,\n.checkbox + .checkbox {\n  margin-top: -5px;\n}\n\n.radio-inline,\n.checkbox-inline {\n  display: inline-block;\n  padding-left: 20px;\n  margin-bottom: 0;\n  font-weight: normal;\n  vertical-align: middle;\n  cursor: pointer;\n}\n\n.radio-inline + .radio-inline,\n.checkbox-inline + .checkbox-inline {\n  margin-top: 0;\n  margin-left: 10px;\n}\n\ninput[type=\"radio\"][disabled],\ninput[type=\"checkbox\"][disabled],\n.radio[disabled],\n.radio-inline[disabled],\n.checkbox[disabled],\n.checkbox-inline[disabled],\nfieldset[disabled] input[type=\"radio\"],\nfieldset[disabled] input[type=\"checkbox\"],\nfieldset[disabled] .radio,\nfieldset[disabled] .radio-inline,\nfieldset[disabled] .checkbox,\nfieldset[disabled] .checkbox-inline {\n  cursor: not-allowed;\n}\n\n.input-sm {\n  height: 30px;\n  padding: 5px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px;\n}\n\nselect.input-sm {\n  height: 30px;\n  line-height: 30px;\n}\n\ntextarea.input-sm {\n  height: auto;\n}\n\n.input-lg {\n  height: 45px;\n  padding: 10px 16px;\n  font-size: 18px;\n  line-height: 1.33;\n  border-radius: 6px;\n}\n\nselect.input-lg {\n  height: 45px;\n  line-height: 45px;\n}\n\ntextarea.input-lg {\n  height: auto;\n}\n\n.has-warning .help-block,\n.has-warning .control-label {\n  color: #c09853;\n}\n\n.has-warning .form-control {\n  border-color: #c09853;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n\n.has-warning .form-control:focus {\n  border-color: #a47e3c;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e;\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e;\n}\n\n.has-warning .input-group-addon {\n  color: #c09853;\n  background-color: #fcf8e3;\n  border-color: #c09853;\n}\n\n.has-error .help-block,\n.has-error .control-label {\n  color: #b94a48;\n}\n\n.has-error .form-control {\n  border-color: #b94a48;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n\n.has-error .form-control:focus {\n  border-color: #953b39;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392;\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392;\n}\n\n.has-error .input-group-addon {\n  color: #b94a48;\n  background-color: #f2dede;\n  border-color: #b94a48;\n}\n\n.has-success .help-block,\n.has-success .control-label {\n  color: #468847;\n}\n\n.has-success .form-control {\n  border-color: #468847;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n\n.has-success .form-control:focus {\n  border-color: #356635;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b;\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b;\n}\n\n.has-success .input-group-addon {\n  color: #468847;\n  background-color: #dff0d8;\n  border-color: #468847;\n}\n\n.form-control-static {\n  padding-top: 7px;\n  margin-bottom: 0;\n}\n\n.help-block {\n  display: block;\n  margin-top: 5px;\n  margin-bottom: 10px;\n  color: #737373;\n}\n\n@media (min-width: 768px) {\n  .form-inline .form-group {\n    display: inline-block;\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .form-inline .form-control {\n    display: inline-block;\n  }\n  .form-inline .radio,\n  .form-inline .checkbox {\n    display: inline-block;\n    padding-left: 0;\n    margin-top: 0;\n    margin-bottom: 0;\n  }\n  .form-inline .radio input[type=\"radio\"],\n  .form-inline .checkbox input[type=\"checkbox\"] {\n    float: none;\n    margin-left: 0;\n  }\n}\n\n.form-horizontal .control-label,\n.form-horizontal .radio,\n.form-horizontal .checkbox,\n.form-horizontal .radio-inline,\n.form-horizontal .checkbox-inline {\n  padding-top: 7px;\n  margin-top: 0;\n  margin-bottom: 0;\n}\n\n.form-horizontal .form-group {\n  margin-right: -15px;\n  margin-left: -15px;\n}\n\n.form-horizontal .form-group:before,\n.form-horizontal .form-group:after {\n  display: table;\n  content: \" \";\n}\n\n.form-horizontal .form-group:after {\n  clear: both;\n}\n\n.form-horizontal .form-group:before,\n.form-horizontal .form-group:after {\n  display: table;\n  content: \" \";\n}\n\n.form-horizontal .form-group:after {\n  clear: both;\n}\n\n@media (min-width: 768px) {\n  .form-horizontal .control-label {\n    text-align: right;\n  }\n}\n\n.btn {\n  display: inline-block;\n  padding: 6px 12px;\n  margin-bottom: 0;\n  font-size: 14px;\n  font-weight: normal;\n  line-height: 1.428571429;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: middle;\n  cursor: pointer;\n  border: 1px solid transparent;\n  border-radius: 4px;\n  -webkit-user-select: none;\n     -moz-user-select: none;\n      -ms-user-select: none;\n       -o-user-select: none;\n          user-select: none;\n}\n\n.btn:focus {\n  outline: thin dotted #333;\n  outline: 5px auto -webkit-focus-ring-color;\n  outline-offset: -2px;\n}\n\n.btn:hover,\n.btn:focus {\n  color: #333333;\n  text-decoration: none;\n}\n\n.btn:active,\n.btn.active {\n  background-image: none;\n  outline: 0;\n  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n          box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n}\n\n.btn.disabled,\n.btn[disabled],\nfieldset[disabled] .btn {\n  pointer-events: none;\n  cursor: not-allowed;\n  opacity: 0.65;\n  filter: alpha(opacity=65);\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n\n.btn-default {\n  color: #333333;\n  background-color: #ffffff;\n  border-color: #cccccc;\n}\n\n.btn-default:hover,\n.btn-default:focus,\n.btn-default:active,\n.btn-default.active,\n.open .dropdown-toggle.btn-default {\n  color: #333333;\n  background-color: #ebebeb;\n  border-color: #adadad;\n}\n\n.btn-default:active,\n.btn-default.active,\n.open .dropdown-toggle.btn-default {\n  background-image: none;\n}\n\n.btn-default.disabled,\n.btn-default[disabled],\nfieldset[disabled] .btn-default,\n.btn-default.disabled:hover,\n.btn-default[disabled]:hover,\nfieldset[disabled] .btn-default:hover,\n.btn-default.disabled:focus,\n.btn-default[disabled]:focus,\nfieldset[disabled] .btn-default:focus,\n.btn-default.disabled:active,\n.btn-default[disabled]:active,\nfieldset[disabled] .btn-default:active,\n.btn-default.disabled.active,\n.btn-default[disabled].active,\nfieldset[disabled] .btn-default.active {\n  background-color: #ffffff;\n  border-color: #cccccc;\n}\n\n.btn-primary {\n  color: #ffffff;\n  background-color: #428bca;\n  border-color: #357ebd;\n}\n\n.btn-primary:hover,\n.btn-primary:focus,\n.btn-primary:active,\n.btn-primary.active,\n.open .dropdown-toggle.btn-primary {\n  color: #ffffff;\n  background-color: #3276b1;\n  border-color: #285e8e;\n}\n\n.btn-primary:active,\n.btn-primary.active,\n.open .dropdown-toggle.btn-primary {\n  background-image: none;\n}\n\n.btn-primary.disabled,\n.btn-primary[disabled],\nfieldset[disabled] .btn-primary,\n.btn-primary.disabled:hover,\n.btn-primary[disabled]:hover,\nfieldset[disabled] .btn-primary:hover,\n.btn-primary.disabled:focus,\n.btn-primary[disabled]:focus,\nfieldset[disabled] .btn-primary:focus,\n.btn-primary.disabled:active,\n.btn-primary[disabled]:active,\nfieldset[disabled] .btn-primary:active,\n.btn-primary.disabled.active,\n.btn-primary[disabled].active,\nfieldset[disabled] .btn-primary.active {\n  background-color: #428bca;\n  border-color: #357ebd;\n}\n\n.btn-warning {\n  color: #ffffff;\n  background-color: #f0ad4e;\n  border-color: #eea236;\n}\n\n.btn-warning:hover,\n.btn-warning:focus,\n.btn-warning:active,\n.btn-warning.active,\n.open .dropdown-toggle.btn-warning {\n  color: #ffffff;\n  background-color: #ed9c28;\n  border-color: #d58512;\n}\n\n.btn-warning:active,\n.btn-warning.active,\n.open .dropdown-toggle.btn-warning {\n  background-image: none;\n}\n\n.btn-warning.disabled,\n.btn-warning[disabled],\nfieldset[disabled] .btn-warning,\n.btn-warning.disabled:hover,\n.btn-warning[disabled]:hover,\nfieldset[disabled] .btn-warning:hover,\n.btn-warning.disabled:focus,\n.btn-warning[disabled]:focus,\nfieldset[disabled] .btn-warning:focus,\n.btn-warning.disabled:active,\n.btn-warning[disabled]:active,\nfieldset[disabled] .btn-warning:active,\n.btn-warning.disabled.active,\n.btn-warning[disabled].active,\nfieldset[disabled] .btn-warning.active {\n  background-color: #f0ad4e;\n  border-color: #eea236;\n}\n\n.btn-danger {\n  color: #ffffff;\n  background-color: #d9534f;\n  border-color: #d43f3a;\n}\n\n.btn-danger:hover,\n.btn-danger:focus,\n.btn-danger:active,\n.btn-danger.active,\n.open .dropdown-toggle.btn-danger {\n  color: #ffffff;\n  background-color: #d2322d;\n  border-color: #ac2925;\n}\n\n.btn-danger:active,\n.btn-danger.active,\n.open .dropdown-toggle.btn-danger {\n  background-image: none;\n}\n\n.btn-danger.disabled,\n.btn-danger[disabled],\nfieldset[disabled] .btn-danger,\n.btn-danger.disabled:hover,\n.btn-danger[disabled]:hover,\nfieldset[disabled] .btn-danger:hover,\n.btn-danger.disabled:focus,\n.btn-danger[disabled]:focus,\nfieldset[disabled] .btn-danger:focus,\n.btn-danger.disabled:active,\n.btn-danger[disabled]:active,\nfieldset[disabled] .btn-danger:active,\n.btn-danger.disabled.active,\n.btn-danger[disabled].active,\nfieldset[disabled] .btn-danger.active {\n  background-color: #d9534f;\n  border-color: #d43f3a;\n}\n\n.btn-success {\n  color: #ffffff;\n  background-color: #5cb85c;\n  border-color: #4cae4c;\n}\n\n.btn-success:hover,\n.btn-success:focus,\n.btn-success:active,\n.btn-success.active,\n.open .dropdown-toggle.btn-success {\n  color: #ffffff;\n  background-color: #47a447;\n  border-color: #398439;\n}\n\n.btn-success:active,\n.btn-success.active,\n.open .dropdown-toggle.btn-success {\n  background-image: none;\n}\n\n.btn-success.disabled,\n.btn-success[disabled],\nfieldset[disabled] .btn-success,\n.btn-success.disabled:hover,\n.btn-success[disabled]:hover,\nfieldset[disabled] .btn-success:hover,\n.btn-success.disabled:focus,\n.btn-success[disabled]:focus,\nfieldset[disabled] .btn-success:focus,\n.btn-success.disabled:active,\n.btn-success[disabled]:active,\nfieldset[disabled] .btn-success:active,\n.btn-success.disabled.active,\n.btn-success[disabled].active,\nfieldset[disabled] .btn-success.active {\n  background-color: #5cb85c;\n  border-color: #4cae4c;\n}\n\n.btn-info {\n  color: #ffffff;\n  background-color: #5bc0de;\n  border-color: #46b8da;\n}\n\n.btn-info:hover,\n.btn-info:focus,\n.btn-info:active,\n.btn-info.active,\n.open .dropdown-toggle.btn-info {\n  color: #ffffff;\n  background-color: #39b3d7;\n  border-color: #269abc;\n}\n\n.btn-info:active,\n.btn-info.active,\n.open .dropdown-toggle.btn-info {\n  background-image: none;\n}\n\n.btn-info.disabled,\n.btn-info[disabled],\nfieldset[disabled] .btn-info,\n.btn-info.disabled:hover,\n.btn-info[disabled]:hover,\nfieldset[disabled] .btn-info:hover,\n.btn-info.disabled:focus,\n.btn-info[disabled]:focus,\nfieldset[disabled] .btn-info:focus,\n.btn-info.disabled:active,\n.btn-info[disabled]:active,\nfieldset[disabled] .btn-info:active,\n.btn-info.disabled.active,\n.btn-info[disabled].active,\nfieldset[disabled] .btn-info.active {\n  background-color: #5bc0de;\n  border-color: #46b8da;\n}\n\n.btn-link {\n  font-weight: normal;\n  color: #428bca;\n  cursor: pointer;\n  border-radius: 0;\n}\n\n.btn-link,\n.btn-link:active,\n.btn-link[disabled],\nfieldset[disabled] .btn-link {\n  background-color: transparent;\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n\n.btn-link,\n.btn-link:hover,\n.btn-link:focus,\n.btn-link:active {\n  border-color: transparent;\n}\n\n.btn-link:hover,\n.btn-link:focus {\n  color: #2a6496;\n  text-decoration: underline;\n  background-color: transparent;\n}\n\n.btn-link[disabled]:hover,\nfieldset[disabled] .btn-link:hover,\n.btn-link[disabled]:focus,\nfieldset[disabled] .btn-link:focus {\n  color: #999999;\n  text-decoration: none;\n}\n\n.btn-lg {\n  padding: 10px 16px;\n  font-size: 18px;\n  line-height: 1.33;\n  border-radius: 6px;\n}\n\n.btn-sm,\n.btn-xs {\n  padding: 5px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px;\n}\n\n.btn-xs {\n  padding: 1px 5px;\n}\n\n.btn-block {\n  display: block;\n  width: 100%;\n  padding-right: 0;\n  padding-left: 0;\n}\n\n.btn-block + .btn-block {\n  margin-top: 5px;\n}\n\ninput[type=\"submit\"].btn-block,\ninput[type=\"reset\"].btn-block,\ninput[type=\"button\"].btn-block {\n  width: 100%;\n}\n\n.fade {\n  opacity: 0;\n  -webkit-transition: opacity 0.15s linear;\n          transition: opacity 0.15s linear;\n}\n\n.fade.in {\n  opacity: 1;\n}\n\n.collapse {\n  display: none;\n}\n\n.collapse.in {\n  display: block;\n}\n\n.collapsing {\n  position: relative;\n  height: 0;\n  overflow: hidden;\n  -webkit-transition: height 0.35s ease;\n          transition: height 0.35s ease;\n}\n\n@font-face {\n  font-family: 'Glyphicons Halflings';\n  src: url('../fonts/glyphicons-halflings-regular.eot');\n  src: url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/glyphicons-halflings-regular.woff') format('woff'), url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../fonts/glyphicons-halflings-regular.svg#glyphicons-halflingsregular') format('svg');\n}\n\n.glyphicon {\n  position: relative;\n  top: 1px;\n  display: inline-block;\n  font-family: 'Glyphicons Halflings';\n  -webkit-font-smoothing: antialiased;\n  font-style: normal;\n  font-weight: normal;\n  line-height: 1;\n}\n\n.glyphicon-asterisk:before {\n  content: \"\\2a\";\n}\n\n.glyphicon-plus:before {\n  content: \"\\2b\";\n}\n\n.glyphicon-euro:before {\n  content: \"\\20ac\";\n}\n\n.glyphicon-minus:before {\n  content: \"\\2212\";\n}\n\n.glyphicon-cloud:before {\n  content: \"\\2601\";\n}\n\n.glyphicon-envelope:before {\n  content: \"\\2709\";\n}\n\n.glyphicon-pencil:before {\n  content: \"\\270f\";\n}\n\n.glyphicon-glass:before {\n  content: \"\\e001\";\n}\n\n.glyphicon-music:before {\n  content: \"\\e002\";\n}\n\n.glyphicon-search:before {\n  content: \"\\e003\";\n}\n\n.glyphicon-heart:before {\n  content: \"\\e005\";\n}\n\n.glyphicon-star:before {\n  content: \"\\e006\";\n}\n\n.glyphicon-star-empty:before {\n  content: \"\\e007\";\n}\n\n.glyphicon-user:before {\n  content: \"\\e008\";\n}\n\n.glyphicon-film:before {\n  content: \"\\e009\";\n}\n\n.glyphicon-th-large:before {\n  content: \"\\e010\";\n}\n\n.glyphicon-th:before {\n  content: \"\\e011\";\n}\n\n.glyphicon-th-list:before {\n  content: \"\\e012\";\n}\n\n.glyphicon-ok:before {\n  content: \"\\e013\";\n}\n\n.glyphicon-remove:before {\n  content: \"\\e014\";\n}\n\n.glyphicon-zoom-in:before {\n  content: \"\\e015\";\n}\n\n.glyphicon-zoom-out:before {\n  content: \"\\e016\";\n}\n\n.glyphicon-off:before {\n  content: \"\\e017\";\n}\n\n.glyphicon-signal:before {\n  content: \"\\e018\";\n}\n\n.glyphicon-cog:before {\n  content: \"\\e019\";\n}\n\n.glyphicon-trash:before {\n  content: \"\\e020\";\n}\n\n.glyphicon-home:before {\n  content: \"\\e021\";\n}\n\n.glyphicon-file:before {\n  content: \"\\e022\";\n}\n\n.glyphicon-time:before {\n  content: \"\\e023\";\n}\n\n.glyphicon-road:before {\n  content: \"\\e024\";\n}\n\n.glyphicon-download-alt:before {\n  content: \"\\e025\";\n}\n\n.glyphicon-download:before {\n  content: \"\\e026\";\n}\n\n.glyphicon-upload:before {\n  content: \"\\e027\";\n}\n\n.glyphicon-inbox:before {\n  content: \"\\e028\";\n}\n\n.glyphicon-play-circle:before {\n  content: \"\\e029\";\n}\n\n.glyphicon-repeat:before {\n  content: \"\\e030\";\n}\n\n.glyphicon-refresh:before {\n  content: \"\\e031\";\n}\n\n.glyphicon-list-alt:before {\n  content: \"\\e032\";\n}\n\n.glyphicon-flag:before {\n  content: \"\\e034\";\n}\n\n.glyphicon-headphones:before {\n  content: \"\\e035\";\n}\n\n.glyphicon-volume-off:before {\n  content: \"\\e036\";\n}\n\n.glyphicon-volume-down:before {\n  content: \"\\e037\";\n}\n\n.glyphicon-volume-up:before {\n  content: \"\\e038\";\n}\n\n.glyphicon-qrcode:before {\n  content: \"\\e039\";\n}\n\n.glyphicon-barcode:before {\n  content: \"\\e040\";\n}\n\n.glyphicon-tag:before {\n  content: \"\\e041\";\n}\n\n.glyphicon-tags:before {\n  content: \"\\e042\";\n}\n\n.glyphicon-book:before {\n  content: \"\\e043\";\n}\n\n.glyphicon-print:before {\n  content: \"\\e045\";\n}\n\n.glyphicon-font:before {\n  content: \"\\e047\";\n}\n\n.glyphicon-bold:before {\n  content: \"\\e048\";\n}\n\n.glyphicon-italic:before {\n  content: \"\\e049\";\n}\n\n.glyphicon-text-height:before {\n  content: \"\\e050\";\n}\n\n.glyphicon-text-width:before {\n  content: \"\\e051\";\n}\n\n.glyphicon-align-left:before {\n  content: \"\\e052\";\n}\n\n.glyphicon-align-center:before {\n  content: \"\\e053\";\n}\n\n.glyphicon-align-right:before {\n  content: \"\\e054\";\n}\n\n.glyphicon-align-justify:before {\n  content: \"\\e055\";\n}\n\n.glyphicon-list:before {\n  content: \"\\e056\";\n}\n\n.glyphicon-indent-left:before {\n  content: \"\\e057\";\n}\n\n.glyphicon-indent-right:before {\n  content: \"\\e058\";\n}\n\n.glyphicon-facetime-video:before {\n  content: \"\\e059\";\n}\n\n.glyphicon-picture:before {\n  content: \"\\e060\";\n}\n\n.glyphicon-map-marker:before {\n  content: \"\\e062\";\n}\n\n.glyphicon-adjust:before {\n  content: \"\\e063\";\n}\n\n.glyphicon-tint:before {\n  content: \"\\e064\";\n}\n\n.glyphicon-edit:before {\n  content: \"\\e065\";\n}\n\n.glyphicon-share:before {\n  content: \"\\e066\";\n}\n\n.glyphicon-check:before {\n  content: \"\\e067\";\n}\n\n.glyphicon-move:before {\n  content: \"\\e068\";\n}\n\n.glyphicon-step-backward:before {\n  content: \"\\e069\";\n}\n\n.glyphicon-fast-backward:before {\n  content: \"\\e070\";\n}\n\n.glyphicon-backward:before {\n  content: \"\\e071\";\n}\n\n.glyphicon-play:before {\n  content: \"\\e072\";\n}\n\n.glyphicon-pause:before {\n  content: \"\\e073\";\n}\n\n.glyphicon-stop:before {\n  content: \"\\e074\";\n}\n\n.glyphicon-forward:before {\n  content: \"\\e075\";\n}\n\n.glyphicon-fast-forward:before {\n  content: \"\\e076\";\n}\n\n.glyphicon-step-forward:before {\n  content: \"\\e077\";\n}\n\n.glyphicon-eject:before {\n  content: \"\\e078\";\n}\n\n.glyphicon-chevron-left:before {\n  content: \"\\e079\";\n}\n\n.glyphicon-chevron-right:before {\n  content: \"\\e080\";\n}\n\n.glyphicon-plus-sign:before {\n  content: \"\\e081\";\n}\n\n.glyphicon-minus-sign:before {\n  content: \"\\e082\";\n}\n\n.glyphicon-remove-sign:before {\n  content: \"\\e083\";\n}\n\n.glyphicon-ok-sign:before {\n  content: \"\\e084\";\n}\n\n.glyphicon-question-sign:before {\n  content: \"\\e085\";\n}\n\n.glyphicon-info-sign:before {\n  content: \"\\e086\";\n}\n\n.glyphicon-screenshot:before {\n  content: \"\\e087\";\n}\n\n.glyphicon-remove-circle:before {\n  content: \"\\e088\";\n}\n\n.glyphicon-ok-circle:before {\n  content: \"\\e089\";\n}\n\n.glyphicon-ban-circle:before {\n  content: \"\\e090\";\n}\n\n.glyphicon-arrow-left:before {\n  content: \"\\e091\";\n}\n\n.glyphicon-arrow-right:before {\n  content: \"\\e092\";\n}\n\n.glyphicon-arrow-up:before {\n  content: \"\\e093\";\n}\n\n.glyphicon-arrow-down:before {\n  content: \"\\e094\";\n}\n\n.glyphicon-share-alt:before {\n  content: \"\\e095\";\n}\n\n.glyphicon-resize-full:before {\n  content: \"\\e096\";\n}\n\n.glyphicon-resize-small:before {\n  content: \"\\e097\";\n}\n\n.glyphicon-exclamation-sign:before {\n  content: \"\\e101\";\n}\n\n.glyphicon-gift:before {\n  content: \"\\e102\";\n}\n\n.glyphicon-leaf:before {\n  content: \"\\e103\";\n}\n\n.glyphicon-eye-open:before {\n  content: \"\\e105\";\n}\n\n.glyphicon-eye-close:before {\n  content: \"\\e106\";\n}\n\n.glyphicon-warning-sign:before {\n  content: \"\\e107\";\n}\n\n.glyphicon-plane:before {\n  content: \"\\e108\";\n}\n\n.glyphicon-random:before {\n  content: \"\\e110\";\n}\n\n.glyphicon-comment:before {\n  content: \"\\e111\";\n}\n\n.glyphicon-magnet:before {\n  content: \"\\e112\";\n}\n\n.glyphicon-chevron-up:before {\n  content: \"\\e113\";\n}\n\n.glyphicon-chevron-down:before {\n  content: \"\\e114\";\n}\n\n.glyphicon-retweet:before {\n  content: \"\\e115\";\n}\n\n.glyphicon-shopping-cart:before {\n  content: \"\\e116\";\n}\n\n.glyphicon-folder-close:before {\n  content: \"\\e117\";\n}\n\n.glyphicon-folder-open:before {\n  content: \"\\e118\";\n}\n\n.glyphicon-resize-vertical:before {\n  content: \"\\e119\";\n}\n\n.glyphicon-resize-horizontal:before {\n  content: \"\\e120\";\n}\n\n.glyphicon-hdd:before {\n  content: \"\\e121\";\n}\n\n.glyphicon-bullhorn:before {\n  content: \"\\e122\";\n}\n\n.glyphicon-certificate:before {\n  content: \"\\e124\";\n}\n\n.glyphicon-thumbs-up:before {\n  content: \"\\e125\";\n}\n\n.glyphicon-thumbs-down:before {\n  content: \"\\e126\";\n}\n\n.glyphicon-hand-right:before {\n  content: \"\\e127\";\n}\n\n.glyphicon-hand-left:before {\n  content: \"\\e128\";\n}\n\n.glyphicon-hand-up:before {\n  content: \"\\e129\";\n}\n\n.glyphicon-hand-down:before {\n  content: \"\\e130\";\n}\n\n.glyphicon-circle-arrow-right:before {\n  content: \"\\e131\";\n}\n\n.glyphicon-circle-arrow-left:before {\n  content: \"\\e132\";\n}\n\n.glyphicon-circle-arrow-up:before {\n  content: \"\\e133\";\n}\n\n.glyphicon-circle-arrow-down:before {\n  content: \"\\e134\";\n}\n\n.glyphicon-globe:before {\n  content: \"\\e135\";\n}\n\n.glyphicon-tasks:before {\n  content: \"\\e137\";\n}\n\n.glyphicon-filter:before {\n  content: \"\\e138\";\n}\n\n.glyphicon-fullscreen:before {\n  content: \"\\e140\";\n}\n\n.glyphicon-dashboard:before {\n  content: \"\\e141\";\n}\n\n.glyphicon-heart-empty:before {\n  content: \"\\e143\";\n}\n\n.glyphicon-link:before {\n  content: \"\\e144\";\n}\n\n.glyphicon-phone:before {\n  content: \"\\e145\";\n}\n\n.glyphicon-usd:before {\n  content: \"\\e148\";\n}\n\n.glyphicon-gbp:before {\n  content: \"\\e149\";\n}\n\n.glyphicon-sort:before {\n  content: \"\\e150\";\n}\n\n.glyphicon-sort-by-alphabet:before {\n  content: \"\\e151\";\n}\n\n.glyphicon-sort-by-alphabet-alt:before {\n  content: \"\\e152\";\n}\n\n.glyphicon-sort-by-order:before {\n  content: \"\\e153\";\n}\n\n.glyphicon-sort-by-order-alt:before {\n  content: \"\\e154\";\n}\n\n.glyphicon-sort-by-attributes:before {\n  content: \"\\e155\";\n}\n\n.glyphicon-sort-by-attributes-alt:before {\n  content: \"\\e156\";\n}\n\n.glyphicon-unchecked:before {\n  content: \"\\e157\";\n}\n\n.glyphicon-expand:before {\n  content: \"\\e158\";\n}\n\n.glyphicon-collapse-down:before {\n  content: \"\\e159\";\n}\n\n.glyphicon-collapse-up:before {\n  content: \"\\e160\";\n}\n\n.glyphicon-log-in:before {\n  content: \"\\e161\";\n}\n\n.glyphicon-flash:before {\n  content: \"\\e162\";\n}\n\n.glyphicon-log-out:before {\n  content: \"\\e163\";\n}\n\n.glyphicon-new-window:before {\n  content: \"\\e164\";\n}\n\n.glyphicon-record:before {\n  content: \"\\e165\";\n}\n\n.glyphicon-save:before {\n  content: \"\\e166\";\n}\n\n.glyphicon-open:before {\n  content: \"\\e167\";\n}\n\n.glyphicon-saved:before {\n  content: \"\\e168\";\n}\n\n.glyphicon-import:before {\n  content: \"\\e169\";\n}\n\n.glyphicon-export:before {\n  content: \"\\e170\";\n}\n\n.glyphicon-send:before {\n  content: \"\\e171\";\n}\n\n.glyphicon-floppy-disk:before {\n  content: \"\\e172\";\n}\n\n.glyphicon-floppy-saved:before {\n  content: \"\\e173\";\n}\n\n.glyphicon-floppy-remove:before {\n  content: \"\\e174\";\n}\n\n.glyphicon-floppy-save:before {\n  content: \"\\e175\";\n}\n\n.glyphicon-floppy-open:before {\n  content: \"\\e176\";\n}\n\n.glyphicon-credit-card:before {\n  content: \"\\e177\";\n}\n\n.glyphicon-transfer:before {\n  content: \"\\e178\";\n}\n\n.glyphicon-cutlery:before {\n  content: \"\\e179\";\n}\n\n.glyphicon-header:before {\n  content: \"\\e180\";\n}\n\n.glyphicon-compressed:before {\n  content: \"\\e181\";\n}\n\n.glyphicon-earphone:before {\n  content: \"\\e182\";\n}\n\n.glyphicon-phone-alt:before {\n  content: \"\\e183\";\n}\n\n.glyphicon-tower:before {\n  content: \"\\e184\";\n}\n\n.glyphicon-stats:before {\n  content: \"\\e185\";\n}\n\n.glyphicon-sd-video:before {\n  content: \"\\e186\";\n}\n\n.glyphicon-hd-video:before {\n  content: \"\\e187\";\n}\n\n.glyphicon-subtitles:before {\n  content: \"\\e188\";\n}\n\n.glyphicon-sound-stereo:before {\n  content: \"\\e189\";\n}\n\n.glyphicon-sound-dolby:before {\n  content: \"\\e190\";\n}\n\n.glyphicon-sound-5-1:before {\n  content: \"\\e191\";\n}\n\n.glyphicon-sound-6-1:before {\n  content: \"\\e192\";\n}\n\n.glyphicon-sound-7-1:before {\n  content: \"\\e193\";\n}\n\n.glyphicon-copyright-mark:before {\n  content: \"\\e194\";\n}\n\n.glyphicon-registration-mark:before {\n  content: \"\\e195\";\n}\n\n.glyphicon-cloud-download:before {\n  content: \"\\e197\";\n}\n\n.glyphicon-cloud-upload:before {\n  content: \"\\e198\";\n}\n\n.glyphicon-tree-conifer:before {\n  content: \"\\e199\";\n}\n\n.glyphicon-tree-deciduous:before {\n  content: \"\\e200\";\n}\n\n.glyphicon-briefcase:before {\n  content: \"\\1f4bc\";\n}\n\n.glyphicon-calendar:before {\n  content: \"\\1f4c5\";\n}\n\n.glyphicon-pushpin:before {\n  content: \"\\1f4cc\";\n}\n\n.glyphicon-paperclip:before {\n  content: \"\\1f4ce\";\n}\n\n.glyphicon-camera:before {\n  content: \"\\1f4f7\";\n}\n\n.glyphicon-lock:before {\n  content: \"\\1f512\";\n}\n\n.glyphicon-bell:before {\n  content: \"\\1f514\";\n}\n\n.glyphicon-bookmark:before {\n  content: \"\\1f516\";\n}\n\n.glyphicon-fire:before {\n  content: \"\\1f525\";\n}\n\n.glyphicon-wrench:before {\n  content: \"\\1f527\";\n}\n\n.caret {\n  display: inline-block;\n  width: 0;\n  height: 0;\n  margin-left: 2px;\n  vertical-align: middle;\n  border-top: 4px solid #000000;\n  border-right: 4px solid transparent;\n  border-bottom: 0 dotted;\n  border-left: 4px solid transparent;\n  content: \"\";\n}\n\n.dropdown {\n  position: relative;\n}\n\n.dropdown-toggle:focus {\n  outline: 0;\n}\n\n.dropdown-menu {\n  position: absolute;\n  top: 100%;\n  left: 0;\n  z-index: 1000;\n  display: none;\n  float: left;\n  min-width: 160px;\n  padding: 5px 0;\n  margin: 2px 0 0;\n  font-size: 14px;\n  list-style: none;\n  background-color: #ffffff;\n  border: 1px solid #cccccc;\n  border: 1px solid rgba(0, 0, 0, 0.15);\n  border-radius: 4px;\n  -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);\n          box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);\n  background-clip: padding-box;\n}\n\n.dropdown-menu.pull-right {\n  right: 0;\n  left: auto;\n}\n\n.dropdown-menu .divider {\n  height: 1px;\n  margin: 9px 0;\n  overflow: hidden;\n  background-color: #e5e5e5;\n}\n\n.dropdown-menu > li > a {\n  display: block;\n  padding: 3px 20px;\n  clear: both;\n  font-weight: normal;\n  line-height: 1.428571429;\n  color: #333333;\n  white-space: nowrap;\n}\n\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n  color: #ffffff;\n  text-decoration: none;\n  background-color: #428bca;\n}\n\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n  color: #ffffff;\n  text-decoration: none;\n  background-color: #428bca;\n  outline: 0;\n}\n\n.dropdown-menu > .disabled > a,\n.dropdown-menu > .disabled > a:hover,\n.dropdown-menu > .disabled > a:focus {\n  color: #999999;\n}\n\n.dropdown-menu > .disabled > a:hover,\n.dropdown-menu > .disabled > a:focus {\n  text-decoration: none;\n  cursor: not-allowed;\n  background-color: transparent;\n  background-image: none;\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);\n}\n\n.open > .dropdown-menu {\n  display: block;\n}\n\n.open > a {\n  outline: 0;\n}\n\n.dropdown-header {\n  display: block;\n  padding: 3px 20px;\n  font-size: 12px;\n  line-height: 1.428571429;\n  color: #999999;\n}\n\n.dropdown-backdrop {\n  position: fixed;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 990;\n}\n\n.pull-right > .dropdown-menu {\n  right: 0;\n  left: auto;\n}\n\n.dropup .caret,\n.navbar-fixed-bottom .dropdown .caret {\n  border-top: 0 dotted;\n  border-bottom: 4px solid #000000;\n  content: \"\";\n}\n\n.dropup .dropdown-menu,\n.navbar-fixed-bottom .dropdown .dropdown-menu {\n  top: auto;\n  bottom: 100%;\n  margin-bottom: 1px;\n}\n\n@media (min-width: 768px) {\n  .navbar-right .dropdown-menu {\n    right: 0;\n    left: auto;\n  }\n}\n\n.btn-default .caret {\n  border-top-color: #333333;\n}\n\n.btn-primary .caret,\n.btn-success .caret,\n.btn-warning .caret,\n.btn-danger .caret,\n.btn-info .caret {\n  border-top-color: #fff;\n}\n\n.dropup .btn-default .caret {\n  border-bottom-color: #333333;\n}\n\n.dropup .btn-primary .caret,\n.dropup .btn-success .caret,\n.dropup .btn-warning .caret,\n.dropup .btn-danger .caret,\n.dropup .btn-info .caret {\n  border-bottom-color: #fff;\n}\n\n.btn-group,\n.btn-group-vertical {\n  position: relative;\n  display: inline-block;\n  vertical-align: middle;\n}\n\n.btn-group > .btn,\n.btn-group-vertical > .btn {\n  position: relative;\n  float: left;\n}\n\n.btn-group > .btn:hover,\n.btn-group-vertical > .btn:hover,\n.btn-group > .btn:focus,\n.btn-group-vertical > .btn:focus,\n.btn-group > .btn:active,\n.btn-group-vertical > .btn:active,\n.btn-group > .btn.active,\n.btn-group-vertical > .btn.active {\n  z-index: 2;\n}\n\n.btn-group > .btn:focus,\n.btn-group-vertical > .btn:focus {\n  outline: none;\n}\n\n.btn-group .btn + .btn,\n.btn-group .btn + .btn-group,\n.btn-group .btn-group + .btn,\n.btn-group .btn-group + .btn-group {\n  margin-left: -1px;\n}\n\n.btn-toolbar:before,\n.btn-toolbar:after {\n  display: table;\n  content: \" \";\n}\n\n.btn-toolbar:after {\n  clear: both;\n}\n\n.btn-toolbar:before,\n.btn-toolbar:after {\n  display: table;\n  content: \" \";\n}\n\n.btn-toolbar:after {\n  clear: both;\n}\n\n.btn-toolbar .btn-group {\n  float: left;\n}\n\n.btn-toolbar > .btn + .btn,\n.btn-toolbar > .btn-group + .btn,\n.btn-toolbar > .btn + .btn-group,\n.btn-toolbar > .btn-group + .btn-group {\n  margin-left: 5px;\n}\n\n.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {\n  border-radius: 0;\n}\n\n.btn-group > .btn:first-child {\n  margin-left: 0;\n}\n\n.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n\n.btn-group > .btn:last-child:not(:first-child),\n.btn-group > .dropdown-toggle:not(:first-child) {\n  border-bottom-left-radius: 0;\n  border-top-left-radius: 0;\n}\n\n.btn-group > .btn-group {\n  float: left;\n}\n\n.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {\n  border-radius: 0;\n}\n\n.btn-group > .btn-group:first-child > .btn:last-child,\n.btn-group > .btn-group:first-child > .dropdown-toggle {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n\n.btn-group > .btn-group:last-child > .btn:first-child {\n  border-bottom-left-radius: 0;\n  border-top-left-radius: 0;\n}\n\n.btn-group .dropdown-toggle:active,\n.btn-group.open .dropdown-toggle {\n  outline: 0;\n}\n\n.btn-group-xs > .btn {\n  padding: 5px 10px;\n  padding: 1px 5px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px;\n}\n\n.btn-group-sm > .btn {\n  padding: 5px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px;\n}\n\n.btn-group-lg > .btn {\n  padding: 10px 16px;\n  font-size: 18px;\n  line-height: 1.33;\n  border-radius: 6px;\n}\n\n.btn-group > .btn + .dropdown-toggle {\n  padding-right: 8px;\n  padding-left: 8px;\n}\n\n.btn-group > .btn-lg + .dropdown-toggle {\n  padding-right: 12px;\n  padding-left: 12px;\n}\n\n.btn-group.open .dropdown-toggle {\n  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n          box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n}\n\n.btn .caret {\n  margin-left: 0;\n}\n\n.btn-lg .caret {\n  border-width: 5px 5px 0;\n  border-bottom-width: 0;\n}\n\n.dropup .btn-lg .caret {\n  border-width: 0 5px 5px;\n}\n\n.btn-group-vertical > .btn,\n.btn-group-vertical > .btn-group {\n  display: block;\n  float: none;\n  width: 100%;\n  max-width: 100%;\n}\n\n.btn-group-vertical > .btn-group:before,\n.btn-group-vertical > .btn-group:after {\n  display: table;\n  content: \" \";\n}\n\n.btn-group-vertical > .btn-group:after {\n  clear: both;\n}\n\n.btn-group-vertical > .btn-group:before,\n.btn-group-vertical > .btn-group:after {\n  display: table;\n  content: \" \";\n}\n\n.btn-group-vertical > .btn-group:after {\n  clear: both;\n}\n\n.btn-group-vertical > .btn-group > .btn {\n  float: none;\n}\n\n.btn-group-vertical > .btn + .btn,\n.btn-group-vertical > .btn + .btn-group,\n.btn-group-vertical > .btn-group + .btn,\n.btn-group-vertical > .btn-group + .btn-group {\n  margin-top: -1px;\n  margin-left: 0;\n}\n\n.btn-group-vertical > .btn:not(:first-child):not(:last-child) {\n  border-radius: 0;\n}\n\n.btn-group-vertical > .btn:first-child:not(:last-child) {\n  border-top-right-radius: 4px;\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n\n.btn-group-vertical > .btn:last-child:not(:first-child) {\n  border-top-right-radius: 0;\n  border-bottom-left-radius: 4px;\n  border-top-left-radius: 0;\n}\n\n.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {\n  border-radius: 0;\n}\n\n.btn-group-vertical > .btn-group:first-child > .btn:last-child,\n.btn-group-vertical > .btn-group:first-child > .dropdown-toggle {\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n\n.btn-group-vertical > .btn-group:last-child > .btn:first-child {\n  border-top-right-radius: 0;\n  border-top-left-radius: 0;\n}\n\n.btn-group-justified {\n  display: table;\n  width: 100%;\n  border-collapse: separate;\n  table-layout: fixed;\n}\n\n.btn-group-justified .btn {\n  display: table-cell;\n  float: none;\n  width: 1%;\n}\n\n[data-toggle=\"buttons\"] > .btn > input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn > input[type=\"checkbox\"] {\n  display: none;\n}\n\n.input-group {\n  position: relative;\n  display: table;\n  border-collapse: separate;\n}\n\n.input-group.col {\n  float: none;\n  padding-right: 0;\n  padding-left: 0;\n}\n\n.input-group .form-control {\n  width: 100%;\n  margin-bottom: 0;\n}\n\n.input-group-lg > .form-control,\n.input-group-lg > .input-group-addon,\n.input-group-lg > .input-group-btn > .btn {\n  height: 45px;\n  padding: 10px 16px;\n  font-size: 18px;\n  line-height: 1.33;\n  border-radius: 6px;\n}\n\nselect.input-group-lg > .form-control,\nselect.input-group-lg > .input-group-addon,\nselect.input-group-lg > .input-group-btn > .btn {\n  height: 45px;\n  line-height: 45px;\n}\n\ntextarea.input-group-lg > .form-control,\ntextarea.input-group-lg > .input-group-addon,\ntextarea.input-group-lg > .input-group-btn > .btn {\n  height: auto;\n}\n\n.input-group-sm > .form-control,\n.input-group-sm > .input-group-addon,\n.input-group-sm > .input-group-btn > .btn {\n  height: 30px;\n  padding: 5px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px;\n}\n\nselect.input-group-sm > .form-control,\nselect.input-group-sm > .input-group-addon,\nselect.input-group-sm > .input-group-btn > .btn {\n  height: 30px;\n  line-height: 30px;\n}\n\ntextarea.input-group-sm > .form-control,\ntextarea.input-group-sm > .input-group-addon,\ntextarea.input-group-sm > .input-group-btn > .btn {\n  height: auto;\n}\n\n.input-group-addon,\n.input-group-btn,\n.input-group .form-control {\n  display: table-cell;\n}\n\n.input-group-addon:not(:first-child):not(:last-child),\n.input-group-btn:not(:first-child):not(:last-child),\n.input-group .form-control:not(:first-child):not(:last-child) {\n  border-radius: 0;\n}\n\n.input-group-addon,\n.input-group-btn {\n  width: 1%;\n  white-space: nowrap;\n  vertical-align: middle;\n}\n\n.input-group-addon {\n  padding: 6px 12px;\n  font-size: 14px;\n  font-weight: normal;\n  line-height: 1;\n  text-align: center;\n  background-color: #eeeeee;\n  border: 1px solid #cccccc;\n  border-radius: 4px;\n}\n\n.input-group-addon.input-sm {\n  padding: 5px 10px;\n  font-size: 12px;\n  border-radius: 3px;\n}\n\n.input-group-addon.input-lg {\n  padding: 10px 16px;\n  font-size: 18px;\n  border-radius: 6px;\n}\n\n.input-group-addon input[type=\"radio\"],\n.input-group-addon input[type=\"checkbox\"] {\n  margin-top: 0;\n}\n\n.input-group .form-control:first-child,\n.input-group-addon:first-child,\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .dropdown-toggle,\n.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle) {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n\n.input-group-addon:first-child {\n  border-right: 0;\n}\n\n.input-group .form-control:last-child,\n.input-group-addon:last-child,\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .dropdown-toggle,\n.input-group-btn:first-child > .btn:not(:first-child) {\n  border-bottom-left-radius: 0;\n  border-top-left-radius: 0;\n}\n\n.input-group-addon:last-child {\n  border-left: 0;\n}\n\n.input-group-btn {\n  position: relative;\n  white-space: nowrap;\n}\n\n.input-group-btn > .btn {\n  position: relative;\n}\n\n.input-group-btn > .btn + .btn {\n  margin-left: -4px;\n}\n\n.input-group-btn > .btn:hover,\n.input-group-btn > .btn:active {\n  z-index: 2;\n}\n\n.nav {\n  padding-left: 0;\n  margin-bottom: 0;\n  list-style: none;\n}\n\n.nav:before,\n.nav:after {\n  display: table;\n  content: \" \";\n}\n\n.nav:after {\n  clear: both;\n}\n\n.nav:before,\n.nav:after {\n  display: table;\n  content: \" \";\n}\n\n.nav:after {\n  clear: both;\n}\n\n.nav > li {\n  position: relative;\n  display: block;\n}\n\n.nav > li > a {\n  position: relative;\n  display: block;\n  padding: 10px 15px;\n}\n\n.nav > li > a:hover,\n.nav > li > a:focus {\n  text-decoration: none;\n  background-color: #eeeeee;\n}\n\n.nav > li.disabled > a {\n  color: #999999;\n}\n\n.nav > li.disabled > a:hover,\n.nav > li.disabled > a:focus {\n  color: #999999;\n  text-decoration: none;\n  cursor: not-allowed;\n  background-color: transparent;\n}\n\n.nav .open > a,\n.nav .open > a:hover,\n.nav .open > a:focus {\n  background-color: #eeeeee;\n  border-color: #428bca;\n}\n\n.nav .nav-divider {\n  height: 1px;\n  margin: 9px 0;\n  overflow: hidden;\n  background-color: #e5e5e5;\n}\n\n.nav > li > a > img {\n  max-width: none;\n}\n\n.nav-tabs {\n  border-bottom: 1px solid #dddddd;\n}\n\n.nav-tabs > li {\n  float: left;\n  margin-bottom: -1px;\n}\n\n.nav-tabs > li > a {\n  margin-right: 2px;\n  line-height: 1.428571429;\n  border: 1px solid transparent;\n  border-radius: 4px 4px 0 0;\n}\n\n.nav-tabs > li > a:hover {\n  border-color: #eeeeee #eeeeee #dddddd;\n}\n\n.nav-tabs > li.active > a,\n.nav-tabs > li.active > a:hover,\n.nav-tabs > li.active > a:focus {\n  color: #555555;\n  cursor: default;\n  background-color: #ffffff;\n  border: 1px solid #dddddd;\n  border-bottom-color: transparent;\n}\n\n.nav-tabs.nav-justified {\n  width: 100%;\n  border-bottom: 0;\n}\n\n.nav-tabs.nav-justified > li {\n  float: none;\n}\n\n.nav-tabs.nav-justified > li > a {\n  text-align: center;\n}\n\n@media (min-width: 768px) {\n  .nav-tabs.nav-justified > li {\n    display: table-cell;\n    width: 1%;\n  }\n}\n\n.nav-tabs.nav-justified > li > a {\n  margin-right: 0;\n  border-bottom: 1px solid #dddddd;\n}\n\n.nav-tabs.nav-justified > .active > a {\n  border-bottom-color: #ffffff;\n}\n\n.nav-pills > li {\n  float: left;\n}\n\n.nav-pills > li > a {\n  border-radius: 5px;\n}\n\n.nav-pills > li + li {\n  margin-left: 2px;\n}\n\n.nav-pills > li.active > a,\n.nav-pills > li.active > a:hover,\n.nav-pills > li.active > a:focus {\n  color: #ffffff;\n  background-color: #428bca;\n}\n\n.nav-stacked > li {\n  float: none;\n}\n\n.nav-stacked > li + li {\n  margin-top: 2px;\n  margin-left: 0;\n}\n\n.nav-justified {\n  width: 100%;\n}\n\n.nav-justified > li {\n  float: none;\n}\n\n.nav-justified > li > a {\n  text-align: center;\n}\n\n@media (min-width: 768px) {\n  .nav-justified > li {\n    display: table-cell;\n    width: 1%;\n  }\n}\n\n.nav-tabs-justified {\n  border-bottom: 0;\n}\n\n.nav-tabs-justified > li > a {\n  margin-right: 0;\n  border-bottom: 1px solid #dddddd;\n}\n\n.nav-tabs-justified > .active > a {\n  border-bottom-color: #ffffff;\n}\n\n.tabbable:before,\n.tabbable:after {\n  display: table;\n  content: \" \";\n}\n\n.tabbable:after {\n  clear: both;\n}\n\n.tabbable:before,\n.tabbable:after {\n  display: table;\n  content: \" \";\n}\n\n.tabbable:after {\n  clear: both;\n}\n\n.tab-content > .tab-pane,\n.pill-content > .pill-pane {\n  display: none;\n}\n\n.tab-content > .active,\n.pill-content > .active {\n  display: block;\n}\n\n.nav .caret {\n  border-top-color: #428bca;\n  border-bottom-color: #428bca;\n}\n\n.nav a:hover .caret {\n  border-top-color: #2a6496;\n  border-bottom-color: #2a6496;\n}\n\n.nav-tabs .dropdown-menu {\n  margin-top: -1px;\n  border-top-right-radius: 0;\n  border-top-left-radius: 0;\n}\n\n.navbar {\n  position: relative;\n  z-index: 1000;\n  min-height: 50px;\n  margin-bottom: 20px;\n  border: 1px solid transparent;\n}\n\n.navbar:before,\n.navbar:after {\n  display: table;\n  content: \" \";\n}\n\n.navbar:after {\n  clear: both;\n}\n\n.navbar:before,\n.navbar:after {\n  display: table;\n  content: \" \";\n}\n\n.navbar:after {\n  clear: both;\n}\n\n@media (min-width: 768px) {\n  .navbar {\n    border-radius: 4px;\n  }\n}\n\n.navbar-header:before,\n.navbar-header:after {\n  display: table;\n  content: \" \";\n}\n\n.navbar-header:after {\n  clear: both;\n}\n\n.navbar-header:before,\n.navbar-header:after {\n  display: table;\n  content: \" \";\n}\n\n.navbar-header:after {\n  clear: both;\n}\n\n@media (min-width: 768px) {\n  .navbar-header {\n    float: left;\n  }\n}\n\n.navbar-collapse {\n  max-height: 340px;\n  padding-right: 15px;\n  padding-left: 15px;\n  overflow-x: visible;\n  border-top: 1px solid transparent;\n  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1);\n  -webkit-overflow-scrolling: touch;\n}\n\n.navbar-collapse:before,\n.navbar-collapse:after {\n  display: table;\n  content: \" \";\n}\n\n.navbar-collapse:after {\n  clear: both;\n}\n\n.navbar-collapse:before,\n.navbar-collapse:after {\n  display: table;\n  content: \" \";\n}\n\n.navbar-collapse:after {\n  clear: both;\n}\n\n.navbar-collapse.in {\n  overflow-y: auto;\n}\n\n@media (min-width: 768px) {\n  .navbar-collapse {\n    width: auto;\n    border-top: 0;\n    box-shadow: none;\n  }\n  .navbar-collapse.collapse {\n    display: block !important;\n    height: auto !important;\n    padding-bottom: 0;\n    overflow: visible !important;\n  }\n  .navbar-collapse.in {\n    overflow-y: visible;\n  }\n  .navbar-collapse .navbar-nav.navbar-left:first-child {\n    margin-left: -15px;\n  }\n  .navbar-collapse .navbar-nav.navbar-right:last-child {\n    margin-right: -15px;\n  }\n  .navbar-collapse .navbar-text:last-child {\n    margin-right: 0;\n  }\n}\n\n.container > .navbar-header,\n.container > .navbar-collapse {\n  margin-right: -15px;\n  margin-left: -15px;\n}\n\n@media (min-width: 768px) {\n  .container > .navbar-header,\n  .container > .navbar-collapse {\n    margin-right: 0;\n    margin-left: 0;\n  }\n}\n\n.navbar-static-top {\n  border-width: 0 0 1px;\n}\n\n@media (min-width: 768px) {\n  .navbar-static-top {\n    border-radius: 0;\n  }\n}\n\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n  position: fixed;\n  right: 0;\n  left: 0;\n  border-width: 0 0 1px;\n}\n\n@media (min-width: 768px) {\n  .navbar-fixed-top,\n  .navbar-fixed-bottom {\n    border-radius: 0;\n  }\n}\n\n.navbar-fixed-top {\n  top: 0;\n  z-index: 1030;\n}\n\n.navbar-fixed-bottom {\n  bottom: 0;\n  margin-bottom: 0;\n}\n\n.navbar-brand {\n  float: left;\n  padding: 15px 15px;\n  font-size: 18px;\n  line-height: 20px;\n}\n\n.navbar-brand:hover,\n.navbar-brand:focus {\n  text-decoration: none;\n}\n\n@media (min-width: 768px) {\n  .navbar > .container .navbar-brand {\n    margin-left: -15px;\n  }\n}\n\n.navbar-toggle {\n  position: relative;\n  float: right;\n  padding: 9px 10px;\n  margin-top: 8px;\n  margin-right: 15px;\n  margin-bottom: 8px;\n  background-color: transparent;\n  border: 1px solid transparent;\n  border-radius: 4px;\n}\n\n.navbar-toggle .icon-bar {\n  display: block;\n  width: 22px;\n  height: 2px;\n  border-radius: 1px;\n}\n\n.navbar-toggle .icon-bar + .icon-bar {\n  margin-top: 4px;\n}\n\n@media (min-width: 768px) {\n  .navbar-toggle {\n    display: none;\n  }\n}\n\n.navbar-nav {\n  margin: 7.5px -15px;\n}\n\n.navbar-nav > li > a {\n  padding-top: 10px;\n  padding-bottom: 10px;\n  line-height: 20px;\n}\n\n@media (max-width: 767px) {\n  .navbar-nav .open .dropdown-menu {\n    position: static;\n    float: none;\n    width: auto;\n    margin-top: 0;\n    background-color: transparent;\n    border: 0;\n    box-shadow: none;\n  }\n  .navbar-nav .open .dropdown-menu > li > a,\n  .navbar-nav .open .dropdown-menu .dropdown-header {\n    padding: 5px 15px 5px 25px;\n  }\n  .navbar-nav .open .dropdown-menu > li > a {\n    line-height: 20px;\n  }\n  .navbar-nav .open .dropdown-menu > li > a:hover,\n  .navbar-nav .open .dropdown-menu > li > a:focus {\n    background-image: none;\n  }\n}\n\n@media (min-width: 768px) {\n  .navbar-nav {\n    float: left;\n    margin: 0;\n  }\n  .navbar-nav > li {\n    float: left;\n  }\n  .navbar-nav > li > a {\n    padding-top: 15px;\n    padding-bottom: 15px;\n  }\n}\n\n@media (min-width: 768px) {\n  .navbar-left {\n    float: left !important;\n  }\n  .navbar-right {\n    float: right !important;\n  }\n}\n\n.navbar-form {\n  padding: 10px 15px;\n  margin-top: 8px;\n  margin-right: -15px;\n  margin-bottom: 8px;\n  margin-left: -15px;\n  border-top: 1px solid transparent;\n  border-bottom: 1px solid transparent;\n  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);\n          box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);\n}\n\n@media (min-width: 768px) {\n  .navbar-form .form-group {\n    display: inline-block;\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .navbar-form .form-control {\n    display: inline-block;\n  }\n  .navbar-form .radio,\n  .navbar-form .checkbox {\n    display: inline-block;\n    padding-left: 0;\n    margin-top: 0;\n    margin-bottom: 0;\n  }\n  .navbar-form .radio input[type=\"radio\"],\n  .navbar-form .checkbox input[type=\"checkbox\"] {\n    float: none;\n    margin-left: 0;\n  }\n}\n\n@media (max-width: 767px) {\n  .navbar-form .form-group {\n    margin-bottom: 5px;\n  }\n}\n\n@media (min-width: 768px) {\n  .navbar-form {\n    width: auto;\n    padding-top: 0;\n    padding-bottom: 0;\n    margin-right: 0;\n    margin-left: 0;\n    border: 0;\n    -webkit-box-shadow: none;\n            box-shadow: none;\n  }\n}\n\n.navbar-nav > li > .dropdown-menu {\n  margin-top: 0;\n  border-top-right-radius: 0;\n  border-top-left-radius: 0;\n}\n\n.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n\n.navbar-nav.pull-right > li > .dropdown-menu,\n.navbar-nav > li > .dropdown-menu.pull-right {\n  right: 0;\n  left: auto;\n}\n\n.navbar-btn {\n  margin-top: 8px;\n  margin-bottom: 8px;\n}\n\n.navbar-text {\n  float: left;\n  margin-top: 15px;\n  margin-bottom: 15px;\n}\n\n@media (min-width: 768px) {\n  .navbar-text {\n    margin-right: 15px;\n    margin-left: 15px;\n  }\n}\n\n.navbar-default {\n  background-color: #f8f8f8;\n  border-color: #e7e7e7;\n}\n\n.navbar-default .navbar-brand {\n  color: #777777;\n}\n\n.navbar-default .navbar-brand:hover,\n.navbar-default .navbar-brand:focus {\n  color: #5e5e5e;\n  background-color: transparent;\n}\n\n.navbar-default .navbar-text {\n  color: #777777;\n}\n\n.navbar-default .navbar-nav > li > a {\n  color: #777777;\n}\n\n.navbar-default .navbar-nav > li > a:hover,\n.navbar-default .navbar-nav > li > a:focus {\n  color: #333333;\n  background-color: transparent;\n}\n\n.navbar-default .navbar-nav > .active > a,\n.navbar-default .navbar-nav > .active > a:hover,\n.navbar-default .navbar-nav > .active > a:focus {\n  color: #555555;\n  background-color: #e7e7e7;\n}\n\n.navbar-default .navbar-nav > .disabled > a,\n.navbar-default .navbar-nav > .disabled > a:hover,\n.navbar-default .navbar-nav > .disabled > a:focus {\n  color: #cccccc;\n  background-color: transparent;\n}\n\n.navbar-default .navbar-toggle {\n  border-color: #dddddd;\n}\n\n.navbar-default .navbar-toggle:hover,\n.navbar-default .navbar-toggle:focus {\n  background-color: #dddddd;\n}\n\n.navbar-default .navbar-toggle .icon-bar {\n  background-color: #cccccc;\n}\n\n.navbar-default .navbar-collapse,\n.navbar-default .navbar-form {\n  border-color: #e6e6e6;\n}\n\n.navbar-default .navbar-nav > .dropdown > a:hover .caret,\n.navbar-default .navbar-nav > .dropdown > a:focus .caret {\n  border-top-color: #333333;\n  border-bottom-color: #333333;\n}\n\n.navbar-default .navbar-nav > .open > a,\n.navbar-default .navbar-nav > .open > a:hover,\n.navbar-default .navbar-nav > .open > a:focus {\n  color: #555555;\n  background-color: #e7e7e7;\n}\n\n.navbar-default .navbar-nav > .open > a .caret,\n.navbar-default .navbar-nav > .open > a:hover .caret,\n.navbar-default .navbar-nav > .open > a:focus .caret {\n  border-top-color: #555555;\n  border-bottom-color: #555555;\n}\n\n.navbar-default .navbar-nav > .dropdown > a .caret {\n  border-top-color: #777777;\n  border-bottom-color: #777777;\n}\n\n@media (max-width: 767px) {\n  .navbar-default .navbar-nav .open .dropdown-menu > li > a {\n    color: #777777;\n  }\n  .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover,\n  .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus {\n    color: #333333;\n    background-color: transparent;\n  }\n  .navbar-default .navbar-nav .open .dropdown-menu > .active > a,\n  .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover,\n  .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus {\n    color: #555555;\n    background-color: #e7e7e7;\n  }\n  .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a,\n  .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover,\n  .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus {\n    color: #cccccc;\n    background-color: transparent;\n  }\n}\n\n.navbar-default .navbar-link {\n  color: #777777;\n}\n\n.navbar-default .navbar-link:hover {\n  color: #333333;\n}\n\n.navbar-inverse {\n  background-color: #222222;\n  border-color: #080808;\n}\n\n.navbar-inverse .navbar-brand {\n  color: #999999;\n}\n\n.navbar-inverse .navbar-brand:hover,\n.navbar-inverse .navbar-brand:focus {\n  color: #ffffff;\n  background-color: transparent;\n}\n\n.navbar-inverse .navbar-text {\n  color: #999999;\n}\n\n.navbar-inverse .navbar-nav > li > a {\n  color: #999999;\n}\n\n.navbar-inverse .navbar-nav > li > a:hover,\n.navbar-inverse .navbar-nav > li > a:focus {\n  color: #ffffff;\n  background-color: transparent;\n}\n\n.navbar-inverse .navbar-nav > .active > a,\n.navbar-inverse .navbar-nav > .active > a:hover,\n.navbar-inverse .navbar-nav > .active > a:focus {\n  color: #ffffff;\n  background-color: #080808;\n}\n\n.navbar-inverse .navbar-nav > .disabled > a,\n.navbar-inverse .navbar-nav > .disabled > a:hover,\n.navbar-inverse .navbar-nav > .disabled > a:focus {\n  color: #444444;\n  background-color: transparent;\n}\n\n.navbar-inverse .navbar-toggle {\n  border-color: #333333;\n}\n\n.navbar-inverse .navbar-toggle:hover,\n.navbar-inverse .navbar-toggle:focus {\n  background-color: #333333;\n}\n\n.navbar-inverse .navbar-toggle .icon-bar {\n  background-color: #ffffff;\n}\n\n.navbar-inverse .navbar-collapse,\n.navbar-inverse .navbar-form {\n  border-color: #101010;\n}\n\n.navbar-inverse .navbar-nav > .open > a,\n.navbar-inverse .navbar-nav > .open > a:hover,\n.navbar-inverse .navbar-nav > .open > a:focus {\n  color: #ffffff;\n  background-color: #080808;\n}\n\n.navbar-inverse .navbar-nav > .dropdown > a:hover .caret {\n  border-top-color: #ffffff;\n  border-bottom-color: #ffffff;\n}\n\n.navbar-inverse .navbar-nav > .dropdown > a .caret {\n  border-top-color: #999999;\n  border-bottom-color: #999999;\n}\n\n.navbar-inverse .navbar-nav > .open > a .caret,\n.navbar-inverse .navbar-nav > .open > a:hover .caret,\n.navbar-inverse .navbar-nav > .open > a:focus .caret {\n  border-top-color: #ffffff;\n  border-bottom-color: #ffffff;\n}\n\n@media (max-width: 767px) {\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header {\n    border-color: #080808;\n  }\n  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a {\n    color: #999999;\n  }\n  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover,\n  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus {\n    color: #ffffff;\n    background-color: transparent;\n  }\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a,\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover,\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus {\n    color: #ffffff;\n    background-color: #080808;\n  }\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a,\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover,\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus {\n    color: #444444;\n    background-color: transparent;\n  }\n}\n\n.navbar-inverse .navbar-link {\n  color: #999999;\n}\n\n.navbar-inverse .navbar-link:hover {\n  color: #ffffff;\n}\n\n.breadcrumb {\n  padding: 8px 15px;\n  margin-bottom: 20px;\n  list-style: none;\n  background-color: #f5f5f5;\n  border-radius: 4px;\n}\n\n.breadcrumb > li {\n  display: inline-block;\n}\n\n.breadcrumb > li + li:before {\n  padding: 0 5px;\n  color: #cccccc;\n  content: \"/\\00a0\";\n}\n\n.breadcrumb > .active {\n  color: #999999;\n}\n\n.pagination {\n  display: inline-block;\n  padding-left: 0;\n  margin: 20px 0;\n  border-radius: 4px;\n}\n\n.pagination > li {\n  display: inline;\n}\n\n.pagination > li > a,\n.pagination > li > span {\n  position: relative;\n  float: left;\n  padding: 6px 12px;\n  margin-left: -1px;\n  line-height: 1.428571429;\n  text-decoration: none;\n  background-color: #ffffff;\n  border: 1px solid #dddddd;\n}\n\n.pagination > li:first-child > a,\n.pagination > li:first-child > span {\n  margin-left: 0;\n  border-bottom-left-radius: 4px;\n  border-top-left-radius: 4px;\n}\n\n.pagination > li:last-child > a,\n.pagination > li:last-child > span {\n  border-top-right-radius: 4px;\n  border-bottom-right-radius: 4px;\n}\n\n.pagination > li > a:hover,\n.pagination > li > span:hover,\n.pagination > li > a:focus,\n.pagination > li > span:focus {\n  background-color: #eeeeee;\n}\n\n.pagination > .active > a,\n.pagination > .active > span,\n.pagination > .active > a:hover,\n.pagination > .active > span:hover,\n.pagination > .active > a:focus,\n.pagination > .active > span:focus {\n  z-index: 2;\n  color: #ffffff;\n  cursor: default;\n  background-color: #428bca;\n  border-color: #428bca;\n}\n\n.pagination > .disabled > span,\n.pagination > .disabled > a,\n.pagination > .disabled > a:hover,\n.pagination > .disabled > a:focus {\n  color: #999999;\n  cursor: not-allowed;\n  background-color: #ffffff;\n  border-color: #dddddd;\n}\n\n.pagination-lg > li > a,\n.pagination-lg > li > span {\n  padding: 10px 16px;\n  font-size: 18px;\n}\n\n.pagination-lg > li:first-child > a,\n.pagination-lg > li:first-child > span {\n  border-bottom-left-radius: 6px;\n  border-top-left-radius: 6px;\n}\n\n.pagination-lg > li:last-child > a,\n.pagination-lg > li:last-child > span {\n  border-top-right-radius: 6px;\n  border-bottom-right-radius: 6px;\n}\n\n.pagination-sm > li > a,\n.pagination-sm > li > span {\n  padding: 5px 10px;\n  font-size: 12px;\n}\n\n.pagination-sm > li:first-child > a,\n.pagination-sm > li:first-child > span {\n  border-bottom-left-radius: 3px;\n  border-top-left-radius: 3px;\n}\n\n.pagination-sm > li:last-child > a,\n.pagination-sm > li:last-child > span {\n  border-top-right-radius: 3px;\n  border-bottom-right-radius: 3px;\n}\n\n.pager {\n  padding-left: 0;\n  margin: 20px 0;\n  text-align: center;\n  list-style: none;\n}\n\n.pager:before,\n.pager:after {\n  display: table;\n  content: \" \";\n}\n\n.pager:after {\n  clear: both;\n}\n\n.pager:before,\n.pager:after {\n  display: table;\n  content: \" \";\n}\n\n.pager:after {\n  clear: both;\n}\n\n.pager li {\n  display: inline;\n}\n\n.pager li > a,\n.pager li > span {\n  display: inline-block;\n  padding: 5px 14px;\n  background-color: #ffffff;\n  border: 1px solid #dddddd;\n  border-radius: 15px;\n}\n\n.pager li > a:hover,\n.pager li > a:focus {\n  text-decoration: none;\n  background-color: #eeeeee;\n}\n\n.pager .next > a,\n.pager .next > span {\n  float: right;\n}\n\n.pager .previous > a,\n.pager .previous > span {\n  float: left;\n}\n\n.pager .disabled > a,\n.pager .disabled > a:hover,\n.pager .disabled > a:focus,\n.pager .disabled > span {\n  color: #999999;\n  cursor: not-allowed;\n  background-color: #ffffff;\n}\n\n.label {\n  display: inline;\n  padding: .2em .6em .3em;\n  font-size: 75%;\n  font-weight: bold;\n  line-height: 1;\n  color: #ffffff;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: baseline;\n  border-radius: .25em;\n}\n\n.label[href]:hover,\n.label[href]:focus {\n  color: #ffffff;\n  text-decoration: none;\n  cursor: pointer;\n}\n\n.label:empty {\n  display: none;\n}\n\n.label-default {\n  background-color: #999999;\n}\n\n.label-default[href]:hover,\n.label-default[href]:focus {\n  background-color: #808080;\n}\n\n.label-primary {\n  background-color: #428bca;\n}\n\n.label-primary[href]:hover,\n.label-primary[href]:focus {\n  background-color: #3071a9;\n}\n\n.label-success {\n  background-color: #5cb85c;\n}\n\n.label-success[href]:hover,\n.label-success[href]:focus {\n  background-color: #449d44;\n}\n\n.label-info {\n  background-color: #5bc0de;\n}\n\n.label-info[href]:hover,\n.label-info[href]:focus {\n  background-color: #31b0d5;\n}\n\n.label-warning {\n  background-color: #f0ad4e;\n}\n\n.label-warning[href]:hover,\n.label-warning[href]:focus {\n  background-color: #ec971f;\n}\n\n.label-danger {\n  background-color: #d9534f;\n}\n\n.label-danger[href]:hover,\n.label-danger[href]:focus {\n  background-color: #c9302c;\n}\n\n.badge {\n  display: inline-block;\n  min-width: 10px;\n  padding: 3px 7px;\n  font-size: 12px;\n  font-weight: bold;\n  line-height: 1;\n  color: #ffffff;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: baseline;\n  background-color: #999999;\n  border-radius: 10px;\n}\n\n.badge:empty {\n  display: none;\n}\n\na.badge:hover,\na.badge:focus {\n  color: #ffffff;\n  text-decoration: none;\n  cursor: pointer;\n}\n\n.btn .badge {\n  position: relative;\n  top: -1px;\n}\n\na.list-group-item.active > .badge,\n.nav-pills > .active > a > .badge {\n  color: #428bca;\n  background-color: #ffffff;\n}\n\n.nav-pills > li > a > .badge {\n  margin-left: 3px;\n}\n\n.jumbotron {\n  padding: 30px;\n  margin-bottom: 30px;\n  font-size: 21px;\n  font-weight: 200;\n  line-height: 2.1428571435;\n  color: inherit;\n  background-color: #eeeeee;\n}\n\n.jumbotron h1 {\n  line-height: 1;\n  color: inherit;\n}\n\n.jumbotron p {\n  line-height: 1.4;\n}\n\n.container .jumbotron {\n  border-radius: 6px;\n}\n\n@media screen and (min-width: 768px) {\n  .jumbotron {\n    padding-top: 48px;\n    padding-bottom: 48px;\n  }\n  .container .jumbotron {\n    padding-right: 60px;\n    padding-left: 60px;\n  }\n  .jumbotron h1 {\n    font-size: 63px;\n  }\n}\n\n.thumbnail {\n  display: inline-block;\n  display: block;\n  height: auto;\n  max-width: 100%;\n  padding: 4px;\n  line-height: 1.428571429;\n  background-color: #ffffff;\n  border: 1px solid #dddddd;\n  border-radius: 4px;\n  -webkit-transition: all 0.2s ease-in-out;\n          transition: all 0.2s ease-in-out;\n}\n\n.thumbnail > img {\n  display: block;\n  height: auto;\n  max-width: 100%;\n}\n\na.thumbnail:hover,\na.thumbnail:focus {\n  border-color: #428bca;\n}\n\n.thumbnail > img {\n  margin-right: auto;\n  margin-left: auto;\n}\n\n.thumbnail .caption {\n  padding: 9px;\n  color: #333333;\n}\n\n.alert {\n  padding: 15px;\n  margin-bottom: 20px;\n  border: 1px solid transparent;\n  border-radius: 4px;\n}\n\n.alert h4 {\n  margin-top: 0;\n  color: inherit;\n}\n\n.alert .alert-link {\n  font-weight: bold;\n}\n\n.alert > p,\n.alert > ul {\n  margin-bottom: 0;\n}\n\n.alert > p + p {\n  margin-top: 5px;\n}\n\n.alert-dismissable {\n  padding-right: 35px;\n}\n\n.alert-dismissable .close {\n  position: relative;\n  top: -2px;\n  right: -21px;\n  color: inherit;\n}\n\n.alert-success {\n  color: #468847;\n  background-color: #dff0d8;\n  border-color: #d6e9c6;\n}\n\n.alert-success hr {\n  border-top-color: #c9e2b3;\n}\n\n.alert-success .alert-link {\n  color: #356635;\n}\n\n.alert-info {\n  color: #3a87ad;\n  background-color: #d9edf7;\n  border-color: #bce8f1;\n}\n\n.alert-info hr {\n  border-top-color: #a6e1ec;\n}\n\n.alert-info .alert-link {\n  color: #2d6987;\n}\n\n.alert-warning {\n  color: #c09853;\n  background-color: #fcf8e3;\n  border-color: #fbeed5;\n}\n\n.alert-warning hr {\n  border-top-color: #f8e5be;\n}\n\n.alert-warning .alert-link {\n  color: #a47e3c;\n}\n\n.alert-danger {\n  color: #b94a48;\n  background-color: #f2dede;\n  border-color: #eed3d7;\n}\n\n.alert-danger hr {\n  border-top-color: #e6c1c7;\n}\n\n.alert-danger .alert-link {\n  color: #953b39;\n}\n\n@-webkit-keyframes progress-bar-stripes {\n  from {\n    background-position: 40px 0;\n  }\n  to {\n    background-position: 0 0;\n  }\n}\n\n@-moz-keyframes progress-bar-stripes {\n  from {\n    background-position: 40px 0;\n  }\n  to {\n    background-position: 0 0;\n  }\n}\n\n@-o-keyframes progress-bar-stripes {\n  from {\n    background-position: 0 0;\n  }\n  to {\n    background-position: 40px 0;\n  }\n}\n\n@keyframes progress-bar-stripes {\n  from {\n    background-position: 40px 0;\n  }\n  to {\n    background-position: 0 0;\n  }\n}\n\n.progress {\n  height: 20px;\n  margin-bottom: 20px;\n  overflow: hidden;\n  background-color: #f5f5f5;\n  border-radius: 4px;\n  -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);\n          box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);\n}\n\n.progress-bar {\n  float: left;\n  width: 0;\n  height: 100%;\n  font-size: 12px;\n  color: #ffffff;\n  text-align: center;\n  background-color: #428bca;\n  -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);\n          box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);\n  -webkit-transition: width 0.6s ease;\n          transition: width 0.6s ease;\n}\n\n.progress-striped .progress-bar {\n  background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-size: 40px 40px;\n}\n\n.progress.active .progress-bar {\n  -webkit-animation: progress-bar-stripes 2s linear infinite;\n     -moz-animation: progress-bar-stripes 2s linear infinite;\n      -ms-animation: progress-bar-stripes 2s linear infinite;\n       -o-animation: progress-bar-stripes 2s linear infinite;\n          animation: progress-bar-stripes 2s linear infinite;\n}\n\n.progress-bar-success {\n  background-color: #5cb85c;\n}\n\n.progress-striped .progress-bar-success {\n  background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n\n.progress-bar-info {\n  background-color: #5bc0de;\n}\n\n.progress-striped .progress-bar-info {\n  background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n\n.progress-bar-warning {\n  background-color: #f0ad4e;\n}\n\n.progress-striped .progress-bar-warning {\n  background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n\n.progress-bar-danger {\n  background-color: #d9534f;\n}\n\n.progress-striped .progress-bar-danger {\n  background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n\n.media,\n.media-body {\n  overflow: hidden;\n  zoom: 1;\n}\n\n.media,\n.media .media {\n  margin-top: 15px;\n}\n\n.media:first-child {\n  margin-top: 0;\n}\n\n.media-object {\n  display: block;\n}\n\n.media-heading {\n  margin: 0 0 5px;\n}\n\n.media > .pull-left {\n  margin-right: 10px;\n}\n\n.media > .pull-right {\n  margin-left: 10px;\n}\n\n.media-list {\n  padding-left: 0;\n  list-style: none;\n}\n\n.list-group {\n  padding-left: 0;\n  margin-bottom: 20px;\n}\n\n.list-group-item {\n  position: relative;\n  display: block;\n  padding: 10px 15px;\n  margin-bottom: -1px;\n  background-color: #ffffff;\n  border: 1px solid #dddddd;\n}\n\n.list-group-item:first-child {\n  border-top-right-radius: 4px;\n  border-top-left-radius: 4px;\n}\n\n.list-group-item:last-child {\n  margin-bottom: 0;\n  border-bottom-right-radius: 4px;\n  border-bottom-left-radius: 4px;\n}\n\n.list-group-item > .badge {\n  float: right;\n}\n\n.list-group-item > .badge + .badge {\n  margin-right: 5px;\n}\n\na.list-group-item {\n  color: #555555;\n}\n\na.list-group-item .list-group-item-heading {\n  color: #333333;\n}\n\na.list-group-item:hover,\na.list-group-item:focus {\n  text-decoration: none;\n  background-color: #f5f5f5;\n}\n\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n  z-index: 2;\n  color: #ffffff;\n  background-color: #428bca;\n  border-color: #428bca;\n}\n\n.list-group-item.active .list-group-item-heading,\n.list-group-item.active:hover .list-group-item-heading,\n.list-group-item.active:focus .list-group-item-heading {\n  color: inherit;\n}\n\n.list-group-item.active .list-group-item-text,\n.list-group-item.active:hover .list-group-item-text,\n.list-group-item.active:focus .list-group-item-text {\n  color: #e1edf7;\n}\n\n.list-group-item-heading {\n  margin-top: 0;\n  margin-bottom: 5px;\n}\n\n.list-group-item-text {\n  margin-bottom: 0;\n  line-height: 1.3;\n}\n\n.panel {\n  margin-bottom: 20px;\n  background-color: #ffffff;\n  border: 1px solid transparent;\n  border-radius: 4px;\n  -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);\n          box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);\n}\n\n.panel-body {\n  padding: 15px;\n}\n\n.panel-body:before,\n.panel-body:after {\n  display: table;\n  content: \" \";\n}\n\n.panel-body:after {\n  clear: both;\n}\n\n.panel-body:before,\n.panel-body:after {\n  display: table;\n  content: \" \";\n}\n\n.panel-body:after {\n  clear: both;\n}\n\n.panel > .list-group {\n  margin-bottom: 0;\n}\n\n.panel > .list-group .list-group-item {\n  border-width: 1px 0;\n}\n\n.panel > .list-group .list-group-item:first-child {\n  border-top-right-radius: 0;\n  border-top-left-radius: 0;\n}\n\n.panel > .list-group .list-group-item:last-child {\n  border-bottom: 0;\n}\n\n.panel-heading + .list-group .list-group-item:first-child {\n  border-top-width: 0;\n}\n\n.panel > .table {\n  margin-bottom: 0;\n}\n\n.panel > .panel-body + .table {\n  border-top: 1px solid #dddddd;\n}\n\n.panel-heading {\n  padding: 10px 15px;\n  border-bottom: 1px solid transparent;\n  border-top-right-radius: 3px;\n  border-top-left-radius: 3px;\n}\n\n.panel-title {\n  margin-top: 0;\n  margin-bottom: 0;\n  font-size: 16px;\n}\n\n.panel-title > a {\n  color: inherit;\n}\n\n.panel-footer {\n  padding: 10px 15px;\n  background-color: #f5f5f5;\n  border-top: 1px solid #dddddd;\n  border-bottom-right-radius: 3px;\n  border-bottom-left-radius: 3px;\n}\n\n.panel-group .panel {\n  margin-bottom: 0;\n  overflow: hidden;\n  border-radius: 4px;\n}\n\n.panel-group .panel + .panel {\n  margin-top: 5px;\n}\n\n.panel-group .panel-heading {\n  border-bottom: 0;\n}\n\n.panel-group .panel-heading + .panel-collapse .panel-body {\n  border-top: 1px solid #dddddd;\n}\n\n.panel-group .panel-footer {\n  border-top: 0;\n}\n\n.panel-group .panel-footer + .panel-collapse .panel-body {\n  border-bottom: 1px solid #dddddd;\n}\n\n.panel-default {\n  border-color: #dddddd;\n}\n\n.panel-default > .panel-heading {\n  color: #333333;\n  background-color: #f5f5f5;\n  border-color: #dddddd;\n}\n\n.panel-default > .panel-heading + .panel-collapse .panel-body {\n  border-top-color: #dddddd;\n}\n\n.panel-default > .panel-footer + .panel-collapse .panel-body {\n  border-bottom-color: #dddddd;\n}\n\n.panel-primary {\n  border-color: #428bca;\n}\n\n.panel-primary > .panel-heading {\n  color: #ffffff;\n  background-color: #428bca;\n  border-color: #428bca;\n}\n\n.panel-primary > .panel-heading + .panel-collapse .panel-body {\n  border-top-color: #428bca;\n}\n\n.panel-primary > .panel-footer + .panel-collapse .panel-body {\n  border-bottom-color: #428bca;\n}\n\n.panel-success {\n  border-color: #d6e9c6;\n}\n\n.panel-success > .panel-heading {\n  color: #468847;\n  background-color: #dff0d8;\n  border-color: #d6e9c6;\n}\n\n.panel-success > .panel-heading + .panel-collapse .panel-body {\n  border-top-color: #d6e9c6;\n}\n\n.panel-success > .panel-footer + .panel-collapse .panel-body {\n  border-bottom-color: #d6e9c6;\n}\n\n.panel-warning {\n  border-color: #fbeed5;\n}\n\n.panel-warning > .panel-heading {\n  color: #c09853;\n  background-color: #fcf8e3;\n  border-color: #fbeed5;\n}\n\n.panel-warning > .panel-heading + .panel-collapse .panel-body {\n  border-top-color: #fbeed5;\n}\n\n.panel-warning > .panel-footer + .panel-collapse .panel-body {\n  border-bottom-color: #fbeed5;\n}\n\n.panel-danger {\n  border-color: #eed3d7;\n}\n\n.panel-danger > .panel-heading {\n  color: #b94a48;\n  background-color: #f2dede;\n  border-color: #eed3d7;\n}\n\n.panel-danger > .panel-heading + .panel-collapse .panel-body {\n  border-top-color: #eed3d7;\n}\n\n.panel-danger > .panel-footer + .panel-collapse .panel-body {\n  border-bottom-color: #eed3d7;\n}\n\n.panel-info {\n  border-color: #bce8f1;\n}\n\n.panel-info > .panel-heading {\n  color: #3a87ad;\n  background-color: #d9edf7;\n  border-color: #bce8f1;\n}\n\n.panel-info > .panel-heading + .panel-collapse .panel-body {\n  border-top-color: #bce8f1;\n}\n\n.panel-info > .panel-footer + .panel-collapse .panel-body {\n  border-bottom-color: #bce8f1;\n}\n\n.well {\n  min-height: 20px;\n  padding: 19px;\n  margin-bottom: 20px;\n  background-color: #f5f5f5;\n  border: 1px solid #e3e3e3;\n  border-radius: 4px;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);\n}\n\n.well blockquote {\n  border-color: #ddd;\n  border-color: rgba(0, 0, 0, 0.15);\n}\n\n.well-lg {\n  padding: 24px;\n  border-radius: 6px;\n}\n\n.well-sm {\n  padding: 9px;\n  border-radius: 3px;\n}\n\n.close {\n  float: right;\n  font-size: 21px;\n  font-weight: bold;\n  line-height: 1;\n  color: #000000;\n  text-shadow: 0 1px 0 #ffffff;\n  opacity: 0.2;\n  filter: alpha(opacity=20);\n}\n\n.close:hover,\n.close:focus {\n  color: #000000;\n  text-decoration: none;\n  cursor: pointer;\n  opacity: 0.5;\n  filter: alpha(opacity=50);\n}\n\nbutton.close {\n  padding: 0;\n  cursor: pointer;\n  background: transparent;\n  border: 0;\n  -webkit-appearance: none;\n}\n\n.modal-open {\n  overflow: hidden;\n}\n\nbody.modal-open,\n.modal-open .navbar-fixed-top,\n.modal-open .navbar-fixed-bottom {\n  margin-right: 15px;\n}\n\n.modal {\n  position: fixed;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1040;\n  display: none;\n  overflow: auto;\n  overflow-y: scroll;\n}\n\n.modal.fade .modal-dialog {\n  -webkit-transform: translate(0, -25%);\n      -ms-transform: translate(0, -25%);\n          transform: translate(0, -25%);\n  -webkit-transition: -webkit-transform 0.3s ease-out;\n     -moz-transition: -moz-transform 0.3s ease-out;\n       -o-transition: -o-transform 0.3s ease-out;\n          transition: transform 0.3s ease-out;\n}\n\n.modal.in .modal-dialog {\n  -webkit-transform: translate(0, 0);\n      -ms-transform: translate(0, 0);\n          transform: translate(0, 0);\n}\n\n.modal-dialog {\n  z-index: 1050;\n  width: auto;\n  padding: 10px;\n  margin-right: auto;\n  margin-left: auto;\n}\n\n.modal-content {\n  position: relative;\n  background-color: #ffffff;\n  border: 1px solid #999999;\n  border: 1px solid rgba(0, 0, 0, 0.2);\n  border-radius: 6px;\n  outline: none;\n  -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);\n          box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);\n  background-clip: padding-box;\n}\n\n.modal-backdrop {\n  position: fixed;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1030;\n  background-color: #000000;\n}\n\n.modal-backdrop.fade {\n  opacity: 0;\n  filter: alpha(opacity=0);\n}\n\n.modal-backdrop.in {\n  opacity: 0.5;\n  filter: alpha(opacity=50);\n}\n\n.modal-header {\n  min-height: 16.428571429px;\n  padding: 15px;\n  border-bottom: 1px solid #e5e5e5;\n}\n\n.modal-header .close {\n  margin-top: -2px;\n}\n\n.modal-title {\n  margin: 0;\n  line-height: 1.428571429;\n}\n\n.modal-body {\n  position: relative;\n  padding: 20px;\n}\n\n.modal-footer {\n  padding: 19px 20px 20px;\n  margin-top: 15px;\n  text-align: right;\n  border-top: 1px solid #e5e5e5;\n}\n\n.modal-footer:before,\n.modal-footer:after {\n  display: table;\n  content: \" \";\n}\n\n.modal-footer:after {\n  clear: both;\n}\n\n.modal-footer:before,\n.modal-footer:after {\n  display: table;\n  content: \" \";\n}\n\n.modal-footer:after {\n  clear: both;\n}\n\n.modal-footer .btn + .btn {\n  margin-bottom: 0;\n  margin-left: 5px;\n}\n\n.modal-footer .btn-group .btn + .btn {\n  margin-left: -1px;\n}\n\n.modal-footer .btn-block + .btn-block {\n  margin-left: 0;\n}\n\n@media screen and (min-width: 768px) {\n  .modal-dialog {\n    right: auto;\n    left: 50%;\n    width: 600px;\n    padding-top: 30px;\n    padding-bottom: 30px;\n  }\n  .modal-content {\n    -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);\n            box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);\n  }\n}\n\n.tooltip {\n  position: absolute;\n  z-index: 1030;\n  display: block;\n  font-size: 12px;\n  line-height: 1.4;\n  opacity: 0;\n  filter: alpha(opacity=0);\n  visibility: visible;\n}\n\n.tooltip.in {\n  opacity: 0.9;\n  filter: alpha(opacity=90);\n}\n\n.tooltip.top {\n  padding: 5px 0;\n  margin-top: -3px;\n}\n\n.tooltip.right {\n  padding: 0 5px;\n  margin-left: 3px;\n}\n\n.tooltip.bottom {\n  padding: 5px 0;\n  margin-top: 3px;\n}\n\n.tooltip.left {\n  padding: 0 5px;\n  margin-left: -3px;\n}\n\n.tooltip-inner {\n  max-width: 200px;\n  padding: 3px 8px;\n  color: #ffffff;\n  text-align: center;\n  text-decoration: none;\n  background-color: #000000;\n  border-radius: 4px;\n}\n\n.tooltip-arrow {\n  position: absolute;\n  width: 0;\n  height: 0;\n  border-color: transparent;\n  border-style: solid;\n}\n\n.tooltip.top .tooltip-arrow {\n  bottom: 0;\n  left: 50%;\n  margin-left: -5px;\n  border-top-color: #000000;\n  border-width: 5px 5px 0;\n}\n\n.tooltip.top-left .tooltip-arrow {\n  bottom: 0;\n  left: 5px;\n  border-top-color: #000000;\n  border-width: 5px 5px 0;\n}\n\n.tooltip.top-right .tooltip-arrow {\n  right: 5px;\n  bottom: 0;\n  border-top-color: #000000;\n  border-width: 5px 5px 0;\n}\n\n.tooltip.right .tooltip-arrow {\n  top: 50%;\n  left: 0;\n  margin-top: -5px;\n  border-right-color: #000000;\n  border-width: 5px 5px 5px 0;\n}\n\n.tooltip.left .tooltip-arrow {\n  top: 50%;\n  right: 0;\n  margin-top: -5px;\n  border-left-color: #000000;\n  border-width: 5px 0 5px 5px;\n}\n\n.tooltip.bottom .tooltip-arrow {\n  top: 0;\n  left: 50%;\n  margin-left: -5px;\n  border-bottom-color: #000000;\n  border-width: 0 5px 5px;\n}\n\n.tooltip.bottom-left .tooltip-arrow {\n  top: 0;\n  left: 5px;\n  border-bottom-color: #000000;\n  border-width: 0 5px 5px;\n}\n\n.tooltip.bottom-right .tooltip-arrow {\n  top: 0;\n  right: 5px;\n  border-bottom-color: #000000;\n  border-width: 0 5px 5px;\n}\n\n.popover {\n  position: absolute;\n  top: 0;\n  left: 0;\n  z-index: 1010;\n  display: none;\n  max-width: 276px;\n  padding: 1px;\n  text-align: left;\n  white-space: normal;\n  background-color: #ffffff;\n  border: 1px solid #cccccc;\n  border: 1px solid rgba(0, 0, 0, 0.2);\n  border-radius: 6px;\n  -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);\n          box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);\n  background-clip: padding-box;\n}\n\n.popover.top {\n  margin-top: -10px;\n}\n\n.popover.right {\n  margin-left: 10px;\n}\n\n.popover.bottom {\n  margin-top: 10px;\n}\n\n.popover.left {\n  margin-left: -10px;\n}\n\n.popover-title {\n  padding: 8px 14px;\n  margin: 0;\n  font-size: 14px;\n  font-weight: normal;\n  line-height: 18px;\n  background-color: #f7f7f7;\n  border-bottom: 1px solid #ebebeb;\n  border-radius: 5px 5px 0 0;\n}\n\n.popover-content {\n  padding: 9px 14px;\n}\n\n.popover .arrow,\n.popover .arrow:after {\n  position: absolute;\n  display: block;\n  width: 0;\n  height: 0;\n  border-color: transparent;\n  border-style: solid;\n}\n\n.popover .arrow {\n  border-width: 11px;\n}\n\n.popover .arrow:after {\n  border-width: 10px;\n  content: \"\";\n}\n\n.popover.top .arrow {\n  bottom: -11px;\n  left: 50%;\n  margin-left: -11px;\n  border-top-color: #999999;\n  border-top-color: rgba(0, 0, 0, 0.25);\n  border-bottom-width: 0;\n}\n\n.popover.top .arrow:after {\n  bottom: 1px;\n  margin-left: -10px;\n  border-top-color: #ffffff;\n  border-bottom-width: 0;\n  content: \" \";\n}\n\n.popover.right .arrow {\n  top: 50%;\n  left: -11px;\n  margin-top: -11px;\n  border-right-color: #999999;\n  border-right-color: rgba(0, 0, 0, 0.25);\n  border-left-width: 0;\n}\n\n.popover.right .arrow:after {\n  bottom: -10px;\n  left: 1px;\n  border-right-color: #ffffff;\n  border-left-width: 0;\n  content: \" \";\n}\n\n.popover.bottom .arrow {\n  top: -11px;\n  left: 50%;\n  margin-left: -11px;\n  border-bottom-color: #999999;\n  border-bottom-color: rgba(0, 0, 0, 0.25);\n  border-top-width: 0;\n}\n\n.popover.bottom .arrow:after {\n  top: 1px;\n  margin-left: -10px;\n  border-bottom-color: #ffffff;\n  border-top-width: 0;\n  content: \" \";\n}\n\n.popover.left .arrow {\n  top: 50%;\n  right: -11px;\n  margin-top: -11px;\n  border-left-color: #999999;\n  border-left-color: rgba(0, 0, 0, 0.25);\n  border-right-width: 0;\n}\n\n.popover.left .arrow:after {\n  right: 1px;\n  bottom: -10px;\n  border-left-color: #ffffff;\n  border-right-width: 0;\n  content: \" \";\n}\n\n.carousel {\n  position: relative;\n}\n\n.carousel-inner {\n  position: relative;\n  width: 100%;\n  overflow: hidden;\n}\n\n.carousel-inner > .item {\n  position: relative;\n  display: none;\n  -webkit-transition: 0.6s ease-in-out left;\n          transition: 0.6s ease-in-out left;\n}\n\n.carousel-inner > .item > img,\n.carousel-inner > .item > a > img {\n  display: block;\n  height: auto;\n  max-width: 100%;\n  line-height: 1;\n}\n\n.carousel-inner > .active,\n.carousel-inner > .next,\n.carousel-inner > .prev {\n  display: block;\n}\n\n.carousel-inner > .active {\n  left: 0;\n}\n\n.carousel-inner > .next,\n.carousel-inner > .prev {\n  position: absolute;\n  top: 0;\n  width: 100%;\n}\n\n.carousel-inner > .next {\n  left: 100%;\n}\n\n.carousel-inner > .prev {\n  left: -100%;\n}\n\n.carousel-inner > .next.left,\n.carousel-inner > .prev.right {\n  left: 0;\n}\n\n.carousel-inner > .active.left {\n  left: -100%;\n}\n\n.carousel-inner > .active.right {\n  left: 100%;\n}\n\n.carousel-control {\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  left: 0;\n  width: 15%;\n  font-size: 20px;\n  color: #ffffff;\n  text-align: center;\n  text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);\n  opacity: 0.5;\n  filter: alpha(opacity=50);\n}\n\n.carousel-control.left {\n  background-image: -webkit-gradient(linear, 0 top, 100% top, from(rgba(0, 0, 0, 0.5)), to(rgba(0, 0, 0, 0.0001)));\n  background-image: -webkit-linear-gradient(left, color-stop(rgba(0, 0, 0, 0.5) 0), color-stop(rgba(0, 0, 0, 0.0001) 100%));\n  background-image: -moz-linear-gradient(left, rgba(0, 0, 0, 0.5) 0, rgba(0, 0, 0, 0.0001) 100%);\n  background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5) 0, rgba(0, 0, 0, 0.0001) 100%);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);\n}\n\n.carousel-control.right {\n  right: 0;\n  left: auto;\n  background-image: -webkit-gradient(linear, 0 top, 100% top, from(rgba(0, 0, 0, 0.0001)), to(rgba(0, 0, 0, 0.5)));\n  background-image: -webkit-linear-gradient(left, color-stop(rgba(0, 0, 0, 0.0001) 0), color-stop(rgba(0, 0, 0, 0.5) 100%));\n  background-image: -moz-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0, rgba(0, 0, 0, 0.5) 100%);\n  background-image: linear-gradient(to right, rgba(0, 0, 0, 0.0001) 0, rgba(0, 0, 0, 0.5) 100%);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);\n}\n\n.carousel-control:hover,\n.carousel-control:focus {\n  color: #ffffff;\n  text-decoration: none;\n  opacity: 0.9;\n  filter: alpha(opacity=90);\n}\n\n.carousel-control .icon-prev,\n.carousel-control .icon-next,\n.carousel-control .glyphicon-chevron-left,\n.carousel-control .glyphicon-chevron-right {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n  z-index: 5;\n  display: inline-block;\n}\n\n.carousel-control .icon-prev,\n.carousel-control .icon-next {\n  width: 20px;\n  height: 20px;\n  margin-top: -10px;\n  margin-left: -10px;\n  font-family: serif;\n}\n\n.carousel-control .icon-prev:before {\n  content: '\\2039';\n}\n\n.carousel-control .icon-next:before {\n  content: '\\203a';\n}\n\n.carousel-indicators {\n  position: absolute;\n  bottom: 10px;\n  left: 50%;\n  z-index: 15;\n  width: 60%;\n  padding-left: 0;\n  margin-left: -30%;\n  text-align: center;\n  list-style: none;\n}\n\n.carousel-indicators li {\n  display: inline-block;\n  width: 10px;\n  height: 10px;\n  margin: 1px;\n  text-indent: -999px;\n  cursor: pointer;\n  border: 1px solid #ffffff;\n  border-radius: 10px;\n}\n\n.carousel-indicators .active {\n  width: 12px;\n  height: 12px;\n  margin: 0;\n  background-color: #ffffff;\n}\n\n.carousel-caption {\n  position: absolute;\n  right: 15%;\n  bottom: 20px;\n  left: 15%;\n  z-index: 10;\n  padding-top: 20px;\n  padding-bottom: 20px;\n  color: #ffffff;\n  text-align: center;\n  text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);\n}\n\n.carousel-caption .btn {\n  text-shadow: none;\n}\n\n@media screen and (min-width: 768px) {\n  .carousel-control .icon-prev,\n  .carousel-control .icon-next {\n    width: 30px;\n    height: 30px;\n    margin-top: -15px;\n    margin-left: -15px;\n    font-size: 30px;\n  }\n  .carousel-caption {\n    right: 20%;\n    left: 20%;\n    padding-bottom: 30px;\n  }\n  .carousel-indicators {\n    bottom: 20px;\n  }\n}\n\n.clearfix:before,\n.clearfix:after {\n  display: table;\n  content: \" \";\n}\n\n.clearfix:after {\n  clear: both;\n}\n\n.pull-right {\n  float: right !important;\n}\n\n.pull-left {\n  float: left !important;\n}\n\n.hide {\n  display: none !important;\n}\n\n.show {\n  display: block !important;\n}\n\n.invisible {\n  visibility: hidden;\n}\n\n.text-hide {\n  font: 0/0 a;\n  color: transparent;\n  text-shadow: none;\n  background-color: transparent;\n  border: 0;\n}\n\n.affix {\n  position: fixed;\n}\n\n@-ms-viewport {\n  width: device-width;\n}\n\n@media screen and (max-width: 400px) {\n  @-ms-viewport {\n    width: 320px;\n  }\n}\n\n.hidden {\n  display: none !important;\n  visibility: hidden !important;\n}\n\n.visible-xs {\n  display: none !important;\n}\n\ntr.visible-xs {\n  display: none !important;\n}\n\nth.visible-xs,\ntd.visible-xs {\n  display: none !important;\n}\n\n@media (max-width: 767px) {\n  .visible-xs {\n    display: block !important;\n  }\n  tr.visible-xs {\n    display: table-row !important;\n  }\n  th.visible-xs,\n  td.visible-xs {\n    display: table-cell !important;\n  }\n}\n\n@media (min-width: 768px) and (max-width: 991px) {\n  .visible-xs.visible-sm {\n    display: block !important;\n  }\n  tr.visible-xs.visible-sm {\n    display: table-row !important;\n  }\n  th.visible-xs.visible-sm,\n  td.visible-xs.visible-sm {\n    display: table-cell !important;\n  }\n}\n\n@media (min-width: 992px) and (max-width: 1199px) {\n  .visible-xs.visible-md {\n    display: block !important;\n  }\n  tr.visible-xs.visible-md {\n    display: table-row !important;\n  }\n  th.visible-xs.visible-md,\n  td.visible-xs.visible-md {\n    display: table-cell !important;\n  }\n}\n\n@media (min-width: 1200px) {\n  .visible-xs.visible-lg {\n    display: block !important;\n  }\n  tr.visible-xs.visible-lg {\n    display: table-row !important;\n  }\n  th.visible-xs.visible-lg,\n  td.visible-xs.visible-lg {\n    display: table-cell !important;\n  }\n}\n\n.visible-sm {\n  display: none !important;\n}\n\ntr.visible-sm {\n  display: none !important;\n}\n\nth.visible-sm,\ntd.visible-sm {\n  display: none !important;\n}\n\n@media (max-width: 767px) {\n  .visible-sm.visible-xs {\n    display: block !important;\n  }\n  tr.visible-sm.visible-xs {\n    display: table-row !important;\n  }\n  th.visible-sm.visible-xs,\n  td.visible-sm.visible-xs {\n    display: table-cell !important;\n  }\n}\n\n@media (min-width: 768px) and (max-width: 991px) {\n  .visible-sm {\n    display: block !important;\n  }\n  tr.visible-sm {\n    display: table-row !important;\n  }\n  th.visible-sm,\n  td.visible-sm {\n    display: table-cell !important;\n  }\n}\n\n@media (min-width: 992px) and (max-width: 1199px) {\n  .visible-sm.visible-md {\n    display: block !important;\n  }\n  tr.visible-sm.visible-md {\n    display: table-row !important;\n  }\n  th.visible-sm.visible-md,\n  td.visible-sm.visible-md {\n    display: table-cell !important;\n  }\n}\n\n@media (min-width: 1200px) {\n  .visible-sm.visible-lg {\n    display: block !important;\n  }\n  tr.visible-sm.visible-lg {\n    display: table-row !important;\n  }\n  th.visible-sm.visible-lg,\n  td.visible-sm.visible-lg {\n    display: table-cell !important;\n  }\n}\n\n.visible-md {\n  display: none !important;\n}\n\ntr.visible-md {\n  display: none !important;\n}\n\nth.visible-md,\ntd.visible-md {\n  display: none !important;\n}\n\n@media (max-width: 767px) {\n  .visible-md.visible-xs {\n    display: block !important;\n  }\n  tr.visible-md.visible-xs {\n    display: table-row !important;\n  }\n  th.visible-md.visible-xs,\n  td.visible-md.visible-xs {\n    display: table-cell !important;\n  }\n}\n\n@media (min-width: 768px) and (max-width: 991px) {\n  .visible-md.visible-sm {\n    display: block !important;\n  }\n  tr.visible-md.visible-sm {\n    display: table-row !important;\n  }\n  th.visible-md.visible-sm,\n  td.visible-md.visible-sm {\n    display: table-cell !important;\n  }\n}\n\n@media (min-width: 992px) and (max-width: 1199px) {\n  .visible-md {\n    display: block !important;\n  }\n  tr.visible-md {\n    display: table-row !important;\n  }\n  th.visible-md,\n  td.visible-md {\n    display: table-cell !important;\n  }\n}\n\n@media (min-width: 1200px) {\n  .visible-md.visible-lg {\n    display: block !important;\n  }\n  tr.visible-md.visible-lg {\n    display: table-row !important;\n  }\n  th.visible-md.visible-lg,\n  td.visible-md.visible-lg {\n    display: table-cell !important;\n  }\n}\n\n.visible-lg {\n  display: none !important;\n}\n\ntr.visible-lg {\n  display: none !important;\n}\n\nth.visible-lg,\ntd.visible-lg {\n  display: none !important;\n}\n\n@media (max-width: 767px) {\n  .visible-lg.visible-xs {\n    display: block !important;\n  }\n  tr.visible-lg.visible-xs {\n    display: table-row !important;\n  }\n  th.visible-lg.visible-xs,\n  td.visible-lg.visible-xs {\n    display: table-cell !important;\n  }\n}\n\n@media (min-width: 768px) and (max-width: 991px) {\n  .visible-lg.visible-sm {\n    display: block !important;\n  }\n  tr.visible-lg.visible-sm {\n    display: table-row !important;\n  }\n  th.visible-lg.visible-sm,\n  td.visible-lg.visible-sm {\n    display: table-cell !important;\n  }\n}\n\n@media (min-width: 992px) and (max-width: 1199px) {\n  .visible-lg.visible-md {\n    display: block !important;\n  }\n  tr.visible-lg.visible-md {\n    display: table-row !important;\n  }\n  th.visible-lg.visible-md,\n  td.visible-lg.visible-md {\n    display: table-cell !important;\n  }\n}\n\n@media (min-width: 1200px) {\n  .visible-lg {\n    display: block !important;\n  }\n  tr.visible-lg {\n    display: table-row !important;\n  }\n  th.visible-lg,\n  td.visible-lg {\n    display: table-cell !important;\n  }\n}\n\n.hidden-xs {\n  display: block !important;\n}\n\ntr.hidden-xs {\n  display: table-row !important;\n}\n\nth.hidden-xs,\ntd.hidden-xs {\n  display: table-cell !important;\n}\n\n@media (max-width: 767px) {\n  .hidden-xs {\n    display: none !important;\n  }\n  tr.hidden-xs {\n    display: none !important;\n  }\n  th.hidden-xs,\n  td.hidden-xs {\n    display: none !important;\n  }\n}\n\n@media (min-width: 768px) and (max-width: 991px) {\n  .hidden-xs.hidden-sm {\n    display: none !important;\n  }\n  tr.hidden-xs.hidden-sm {\n    display: none !important;\n  }\n  th.hidden-xs.hidden-sm,\n  td.hidden-xs.hidden-sm {\n    display: none !important;\n  }\n}\n\n@media (min-width: 992px) and (max-width: 1199px) {\n  .hidden-xs.hidden-md {\n    display: none !important;\n  }\n  tr.hidden-xs.hidden-md {\n    display: none !important;\n  }\n  th.hidden-xs.hidden-md,\n  td.hidden-xs.hidden-md {\n    display: none !important;\n  }\n}\n\n@media (min-width: 1200px) {\n  .hidden-xs.hidden-lg {\n    display: none !important;\n  }\n  tr.hidden-xs.hidden-lg {\n    display: none !important;\n  }\n  th.hidden-xs.hidden-lg,\n  td.hidden-xs.hidden-lg {\n    display: none !important;\n  }\n}\n\n.hidden-sm {\n  display: block !important;\n}\n\ntr.hidden-sm {\n  display: table-row !important;\n}\n\nth.hidden-sm,\ntd.hidden-sm {\n  display: table-cell !important;\n}\n\n@media (max-width: 767px) {\n  .hidden-sm.hidden-xs {\n    display: none !important;\n  }\n  tr.hidden-sm.hidden-xs {\n    display: none !important;\n  }\n  th.hidden-sm.hidden-xs,\n  td.hidden-sm.hidden-xs {\n    display: none !important;\n  }\n}\n\n@media (min-width: 768px) and (max-width: 991px) {\n  .hidden-sm {\n    display: none !important;\n  }\n  tr.hidden-sm {\n    display: none !important;\n  }\n  th.hidden-sm,\n  td.hidden-sm {\n    display: none !important;\n  }\n}\n\n@media (min-width: 992px) and (max-width: 1199px) {\n  .hidden-sm.hidden-md {\n    display: none !important;\n  }\n  tr.hidden-sm.hidden-md {\n    display: none !important;\n  }\n  th.hidden-sm.hidden-md,\n  td.hidden-sm.hidden-md {\n    display: none !important;\n  }\n}\n\n@media (min-width: 1200px) {\n  .hidden-sm.hidden-lg {\n    display: none !important;\n  }\n  tr.hidden-sm.hidden-lg {\n    display: none !important;\n  }\n  th.hidden-sm.hidden-lg,\n  td.hidden-sm.hidden-lg {\n    display: none !important;\n  }\n}\n\n.hidden-md {\n  display: block !important;\n}\n\ntr.hidden-md {\n  display: table-row !important;\n}\n\nth.hidden-md,\ntd.hidden-md {\n  display: table-cell !important;\n}\n\n@media (max-width: 767px) {\n  .hidden-md.hidden-xs {\n    display: none !important;\n  }\n  tr.hidden-md.hidden-xs {\n    display: none !important;\n  }\n  th.hidden-md.hidden-xs,\n  td.hidden-md.hidden-xs {\n    display: none !important;\n  }\n}\n\n@media (min-width: 768px) and (max-width: 991px) {\n  .hidden-md.hidden-sm {\n    display: none !important;\n  }\n  tr.hidden-md.hidden-sm {\n    display: none !important;\n  }\n  th.hidden-md.hidden-sm,\n  td.hidden-md.hidden-sm {\n    display: none !important;\n  }\n}\n\n@media (min-width: 992px) and (max-width: 1199px) {\n  .hidden-md {\n    display: none !important;\n  }\n  tr.hidden-md {\n    display: none !important;\n  }\n  th.hidden-md,\n  td.hidden-md {\n    display: none !important;\n  }\n}\n\n@media (min-width: 1200px) {\n  .hidden-md.hidden-lg {\n    display: none !important;\n  }\n  tr.hidden-md.hidden-lg {\n    display: none !important;\n  }\n  th.hidden-md.hidden-lg,\n  td.hidden-md.hidden-lg {\n    display: none !important;\n  }\n}\n\n.hidden-lg {\n  display: block !important;\n}\n\ntr.hidden-lg {\n  display: table-row !important;\n}\n\nth.hidden-lg,\ntd.hidden-lg {\n  display: table-cell !important;\n}\n\n@media (max-width: 767px) {\n  .hidden-lg.hidden-xs {\n    display: none !important;\n  }\n  tr.hidden-lg.hidden-xs {\n    display: none !important;\n  }\n  th.hidden-lg.hidden-xs,\n  td.hidden-lg.hidden-xs {\n    display: none !important;\n  }\n}\n\n@media (min-width: 768px) and (max-width: 991px) {\n  .hidden-lg.hidden-sm {\n    display: none !important;\n  }\n  tr.hidden-lg.hidden-sm {\n    display: none !important;\n  }\n  th.hidden-lg.hidden-sm,\n  td.hidden-lg.hidden-sm {\n    display: none !important;\n  }\n}\n\n@media (min-width: 992px) and (max-width: 1199px) {\n  .hidden-lg.hidden-md {\n    display: none !important;\n  }\n  tr.hidden-lg.hidden-md {\n    display: none !important;\n  }\n  th.hidden-lg.hidden-md,\n  td.hidden-lg.hidden-md {\n    display: none !important;\n  }\n}\n\n@media (min-width: 1200px) {\n  .hidden-lg {\n    display: none !important;\n  }\n  tr.hidden-lg {\n    display: none !important;\n  }\n  th.hidden-lg,\n  td.hidden-lg {\n    display: none !important;\n  }\n}\n\n.visible-print {\n  display: none !important;\n}\n\ntr.visible-print {\n  display: none !important;\n}\n\nth.visible-print,\ntd.visible-print {\n  display: none !important;\n}\n\n@media print {\n  .visible-print {\n    display: block !important;\n  }\n  tr.visible-print {\n    display: table-row !important;\n  }\n  th.visible-print,\n  td.visible-print {\n    display: table-cell !important;\n  }\n  .hidden-print {\n    display: none !important;\n  }\n  tr.hidden-print {\n    display: none !important;\n  }\n  th.hidden-print,\n  td.hidden-print {\n    display: none !important;\n  }\n}"
  },
  {
    "path": "AlexaSkillsKit.Sample/Controllers/AccountController.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Net.Http;\nusing System.Security.Claims;\nusing System.Security.Cryptography;\nusing System.Threading.Tasks;\nusing System.Web;\nusing System.Web.Http;\nusing System.Web.Http.ModelBinding;\nusing Microsoft.AspNet.Identity;\nusing Microsoft.AspNet.Identity.EntityFramework;\nusing Microsoft.AspNet.Identity.Owin;\nusing Microsoft.Owin.Security;\nusing Microsoft.Owin.Security.Cookies;\nusing Microsoft.Owin.Security.OAuth;\nusing Sample.Models;\nusing Sample.Providers;\nusing Sample.Results;\n\nnamespace Sample.Controllers\n{\n    [Authorize]\n    [RoutePrefix(\"api/Account\")]\n    public class AccountController : ApiController\n    {\n        private const string LocalLoginProvider = \"Local\";\n        private ApplicationUserManager _userManager;\n\n        public AccountController()\n        {\n        }\n\n        public AccountController(ApplicationUserManager userManager,\n            ISecureDataFormat<AuthenticationTicket> accessTokenFormat)\n        {\n            UserManager = userManager;\n            AccessTokenFormat = accessTokenFormat;\n        }\n\n        public ApplicationUserManager UserManager\n        {\n            get\n            {\n                return _userManager ?? Request.GetOwinContext().GetUserManager<ApplicationUserManager>();\n            }\n            private set\n            {\n                _userManager = value;\n            }\n        }\n\n        public ISecureDataFormat<AuthenticationTicket> AccessTokenFormat { get; private set; }\n\n        // GET api/Account/UserInfo\n        [HostAuthentication(DefaultAuthenticationTypes.ExternalBearer)]\n        [Route(\"UserInfo\")]\n        public UserInfoViewModel GetUserInfo()\n        {\n            ExternalLoginData externalLogin = ExternalLoginData.FromIdentity(User.Identity as ClaimsIdentity);\n\n            return new UserInfoViewModel\n            {\n                Email = User.Identity.GetUserName(),\n                HasRegistered = externalLogin == null,\n                LoginProvider = externalLogin != null ? externalLogin.LoginProvider : null\n            };\n        }\n\n        // POST api/Account/Logout\n        [Route(\"Logout\")]\n        public IHttpActionResult Logout()\n        {\n            Authentication.SignOut(CookieAuthenticationDefaults.AuthenticationType);\n            return Ok();\n        }\n\n        // GET api/Account/ManageInfo?returnUrl=%2F&generateState=true\n        [Route(\"ManageInfo\")]\n        public async Task<ManageInfoViewModel> GetManageInfo(string returnUrl, bool generateState = false)\n        {\n            IdentityUser user = await UserManager.FindByIdAsync(User.Identity.GetUserId());\n\n            if (user == null)\n            {\n                return null;\n            }\n\n            List<UserLoginInfoViewModel> logins = new List<UserLoginInfoViewModel>();\n\n            foreach (IdentityUserLogin linkedAccount in user.Logins)\n            {\n                logins.Add(new UserLoginInfoViewModel\n                {\n                    LoginProvider = linkedAccount.LoginProvider,\n                    ProviderKey = linkedAccount.ProviderKey\n                });\n            }\n\n            if (user.PasswordHash != null)\n            {\n                logins.Add(new UserLoginInfoViewModel\n                {\n                    LoginProvider = LocalLoginProvider,\n                    ProviderKey = user.UserName,\n                });\n            }\n\n            return new ManageInfoViewModel\n            {\n                LocalLoginProvider = LocalLoginProvider,\n                Email = user.UserName,\n                Logins = logins,\n                ExternalLoginProviders = GetExternalLogins(returnUrl, generateState)\n            };\n        }\n\n        // POST api/Account/ChangePassword\n        [Route(\"ChangePassword\")]\n        public async Task<IHttpActionResult> ChangePassword(ChangePasswordBindingModel model)\n        {\n            if (!ModelState.IsValid)\n            {\n                return BadRequest(ModelState);\n            }\n\n            IdentityResult result = await UserManager.ChangePasswordAsync(User.Identity.GetUserId(), model.OldPassword,\n                model.NewPassword);\n            \n            if (!result.Succeeded)\n            {\n                return GetErrorResult(result);\n            }\n\n            return Ok();\n        }\n\n        // POST api/Account/SetPassword\n        [Route(\"SetPassword\")]\n        public async Task<IHttpActionResult> SetPassword(SetPasswordBindingModel model)\n        {\n            if (!ModelState.IsValid)\n            {\n                return BadRequest(ModelState);\n            }\n\n            IdentityResult result = await UserManager.AddPasswordAsync(User.Identity.GetUserId(), model.NewPassword);\n\n            if (!result.Succeeded)\n            {\n                return GetErrorResult(result);\n            }\n\n            return Ok();\n        }\n\n        // POST api/Account/AddExternalLogin\n        [Route(\"AddExternalLogin\")]\n        public async Task<IHttpActionResult> AddExternalLogin(AddExternalLoginBindingModel model)\n        {\n            if (!ModelState.IsValid)\n            {\n                return BadRequest(ModelState);\n            }\n\n            Authentication.SignOut(DefaultAuthenticationTypes.ExternalCookie);\n\n            AuthenticationTicket ticket = AccessTokenFormat.Unprotect(model.ExternalAccessToken);\n\n            if (ticket == null || ticket.Identity == null || (ticket.Properties != null\n                && ticket.Properties.ExpiresUtc.HasValue\n                && ticket.Properties.ExpiresUtc.Value < DateTimeOffset.UtcNow))\n            {\n                return BadRequest(\"External login failure.\");\n            }\n\n            ExternalLoginData externalData = ExternalLoginData.FromIdentity(ticket.Identity);\n\n            if (externalData == null)\n            {\n                return BadRequest(\"The external login is already associated with an account.\");\n            }\n\n            IdentityResult result = await UserManager.AddLoginAsync(User.Identity.GetUserId(),\n                new UserLoginInfo(externalData.LoginProvider, externalData.ProviderKey));\n\n            if (!result.Succeeded)\n            {\n                return GetErrorResult(result);\n            }\n\n            return Ok();\n        }\n\n        // POST api/Account/RemoveLogin\n        [Route(\"RemoveLogin\")]\n        public async Task<IHttpActionResult> RemoveLogin(RemoveLoginBindingModel model)\n        {\n            if (!ModelState.IsValid)\n            {\n                return BadRequest(ModelState);\n            }\n\n            IdentityResult result;\n\n            if (model.LoginProvider == LocalLoginProvider)\n            {\n                result = await UserManager.RemovePasswordAsync(User.Identity.GetUserId());\n            }\n            else\n            {\n                result = await UserManager.RemoveLoginAsync(User.Identity.GetUserId(),\n                    new UserLoginInfo(model.LoginProvider, model.ProviderKey));\n            }\n\n            if (!result.Succeeded)\n            {\n                return GetErrorResult(result);\n            }\n\n            return Ok();\n        }\n\n        // GET api/Account/ExternalLogin\n        [OverrideAuthentication]\n        [HostAuthentication(DefaultAuthenticationTypes.ExternalCookie)]\n        [AllowAnonymous]\n        [Route(\"ExternalLogin\", Name = \"ExternalLogin\")]\n        public async Task<IHttpActionResult> GetExternalLogin(string provider, string error = null)\n        {\n            if (error != null)\n            {\n                return Redirect(Url.Content(\"~/\") + \"#error=\" + Uri.EscapeDataString(error));\n            }\n\n            if (!User.Identity.IsAuthenticated)\n            {\n                return new ChallengeResult(provider, this);\n            }\n\n            ExternalLoginData externalLogin = ExternalLoginData.FromIdentity(User.Identity as ClaimsIdentity);\n\n            if (externalLogin == null)\n            {\n                return InternalServerError();\n            }\n\n            if (externalLogin.LoginProvider != provider)\n            {\n                Authentication.SignOut(DefaultAuthenticationTypes.ExternalCookie);\n                return new ChallengeResult(provider, this);\n            }\n\n            ApplicationUser user = await UserManager.FindAsync(new UserLoginInfo(externalLogin.LoginProvider,\n                externalLogin.ProviderKey));\n\n            bool hasRegistered = user != null;\n\n            if (hasRegistered)\n            {\n                Authentication.SignOut(DefaultAuthenticationTypes.ExternalCookie);\n                \n                 ClaimsIdentity oAuthIdentity = await user.GenerateUserIdentityAsync(UserManager,\n                    OAuthDefaults.AuthenticationType);\n                ClaimsIdentity cookieIdentity = await user.GenerateUserIdentityAsync(UserManager,\n                    CookieAuthenticationDefaults.AuthenticationType);\n\n                AuthenticationProperties properties = ApplicationOAuthProvider.CreateProperties(user.UserName);\n                Authentication.SignIn(properties, oAuthIdentity, cookieIdentity);\n            }\n            else\n            {\n                IEnumerable<Claim> claims = externalLogin.GetClaims();\n                ClaimsIdentity identity = new ClaimsIdentity(claims, OAuthDefaults.AuthenticationType);\n                Authentication.SignIn(identity);\n            }\n\n            return Ok();\n        }\n\n        // GET api/Account/ExternalLogins?returnUrl=%2F&generateState=true\n        [AllowAnonymous]\n        [Route(\"ExternalLogins\")]\n        public IEnumerable<ExternalLoginViewModel> GetExternalLogins(string returnUrl, bool generateState = false)\n        {\n            IEnumerable<AuthenticationDescription> descriptions = Authentication.GetExternalAuthenticationTypes();\n            List<ExternalLoginViewModel> logins = new List<ExternalLoginViewModel>();\n\n            string state;\n\n            if (generateState)\n            {\n                const int strengthInBits = 256;\n                state = RandomOAuthStateGenerator.Generate(strengthInBits);\n            }\n            else\n            {\n                state = null;\n            }\n\n            foreach (AuthenticationDescription description in descriptions)\n            {\n                ExternalLoginViewModel login = new ExternalLoginViewModel\n                {\n                    Name = description.Caption,\n                    Url = Url.Route(\"ExternalLogin\", new\n                    {\n                        provider = description.AuthenticationType,\n                        response_type = \"token\",\n                        client_id = Startup.PublicClientId,\n                        redirect_uri = new Uri(Request.RequestUri, returnUrl).AbsoluteUri,\n                        state = state\n                    }),\n                    State = state\n                };\n                logins.Add(login);\n            }\n\n            return logins;\n        }\n\n        // POST api/Account/Register\n        [AllowAnonymous]\n        [Route(\"Register\")]\n        public async Task<IHttpActionResult> Register(RegisterBindingModel model)\n        {\n            if (!ModelState.IsValid)\n            {\n                return BadRequest(ModelState);\n            }\n\n            var user = new ApplicationUser() { UserName = model.Email, Email = model.Email };\n\n            IdentityResult result = await UserManager.CreateAsync(user, model.Password);\n\n            if (!result.Succeeded)\n            {\n                return GetErrorResult(result);\n            }\n\n            return Ok();\n        }\n\n        // POST api/Account/RegisterExternal\n        [OverrideAuthentication]\n        [HostAuthentication(DefaultAuthenticationTypes.ExternalBearer)]\n        [Route(\"RegisterExternal\")]\n        public async Task<IHttpActionResult> RegisterExternal(RegisterExternalBindingModel model)\n        {\n            if (!ModelState.IsValid)\n            {\n                return BadRequest(ModelState);\n            }\n\n            var info = await Authentication.GetExternalLoginInfoAsync();\n            if (info == null)\n            {\n                return InternalServerError();\n            }\n\n            var user = new ApplicationUser() { UserName = model.Email, Email = model.Email };\n\n            IdentityResult result = await UserManager.CreateAsync(user);\n            if (!result.Succeeded)\n            {\n                return GetErrorResult(result);\n            }\n\n            result = await UserManager.AddLoginAsync(user.Id, info.Login);\n            if (!result.Succeeded)\n            {\n                return GetErrorResult(result); \n            }\n            return Ok();\n        }\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && _userManager != null)\n            {\n                _userManager.Dispose();\n                _userManager = null;\n            }\n\n            base.Dispose(disposing);\n        }\n\n        #region Helpers\n\n        private IAuthenticationManager Authentication\n        {\n            get { return Request.GetOwinContext().Authentication; }\n        }\n\n        private IHttpActionResult GetErrorResult(IdentityResult result)\n        {\n            if (result == null)\n            {\n                return InternalServerError();\n            }\n\n            if (!result.Succeeded)\n            {\n                if (result.Errors != null)\n                {\n                    foreach (string error in result.Errors)\n                    {\n                        ModelState.AddModelError(\"\", error);\n                    }\n                }\n\n                if (ModelState.IsValid)\n                {\n                    // No ModelState errors are available to send, so just return an empty BadRequest.\n                    return BadRequest();\n                }\n\n                return BadRequest(ModelState);\n            }\n\n            return null;\n        }\n\n        private class ExternalLoginData\n        {\n            public string LoginProvider { get; set; }\n            public string ProviderKey { get; set; }\n            public string UserName { get; set; }\n\n            public IList<Claim> GetClaims()\n            {\n                IList<Claim> claims = new List<Claim>();\n                claims.Add(new Claim(ClaimTypes.NameIdentifier, ProviderKey, null, LoginProvider));\n\n                if (UserName != null)\n                {\n                    claims.Add(new Claim(ClaimTypes.Name, UserName, null, LoginProvider));\n                }\n\n                return claims;\n            }\n\n            public static ExternalLoginData FromIdentity(ClaimsIdentity identity)\n            {\n                if (identity == null)\n                {\n                    return null;\n                }\n\n                Claim providerKeyClaim = identity.FindFirst(ClaimTypes.NameIdentifier);\n\n                if (providerKeyClaim == null || String.IsNullOrEmpty(providerKeyClaim.Issuer)\n                    || String.IsNullOrEmpty(providerKeyClaim.Value))\n                {\n                    return null;\n                }\n\n                if (providerKeyClaim.Issuer == ClaimsIdentity.DefaultIssuer)\n                {\n                    return null;\n                }\n\n                return new ExternalLoginData\n                {\n                    LoginProvider = providerKeyClaim.Issuer,\n                    ProviderKey = providerKeyClaim.Value,\n                    UserName = identity.FindFirstValue(ClaimTypes.Name)\n                };\n            }\n        }\n\n        private static class RandomOAuthStateGenerator\n        {\n            private static RandomNumberGenerator _random = new RNGCryptoServiceProvider();\n\n            public static string Generate(int strengthInBits)\n            {\n                const int bitsPerByte = 8;\n\n                if (strengthInBits % bitsPerByte != 0)\n                {\n                    throw new ArgumentException(\"strengthInBits must be evenly divisible by 8.\", \"strengthInBits\");\n                }\n\n                int strengthInBytes = strengthInBits / bitsPerByte;\n\n                byte[] data = new byte[strengthInBytes];\n                _random.GetBytes(data);\n                return HttpServerUtility.UrlTokenEncode(data);\n            }\n        }\n\n        #endregion\n    }\n}\n"
  },
  {
    "path": "AlexaSkillsKit.Sample/Controllers/HomeController.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Web;\nusing System.Web.Mvc;\n\nnamespace Sample.Controllers\n{\n    public class HomeController : Controller\n    {\n        public ActionResult Index() {\n            ViewBag.Title = \"Home Page\";\n\n            return View();\n        }\n    }\n}\n"
  },
  {
    "path": "AlexaSkillsKit.Sample/Controllers/ValuesController.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Net;\nusing System.Net.Http;\nusing System.Web.Http;\n\nnamespace Sample.Controllers\n{\n    [Authorize]\n    public class ValuesController : ApiController\n    {\n        // GET api/values\n        public IEnumerable<string> Get()\n        {\n            return new string[] { \"value1\", \"value2\" };\n        }\n\n        // GET api/values/5\n        public string Get(int id)\n        {\n            return \"value\";\n        }\n\n        // POST api/values\n        public void Post([FromBody]string value)\n        {\n        }\n\n        // PUT api/values/5\n        public void Put(int id, [FromBody]string value)\n        {\n        }\n\n        // DELETE api/values/5\n        public void Delete(int id)\n        {\n        }\n    }\n}\n"
  },
  {
    "path": "AlexaSkillsKit.Sample/Global.asax",
    "content": "﻿<%@ Application Codebehind=\"Global.asax.cs\" Inherits=\"Sample.WebApiApplication\" Language=\"C#\" %>\n"
  },
  {
    "path": "AlexaSkillsKit.Sample/Global.asax.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Web;\nusing System.Web.Http;\nusing System.Web.Mvc;\nusing System.Web.Optimization;\nusing System.Web.Routing;\n\nnamespace Sample\n{\n    public class WebApiApplication : System.Web.HttpApplication\n    {\n        protected void Application_Start() {\n            AreaRegistration.RegisterAllAreas();\n            GlobalConfiguration.Configure(WebApiConfig.Register);\n            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);\n            RouteConfig.RegisterRoutes(RouteTable.Routes);\n            BundleConfig.RegisterBundles(BundleTable.Bundles);\n        }\n    }\n}\n"
  },
  {
    "path": "AlexaSkillsKit.Sample/Models/AccountBindingModels.cs",
    "content": "﻿using System;\nusing System.ComponentModel.DataAnnotations;\nusing Newtonsoft.Json;\n\nnamespace Sample.Models\n{\n    // Models used as parameters to AccountController actions.\n\n    public class AddExternalLoginBindingModel\n    {\n        [Required]\n        [Display(Name = \"External access token\")]\n        public string ExternalAccessToken { get; set; }\n    }\n\n    public class ChangePasswordBindingModel\n    {\n        [Required]\n        [DataType(DataType.Password)]\n        [Display(Name = \"Current password\")]\n        public string OldPassword { get; set; }\n\n        [Required]\n        [StringLength(100, ErrorMessage = \"The {0} must be at least {2} characters long.\", MinimumLength = 6)]\n        [DataType(DataType.Password)]\n        [Display(Name = \"New password\")]\n        public string NewPassword { get; set; }\n\n        [DataType(DataType.Password)]\n        [Display(Name = \"Confirm new password\")]\n        [Compare(\"NewPassword\", ErrorMessage = \"The new password and confirmation password do not match.\")]\n        public string ConfirmPassword { get; set; }\n    }\n\n    public class RegisterBindingModel\n    {\n        [Required]\n        [Display(Name = \"Email\")]\n        public string Email { get; set; }\n\n        [Required]\n        [StringLength(100, ErrorMessage = \"The {0} must be at least {2} characters long.\", MinimumLength = 6)]\n        [DataType(DataType.Password)]\n        [Display(Name = \"Password\")]\n        public string Password { get; set; }\n\n        [DataType(DataType.Password)]\n        [Display(Name = \"Confirm password\")]\n        [Compare(\"Password\", ErrorMessage = \"The password and confirmation password do not match.\")]\n        public string ConfirmPassword { get; set; }\n    }\n\n    public class RegisterExternalBindingModel\n    {\n        [Required]\n        [Display(Name = \"Email\")]\n        public string Email { get; set; }\n    }\n\n    public class RemoveLoginBindingModel\n    {\n        [Required]\n        [Display(Name = \"Login provider\")]\n        public string LoginProvider { get; set; }\n\n        [Required]\n        [Display(Name = \"Provider key\")]\n        public string ProviderKey { get; set; }\n    }\n\n    public class SetPasswordBindingModel\n    {\n        [Required]\n        [StringLength(100, ErrorMessage = \"The {0} must be at least {2} characters long.\", MinimumLength = 6)]\n        [DataType(DataType.Password)]\n        [Display(Name = \"New password\")]\n        public string NewPassword { get; set; }\n\n        [DataType(DataType.Password)]\n        [Display(Name = \"Confirm new password\")]\n        [Compare(\"NewPassword\", ErrorMessage = \"The new password and confirmation password do not match.\")]\n        public string ConfirmPassword { get; set; }\n    }\n}\n"
  },
  {
    "path": "AlexaSkillsKit.Sample/Models/AccountViewModels.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\n\nnamespace Sample.Models\n{\n    // Models returned by AccountController actions.\n\n    public class ExternalLoginViewModel\n    {\n        public string Name { get; set; }\n\n        public string Url { get; set; }\n\n        public string State { get; set; }\n    }\n\n    public class ManageInfoViewModel\n    {\n        public string LocalLoginProvider { get; set; }\n\n        public string Email { get; set; }\n\n        public IEnumerable<UserLoginInfoViewModel> Logins { get; set; }\n\n        public IEnumerable<ExternalLoginViewModel> ExternalLoginProviders { get; set; }\n    }\n\n    public class UserInfoViewModel\n    {\n        public string Email { get; set; }\n\n        public bool HasRegistered { get; set; }\n\n        public string LoginProvider { get; set; }\n    }\n\n    public class UserLoginInfoViewModel\n    {\n        public string LoginProvider { get; set; }\n\n        public string ProviderKey { get; set; }\n    }\n}\n"
  },
  {
    "path": "AlexaSkillsKit.Sample/Models/IdentityModels.cs",
    "content": "﻿using System.Security.Claims;\nusing System.Threading.Tasks;\nusing Microsoft.AspNet.Identity;\nusing Microsoft.AspNet.Identity.EntityFramework;\nusing Microsoft.AspNet.Identity.Owin;\n\nnamespace Sample.Models\n{\n    // You can add profile data for the user by adding more properties to your ApplicationUser class, please visit http://go.microsoft.com/fwlink/?LinkID=317594 to learn more.\n    public class ApplicationUser : IdentityUser\n    {\n        public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<ApplicationUser> manager, string authenticationType)\n        {\n            // Note the authenticationType must match the one defined in CookieAuthenticationOptions.AuthenticationType\n            var userIdentity = await manager.CreateIdentityAsync(this, authenticationType);\n            // Add custom user claims here\n            return userIdentity;\n        }\n    }\n\n    public class ApplicationDbContext : IdentityDbContext<ApplicationUser>\n    {\n        public ApplicationDbContext()\n            : base(\"DefaultConnection\", throwIfV1Schema: false)\n        {\n        }\n        \n        public static ApplicationDbContext Create()\n        {\n            return new ApplicationDbContext();\n        }\n    }\n}"
  },
  {
    "path": "AlexaSkillsKit.Sample/NLog.config",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n<nlog xmlns=\"http://www.nlog-project.org/schemas/NLog.xsd\"\n      xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n      throwExceptions=\"true\"\n      internalLogLevel=\"Error\">\n  <!-- \n  See https://github.com/nlog/nlog/wiki/Configuration-file \n  for information on customizing logging rules and outputs.\n   -->\n  <targets>\n    <target xsi:type=\"File\" name=\"file\" fileName=\"AlexaAppKit.Sample.Log.txt\"/>\n    <target xsi:type=\"OutputDebugString\" name=\"ds\" />\n  </targets>\n  <rules>\n    <logger name=\"*\" minlevel=\"Trace\" writeTo=\"file,ds\" />\n  </rules>\n</nlog>"
  },
  {
    "path": "AlexaSkillsKit.Sample/NLog.xsd",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<xs:schema id=\"NLog\" targetNamespace=\"http://www.nlog-project.org/schemas/NLog.xsd\" elementFormDefault=\"qualified\" xmlns:xs=\"http://www.w3.org/2001/XMLSchema\" xmlns=\"http://www.nlog-project.org/schemas/NLog.xsd\">\n  <xs:element name=\"nlog\" type=\"NLogConfiguration\" />\n  <xs:complexType name=\"NLogConfiguration\">\n    <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n      <xs:element name=\"extensions\" type=\"NLogExtensions\" />\n      <xs:element name=\"include\" type=\"NLogInclude\" />\n      <xs:element name=\"variable\" type=\"NLogVariable\" />\n      <xs:element name=\"targets\" type=\"NLogTargets\" />\n      <xs:element name=\"rules\" type=\"NLogRules\" />\n      <xs:element name=\"time\" type=\"TimeSource\" />\n    </xs:choice>\n    <xs:attribute name=\"autoReload\" type=\"xs:boolean\">\n      <xs:annotation>\n        <xs:documentation>Watch config file for changes and reload automatically.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"internalLogToConsole\" type=\"xs:boolean\">\n      <xs:annotation>\n        <xs:documentation>Print internal NLog messages to the console. Default value is: false</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"internalLogToConsoleError\" type=\"xs:boolean\">\n      <xs:annotation>\n        <xs:documentation>Print internal NLog messages to the console error output. Default value is: false</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"internalLogFile\" type=\"xs:string\">\n      <xs:annotation>\n        <xs:documentation>Write internal NLog messages to the specified file.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"internalLogLevel\" type=\"NLogLevel\">\n      <xs:annotation>\n        <xs:documentation>Log level threshold for internal log messages. Default value is: Info.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"globalThreshold\" type=\"NLogLevel\">\n      <xs:annotation>\n        <xs:documentation>Global log level threshold for application log messages. Messages below this level won't be logged..</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"throwExceptions\" type=\"xs:boolean\">\n      <xs:annotation>\n        <xs:documentation>Pass NLog internal exceptions to the application. Default value is: false.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n  </xs:complexType>\n  <xs:complexType name=\"NLogTargets\">\n    <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n      <xs:element name=\"default-wrapper\" type=\"WrapperTargetBase\" />\n      <xs:element name=\"default-target-parameters\" type=\"Target\" />\n      <xs:element name=\"target\" type=\"Target\" />\n      <xs:element name=\"wrapper-target\" type=\"WrapperTargetBase\" />\n      <xs:element name=\"compound-target\" type=\"CompoundTargetBase\" />\n    </xs:choice>\n    <xs:attribute name=\"async\" type=\"xs:boolean\">\n      <xs:annotation>\n        <xs:documentation>Make all targets within this section asynchronous (creates additional threads but the calling thread isn't blocked by any target writes).</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n  </xs:complexType>\n  <xs:complexType name=\"NLogRules\">\n    <xs:sequence minOccurs=\"0\" maxOccurs=\"unbounded\">\n      <xs:element name=\"logger\" type=\"NLogLoggerRule\" />\n    </xs:sequence>\n  </xs:complexType>\n  <xs:complexType name=\"NLogExtensions\">\n    <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n      <xs:element name=\"add\" type=\"NLogExtensionsAdd\" />\n    </xs:choice>\n  </xs:complexType>\n  <xs:complexType name=\"NLogExtensionsAdd\">\n    <xs:attribute name=\"prefix\" type=\"xs:string\">\n      <xs:annotation>\n        <xs:documentation>Prefix for targets/layout renderers/filters/conditions loaded from this assembly.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"assemblyFile\" type=\"xs:string\">\n      <xs:annotation>\n        <xs:documentation>Load NLog extensions from the specified file (*.dll)</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"assembly\" type=\"xs:string\">\n      <xs:annotation>\n        <xs:documentation>Load NLog extensions from the specified assembly. Assembly name should be fully qualified.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n  </xs:complexType>\n  <xs:complexType name=\"NLogLoggerRule\">\n    <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n      <xs:element name=\"filters\" type=\"NLogFilters\" />\n    </xs:choice>\n    <xs:attribute name=\"name\" use=\"optional\">\n      <xs:annotation>\n        <xs:documentation>Name of the logger. May include '*' character which acts like a wildcard. Allowed forms are: *, Name, *Name, Name* and *Name*</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"levels\" type=\"NLogLevelList\">\n      <xs:annotation>\n        <xs:documentation>Comma separated list of levels that this rule matches.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"minlevel\" type=\"NLogLevel\">\n      <xs:annotation>\n        <xs:documentation>Minimum level that this rule matches.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"maxlevel\" type=\"NLogLevel\">\n      <xs:annotation>\n        <xs:documentation>Maximum level that this rule matches.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"level\" type=\"NLogLevel\">\n      <xs:annotation>\n        <xs:documentation>Level that this rule matches.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"writeTo\" type=\"NLogTargetIDList\">\n      <xs:annotation>\n        <xs:documentation>Comma separated list of target names.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"final\" type=\"xs:boolean\" default=\"false\">\n      <xs:annotation>\n        <xs:documentation>Ignore further rules if this one matches.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n  </xs:complexType>\n  <xs:complexType name=\"NLogFilters\">\n    <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n      <xs:element name=\"when\" type=\"when\" />\n      <xs:element name=\"whenContains\" type=\"whenContains\" />\n      <xs:element name=\"whenEqual\" type=\"whenEqual\" />\n      <xs:element name=\"whenNotContains\" type=\"whenNotContains\" />\n      <xs:element name=\"whenNotEqual\" type=\"whenNotEqual\" />\n    </xs:choice>\n  </xs:complexType>\n  <xs:simpleType name=\"NLogLevel\">\n    <xs:restriction base=\"xs:string\">\n      <xs:enumeration value=\"Off\" />\n      <xs:enumeration value=\"Trace\" />\n      <xs:enumeration value=\"Debug\" />\n      <xs:enumeration value=\"Info\" />\n      <xs:enumeration value=\"Warn\" />\n      <xs:enumeration value=\"Error\" />\n      <xs:enumeration value=\"Fatal\" />\n    </xs:restriction>\n  </xs:simpleType>\n  <xs:simpleType name=\"NLogLevelList\">\n    <xs:restriction base=\"xs:string\">\n      <xs:pattern value=\"(|Trace|Debug|Info|Warn|Error|Fatal)(,(Trace|Debug|Info|Warn|Error|Fatal))*\" />\n    </xs:restriction>\n  </xs:simpleType>\n  <xs:complexType name=\"NLogInclude\">\n    <xs:attribute name=\"file\" type=\"SimpleLayoutAttribute\" use=\"required\">\n      <xs:annotation>\n        <xs:documentation>Name of the file to be included. The name is relative to the name of the current config file.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"ignoreErrors\" type=\"xs:boolean\" use=\"optional\" default=\"false\">\n      <xs:annotation>\n        <xs:documentation>Ignore any errors in the include file.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n  </xs:complexType>\n  <xs:complexType name=\"NLogVariable\">\n    <xs:attribute name=\"name\" type=\"xs:string\" use=\"required\">\n      <xs:annotation>\n        <xs:documentation>Variable name.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"value\" type=\"SimpleLayoutAttribute\" use=\"required\">\n      <xs:annotation>\n        <xs:documentation>Variable value.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n  </xs:complexType>\n  <xs:simpleType name=\"NLogTargetIDList\">\n    <xs:restriction base=\"xs:string\">\n      <xs:pattern value=\"(|([a-zA-Z][a-zA-Z0-9_\\-]*))(,([a-zA-Z][a-zA-Z0-9_\\-]*))*\" />\n    </xs:restriction>\n  </xs:simpleType>\n  <xs:complexType name=\"Target\" abstract=\"true\"></xs:complexType>\n  <xs:complexType name=\"TargetRef\">\n    <xs:attribute name=\"name\" type=\"xs:string\" use=\"required\" />\n  </xs:complexType>\n  <xs:complexType name=\"WrapperTargetBase\" abstract=\"true\">\n    <xs:complexContent>\n      <xs:extension base=\"Target\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"target\" type=\"Target\" minOccurs=\"1\" maxOccurs=\"1\" />\n          <xs:element name=\"wrapper-target\" type=\"WrapperTargetBase\" minOccurs=\"1\" maxOccurs=\"1\" />\n          <xs:element name=\"compound-target\" type=\"CompoundTargetBase\" minOccurs=\"1\" maxOccurs=\"1\" />\n          <xs:element name=\"target-ref\" type=\"TargetRef\" minOccurs=\"1\" maxOccurs=\"1\" />\n          <xs:element name=\"wrapper-target-ref\" type=\"TargetRef\" minOccurs=\"1\" maxOccurs=\"1\" />\n          <xs:element name=\"compound-target-ref\" type=\"TargetRef\" minOccurs=\"1\" maxOccurs=\"1\" />\n        </xs:choice>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"CompoundTargetBase\" abstract=\"true\">\n    <xs:complexContent>\n      <xs:extension base=\"Target\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"target\" type=\"Target\" minOccurs=\"1\" maxOccurs=\"unbounded\" />\n          <xs:element name=\"wrapper-target\" type=\"WrapperTargetBase\" minOccurs=\"1\" maxOccurs=\"1\" />\n          <xs:element name=\"compound-target\" type=\"CompoundTargetBase\" minOccurs=\"1\" maxOccurs=\"1\" />\n          <xs:element name=\"target-ref\" type=\"TargetRef\" minOccurs=\"1\" maxOccurs=\"1\" />\n          <xs:element name=\"wrapper-target-ref\" type=\"TargetRef\" minOccurs=\"1\" maxOccurs=\"1\" />\n          <xs:element name=\"compound-target-ref\" type=\"TargetRef\" minOccurs=\"1\" maxOccurs=\"1\" />\n        </xs:choice>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"Layout\"></xs:complexType>\n  <xs:complexType name=\"Filter\" abstract=\"true\"></xs:complexType>\n  <xs:complexType name=\"TimeSource\" abstract=\"true\"></xs:complexType>\n  <xs:simpleType name=\"SimpleLayoutAttribute\">\n    <xs:restriction base=\"xs:string\">\n      <xs:pattern value=\".*\" />\n    </xs:restriction>\n  </xs:simpleType>\n  <xs:simpleType name=\"Condition\">\n    <xs:restriction base=\"xs:string\">\n      <xs:minLength value=\"1\" />\n    </xs:restriction>\n  </xs:simpleType>\n  <xs:complexType name=\"AspNetBufferingWrapper\">\n    <xs:complexContent>\n      <xs:extension base=\"WrapperTargetBase\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"bufferGrowLimit\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"bufferSize\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"growBufferAsNeeded\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"bufferGrowLimit\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Maximum number of log events that the buffer can keep.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"bufferSize\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Number of log events to be buffered.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"growBufferAsNeeded\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether buffer should grow as needed.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"AspNetTrace\">\n    <xs:complexContent>\n      <xs:extension base=\"Target\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"layout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"layout\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Layout used to format log messages.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"AspResponse\">\n    <xs:complexContent>\n      <xs:extension base=\"Target\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"layout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"addComments\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"layout\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Layout used to format log messages.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"addComments\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to add &lt;!-- --&gt; comments around all written texts.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"AsyncWrapper\">\n    <xs:complexContent>\n      <xs:extension base=\"WrapperTargetBase\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"batchSize\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"overflowAction\" minOccurs=\"0\" maxOccurs=\"1\" type=\"NLog.Targets.Wrappers.AsyncTargetWrapperOverflowAction\" />\n          <xs:element name=\"queueLimit\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"timeToSleepBetweenBatches\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"batchSize\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Number of log events that should be processed in a batch by the lazy writer thread.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"overflowAction\" type=\"NLog.Targets.Wrappers.AsyncTargetWrapperOverflowAction\">\n          <xs:annotation>\n            <xs:documentation>Action to be taken when the lazy writer thread request queue count exceeds the set limit.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"queueLimit\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Limit on the number of requests in the lazy writer thread request queue.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"timeToSleepBetweenBatches\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Time in milliseconds to sleep between batches.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:simpleType name=\"NLog.Targets.Wrappers.AsyncTargetWrapperOverflowAction\">\n    <xs:restriction base=\"xs:string\">\n      <xs:enumeration value=\"Grow\" />\n      <xs:enumeration value=\"Discard\" />\n      <xs:enumeration value=\"Block\" />\n    </xs:restriction>\n  </xs:simpleType>\n  <xs:complexType name=\"AutoFlushWrapper\">\n    <xs:complexContent>\n      <xs:extension base=\"WrapperTargetBase\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"BufferingWrapper\">\n    <xs:complexContent>\n      <xs:extension base=\"WrapperTargetBase\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"bufferSize\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"flushTimeout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"slidingTimeout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"bufferSize\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Number of log events to be buffered.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"flushTimeout\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Timeout (in milliseconds) after which the contents of buffer will be flushed if there's no write in the specified period of time. Use -1 to disable timed flushes.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"slidingTimeout\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to use sliding timeout.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"Chainsaw\">\n    <xs:complexContent>\n      <xs:extension base=\"Target\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"encoding\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"layout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"maxMessageSize\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"newLine\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"onOverflow\" minOccurs=\"0\" maxOccurs=\"1\" type=\"NLog.Targets.NetworkTargetOverflowAction\" />\n          <xs:element name=\"connectionCacheSize\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"address\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"keepConnection\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"maxQueueSize\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"includeNLogData\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"includeSourceInfo\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"ndcItemSeparator\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"parameter\" minOccurs=\"0\" maxOccurs=\"unbounded\" type=\"NLog.Targets.NLogViewerParameterInfo\" />\n          <xs:element name=\"includeCallSite\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"appInfo\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"includeNdc\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"includeMdc\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"encoding\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Encoding to be used.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"layout\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Instance of  that is used to format log messages.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"maxMessageSize\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Maximum message size in bytes.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"newLine\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to append newline at the end of log message.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"onOverflow\" type=\"NLog.Targets.NetworkTargetOverflowAction\">\n          <xs:annotation>\n            <xs:documentation>Action that should be taken if the message is larger than maxMessageSize.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"connectionCacheSize\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Size of the connection cache (number of connections which are kept alive).</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"address\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Network address.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"keepConnection\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to keep connection open whenever possible.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"maxQueueSize\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Maximum queue size.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"includeNLogData\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to include NLog-specific extensions to log4j schema.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"includeSourceInfo\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to include source info (file name and line number) in the information sent over the network.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"ndcItemSeparator\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>NDC item separator.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"includeCallSite\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to include call site (class and method name) in the information sent over the network.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"appInfo\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>AppInfo field. By default it's the friendly name of the current AppDomain.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"includeNdc\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to include  stack contents.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"includeMdc\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to include  dictionary contents.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:simpleType name=\"NLog.Targets.NetworkTargetOverflowAction\">\n    <xs:restriction base=\"xs:string\">\n      <xs:enumeration value=\"Error\" />\n      <xs:enumeration value=\"Split\" />\n      <xs:enumeration value=\"Discard\" />\n    </xs:restriction>\n  </xs:simpleType>\n  <xs:complexType name=\"NLog.Targets.NLogViewerParameterInfo\">\n    <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n      <xs:element name=\"layout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n      <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n    </xs:choice>\n    <xs:attribute name=\"layout\" type=\"SimpleLayoutAttribute\">\n      <xs:annotation>\n        <xs:documentation>Layout that should be use to calcuate the value for the parameter.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"name\" type=\"xs:string\">\n      <xs:annotation>\n        <xs:documentation>Viewer parameter name.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n  </xs:complexType>\n  <xs:complexType name=\"ColoredConsole\">\n    <xs:complexContent>\n      <xs:extension base=\"Target\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"layout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"header\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"footer\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"useDefaultRowHighlightingRules\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"highlight-row\" minOccurs=\"0\" maxOccurs=\"unbounded\" type=\"NLog.Targets.ConsoleRowHighlightingRule\" />\n          <xs:element name=\"highlight-word\" minOccurs=\"0\" maxOccurs=\"unbounded\" type=\"NLog.Targets.ConsoleWordHighlightingRule\" />\n          <xs:element name=\"errorStream\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"layout\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Text to be rendered.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"header\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Header.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"footer\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Footer.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"useDefaultRowHighlightingRules\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to use default row highlighting rules.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"errorStream\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether the error stream (stderr) should be used instead of the output stream (stdout).</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:simpleType name=\"NLog.Targets.ConsoleOutputColor\">\n    <xs:restriction base=\"xs:string\">\n      <xs:enumeration value=\"Black\" />\n      <xs:enumeration value=\"DarkBlue\" />\n      <xs:enumeration value=\"DarkGreen\" />\n      <xs:enumeration value=\"DarkCyan\" />\n      <xs:enumeration value=\"DarkRed\" />\n      <xs:enumeration value=\"DarkMagenta\" />\n      <xs:enumeration value=\"DarkYellow\" />\n      <xs:enumeration value=\"Gray\" />\n      <xs:enumeration value=\"DarkGray\" />\n      <xs:enumeration value=\"Blue\" />\n      <xs:enumeration value=\"Green\" />\n      <xs:enumeration value=\"Cyan\" />\n      <xs:enumeration value=\"Red\" />\n      <xs:enumeration value=\"Magenta\" />\n      <xs:enumeration value=\"Yellow\" />\n      <xs:enumeration value=\"White\" />\n      <xs:enumeration value=\"NoChange\" />\n    </xs:restriction>\n  </xs:simpleType>\n  <xs:complexType name=\"NLog.Targets.ConsoleRowHighlightingRule\">\n    <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n      <xs:element name=\"condition\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Condition\" />\n      <xs:element name=\"backgroundColor\" minOccurs=\"0\" maxOccurs=\"1\" type=\"NLog.Targets.ConsoleOutputColor\" />\n      <xs:element name=\"foregroundColor\" minOccurs=\"0\" maxOccurs=\"1\" type=\"NLog.Targets.ConsoleOutputColor\" />\n    </xs:choice>\n    <xs:attribute name=\"condition\" type=\"Condition\">\n      <xs:annotation>\n        <xs:documentation>Condition that must be met in order to set the specified foreground and background color.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"backgroundColor\" type=\"NLog.Targets.ConsoleOutputColor\">\n      <xs:annotation>\n        <xs:documentation>Background color.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"foregroundColor\" type=\"NLog.Targets.ConsoleOutputColor\">\n      <xs:annotation>\n        <xs:documentation>Foreground color.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n  </xs:complexType>\n  <xs:complexType name=\"NLog.Targets.ConsoleWordHighlightingRule\">\n    <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n      <xs:element name=\"ignoreCase\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n      <xs:element name=\"regex\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n      <xs:element name=\"text\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n      <xs:element name=\"wholeWords\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n      <xs:element name=\"backgroundColor\" minOccurs=\"0\" maxOccurs=\"1\" type=\"NLog.Targets.ConsoleOutputColor\" />\n      <xs:element name=\"foregroundColor\" minOccurs=\"0\" maxOccurs=\"1\" type=\"NLog.Targets.ConsoleOutputColor\" />\n    </xs:choice>\n    <xs:attribute name=\"ignoreCase\" type=\"xs:boolean\">\n      <xs:annotation>\n        <xs:documentation>Indicates whether to ignore case when comparing texts.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"regex\" type=\"xs:string\">\n      <xs:annotation>\n        <xs:documentation>Regular expression to be matched. You must specify either text or regex.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"text\" type=\"xs:string\">\n      <xs:annotation>\n        <xs:documentation>Text to be matched. You must specify either text or regex.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"wholeWords\" type=\"xs:boolean\">\n      <xs:annotation>\n        <xs:documentation>Indicates whether to match whole words only.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"backgroundColor\" type=\"NLog.Targets.ConsoleOutputColor\">\n      <xs:annotation>\n        <xs:documentation>Background color.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"foregroundColor\" type=\"NLog.Targets.ConsoleOutputColor\">\n      <xs:annotation>\n        <xs:documentation>Foreground color.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n  </xs:complexType>\n  <xs:complexType name=\"Console\">\n    <xs:complexContent>\n      <xs:extension base=\"Target\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"layout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"header\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"footer\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"error\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"layout\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Text to be rendered.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"header\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Header.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"footer\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Footer.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"error\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to send the log messages to the standard error instead of the standard output.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"Database\">\n    <xs:complexContent>\n      <xs:extension base=\"Target\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"connectionString\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"connectionStringName\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"dbDatabase\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"dbHost\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"dbPassword\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"dbProvider\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"dbUserName\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"keepConnection\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"useTransactions\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"installConnectionString\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"install-command\" minOccurs=\"0\" maxOccurs=\"unbounded\" type=\"NLog.Targets.DatabaseCommandInfo\" />\n          <xs:element name=\"uninstall-command\" minOccurs=\"0\" maxOccurs=\"unbounded\" type=\"NLog.Targets.DatabaseCommandInfo\" />\n          <xs:element name=\"commandText\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"commandType\" minOccurs=\"0\" maxOccurs=\"1\" type=\"System.Data.CommandType\" />\n          <xs:element name=\"parameter\" minOccurs=\"0\" maxOccurs=\"unbounded\" type=\"NLog.Targets.DatabaseParameterInfo\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"connectionString\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Connection string. When provided, it overrides the values specified in DBHost, DBUserName, DBPassword, DBDatabase.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"connectionStringName\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the connection string (as specified in &lt;connectionStrings&gt; configuration section.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"dbDatabase\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Database name. If the ConnectionString is not provided this value will be used to construct the \"Database=\" part of the connection string.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"dbHost\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Database host name. If the ConnectionString is not provided this value will be used to construct the \"Server=\" part of the connection string.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"dbPassword\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Database password. If the ConnectionString is not provided this value will be used to construct the \"Password=\" part of the connection string.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"dbProvider\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the database provider.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"dbUserName\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Database user name. If the ConnectionString is not provided this value will be used to construct the \"User ID=\" part of the connection string.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"keepConnection\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to keep the database connection open between the log events.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"useTransactions\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to use database transactions. Some data providers require this.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"installConnectionString\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Connection string using for installation and uninstallation. If not provided, regular ConnectionString is being used.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"commandText\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Text of the SQL command to be run on each log level.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"commandType\" type=\"System.Data.CommandType\">\n          <xs:annotation>\n            <xs:documentation>Type of the SQL command to be run on each log level.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:simpleType name=\"System.Data.CommandType\">\n    <xs:restriction base=\"xs:string\">\n      <xs:enumeration value=\"Text\" />\n      <xs:enumeration value=\"StoredProcedure\" />\n      <xs:enumeration value=\"TableDirect\" />\n    </xs:restriction>\n  </xs:simpleType>\n  <xs:complexType name=\"NLog.Targets.DatabaseCommandInfo\">\n    <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n      <xs:element name=\"commandType\" minOccurs=\"0\" maxOccurs=\"1\" type=\"System.Data.CommandType\" />\n      <xs:element name=\"connectionString\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n      <xs:element name=\"ignoreFailures\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n      <xs:element name=\"parameter\" minOccurs=\"0\" maxOccurs=\"unbounded\" type=\"NLog.Targets.DatabaseParameterInfo\" />\n      <xs:element name=\"text\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n    </xs:choice>\n    <xs:attribute name=\"commandType\" type=\"System.Data.CommandType\">\n      <xs:annotation>\n        <xs:documentation>Type of the command.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"connectionString\" type=\"SimpleLayoutAttribute\">\n      <xs:annotation>\n        <xs:documentation>Connection string to run the command against. If not provided, connection string from the target is used.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"ignoreFailures\" type=\"xs:boolean\">\n      <xs:annotation>\n        <xs:documentation>Indicates whether to ignore failures.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"text\" type=\"SimpleLayoutAttribute\">\n      <xs:annotation>\n        <xs:documentation>Command text.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n  </xs:complexType>\n  <xs:complexType name=\"NLog.Targets.DatabaseParameterInfo\">\n    <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n      <xs:element name=\"layout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n      <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n      <xs:element name=\"precision\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:byte\" />\n      <xs:element name=\"scale\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:byte\" />\n      <xs:element name=\"size\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n    </xs:choice>\n    <xs:attribute name=\"layout\" type=\"SimpleLayoutAttribute\">\n      <xs:annotation>\n        <xs:documentation>Layout that should be use to calcuate the value for the parameter.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"name\" type=\"xs:string\">\n      <xs:annotation>\n        <xs:documentation>Database parameter name.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"precision\" type=\"xs:byte\">\n      <xs:annotation>\n        <xs:documentation>Database parameter precision.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"scale\" type=\"xs:byte\">\n      <xs:annotation>\n        <xs:documentation>Database parameter scale.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"size\" type=\"xs:integer\">\n      <xs:annotation>\n        <xs:documentation>Database parameter size.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n  </xs:complexType>\n  <xs:complexType name=\"Debugger\">\n    <xs:complexContent>\n      <xs:extension base=\"Target\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"layout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"header\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"footer\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"layout\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Text to be rendered.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"header\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Header.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"footer\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Footer.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"Debug\">\n    <xs:complexContent>\n      <xs:extension base=\"Target\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"layout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"layout\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Layout used to format log messages.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"EventLog\">\n    <xs:complexContent>\n      <xs:extension base=\"Target\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"layout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"category\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"eventId\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"log\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"machineName\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"source\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"layout\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Layout used to format log messages.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"category\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Layout that renders event Category.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"eventId\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Layout that renders event ID.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"log\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the Event Log to write to. This can be System, Application or any user-defined name.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"machineName\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the machine on which Event Log service is running.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"source\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Value to be used as the event Source.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"FallbackGroup\">\n    <xs:complexContent>\n      <xs:extension base=\"CompoundTargetBase\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"returnToFirstOnSuccess\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"returnToFirstOnSuccess\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to return to the first target after any successful write.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"File\">\n    <xs:complexContent>\n      <xs:extension base=\"Target\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"layout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"header\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"footer\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"encoding\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"lineEnding\" minOccurs=\"0\" maxOccurs=\"1\" type=\"NLog.Targets.LineEndingMode\" />\n          <xs:element name=\"archiveNumbering\" minOccurs=\"0\" maxOccurs=\"1\" type=\"NLog.Targets.ArchiveNumberingMode\" />\n          <xs:element name=\"archiveFileName\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"archiveEvery\" minOccurs=\"0\" maxOccurs=\"1\" type=\"NLog.Targets.FileArchivePeriod\" />\n          <xs:element name=\"archiveAboveSize\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:long\" />\n          <xs:element name=\"maxArchiveFiles\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"forceManaged\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"fileAttributes\" minOccurs=\"0\" maxOccurs=\"1\" type=\"NLog.Targets.Win32FileAttributes\" />\n          <xs:element name=\"replaceFileContentsOnEachWrite\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"deleteOldFileOnStartup\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"fileName\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"archiveDateFormat\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"archiveOldFileOnStartup\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"createDirs\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"enableFileDelete\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"openFileCacheTimeout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"networkWrites\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"keepFileOpen\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"concurrentWrites\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"concurrentWriteAttempts\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"concurrentWriteAttemptDelay\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"bufferSize\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"openFileCacheSize\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"autoFlush\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"layout\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Text to be rendered.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"header\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Header.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"footer\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Footer.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"encoding\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>File encoding.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"lineEnding\" type=\"NLog.Targets.LineEndingMode\">\n          <xs:annotation>\n            <xs:documentation>Line ending mode.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"archiveNumbering\" type=\"NLog.Targets.ArchiveNumberingMode\">\n          <xs:annotation>\n            <xs:documentation>Way file archives are numbered.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"archiveFileName\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Name of the file to be used for an archive.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"archiveEvery\" type=\"NLog.Targets.FileArchivePeriod\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to automatically archive log files every time the specified time passes.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"archiveAboveSize\" type=\"xs:long\">\n          <xs:annotation>\n            <xs:documentation>Size in bytes above which log files will be automatically archived.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"maxArchiveFiles\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Maximum number of archive files that should be kept.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"forceManaged\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Gets ors set a value indicating whether a managed file stream is forced, instead of used the native implementation.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"fileAttributes\" type=\"NLog.Targets.Win32FileAttributes\">\n          <xs:annotation>\n            <xs:documentation>File attributes (Windows only).</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"replaceFileContentsOnEachWrite\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to replace file contents on each write instead of appending log message at the end.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"deleteOldFileOnStartup\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to delete old log file on startup.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"fileName\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Name of the file to write to.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"archiveDateFormat\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Value specifying the date format to use when archving files.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"archiveOldFileOnStartup\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to archive old log file on startup.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"createDirs\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to create directories if they don't exist.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"enableFileDelete\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to enable log file(s) to be deleted.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"openFileCacheTimeout\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Maximum number of seconds that files are kept open. If this number is negative the files are not automatically closed after a period of inactivity.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"networkWrites\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether concurrent writes to the log file by multiple processes on different network hosts.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"keepFileOpen\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to keep log file open instead of opening and closing it on each logging event.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"concurrentWrites\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether concurrent writes to the log file by multiple processes on the same host.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"concurrentWriteAttempts\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Number of times the write is appended on the file before NLog discards the log message.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"concurrentWriteAttemptDelay\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Delay in milliseconds to wait before attempting to write to the file again.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"bufferSize\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Log file buffer size in bytes.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"openFileCacheSize\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Number of files to be kept open. Setting this to a higher value may improve performance in a situation where a single File target is writing to many files (such as splitting by level or by logger).</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"autoFlush\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to automatically flush the file buffers after each log message.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:simpleType name=\"NLog.Targets.LineEndingMode\">\n    <xs:restriction base=\"xs:string\">\n      <xs:enumeration value=\"Default\" />\n      <xs:enumeration value=\"CRLF\" />\n      <xs:enumeration value=\"CR\" />\n      <xs:enumeration value=\"LF\" />\n      <xs:enumeration value=\"None\" />\n    </xs:restriction>\n  </xs:simpleType>\n  <xs:simpleType name=\"NLog.Targets.ArchiveNumberingMode\">\n    <xs:restriction base=\"xs:string\">\n      <xs:enumeration value=\"Sequence\" />\n      <xs:enumeration value=\"Rolling\" />\n      <xs:enumeration value=\"Date\" />\n      <xs:enumeration value=\"DateAndSequence\" />\n    </xs:restriction>\n  </xs:simpleType>\n  <xs:simpleType name=\"NLog.Targets.FileArchivePeriod\">\n    <xs:restriction base=\"xs:string\">\n      <xs:enumeration value=\"None\" />\n      <xs:enumeration value=\"Year\" />\n      <xs:enumeration value=\"Month\" />\n      <xs:enumeration value=\"Day\" />\n      <xs:enumeration value=\"Hour\" />\n      <xs:enumeration value=\"Minute\" />\n    </xs:restriction>\n  </xs:simpleType>\n  <xs:simpleType name=\"NLog.Targets.Win32FileAttributes\">\n    <xs:restriction base=\"xs:string\">\n      <xs:enumeration value=\"ReadOnly\" />\n      <xs:enumeration value=\"Hidden\" />\n      <xs:enumeration value=\"System\" />\n      <xs:enumeration value=\"Archive\" />\n      <xs:enumeration value=\"Device\" />\n      <xs:enumeration value=\"Normal\" />\n      <xs:enumeration value=\"Temporary\" />\n      <xs:enumeration value=\"SparseFile\" />\n      <xs:enumeration value=\"ReparsePoint\" />\n      <xs:enumeration value=\"Compressed\" />\n      <xs:enumeration value=\"NotContentIndexed\" />\n      <xs:enumeration value=\"Encrypted\" />\n      <xs:enumeration value=\"WriteThrough\" />\n      <xs:enumeration value=\"NoBuffering\" />\n      <xs:enumeration value=\"DeleteOnClose\" />\n      <xs:enumeration value=\"PosixSemantics\" />\n    </xs:restriction>\n  </xs:simpleType>\n  <xs:complexType name=\"FilteringWrapper\">\n    <xs:complexContent>\n      <xs:extension base=\"WrapperTargetBase\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"condition\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Condition\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"condition\" type=\"Condition\">\n          <xs:annotation>\n            <xs:documentation>Condition expression. Log events who meet this condition will be forwarded to the wrapped target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"FormControl\">\n    <xs:complexContent>\n      <xs:extension base=\"Target\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"layout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"append\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"controlName\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"formName\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"reverseOrder\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"layout\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Layout used to format log messages.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"append\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether log text should be appended to the text of the control instead of overwriting it.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"controlName\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of control to which NLog will log write log text.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"formName\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the Form on which the control is located.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"reverseOrder\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Whether new log entry are added to the start or the end of the control</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"ImpersonatingWrapper\">\n    <xs:complexContent>\n      <xs:extension base=\"WrapperTargetBase\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"domain\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"impersonationLevel\" minOccurs=\"0\" maxOccurs=\"1\" type=\"NLog.Targets.Wrappers.SecurityImpersonationLevel\" />\n          <xs:element name=\"logOnProvider\" minOccurs=\"0\" maxOccurs=\"1\" type=\"NLog.Targets.Wrappers.LogOnProviderType\" />\n          <xs:element name=\"logOnType\" minOccurs=\"0\" maxOccurs=\"1\" type=\"NLog.Targets.Wrappers.SecurityLogOnType\" />\n          <xs:element name=\"password\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"revertToSelf\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"userName\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"domain\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Windows domain name to change context to.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"impersonationLevel\" type=\"NLog.Targets.Wrappers.SecurityImpersonationLevel\">\n          <xs:annotation>\n            <xs:documentation>Required impersonation level.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"logOnProvider\" type=\"NLog.Targets.Wrappers.LogOnProviderType\">\n          <xs:annotation>\n            <xs:documentation>Type of the logon provider.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"logOnType\" type=\"NLog.Targets.Wrappers.SecurityLogOnType\">\n          <xs:annotation>\n            <xs:documentation>Logon Type.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"password\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>User account password.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"revertToSelf\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to revert to the credentials of the process instead of impersonating another user.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"userName\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Username to change context to.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:simpleType name=\"NLog.Targets.Wrappers.SecurityImpersonationLevel\">\n    <xs:restriction base=\"xs:string\">\n      <xs:enumeration value=\"Anonymous\" />\n      <xs:enumeration value=\"Identification\" />\n      <xs:enumeration value=\"Impersonation\" />\n      <xs:enumeration value=\"Delegation\" />\n    </xs:restriction>\n  </xs:simpleType>\n  <xs:simpleType name=\"NLog.Targets.Wrappers.LogOnProviderType\">\n    <xs:restriction base=\"xs:string\">\n      <xs:enumeration value=\"Default\" />\n    </xs:restriction>\n  </xs:simpleType>\n  <xs:simpleType name=\"NLog.Targets.Wrappers.SecurityLogOnType\">\n    <xs:restriction base=\"xs:string\">\n      <xs:enumeration value=\"Interactive\" />\n      <xs:enumeration value=\"Network\" />\n      <xs:enumeration value=\"Batch\" />\n      <xs:enumeration value=\"Service\" />\n      <xs:enumeration value=\"NetworkClearText\" />\n      <xs:enumeration value=\"NewCredentials\" />\n    </xs:restriction>\n  </xs:simpleType>\n  <xs:complexType name=\"LogReceiverService\">\n    <xs:complexContent>\n      <xs:extension base=\"Target\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"endpointAddress\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"endpointConfigurationName\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"clientId\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"includeEventProperties\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"parameter\" minOccurs=\"0\" maxOccurs=\"unbounded\" type=\"NLog.Targets.MethodCallParameter\" />\n          <xs:element name=\"useBinaryEncoding\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"endpointAddress\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Endpoint address.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"endpointConfigurationName\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the endpoint configuration in WCF configuration file.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"clientId\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Client ID.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"includeEventProperties\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to include per-event properties in the payload sent to the server.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"useBinaryEncoding\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to use binary message encoding.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"NLog.Targets.MethodCallParameter\">\n    <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n      <xs:element name=\"layout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n      <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n      <xs:element name=\"type\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n    </xs:choice>\n    <xs:attribute name=\"layout\" type=\"SimpleLayoutAttribute\">\n      <xs:annotation>\n        <xs:documentation>Layout that should be use to calcuate the value for the parameter.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"name\" type=\"xs:string\">\n      <xs:annotation>\n        <xs:documentation>Name of the parameter.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"type\" type=\"xs:string\">\n      <xs:annotation>\n        <xs:documentation>Type of the parameter.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n  </xs:complexType>\n  <xs:complexType name=\"Mail\">\n    <xs:complexContent>\n      <xs:extension base=\"Target\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"layout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"header\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"footer\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"html\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"encoding\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"addNewLines\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"bcc\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"to\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"cc\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"body\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"subject\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"from\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"replaceNewlineWithBrTagInHtml\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"priority\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"timeout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"smtpServer\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"smtpAuthentication\" minOccurs=\"0\" maxOccurs=\"1\" type=\"NLog.Targets.SmtpAuthenticationMode\" />\n          <xs:element name=\"smtpUserName\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"smtpPassword\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"enableSsl\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"smtpPort\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"useSystemNetMailSettings\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"layout\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Text to be rendered.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"header\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Header.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"footer\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Footer.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"html\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to send message as HTML instead of plain text.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"encoding\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Encoding to be used for sending e-mail.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"addNewLines\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to add new lines between log entries.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"bcc\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>BCC email addresses separated by semicolons (e.g. john@domain.com;jane@domain.com).</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"to\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Recipients' email addresses separated by semicolons (e.g. john@domain.com;jane@domain.com).</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"cc\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>CC email addresses separated by semicolons (e.g. john@domain.com;jane@domain.com).</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"body\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Mail message body (repeated for each log message send in one mail).</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"subject\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Mail subject.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"from\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Sender's email address (e.g. joe@domain.com).</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"replaceNewlineWithBrTagInHtml\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether NewLine characters in the body should be replaced with  tags.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"priority\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Priority used for sending mails.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"timeout\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Indicates the SMTP client timeout.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"smtpServer\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>SMTP Server to be used for sending.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"smtpAuthentication\" type=\"NLog.Targets.SmtpAuthenticationMode\">\n          <xs:annotation>\n            <xs:documentation>SMTP Authentication mode.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"smtpUserName\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Username used to connect to SMTP server (used when SmtpAuthentication is set to \"basic\").</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"smtpPassword\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Password used to authenticate against SMTP server (used when SmtpAuthentication is set to \"basic\").</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"enableSsl\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether SSL (secure sockets layer) should be used when communicating with SMTP server.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"smtpPort\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Port number that SMTP Server is listening on.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"useSystemNetMailSettings\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether the default Settings from System.Net.MailSettings should be used.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:simpleType name=\"NLog.Targets.SmtpAuthenticationMode\">\n    <xs:restriction base=\"xs:string\">\n      <xs:enumeration value=\"None\" />\n      <xs:enumeration value=\"Basic\" />\n      <xs:enumeration value=\"Ntlm\" />\n    </xs:restriction>\n  </xs:simpleType>\n  <xs:complexType name=\"Memory\">\n    <xs:complexContent>\n      <xs:extension base=\"Target\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"layout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"layout\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Layout used to format log messages.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"MessageBox\">\n    <xs:complexContent>\n      <xs:extension base=\"Target\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"layout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"caption\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"layout\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Layout used to format log messages.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"caption\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Message box title.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"MSMQ\">\n    <xs:complexContent>\n      <xs:extension base=\"Target\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"layout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"encoding\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"useXmlEncoding\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"checkIfQueueExists\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"createQueueIfNotExists\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"label\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"queue\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"recoverable\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"layout\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Layout used to format log messages.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"encoding\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Encoding to be used when writing text to the queue.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"useXmlEncoding\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to use the XML format when serializing message. This will also disable creating queues.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"checkIfQueueExists\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to check if a queue exists before writing to it.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"createQueueIfNotExists\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to create the queue if it doesn't exists.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"label\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Label to associate with each message.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"queue\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Name of the queue to write to.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"recoverable\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to use recoverable messages (with guaranteed delivery).</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"MethodCall\">\n    <xs:complexContent>\n      <xs:extension base=\"Target\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"className\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"methodName\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"parameter\" minOccurs=\"0\" maxOccurs=\"unbounded\" type=\"NLog.Targets.MethodCallParameter\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"className\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Class name.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"methodName\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Method name. The method must be public and static.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"Network\">\n    <xs:complexContent>\n      <xs:extension base=\"Target\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"layout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"encoding\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"maxMessageSize\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"newLine\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"onOverflow\" minOccurs=\"0\" maxOccurs=\"1\" type=\"NLog.Targets.NetworkTargetOverflowAction\" />\n          <xs:element name=\"address\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"connectionCacheSize\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"keepConnection\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"maxQueueSize\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"layout\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Layout used to format log messages.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"encoding\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Encoding to be used.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"maxMessageSize\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Maximum message size in bytes.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"newLine\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to append newline at the end of log message.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"onOverflow\" type=\"NLog.Targets.NetworkTargetOverflowAction\">\n          <xs:annotation>\n            <xs:documentation>Action that should be taken if the message is larger than maxMessageSize.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"address\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Network address.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"connectionCacheSize\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Size of the connection cache (number of connections which are kept alive).</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"keepConnection\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to keep connection open whenever possible.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"maxQueueSize\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Maximum queue size.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"NLogViewer\">\n    <xs:complexContent>\n      <xs:extension base=\"Target\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"encoding\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"layout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"maxMessageSize\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"newLine\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"onOverflow\" minOccurs=\"0\" maxOccurs=\"1\" type=\"NLog.Targets.NetworkTargetOverflowAction\" />\n          <xs:element name=\"connectionCacheSize\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"address\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"keepConnection\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"maxQueueSize\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"includeNLogData\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"includeSourceInfo\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"ndcItemSeparator\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"parameter\" minOccurs=\"0\" maxOccurs=\"unbounded\" type=\"NLog.Targets.NLogViewerParameterInfo\" />\n          <xs:element name=\"includeCallSite\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"appInfo\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"includeNdc\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"includeMdc\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"encoding\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Encoding to be used.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"layout\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Instance of  that is used to format log messages.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"maxMessageSize\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Maximum message size in bytes.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"newLine\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to append newline at the end of log message.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"onOverflow\" type=\"NLog.Targets.NetworkTargetOverflowAction\">\n          <xs:annotation>\n            <xs:documentation>Action that should be taken if the message is larger than maxMessageSize.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"connectionCacheSize\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Size of the connection cache (number of connections which are kept alive).</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"address\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Network address.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"keepConnection\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to keep connection open whenever possible.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"maxQueueSize\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Maximum queue size.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"includeNLogData\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to include NLog-specific extensions to log4j schema.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"includeSourceInfo\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to include source info (file name and line number) in the information sent over the network.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"ndcItemSeparator\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>NDC item separator.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"includeCallSite\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to include call site (class and method name) in the information sent over the network.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"appInfo\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>AppInfo field. By default it's the friendly name of the current AppDomain.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"includeNdc\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to include  stack contents.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"includeMdc\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to include  dictionary contents.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"Null\">\n    <xs:complexContent>\n      <xs:extension base=\"Target\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"layout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"formatMessage\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"layout\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Layout used to format log messages.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"formatMessage\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to perform layout calculation.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"OutputDebugString\">\n    <xs:complexContent>\n      <xs:extension base=\"Target\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"layout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"layout\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Layout used to format log messages.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"PerfCounter\">\n    <xs:complexContent>\n      <xs:extension base=\"Target\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"autoCreate\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"categoryName\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"counterHelp\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"counterName\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"counterType\" minOccurs=\"0\" maxOccurs=\"1\" type=\"System.Diagnostics.PerformanceCounterType\" />\n          <xs:element name=\"instanceName\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"autoCreate\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether performance counter should be automatically created.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"categoryName\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the performance counter category.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"counterHelp\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Counter help text.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"counterName\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the performance counter.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"counterType\" type=\"System.Diagnostics.PerformanceCounterType\">\n          <xs:annotation>\n            <xs:documentation>Performance counter type.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"instanceName\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Performance counter instance name.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:simpleType name=\"System.Diagnostics.PerformanceCounterType\">\n    <xs:restriction base=\"xs:string\">\n      <xs:enumeration value=\"NumberOfItems32\" />\n      <xs:enumeration value=\"NumberOfItems64\" />\n      <xs:enumeration value=\"NumberOfItemsHEX32\" />\n      <xs:enumeration value=\"NumberOfItemsHEX64\" />\n      <xs:enumeration value=\"RateOfCountsPerSecond32\" />\n      <xs:enumeration value=\"RateOfCountsPerSecond64\" />\n      <xs:enumeration value=\"CountPerTimeInterval32\" />\n      <xs:enumeration value=\"CountPerTimeInterval64\" />\n      <xs:enumeration value=\"RawFraction\" />\n      <xs:enumeration value=\"RawBase\" />\n      <xs:enumeration value=\"AverageTimer32\" />\n      <xs:enumeration value=\"AverageBase\" />\n      <xs:enumeration value=\"AverageCount64\" />\n      <xs:enumeration value=\"SampleFraction\" />\n      <xs:enumeration value=\"SampleCounter\" />\n      <xs:enumeration value=\"SampleBase\" />\n      <xs:enumeration value=\"CounterTimer\" />\n      <xs:enumeration value=\"CounterTimerInverse\" />\n      <xs:enumeration value=\"Timer100Ns\" />\n      <xs:enumeration value=\"Timer100NsInverse\" />\n      <xs:enumeration value=\"ElapsedTime\" />\n      <xs:enumeration value=\"CounterMultiTimer\" />\n      <xs:enumeration value=\"CounterMultiTimerInverse\" />\n      <xs:enumeration value=\"CounterMultiTimer100Ns\" />\n      <xs:enumeration value=\"CounterMultiTimer100NsInverse\" />\n      <xs:enumeration value=\"CounterMultiBase\" />\n      <xs:enumeration value=\"CounterDelta32\" />\n      <xs:enumeration value=\"CounterDelta64\" />\n    </xs:restriction>\n  </xs:simpleType>\n  <xs:complexType name=\"PostFilteringWrapper\">\n    <xs:complexContent>\n      <xs:extension base=\"WrapperTargetBase\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"defaultFilter\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Condition\" />\n          <xs:element name=\"when\" minOccurs=\"0\" maxOccurs=\"unbounded\" type=\"NLog.Targets.Wrappers.FilteringRule\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"defaultFilter\" type=\"Condition\">\n          <xs:annotation>\n            <xs:documentation>Default filter to be applied when no specific rule matches.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"NLog.Targets.Wrappers.FilteringRule\">\n    <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n      <xs:element name=\"exists\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Condition\" />\n      <xs:element name=\"filter\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Condition\" />\n    </xs:choice>\n    <xs:attribute name=\"exists\" type=\"Condition\">\n      <xs:annotation>\n        <xs:documentation>Condition to be tested.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"filter\" type=\"Condition\">\n      <xs:annotation>\n        <xs:documentation>Resulting filter to be applied when the condition matches.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n  </xs:complexType>\n  <xs:complexType name=\"RandomizeGroup\">\n    <xs:complexContent>\n      <xs:extension base=\"CompoundTargetBase\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"RepeatingWrapper\">\n    <xs:complexContent>\n      <xs:extension base=\"WrapperTargetBase\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"repeatCount\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"repeatCount\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Number of times to repeat each log message.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"RetryingWrapper\">\n    <xs:complexContent>\n      <xs:extension base=\"WrapperTargetBase\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"retryCount\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"retryDelayMilliseconds\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"retryCount\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Number of retries that should be attempted on the wrapped target in case of a failure.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"retryDelayMilliseconds\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Time to wait between retries in milliseconds.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"RichTextBox\">\n    <xs:complexContent>\n      <xs:extension base=\"Target\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"layout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"autoScroll\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"controlName\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"formName\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"height\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"maxLines\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"showMinimized\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"toolWindow\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"width\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"row-coloring\" minOccurs=\"0\" maxOccurs=\"unbounded\" type=\"NLog.Targets.RichTextBoxRowColoringRule\" />\n          <xs:element name=\"useDefaultRowColoringRules\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"word-coloring\" minOccurs=\"0\" maxOccurs=\"unbounded\" type=\"NLog.Targets.RichTextBoxWordColoringRule\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"layout\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Layout used to format log messages.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"autoScroll\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether scroll bar will be moved automatically to show most recent log entries.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"controlName\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of RichTextBox to which Nlog will write.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"formName\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the Form on which the control is located. If there is no open form of a specified name than NLog will create a new one.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"height\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Initial height of the form with rich text box.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"maxLines\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Maximum number of lines the rich text box will store (or 0 to disable this feature).</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"showMinimized\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether the created form will be initially minimized.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"toolWindow\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether the created window will be a tool window.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"width\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Initial width of the form with rich text box.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"useDefaultRowColoringRules\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to use default coloring rules.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:simpleType name=\"System.Drawing.FontStyle\">\n    <xs:restriction base=\"xs:string\">\n      <xs:enumeration value=\"Regular\" />\n      <xs:enumeration value=\"Bold\" />\n      <xs:enumeration value=\"Italic\" />\n      <xs:enumeration value=\"Underline\" />\n      <xs:enumeration value=\"Strikeout\" />\n    </xs:restriction>\n  </xs:simpleType>\n  <xs:complexType name=\"NLog.Targets.RichTextBoxRowColoringRule\">\n    <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n      <xs:element name=\"condition\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Condition\" />\n      <xs:element name=\"backgroundColor\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n      <xs:element name=\"fontColor\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n      <xs:element name=\"style\" minOccurs=\"0\" maxOccurs=\"1\" type=\"System.Drawing.FontStyle\" />\n    </xs:choice>\n    <xs:attribute name=\"condition\" type=\"Condition\">\n      <xs:annotation>\n        <xs:documentation>Condition that must be met in order to set the specified font color.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"backgroundColor\" type=\"xs:string\">\n      <xs:annotation>\n        <xs:documentation>Background color.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"fontColor\" type=\"xs:string\">\n      <xs:annotation>\n        <xs:documentation>Font color.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"style\" type=\"System.Drawing.FontStyle\">\n      <xs:annotation>\n        <xs:documentation>Font style of matched text.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n  </xs:complexType>\n  <xs:complexType name=\"NLog.Targets.RichTextBoxWordColoringRule\">\n    <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n      <xs:element name=\"ignoreCase\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n      <xs:element name=\"regex\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n      <xs:element name=\"text\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n      <xs:element name=\"wholeWords\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n      <xs:element name=\"backgroundColor\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n      <xs:element name=\"fontColor\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n      <xs:element name=\"style\" minOccurs=\"0\" maxOccurs=\"1\" type=\"System.Drawing.FontStyle\" />\n    </xs:choice>\n    <xs:attribute name=\"ignoreCase\" type=\"xs:boolean\">\n      <xs:annotation>\n        <xs:documentation>Indicates whether to ignore case when comparing texts.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"regex\" type=\"xs:string\">\n      <xs:annotation>\n        <xs:documentation>Regular expression to be matched. You must specify either text or regex.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"text\" type=\"xs:string\">\n      <xs:annotation>\n        <xs:documentation>Text to be matched. You must specify either text or regex.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"wholeWords\" type=\"xs:boolean\">\n      <xs:annotation>\n        <xs:documentation>Indicates whether to match whole words only.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"backgroundColor\" type=\"xs:string\">\n      <xs:annotation>\n        <xs:documentation>Background color. Names are identical with KnownColor enum extended with Empty value which means that background color won't be changed.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"fontColor\" type=\"xs:string\">\n      <xs:annotation>\n        <xs:documentation>Font color. Names are identical with KnownColor enum extended with Empty value which means that font color won't be changed.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"style\" type=\"System.Drawing.FontStyle\">\n      <xs:annotation>\n        <xs:documentation>Font style of matched text. Possible values are the same as in FontStyle enum in System.Drawing.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n  </xs:complexType>\n  <xs:complexType name=\"RoundRobinGroup\">\n    <xs:complexContent>\n      <xs:extension base=\"CompoundTargetBase\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"SplitGroup\">\n    <xs:complexContent>\n      <xs:extension base=\"CompoundTargetBase\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"Trace\">\n    <xs:complexContent>\n      <xs:extension base=\"Target\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"layout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"layout\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Layout used to format log messages.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"WebService\">\n    <xs:complexContent>\n      <xs:extension base=\"Target\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"parameter\" minOccurs=\"0\" maxOccurs=\"unbounded\" type=\"NLog.Targets.MethodCallParameter\" />\n          <xs:element name=\"encoding\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"methodName\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"namespace\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"protocol\" minOccurs=\"0\" maxOccurs=\"1\" type=\"NLog.Targets.WebServiceProtocol\" />\n          <xs:element name=\"url\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:anyURI\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"encoding\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Encoding.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"methodName\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Web service method name.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"namespace\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Web service namespace.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"protocol\" type=\"NLog.Targets.WebServiceProtocol\">\n          <xs:annotation>\n            <xs:documentation>Protocol to be used when calling web service.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"url\" type=\"xs:anyURI\">\n          <xs:annotation>\n            <xs:documentation>Web service URL.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:simpleType name=\"NLog.Targets.WebServiceProtocol\">\n    <xs:restriction base=\"xs:string\">\n      <xs:enumeration value=\"Soap11\" />\n      <xs:enumeration value=\"Soap12\" />\n      <xs:enumeration value=\"HttpPost\" />\n      <xs:enumeration value=\"HttpGet\" />\n    </xs:restriction>\n  </xs:simpleType>\n  <xs:complexType name=\"CsvLayout\">\n    <xs:complexContent>\n      <xs:extension base=\"Layout\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"footer\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"header\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"layout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"column\" minOccurs=\"0\" maxOccurs=\"unbounded\" type=\"NLog.Layouts.CsvColumn\" />\n          <xs:element name=\"customColumnDelimiter\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"delimiter\" minOccurs=\"0\" maxOccurs=\"1\" type=\"NLog.Layouts.CsvColumnDelimiterMode\" />\n          <xs:element name=\"quoteChar\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"quoting\" minOccurs=\"0\" maxOccurs=\"1\" type=\"NLog.Layouts.CsvQuotingMode\" />\n          <xs:element name=\"withHeader\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n        </xs:choice>\n        <xs:attribute name=\"footer\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Footer layout.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"header\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Header layout.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"layout\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Body layout (can be repeated multiple times).</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"customColumnDelimiter\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Custom column delimiter value (valid when ColumnDelimiter is set to 'Custom').</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"delimiter\" type=\"NLog.Layouts.CsvColumnDelimiterMode\">\n          <xs:annotation>\n            <xs:documentation>Column delimiter.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"quoteChar\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Quote Character.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"quoting\" type=\"NLog.Layouts.CsvQuotingMode\">\n          <xs:annotation>\n            <xs:documentation>Quoting mode.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"withHeader\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether CVS should include header.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:simpleType name=\"NLog.Layouts.CsvColumnDelimiterMode\">\n    <xs:restriction base=\"xs:string\">\n      <xs:enumeration value=\"Auto\" />\n      <xs:enumeration value=\"Comma\" />\n      <xs:enumeration value=\"Semicolon\" />\n      <xs:enumeration value=\"Tab\" />\n      <xs:enumeration value=\"Pipe\" />\n      <xs:enumeration value=\"Space\" />\n      <xs:enumeration value=\"Custom\" />\n    </xs:restriction>\n  </xs:simpleType>\n  <xs:simpleType name=\"NLog.Layouts.CsvQuotingMode\">\n    <xs:restriction base=\"xs:string\">\n      <xs:enumeration value=\"All\" />\n      <xs:enumeration value=\"Nothing\" />\n      <xs:enumeration value=\"Auto\" />\n    </xs:restriction>\n  </xs:simpleType>\n  <xs:complexType name=\"NLog.Layouts.CsvColumn\">\n    <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n      <xs:element name=\"layout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n      <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n    </xs:choice>\n    <xs:attribute name=\"layout\" type=\"SimpleLayoutAttribute\">\n      <xs:annotation>\n        <xs:documentation>Layout of the column.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"name\" type=\"xs:string\">\n      <xs:annotation>\n        <xs:documentation>Name of the column.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n  </xs:complexType>\n  <xs:complexType name=\"LayoutWithHeaderAndFooter\">\n    <xs:complexContent>\n      <xs:extension base=\"Layout\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"footer\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"header\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"layout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n        </xs:choice>\n        <xs:attribute name=\"footer\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Footer layout.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"header\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Header layout.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"layout\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Body layout (can be repeated multiple times).</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"Log4JXmlEventLayout\">\n    <xs:complexContent>\n      <xs:extension base=\"Layout\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\" />\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"SimpleLayout\">\n    <xs:complexContent>\n      <xs:extension base=\"Layout\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"text\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n        </xs:choice>\n        <xs:attribute name=\"text\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Layout text.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"when\">\n    <xs:complexContent>\n      <xs:extension base=\"Filter\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"action\" minOccurs=\"0\" maxOccurs=\"1\" type=\"FilterResult\" />\n          <xs:element name=\"condition\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Condition\" />\n        </xs:choice>\n        <xs:attribute name=\"action\" type=\"FilterResult\">\n          <xs:annotation>\n            <xs:documentation>Action to be taken when filter matches.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"condition\" type=\"Condition\">\n          <xs:annotation>\n            <xs:documentation>Condition expression.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:simpleType name=\"FilterResult\">\n    <xs:restriction base=\"xs:string\">\n      <xs:enumeration value=\"Neutral\" />\n      <xs:enumeration value=\"Log\" />\n      <xs:enumeration value=\"Ignore\" />\n      <xs:enumeration value=\"LogFinal\" />\n      <xs:enumeration value=\"IgnoreFinal\" />\n    </xs:restriction>\n  </xs:simpleType>\n  <xs:complexType name=\"whenContains\">\n    <xs:complexContent>\n      <xs:extension base=\"Filter\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"action\" minOccurs=\"0\" maxOccurs=\"1\" type=\"FilterResult\" />\n          <xs:element name=\"ignoreCase\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"layout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"substring\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n        </xs:choice>\n        <xs:attribute name=\"action\" type=\"FilterResult\">\n          <xs:annotation>\n            <xs:documentation>Action to be taken when filter matches.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"ignoreCase\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to ignore case when comparing strings.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"layout\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Layout to be used to filter log messages.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"substring\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Substring to be matched.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"whenEqual\">\n    <xs:complexContent>\n      <xs:extension base=\"Filter\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"action\" minOccurs=\"0\" maxOccurs=\"1\" type=\"FilterResult\" />\n          <xs:element name=\"compareTo\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"ignoreCase\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"layout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n        </xs:choice>\n        <xs:attribute name=\"action\" type=\"FilterResult\">\n          <xs:annotation>\n            <xs:documentation>Action to be taken when filter matches.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"compareTo\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>String to compare the layout to.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"ignoreCase\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to ignore case when comparing strings.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"layout\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Layout to be used to filter log messages.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"whenNotContains\">\n    <xs:complexContent>\n      <xs:extension base=\"Filter\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"action\" minOccurs=\"0\" maxOccurs=\"1\" type=\"FilterResult\" />\n          <xs:element name=\"ignoreCase\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"layout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"substring\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n        </xs:choice>\n        <xs:attribute name=\"action\" type=\"FilterResult\">\n          <xs:annotation>\n            <xs:documentation>Action to be taken when filter matches.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"ignoreCase\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to ignore case when comparing strings.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"layout\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Layout to be used to filter log messages.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"substring\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Substring to be matched.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"whenNotEqual\">\n    <xs:complexContent>\n      <xs:extension base=\"Filter\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"action\" minOccurs=\"0\" maxOccurs=\"1\" type=\"FilterResult\" />\n          <xs:element name=\"compareTo\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"ignoreCase\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"layout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n        </xs:choice>\n        <xs:attribute name=\"action\" type=\"FilterResult\">\n          <xs:annotation>\n            <xs:documentation>Action to be taken when filter matches.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"compareTo\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>String to compare the layout to.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"ignoreCase\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to ignore case when comparing strings.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"layout\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Layout to be used to filter log messages.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"AccurateLocal\">\n    <xs:complexContent>\n      <xs:extension base=\"TimeSource\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\" />\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"AccurateUTC\">\n    <xs:complexContent>\n      <xs:extension base=\"TimeSource\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\" />\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"FastLocal\">\n    <xs:complexContent>\n      <xs:extension base=\"TimeSource\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\" />\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"FastUTC\">\n    <xs:complexContent>\n      <xs:extension base=\"TimeSource\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\" />\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n</xs:schema>"
  },
  {
    "path": "AlexaSkillsKit.Sample/Project_Readme.html",
    "content": "﻿<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"utf-8\" />\n    <title>Your ASP.NET application</title>\n    <style>\n        body {\n            background: #fff;\n            color: #505050;\n            font: 14px 'Segoe UI', tahoma, arial, helvetica, sans-serif;\n            margin: 20px;\n            padding: 0;\n        }\n\n        #header {\n            background: #efefef;\n            padding: 0;\n        }\n\n        h1 {\n            font-size: 48px;\n            font-weight: normal;\n            margin: 0;\n            padding: 0 30px;\n            line-height: 150px;\n        }\n\n        p {\n            font-size: 20px;\n            color: #fff;\n            background: #969696;\n            padding: 0 30px;\n            line-height: 50px;\n        }\n\n        #main {\n            padding: 5px 30px;\n        }\n\n        .section {\n            width: 21.7%;\n            float: left;\n            margin: 0 0 0 4%;\n        }\n\n            .section h2 {\n                font-size: 13px;\n                text-transform: uppercase;\n                margin: 0;\n                border-bottom: 1px solid silver;\n                padding-bottom: 12px;\n                margin-bottom: 8px;\n            }\n\n            .section.first {\n                margin-left: 0;\n            }\n\n                .section.first h2 {\n                    font-size: 24px;\n                    text-transform: none;\n                    margin-bottom: 25px;\n                    border: none;\n                }\n\n                .section.first li {\n                    border-top: 1px solid silver;\n                    padding: 8px 0;\n                }\n\n            .section.last {\n                margin-right: 0;\n            }\n\n        ul {\n            list-style: none;\n            padding: 0;\n            margin: 0;\n            line-height: 20px;\n        }\n\n        li {\n            padding: 4px 0;\n        }\n\n        a {\n            color: #267cb2;\n            text-decoration: none;\n        }\n\n            a:hover {\n                text-decoration: underline;\n            }\n    </style>\n</head>\n<body>\n\n    <div id=\"header\">\n        <h1>Your ASP.NET application</h1>\n        <p>Congratulations! You've created a project</p>\n    </div>\n\n    <div id=\"main\">\n        <div class=\"section first\">\n            <h2>This application consists of:</h2>\n            <ul>\n                <li><a href=\"http://go.microsoft.com/fwlink/?LinkID=320956\">Help Page</a> for documenting your Web APIs</li>\n                <li>Theming using <a href=\"http://go.microsoft.com/fwlink/?LinkID=320754\">Bootstrap</a></li>\n                <li><a href=\"http://go.microsoft.com/fwlink/?LinkID=320957\">Authentication</a>, if selected, shows how to register and sign in</li>\n                <li>ASP.NET features managed using <a href=\"http://go.microsoft.com/fwlink/?LinkID=320958\">NuGet</a></li>\n            </ul>\n        </div>\n\n        <div class=\"section\">\n            <h2>Customize app</h2>\n            <ul>\n                <li><a href=\"http://go.microsoft.com/fwlink/?LinkID=320959\">Get started with HTTP services using ASP.NET Web API</a></li>\n                <li><a href=\"http://go.microsoft.com/fwlink/?LinkID=320960\">Change the site's theme</a></li>\n                <li><a href=\"http://go.microsoft.com/fwlink/?LinkID=320961\">Add more libraries using NuGet</a></li>\n                <li><a href=\"http://go.microsoft.com/fwlink/?LinkID=320962\">Configure authentication</a></li>\n                <li><a href=\"http://go.microsoft.com/fwlink/?LinkID=320963\">Scaffold an ASP.NET Web API from a model</a></li>\n                <li><a href=\"http://go.microsoft.com/fwlink/?LinkID=320964\">Secure your web API</a></li>\n                <li><a href=\"http://go.microsoft.com/fwlink/?LinkID=320965\">Access your web API on different devices</a></li>\n                <li><a href=\"http://go.microsoft.com/fwlink/?LinkID=320966\">Enable tracing for testing and debugging</a></li>\n                <li><a href=\"http://go.microsoft.com/fwlink/?LinkID=320765\">Add real-time web with ASP.NET SignalR</a></li>\n                <li><a href=\"http://go.microsoft.com/fwlink/?LinkID=320766\">Add components using Scaffolding</a></li>\n                <li><a href=\"http://go.microsoft.com/fwlink/?LinkID=320768\">Share your project</a></li>\n            </ul>\n        </div>\n\n        <div class=\"section\">\n            <h2>Deploy</h2>\n            <ul>\n                <li><a href=\"http://go.microsoft.com/fwlink/?LinkID=320769\">Ensure your app is ready for production</a></li>\n                <li><a href=\"http://go.microsoft.com/fwlink/?LinkID=320770\">Microsoft Azure</a></li>\n                <li><a href=\"http://go.microsoft.com/fwlink/?LinkID=320771\">Hosting providers</a></li>\n            </ul>\n        </div>\n\n        <div class=\"section last\">\n            <h2>Get help</h2>\n            <ul>\n                <li><a href=\"http://go.microsoft.com/fwlink/?LinkID=320772\">Get help</a></li>\n                <li><a href=\"http://go.microsoft.com/fwlink/?LinkID=320773\">Get more templates</a></li>\n            </ul>\n        </div>\n    </div>\n</body>\n</html>\n"
  },
  {
    "path": "AlexaSkillsKit.Sample/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following\n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"AlexaSkillsKit.App\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"\")]\n[assembly: AssemblyProduct(\"AlexaSkillsKit.App\")]\n[assembly: AssemblyCopyright(\"Copyright © 2015 Stefan Negritoiu (FreeBusy)\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible\n// to COM components.  If you need to access a type in this assembly from\n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid(\"aceb63c9-7b4c-466c-8dc5-de054f5c9bdf\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version\n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Revision and Build Numbers\n// by using the '*' as shown below:\n[assembly: AssemblyVersion(\"1.0.0.0\")]\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\n"
  },
  {
    "path": "AlexaSkillsKit.Sample/Providers/ApplicationOAuthProvider.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Security.Claims;\nusing System.Threading.Tasks;\nusing Microsoft.AspNet.Identity;\nusing Microsoft.AspNet.Identity.EntityFramework;\nusing Microsoft.AspNet.Identity.Owin;\nusing Microsoft.Owin.Security;\nusing Microsoft.Owin.Security.Cookies;\nusing Microsoft.Owin.Security.OAuth;\nusing Sample.Models;\n\nnamespace Sample.Providers\n{\n    public class ApplicationOAuthProvider : OAuthAuthorizationServerProvider\n    {\n        private readonly string _publicClientId;\n\n        public ApplicationOAuthProvider(string publicClientId)\n        {\n            if (publicClientId == null)\n            {\n                throw new ArgumentNullException(\"publicClientId\");\n            }\n\n            _publicClientId = publicClientId;\n        }\n\n        public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)\n        {\n            var userManager = context.OwinContext.GetUserManager<ApplicationUserManager>();\n\n            ApplicationUser user = await userManager.FindAsync(context.UserName, context.Password);\n\n            if (user == null)\n            {\n                context.SetError(\"invalid_grant\", \"The user name or password is incorrect.\");\n                return;\n            }\n\n            ClaimsIdentity oAuthIdentity = await user.GenerateUserIdentityAsync(userManager,\n               OAuthDefaults.AuthenticationType);\n            ClaimsIdentity cookiesIdentity = await user.GenerateUserIdentityAsync(userManager,\n                CookieAuthenticationDefaults.AuthenticationType);\n\n            AuthenticationProperties properties = CreateProperties(user.UserName);\n            AuthenticationTicket ticket = new AuthenticationTicket(oAuthIdentity, properties);\n            context.Validated(ticket);\n            context.Request.Context.Authentication.SignIn(cookiesIdentity);\n        }\n\n        public override Task TokenEndpoint(OAuthTokenEndpointContext context)\n        {\n            foreach (KeyValuePair<string, string> property in context.Properties.Dictionary)\n            {\n                context.AdditionalResponseParameters.Add(property.Key, property.Value);\n            }\n\n            return Task.FromResult<object>(null);\n        }\n\n        public override Task ValidateClientAuthentication(OAuthValidateClientAuthenticationContext context)\n        {\n            // Resource owner password credentials does not provide a client ID.\n            if (context.ClientId == null)\n            {\n                context.Validated();\n            }\n\n            return Task.FromResult<object>(null);\n        }\n\n        public override Task ValidateClientRedirectUri(OAuthValidateClientRedirectUriContext context)\n        {\n            if (context.ClientId == _publicClientId)\n            {\n                Uri expectedRootUri = new Uri(context.Request.Uri, \"/\");\n\n                if (expectedRootUri.AbsoluteUri == context.RedirectUri)\n                {\n                    context.Validated();\n                }\n            }\n\n            return Task.FromResult<object>(null);\n        }\n\n        public static AuthenticationProperties CreateProperties(string userName)\n        {\n            IDictionary<string, string> data = new Dictionary<string, string>\n            {\n                { \"userName\", userName }\n            };\n            return new AuthenticationProperties(data);\n        }\n    }\n}"
  },
  {
    "path": "AlexaSkillsKit.Sample/Results/ChallengeResult.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Net;\nusing System.Net.Http;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing System.Web.Http;\n\nnamespace Sample.Results\n{\n    public class ChallengeResult : IHttpActionResult\n    {\n        public ChallengeResult(string loginProvider, ApiController controller)\n        {\n            LoginProvider = loginProvider;\n            Request = controller.Request;\n        }\n\n        public string LoginProvider { get; set; }\n        public HttpRequestMessage Request { get; set; }\n\n        public Task<HttpResponseMessage> ExecuteAsync(CancellationToken cancellationToken)\n        {\n            Request.GetOwinContext().Authentication.Challenge(LoginProvider);\n\n            HttpResponseMessage response = new HttpResponseMessage(HttpStatusCode.Unauthorized);\n            response.RequestMessage = Request;\n            return Task.FromResult(response);\n        }\n    }\n}\n"
  },
  {
    "path": "AlexaSkillsKit.Sample/Scripts/bootstrap.js",
    "content": "/* NUGET: BEGIN LICENSE TEXT\n *\n * Microsoft grants you the right to use these script files for the sole\n * purpose of either: (i) interacting through your browser with the Microsoft\n * website or online service, subject to the applicable licensing or use\n * terms; or (ii) using the files as included with a Microsoft product subject\n * to that product's license terms. Microsoft reserves all other rights to the\n * files not expressly granted by Microsoft, whether by implication, estoppel\n * or otherwise. Insofar as a script file is dual licensed under GPL,\n * Microsoft neither took the code under GPL nor distributes it thereunder but\n * under the terms set out in this paragraph. All notices and licenses\n * below are for informational purposes only.\n *\n * NUGET: END LICENSE TEXT */\n\n/**\n* bootstrap.js v3.0.0 by @fat and @mdo\n* Copyright 2013 Twitter Inc.\n* http://www.apache.org/licenses/LICENSE-2.0\n*/\nif (!jQuery) { throw new Error(\"Bootstrap requires jQuery\") }\n\n/* ========================================================================\n * Bootstrap: transition.js v3.0.0\n * http://twbs.github.com/bootstrap/javascript.html#transitions\n * ========================================================================\n * Copyright 2013 Twitter, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * ======================================================================== */\n\n\n+function ($) { \"use strict\";\n\n  // CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/)\n  // ============================================================\n\n  function transitionEnd() {\n    var el = document.createElement('bootstrap')\n\n    var transEndEventNames = {\n      'WebkitTransition' : 'webkitTransitionEnd'\n    , 'MozTransition'    : 'transitionend'\n    , 'OTransition'      : 'oTransitionEnd otransitionend'\n    , 'transition'       : 'transitionend'\n    }\n\n    for (var name in transEndEventNames) {\n      if (el.style[name] !== undefined) {\n        return { end: transEndEventNames[name] }\n      }\n    }\n  }\n\n  // http://blog.alexmaccaw.com/css-transitions\n  $.fn.emulateTransitionEnd = function (duration) {\n    var called = false, $el = this\n    $(this).one($.support.transition.end, function () { called = true })\n    var callback = function () { if (!called) $($el).trigger($.support.transition.end) }\n    setTimeout(callback, duration)\n    return this\n  }\n\n  $(function () {\n    $.support.transition = transitionEnd()\n  })\n\n}(window.jQuery);\n\n/* ========================================================================\n * Bootstrap: alert.js v3.0.0\n * http://twbs.github.com/bootstrap/javascript.html#alerts\n * ========================================================================\n * Copyright 2013 Twitter, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * ======================================================================== */\n\n\n+function ($) { \"use strict\";\n\n  // ALERT CLASS DEFINITION\n  // ======================\n\n  var dismiss = '[data-dismiss=\"alert\"]'\n  var Alert   = function (el) {\n    $(el).on('click', dismiss, this.close)\n  }\n\n  Alert.prototype.close = function (e) {\n    var $this    = $(this)\n    var selector = $this.attr('data-target')\n\n    if (!selector) {\n      selector = $this.attr('href')\n      selector = selector && selector.replace(/.*(?=#[^\\s]*$)/, '') // strip for ie7\n    }\n\n    var $parent = $(selector)\n\n    if (e) e.preventDefault()\n\n    if (!$parent.length) {\n      $parent = $this.hasClass('alert') ? $this : $this.parent()\n    }\n\n    $parent.trigger(e = $.Event('close.bs.alert'))\n\n    if (e.isDefaultPrevented()) return\n\n    $parent.removeClass('in')\n\n    function removeElement() {\n      $parent.trigger('closed.bs.alert').remove()\n    }\n\n    $.support.transition && $parent.hasClass('fade') ?\n      $parent\n        .one($.support.transition.end, removeElement)\n        .emulateTransitionEnd(150) :\n      removeElement()\n  }\n\n\n  // ALERT PLUGIN DEFINITION\n  // =======================\n\n  var old = $.fn.alert\n\n  $.fn.alert = function (option) {\n    return this.each(function () {\n      var $this = $(this)\n      var data  = $this.data('bs.alert')\n\n      if (!data) $this.data('bs.alert', (data = new Alert(this)))\n      if (typeof option == 'string') data[option].call($this)\n    })\n  }\n\n  $.fn.alert.Constructor = Alert\n\n\n  // ALERT NO CONFLICT\n  // =================\n\n  $.fn.alert.noConflict = function () {\n    $.fn.alert = old\n    return this\n  }\n\n\n  // ALERT DATA-API\n  // ==============\n\n  $(document).on('click.bs.alert.data-api', dismiss, Alert.prototype.close)\n\n}(window.jQuery);\n\n/* ========================================================================\n * Bootstrap: button.js v3.0.0\n * http://twbs.github.com/bootstrap/javascript.html#buttons\n * ========================================================================\n * Copyright 2013 Twitter, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * ======================================================================== */\n\n\n+function ($) { \"use strict\";\n\n  // BUTTON PUBLIC CLASS DEFINITION\n  // ==============================\n\n  var Button = function (element, options) {\n    this.$element = $(element)\n    this.options  = $.extend({}, Button.DEFAULTS, options)\n  }\n\n  Button.DEFAULTS = {\n    loadingText: 'loading...'\n  }\n\n  Button.prototype.setState = function (state) {\n    var d    = 'disabled'\n    var $el  = this.$element\n    var val  = $el.is('input') ? 'val' : 'html'\n    var data = $el.data()\n\n    state = state + 'Text'\n\n    if (!data.resetText) $el.data('resetText', $el[val]())\n\n    $el[val](data[state] || this.options[state])\n\n    // push to event loop to allow forms to submit\n    setTimeout(function () {\n      state == 'loadingText' ?\n        $el.addClass(d).attr(d, d) :\n        $el.removeClass(d).removeAttr(d);\n    }, 0)\n  }\n\n  Button.prototype.toggle = function () {\n    var $parent = this.$element.closest('[data-toggle=\"buttons\"]')\n\n    if ($parent.length) {\n      var $input = this.$element.find('input')\n        .prop('checked', !this.$element.hasClass('active'))\n        .trigger('change')\n      if ($input.prop('type') === 'radio') $parent.find('.active').removeClass('active')\n    }\n\n    this.$element.toggleClass('active')\n  }\n\n\n  // BUTTON PLUGIN DEFINITION\n  // ========================\n\n  var old = $.fn.button\n\n  $.fn.button = function (option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.button')\n      var options = typeof option == 'object' && option\n\n      if (!data) $this.data('bs.button', (data = new Button(this, options)))\n\n      if (option == 'toggle') data.toggle()\n      else if (option) data.setState(option)\n    })\n  }\n\n  $.fn.button.Constructor = Button\n\n\n  // BUTTON NO CONFLICT\n  // ==================\n\n  $.fn.button.noConflict = function () {\n    $.fn.button = old\n    return this\n  }\n\n\n  // BUTTON DATA-API\n  // ===============\n\n  $(document).on('click.bs.button.data-api', '[data-toggle^=button]', function (e) {\n    var $btn = $(e.target)\n    if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn')\n    $btn.button('toggle')\n    e.preventDefault()\n  })\n\n}(window.jQuery);\n\n/* ========================================================================\n * Bootstrap: carousel.js v3.0.0\n * http://twbs.github.com/bootstrap/javascript.html#carousel\n * ========================================================================\n * Copyright 2012 Twitter, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * ======================================================================== */\n\n\n+function ($) { \"use strict\";\n\n  // CAROUSEL CLASS DEFINITION\n  // =========================\n\n  var Carousel = function (element, options) {\n    this.$element    = $(element)\n    this.$indicators = this.$element.find('.carousel-indicators')\n    this.options     = options\n    this.paused      =\n    this.sliding     =\n    this.interval    =\n    this.$active     =\n    this.$items      = null\n\n    this.options.pause == 'hover' && this.$element\n      .on('mouseenter', $.proxy(this.pause, this))\n      .on('mouseleave', $.proxy(this.cycle, this))\n  }\n\n  Carousel.DEFAULTS = {\n    interval: 5000\n  , pause: 'hover'\n  , wrap: true\n  }\n\n  Carousel.prototype.cycle =  function (e) {\n    e || (this.paused = false)\n\n    this.interval && clearInterval(this.interval)\n\n    this.options.interval\n      && !this.paused\n      && (this.interval = setInterval($.proxy(this.next, this), this.options.interval))\n\n    return this\n  }\n\n  Carousel.prototype.getActiveIndex = function () {\n    this.$active = this.$element.find('.item.active')\n    this.$items  = this.$active.parent().children()\n\n    return this.$items.index(this.$active)\n  }\n\n  Carousel.prototype.to = function (pos) {\n    var that        = this\n    var activeIndex = this.getActiveIndex()\n\n    if (pos > (this.$items.length - 1) || pos < 0) return\n\n    if (this.sliding)       return this.$element.one('slid', function () { that.to(pos) })\n    if (activeIndex == pos) return this.pause().cycle()\n\n    return this.slide(pos > activeIndex ? 'next' : 'prev', $(this.$items[pos]))\n  }\n\n  Carousel.prototype.pause = function (e) {\n    e || (this.paused = true)\n\n    if (this.$element.find('.next, .prev').length && $.support.transition.end) {\n      this.$element.trigger($.support.transition.end)\n      this.cycle(true)\n    }\n\n    this.interval = clearInterval(this.interval)\n\n    return this\n  }\n\n  Carousel.prototype.next = function () {\n    if (this.sliding) return\n    return this.slide('next')\n  }\n\n  Carousel.prototype.prev = function () {\n    if (this.sliding) return\n    return this.slide('prev')\n  }\n\n  Carousel.prototype.slide = function (type, next) {\n    var $active   = this.$element.find('.item.active')\n    var $next     = next || $active[type]()\n    var isCycling = this.interval\n    var direction = type == 'next' ? 'left' : 'right'\n    var fallback  = type == 'next' ? 'first' : 'last'\n    var that      = this\n\n    if (!$next.length) {\n      if (!this.options.wrap) return\n      $next = this.$element.find('.item')[fallback]()\n    }\n\n    this.sliding = true\n\n    isCycling && this.pause()\n\n    var e = $.Event('slide.bs.carousel', { relatedTarget: $next[0], direction: direction })\n\n    if ($next.hasClass('active')) return\n\n    if (this.$indicators.length) {\n      this.$indicators.find('.active').removeClass('active')\n      this.$element.one('slid', function () {\n        var $nextIndicator = $(that.$indicators.children()[that.getActiveIndex()])\n        $nextIndicator && $nextIndicator.addClass('active')\n      })\n    }\n\n    if ($.support.transition && this.$element.hasClass('slide')) {\n      this.$element.trigger(e)\n      if (e.isDefaultPrevented()) return\n      $next.addClass(type)\n      $next[0].offsetWidth // force reflow\n      $active.addClass(direction)\n      $next.addClass(direction)\n      $active\n        .one($.support.transition.end, function () {\n          $next.removeClass([type, direction].join(' ')).addClass('active')\n          $active.removeClass(['active', direction].join(' '))\n          that.sliding = false\n          setTimeout(function () { that.$element.trigger('slid') }, 0)\n        })\n        .emulateTransitionEnd(600)\n    } else {\n      this.$element.trigger(e)\n      if (e.isDefaultPrevented()) return\n      $active.removeClass('active')\n      $next.addClass('active')\n      this.sliding = false\n      this.$element.trigger('slid')\n    }\n\n    isCycling && this.cycle()\n\n    return this\n  }\n\n\n  // CAROUSEL PLUGIN DEFINITION\n  // ==========================\n\n  var old = $.fn.carousel\n\n  $.fn.carousel = function (option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.carousel')\n      var options = $.extend({}, Carousel.DEFAULTS, $this.data(), typeof option == 'object' && option)\n      var action  = typeof option == 'string' ? option : options.slide\n\n      if (!data) $this.data('bs.carousel', (data = new Carousel(this, options)))\n      if (typeof option == 'number') data.to(option)\n      else if (action) data[action]()\n      else if (options.interval) data.pause().cycle()\n    })\n  }\n\n  $.fn.carousel.Constructor = Carousel\n\n\n  // CAROUSEL NO CONFLICT\n  // ====================\n\n  $.fn.carousel.noConflict = function () {\n    $.fn.carousel = old\n    return this\n  }\n\n\n  // CAROUSEL DATA-API\n  // =================\n\n  $(document).on('click.bs.carousel.data-api', '[data-slide], [data-slide-to]', function (e) {\n    var $this   = $(this), href\n    var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\\s]+$)/, '')) //strip for ie7\n    var options = $.extend({}, $target.data(), $this.data())\n    var slideIndex = $this.attr('data-slide-to')\n    if (slideIndex) options.interval = false\n\n    $target.carousel(options)\n\n    if (slideIndex = $this.attr('data-slide-to')) {\n      $target.data('bs.carousel').to(slideIndex)\n    }\n\n    e.preventDefault()\n  })\n\n  $(window).on('load', function () {\n    $('[data-ride=\"carousel\"]').each(function () {\n      var $carousel = $(this)\n      $carousel.carousel($carousel.data())\n    })\n  })\n\n}(window.jQuery);\n\n/* ========================================================================\n * Bootstrap: collapse.js v3.0.0\n * http://twbs.github.com/bootstrap/javascript.html#collapse\n * ========================================================================\n * Copyright 2012 Twitter, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * ======================================================================== */\n\n\n+function ($) { \"use strict\";\n\n  // COLLAPSE PUBLIC CLASS DEFINITION\n  // ================================\n\n  var Collapse = function (element, options) {\n    this.$element      = $(element)\n    this.options       = $.extend({}, Collapse.DEFAULTS, options)\n    this.transitioning = null\n\n    if (this.options.parent) this.$parent = $(this.options.parent)\n    if (this.options.toggle) this.toggle()\n  }\n\n  Collapse.DEFAULTS = {\n    toggle: true\n  }\n\n  Collapse.prototype.dimension = function () {\n    var hasWidth = this.$element.hasClass('width')\n    return hasWidth ? 'width' : 'height'\n  }\n\n  Collapse.prototype.show = function () {\n    if (this.transitioning || this.$element.hasClass('in')) return\n\n    var startEvent = $.Event('show.bs.collapse')\n    this.$element.trigger(startEvent)\n    if (startEvent.isDefaultPrevented()) return\n\n    var actives = this.$parent && this.$parent.find('> .panel > .in')\n\n    if (actives && actives.length) {\n      var hasData = actives.data('bs.collapse')\n      if (hasData && hasData.transitioning) return\n      actives.collapse('hide')\n      hasData || actives.data('bs.collapse', null)\n    }\n\n    var dimension = this.dimension()\n\n    this.$element\n      .removeClass('collapse')\n      .addClass('collapsing')\n      [dimension](0)\n\n    this.transitioning = 1\n\n    var complete = function () {\n      this.$element\n        .removeClass('collapsing')\n        .addClass('in')\n        [dimension]('auto')\n      this.transitioning = 0\n      this.$element.trigger('shown.bs.collapse')\n    }\n\n    if (!$.support.transition) return complete.call(this)\n\n    var scrollSize = $.camelCase(['scroll', dimension].join('-'))\n\n    this.$element\n      .one($.support.transition.end, $.proxy(complete, this))\n      .emulateTransitionEnd(350)\n      [dimension](this.$element[0][scrollSize])\n  }\n\n  Collapse.prototype.hide = function () {\n    if (this.transitioning || !this.$element.hasClass('in')) return\n\n    var startEvent = $.Event('hide.bs.collapse')\n    this.$element.trigger(startEvent)\n    if (startEvent.isDefaultPrevented()) return\n\n    var dimension = this.dimension()\n\n    this.$element\n      [dimension](this.$element[dimension]())\n      [0].offsetHeight\n\n    this.$element\n      .addClass('collapsing')\n      .removeClass('collapse')\n      .removeClass('in')\n\n    this.transitioning = 1\n\n    var complete = function () {\n      this.transitioning = 0\n      this.$element\n        .trigger('hidden.bs.collapse')\n        .removeClass('collapsing')\n        .addClass('collapse')\n    }\n\n    if (!$.support.transition) return complete.call(this)\n\n    this.$element\n      [dimension](0)\n      .one($.support.transition.end, $.proxy(complete, this))\n      .emulateTransitionEnd(350)\n  }\n\n  Collapse.prototype.toggle = function () {\n    this[this.$element.hasClass('in') ? 'hide' : 'show']()\n  }\n\n\n  // COLLAPSE PLUGIN DEFINITION\n  // ==========================\n\n  var old = $.fn.collapse\n\n  $.fn.collapse = function (option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.collapse')\n      var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option)\n\n      if (!data) $this.data('bs.collapse', (data = new Collapse(this, options)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  $.fn.collapse.Constructor = Collapse\n\n\n  // COLLAPSE NO CONFLICT\n  // ====================\n\n  $.fn.collapse.noConflict = function () {\n    $.fn.collapse = old\n    return this\n  }\n\n\n  // COLLAPSE DATA-API\n  // =================\n\n  $(document).on('click.bs.collapse.data-api', '[data-toggle=collapse]', function (e) {\n    var $this   = $(this), href\n    var target  = $this.attr('data-target')\n        || e.preventDefault()\n        || (href = $this.attr('href')) && href.replace(/.*(?=#[^\\s]+$)/, '') //strip for ie7\n    var $target = $(target)\n    var data    = $target.data('bs.collapse')\n    var option  = data ? 'toggle' : $this.data()\n    var parent  = $this.attr('data-parent')\n    var $parent = parent && $(parent)\n\n    if (!data || !data.transitioning) {\n      if ($parent) $parent.find('[data-toggle=collapse][data-parent=\"' + parent + '\"]').not($this).addClass('collapsed')\n      $this[$target.hasClass('in') ? 'addClass' : 'removeClass']('collapsed')\n    }\n\n    $target.collapse(option)\n  })\n\n}(window.jQuery);\n\n/* ========================================================================\n * Bootstrap: dropdown.js v3.0.0\n * http://twbs.github.com/bootstrap/javascript.html#dropdowns\n * ========================================================================\n * Copyright 2012 Twitter, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * ======================================================================== */\n\n\n+function ($) { \"use strict\";\n\n  // DROPDOWN CLASS DEFINITION\n  // =========================\n\n  var backdrop = '.dropdown-backdrop'\n  var toggle   = '[data-toggle=dropdown]'\n  var Dropdown = function (element) {\n    var $el = $(element).on('click.bs.dropdown', this.toggle)\n  }\n\n  Dropdown.prototype.toggle = function (e) {\n    var $this = $(this)\n\n    if ($this.is('.disabled, :disabled')) return\n\n    var $parent  = getParent($this)\n    var isActive = $parent.hasClass('open')\n\n    clearMenus()\n\n    if (!isActive) {\n      if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) {\n        // if mobile we we use a backdrop because click events don't delegate\n        $('<div class=\"dropdown-backdrop\"/>').insertAfter($(this)).on('click', clearMenus)\n      }\n\n      $parent.trigger(e = $.Event('show.bs.dropdown'))\n\n      if (e.isDefaultPrevented()) return\n\n      $parent\n        .toggleClass('open')\n        .trigger('shown.bs.dropdown')\n\n      $this.focus()\n    }\n\n    return false\n  }\n\n  Dropdown.prototype.keydown = function (e) {\n    if (!/(38|40|27)/.test(e.keyCode)) return\n\n    var $this = $(this)\n\n    e.preventDefault()\n    e.stopPropagation()\n\n    if ($this.is('.disabled, :disabled')) return\n\n    var $parent  = getParent($this)\n    var isActive = $parent.hasClass('open')\n\n    if (!isActive || (isActive && e.keyCode == 27)) {\n      if (e.which == 27) $parent.find(toggle).focus()\n      return $this.click()\n    }\n\n    var $items = $('[role=menu] li:not(.divider):visible a', $parent)\n\n    if (!$items.length) return\n\n    var index = $items.index($items.filter(':focus'))\n\n    if (e.keyCode == 38 && index > 0)                 index--                        // up\n    if (e.keyCode == 40 && index < $items.length - 1) index++                        // down\n    if (!~index)                                      index=0\n\n    $items.eq(index).focus()\n  }\n\n  function clearMenus() {\n    $(backdrop).remove()\n    $(toggle).each(function (e) {\n      var $parent = getParent($(this))\n      if (!$parent.hasClass('open')) return\n      $parent.trigger(e = $.Event('hide.bs.dropdown'))\n      if (e.isDefaultPrevented()) return\n      $parent.removeClass('open').trigger('hidden.bs.dropdown')\n    })\n  }\n\n  function getParent($this) {\n    var selector = $this.attr('data-target')\n\n    if (!selector) {\n      selector = $this.attr('href')\n      selector = selector && /#/.test(selector) && selector.replace(/.*(?=#[^\\s]*$)/, '') //strip for ie7\n    }\n\n    var $parent = selector && $(selector)\n\n    return $parent && $parent.length ? $parent : $this.parent()\n  }\n\n\n  // DROPDOWN PLUGIN DEFINITION\n  // ==========================\n\n  var old = $.fn.dropdown\n\n  $.fn.dropdown = function (option) {\n    return this.each(function () {\n      var $this = $(this)\n      var data  = $this.data('dropdown')\n\n      if (!data) $this.data('dropdown', (data = new Dropdown(this)))\n      if (typeof option == 'string') data[option].call($this)\n    })\n  }\n\n  $.fn.dropdown.Constructor = Dropdown\n\n\n  // DROPDOWN NO CONFLICT\n  // ====================\n\n  $.fn.dropdown.noConflict = function () {\n    $.fn.dropdown = old\n    return this\n  }\n\n\n  // APPLY TO STANDARD DROPDOWN ELEMENTS\n  // ===================================\n\n  $(document)\n    .on('click.bs.dropdown.data-api', clearMenus)\n    .on('click.bs.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() })\n    .on('click.bs.dropdown.data-api'  , toggle, Dropdown.prototype.toggle)\n    .on('keydown.bs.dropdown.data-api', toggle + ', [role=menu]' , Dropdown.prototype.keydown)\n\n}(window.jQuery);\n\n/* ========================================================================\n * Bootstrap: modal.js v3.0.0\n * http://twbs.github.com/bootstrap/javascript.html#modals\n * ========================================================================\n * Copyright 2012 Twitter, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * ======================================================================== */\n\n\n+function ($) { \"use strict\";\n\n  // MODAL CLASS DEFINITION\n  // ======================\n\n  var Modal = function (element, options) {\n    this.options   = options\n    this.$element  = $(element)\n    this.$backdrop =\n    this.isShown   = null\n\n    if (this.options.remote) this.$element.load(this.options.remote)\n  }\n\n  Modal.DEFAULTS = {\n      backdrop: true\n    , keyboard: true\n    , show: true\n  }\n\n  Modal.prototype.toggle = function (_relatedTarget) {\n    return this[!this.isShown ? 'show' : 'hide'](_relatedTarget)\n  }\n\n  Modal.prototype.show = function (_relatedTarget) {\n    var that = this\n    var e    = $.Event('show.bs.modal', { relatedTarget: _relatedTarget })\n\n    this.$element.trigger(e)\n\n    if (this.isShown || e.isDefaultPrevented()) return\n\n    this.isShown = true\n\n    this.escape()\n\n    this.$element.on('click.dismiss.modal', '[data-dismiss=\"modal\"]', $.proxy(this.hide, this))\n\n    this.backdrop(function () {\n      var transition = $.support.transition && that.$element.hasClass('fade')\n\n      if (!that.$element.parent().length) {\n        that.$element.appendTo(document.body) // don't move modals dom position\n      }\n\n      that.$element.show()\n\n      if (transition) {\n        that.$element[0].offsetWidth // force reflow\n      }\n\n      that.$element\n        .addClass('in')\n        .attr('aria-hidden', false)\n\n      that.enforceFocus()\n\n      var e = $.Event('shown.bs.modal', { relatedTarget: _relatedTarget })\n\n      transition ?\n        that.$element.find('.modal-dialog') // wait for modal to slide in\n          .one($.support.transition.end, function () {\n            that.$element.focus().trigger(e)\n          })\n          .emulateTransitionEnd(300) :\n        that.$element.focus().trigger(e)\n    })\n  }\n\n  Modal.prototype.hide = function (e) {\n    if (e) e.preventDefault()\n\n    e = $.Event('hide.bs.modal')\n\n    this.$element.trigger(e)\n\n    if (!this.isShown || e.isDefaultPrevented()) return\n\n    this.isShown = false\n\n    this.escape()\n\n    $(document).off('focusin.bs.modal')\n\n    this.$element\n      .removeClass('in')\n      .attr('aria-hidden', true)\n      .off('click.dismiss.modal')\n\n    $.support.transition && this.$element.hasClass('fade') ?\n      this.$element\n        .one($.support.transition.end, $.proxy(this.hideModal, this))\n        .emulateTransitionEnd(300) :\n      this.hideModal()\n  }\n\n  Modal.prototype.enforceFocus = function () {\n    $(document)\n      .off('focusin.bs.modal') // guard against infinite focus loop\n      .on('focusin.bs.modal', $.proxy(function (e) {\n        if (this.$element[0] !== e.target && !this.$element.has(e.target).length) {\n          this.$element.focus()\n        }\n      }, this))\n  }\n\n  Modal.prototype.escape = function () {\n    if (this.isShown && this.options.keyboard) {\n      this.$element.on('keyup.dismiss.bs.modal', $.proxy(function (e) {\n        e.which == 27 && this.hide()\n      }, this))\n    } else if (!this.isShown) {\n      this.$element.off('keyup.dismiss.bs.modal')\n    }\n  }\n\n  Modal.prototype.hideModal = function () {\n    var that = this\n    this.$element.hide()\n    this.backdrop(function () {\n      that.removeBackdrop()\n      that.$element.trigger('hidden.bs.modal')\n    })\n  }\n\n  Modal.prototype.removeBackdrop = function () {\n    this.$backdrop && this.$backdrop.remove()\n    this.$backdrop = null\n  }\n\n  Modal.prototype.backdrop = function (callback) {\n    var that    = this\n    var animate = this.$element.hasClass('fade') ? 'fade' : ''\n\n    if (this.isShown && this.options.backdrop) {\n      var doAnimate = $.support.transition && animate\n\n      this.$backdrop = $('<div class=\"modal-backdrop ' + animate + '\" />')\n        .appendTo(document.body)\n\n      this.$element.on('click.dismiss.modal', $.proxy(function (e) {\n        if (e.target !== e.currentTarget) return\n        this.options.backdrop == 'static'\n          ? this.$element[0].focus.call(this.$element[0])\n          : this.hide.call(this)\n      }, this))\n\n      if (doAnimate) this.$backdrop[0].offsetWidth // force reflow\n\n      this.$backdrop.addClass('in')\n\n      if (!callback) return\n\n      doAnimate ?\n        this.$backdrop\n          .one($.support.transition.end, callback)\n          .emulateTransitionEnd(150) :\n        callback()\n\n    } else if (!this.isShown && this.$backdrop) {\n      this.$backdrop.removeClass('in')\n\n      $.support.transition && this.$element.hasClass('fade')?\n        this.$backdrop\n          .one($.support.transition.end, callback)\n          .emulateTransitionEnd(150) :\n        callback()\n\n    } else if (callback) {\n      callback()\n    }\n  }\n\n\n  // MODAL PLUGIN DEFINITION\n  // =======================\n\n  var old = $.fn.modal\n\n  $.fn.modal = function (option, _relatedTarget) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.modal')\n      var options = $.extend({}, Modal.DEFAULTS, $this.data(), typeof option == 'object' && option)\n\n      if (!data) $this.data('bs.modal', (data = new Modal(this, options)))\n      if (typeof option == 'string') data[option](_relatedTarget)\n      else if (options.show) data.show(_relatedTarget)\n    })\n  }\n\n  $.fn.modal.Constructor = Modal\n\n\n  // MODAL NO CONFLICT\n  // =================\n\n  $.fn.modal.noConflict = function () {\n    $.fn.modal = old\n    return this\n  }\n\n\n  // MODAL DATA-API\n  // ==============\n\n  $(document).on('click.bs.modal.data-api', '[data-toggle=\"modal\"]', function (e) {\n    var $this   = $(this)\n    var href    = $this.attr('href')\n    var $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\\s]+$)/, ''))) //strip for ie7\n    var option  = $target.data('modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data())\n\n    e.preventDefault()\n\n    $target\n      .modal(option, this)\n      .one('hide', function () {\n        $this.is(':visible') && $this.focus()\n      })\n  })\n\n  $(document)\n    .on('show.bs.modal',  '.modal', function () { $(document.body).addClass('modal-open') })\n    .on('hidden.bs.modal', '.modal', function () { $(document.body).removeClass('modal-open') })\n\n}(window.jQuery);\n\n/* ========================================================================\n * Bootstrap: tooltip.js v3.0.0\n * http://twbs.github.com/bootstrap/javascript.html#tooltip\n * Inspired by the original jQuery.tipsy by Jason Frame\n * ========================================================================\n * Copyright 2012 Twitter, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * ======================================================================== */\n\n\n+function ($) { \"use strict\";\n\n  // TOOLTIP PUBLIC CLASS DEFINITION\n  // ===============================\n\n  var Tooltip = function (element, options) {\n    this.type       =\n    this.options    =\n    this.enabled    =\n    this.timeout    =\n    this.hoverState =\n    this.$element   = null\n\n    this.init('tooltip', element, options)\n  }\n\n  Tooltip.DEFAULTS = {\n    animation: true\n  , placement: 'top'\n  , selector: false\n  , template: '<div class=\"tooltip\"><div class=\"tooltip-arrow\"></div><div class=\"tooltip-inner\"></div></div>'\n  , trigger: 'hover focus'\n  , title: ''\n  , delay: 0\n  , html: false\n  , container: false\n  }\n\n  Tooltip.prototype.init = function (type, element, options) {\n    this.enabled  = true\n    this.type     = type\n    this.$element = $(element)\n    this.options  = this.getOptions(options)\n\n    var triggers = this.options.trigger.split(' ')\n\n    for (var i = triggers.length; i--;) {\n      var trigger = triggers[i]\n\n      if (trigger == 'click') {\n        this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this))\n      } else if (trigger != 'manual') {\n        var eventIn  = trigger == 'hover' ? 'mouseenter' : 'focus'\n        var eventOut = trigger == 'hover' ? 'mouseleave' : 'blur'\n\n        this.$element.on(eventIn  + '.' + this.type, this.options.selector, $.proxy(this.enter, this))\n        this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this))\n      }\n    }\n\n    this.options.selector ?\n      (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) :\n      this.fixTitle()\n  }\n\n  Tooltip.prototype.getDefaults = function () {\n    return Tooltip.DEFAULTS\n  }\n\n  Tooltip.prototype.getOptions = function (options) {\n    options = $.extend({}, this.getDefaults(), this.$element.data(), options)\n\n    if (options.delay && typeof options.delay == 'number') {\n      options.delay = {\n        show: options.delay\n      , hide: options.delay\n      }\n    }\n\n    return options\n  }\n\n  Tooltip.prototype.getDelegateOptions = function () {\n    var options  = {}\n    var defaults = this.getDefaults()\n\n    this._options && $.each(this._options, function (key, value) {\n      if (defaults[key] != value) options[key] = value\n    })\n\n    return options\n  }\n\n  Tooltip.prototype.enter = function (obj) {\n    var self = obj instanceof this.constructor ?\n      obj : $(obj.currentTarget)[this.type](this.getDelegateOptions()).data('bs.' + this.type)\n\n    clearTimeout(self.timeout)\n\n    self.hoverState = 'in'\n\n    if (!self.options.delay || !self.options.delay.show) return self.show()\n\n    self.timeout = setTimeout(function () {\n      if (self.hoverState == 'in') self.show()\n    }, self.options.delay.show)\n  }\n\n  Tooltip.prototype.leave = function (obj) {\n    var self = obj instanceof this.constructor ?\n      obj : $(obj.currentTarget)[this.type](this.getDelegateOptions()).data('bs.' + this.type)\n\n    clearTimeout(self.timeout)\n\n    self.hoverState = 'out'\n\n    if (!self.options.delay || !self.options.delay.hide) return self.hide()\n\n    self.timeout = setTimeout(function () {\n      if (self.hoverState == 'out') self.hide()\n    }, self.options.delay.hide)\n  }\n\n  Tooltip.prototype.show = function () {\n    var e = $.Event('show.bs.'+ this.type)\n\n    if (this.hasContent() && this.enabled) {\n      this.$element.trigger(e)\n\n      if (e.isDefaultPrevented()) return\n\n      var $tip = this.tip()\n\n      this.setContent()\n\n      if (this.options.animation) $tip.addClass('fade')\n\n      var placement = typeof this.options.placement == 'function' ?\n        this.options.placement.call(this, $tip[0], this.$element[0]) :\n        this.options.placement\n\n      var autoToken = /\\s?auto?\\s?/i\n      var autoPlace = autoToken.test(placement)\n      if (autoPlace) placement = placement.replace(autoToken, '') || 'top'\n\n      $tip\n        .detach()\n        .css({ top: 0, left: 0, display: 'block' })\n        .addClass(placement)\n\n      this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element)\n\n      var pos          = this.getPosition()\n      var actualWidth  = $tip[0].offsetWidth\n      var actualHeight = $tip[0].offsetHeight\n\n      if (autoPlace) {\n        var $parent = this.$element.parent()\n\n        var orgPlacement = placement\n        var docScroll    = document.documentElement.scrollTop || document.body.scrollTop\n        var parentWidth  = this.options.container == 'body' ? window.innerWidth  : $parent.outerWidth()\n        var parentHeight = this.options.container == 'body' ? window.innerHeight : $parent.outerHeight()\n        var parentLeft   = this.options.container == 'body' ? 0 : $parent.offset().left\n\n        placement = placement == 'bottom' && pos.top   + pos.height  + actualHeight - docScroll > parentHeight  ? 'top'    :\n                    placement == 'top'    && pos.top   - docScroll   - actualHeight < 0                         ? 'bottom' :\n                    placement == 'right'  && pos.right + actualWidth > parentWidth                              ? 'left'   :\n                    placement == 'left'   && pos.left  - actualWidth < parentLeft                               ? 'right'  :\n                    placement\n\n        $tip\n          .removeClass(orgPlacement)\n          .addClass(placement)\n      }\n\n      var calculatedOffset = this.getCalculatedOffset(placement, pos, actualWidth, actualHeight)\n\n      this.applyPlacement(calculatedOffset, placement)\n      this.$element.trigger('shown.bs.' + this.type)\n    }\n  }\n\n  Tooltip.prototype.applyPlacement = function(offset, placement) {\n    var replace\n    var $tip   = this.tip()\n    var width  = $tip[0].offsetWidth\n    var height = $tip[0].offsetHeight\n\n    // manually read margins because getBoundingClientRect includes difference\n    var marginTop = parseInt($tip.css('margin-top'), 10)\n    var marginLeft = parseInt($tip.css('margin-left'), 10)\n\n    // we must check for NaN for ie 8/9\n    if (isNaN(marginTop))  marginTop  = 0\n    if (isNaN(marginLeft)) marginLeft = 0\n\n    offset.top  = offset.top  + marginTop\n    offset.left = offset.left + marginLeft\n\n    $tip\n      .offset(offset)\n      .addClass('in')\n\n    // check to see if placing tip in new offset caused the tip to resize itself\n    var actualWidth  = $tip[0].offsetWidth\n    var actualHeight = $tip[0].offsetHeight\n\n    if (placement == 'top' && actualHeight != height) {\n      replace = true\n      offset.top = offset.top + height - actualHeight\n    }\n\n    if (/bottom|top/.test(placement)) {\n      var delta = 0\n\n      if (offset.left < 0) {\n        delta       = offset.left * -2\n        offset.left = 0\n\n        $tip.offset(offset)\n\n        actualWidth  = $tip[0].offsetWidth\n        actualHeight = $tip[0].offsetHeight\n      }\n\n      this.replaceArrow(delta - width + actualWidth, actualWidth, 'left')\n    } else {\n      this.replaceArrow(actualHeight - height, actualHeight, 'top')\n    }\n\n    if (replace) $tip.offset(offset)\n  }\n\n  Tooltip.prototype.replaceArrow = function(delta, dimension, position) {\n    this.arrow().css(position, delta ? (50 * (1 - delta / dimension) + \"%\") : '')\n  }\n\n  Tooltip.prototype.setContent = function () {\n    var $tip  = this.tip()\n    var title = this.getTitle()\n\n    $tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title)\n    $tip.removeClass('fade in top bottom left right')\n  }\n\n  Tooltip.prototype.hide = function () {\n    var that = this\n    var $tip = this.tip()\n    var e    = $.Event('hide.bs.' + this.type)\n\n    function complete() {\n      if (that.hoverState != 'in') $tip.detach()\n    }\n\n    this.$element.trigger(e)\n\n    if (e.isDefaultPrevented()) return\n\n    $tip.removeClass('in')\n\n    $.support.transition && this.$tip.hasClass('fade') ?\n      $tip\n        .one($.support.transition.end, complete)\n        .emulateTransitionEnd(150) :\n      complete()\n\n    this.$element.trigger('hidden.bs.' + this.type)\n\n    return this\n  }\n\n  Tooltip.prototype.fixTitle = function () {\n    var $e = this.$element\n    if ($e.attr('title') || typeof($e.attr('data-original-title')) != 'string') {\n      $e.attr('data-original-title', $e.attr('title') || '').attr('title', '')\n    }\n  }\n\n  Tooltip.prototype.hasContent = function () {\n    return this.getTitle()\n  }\n\n  Tooltip.prototype.getPosition = function () {\n    var el = this.$element[0]\n    return $.extend({}, (typeof el.getBoundingClientRect == 'function') ? el.getBoundingClientRect() : {\n      width: el.offsetWidth\n    , height: el.offsetHeight\n    }, this.$element.offset())\n  }\n\n  Tooltip.prototype.getCalculatedOffset = function (placement, pos, actualWidth, actualHeight) {\n    return placement == 'bottom' ? { top: pos.top + pos.height,   left: pos.left + pos.width / 2 - actualWidth / 2  } :\n           placement == 'top'    ? { top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2  } :\n           placement == 'left'   ? { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth } :\n        /* placement == 'right' */ { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width   }\n  }\n\n  Tooltip.prototype.getTitle = function () {\n    var title\n    var $e = this.$element\n    var o  = this.options\n\n    title = $e.attr('data-original-title')\n      || (typeof o.title == 'function' ? o.title.call($e[0]) :  o.title)\n\n    return title\n  }\n\n  Tooltip.prototype.tip = function () {\n    return this.$tip = this.$tip || $(this.options.template)\n  }\n\n  Tooltip.prototype.arrow = function () {\n    return this.$arrow = this.$arrow || this.tip().find('.tooltip-arrow')\n  }\n\n  Tooltip.prototype.validate = function () {\n    if (!this.$element[0].parentNode) {\n      this.hide()\n      this.$element = null\n      this.options  = null\n    }\n  }\n\n  Tooltip.prototype.enable = function () {\n    this.enabled = true\n  }\n\n  Tooltip.prototype.disable = function () {\n    this.enabled = false\n  }\n\n  Tooltip.prototype.toggleEnabled = function () {\n    this.enabled = !this.enabled\n  }\n\n  Tooltip.prototype.toggle = function (e) {\n    var self = e ? $(e.currentTarget)[this.type](this.getDelegateOptions()).data('bs.' + this.type) : this\n    self.tip().hasClass('in') ? self.leave(self) : self.enter(self)\n  }\n\n  Tooltip.prototype.destroy = function () {\n    this.hide().$element.off('.' + this.type).removeData('bs.' + this.type)\n  }\n\n\n  // TOOLTIP PLUGIN DEFINITION\n  // =========================\n\n  var old = $.fn.tooltip\n\n  $.fn.tooltip = function (option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.tooltip')\n      var options = typeof option == 'object' && option\n\n      if (!data) $this.data('bs.tooltip', (data = new Tooltip(this, options)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  $.fn.tooltip.Constructor = Tooltip\n\n\n  // TOOLTIP NO CONFLICT\n  // ===================\n\n  $.fn.tooltip.noConflict = function () {\n    $.fn.tooltip = old\n    return this\n  }\n\n}(window.jQuery);\n\n/* ========================================================================\n * Bootstrap: popover.js v3.0.0\n * http://twbs.github.com/bootstrap/javascript.html#popovers\n * ========================================================================\n * Copyright 2012 Twitter, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * ======================================================================== */\n\n\n+function ($) { \"use strict\";\n\n  // POPOVER PUBLIC CLASS DEFINITION\n  // ===============================\n\n  var Popover = function (element, options) {\n    this.init('popover', element, options)\n  }\n\n  if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js')\n\n  Popover.DEFAULTS = $.extend({} , $.fn.tooltip.Constructor.DEFAULTS, {\n    placement: 'right'\n  , trigger: 'click'\n  , content: ''\n  , template: '<div class=\"popover\"><div class=\"arrow\"></div><h3 class=\"popover-title\"></h3><div class=\"popover-content\"></div></div>'\n  })\n\n\n  // NOTE: POPOVER EXTENDS tooltip.js\n  // ================================\n\n  Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype)\n\n  Popover.prototype.constructor = Popover\n\n  Popover.prototype.getDefaults = function () {\n    return Popover.DEFAULTS\n  }\n\n  Popover.prototype.setContent = function () {\n    var $tip    = this.tip()\n    var title   = this.getTitle()\n    var content = this.getContent()\n\n    $tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title)\n    $tip.find('.popover-content')[this.options.html ? 'html' : 'text'](content)\n\n    $tip.removeClass('fade top bottom left right in')\n\n    // IE8 doesn't accept hiding via the `:empty` pseudo selector, we have to do\n    // this manually by checking the contents.\n    if (!$tip.find('.popover-title').html()) $tip.find('.popover-title').hide()\n  }\n\n  Popover.prototype.hasContent = function () {\n    return this.getTitle() || this.getContent()\n  }\n\n  Popover.prototype.getContent = function () {\n    var $e = this.$element\n    var o  = this.options\n\n    return $e.attr('data-content')\n      || (typeof o.content == 'function' ?\n            o.content.call($e[0]) :\n            o.content)\n  }\n\n  Popover.prototype.arrow = function () {\n    return this.$arrow = this.$arrow || this.tip().find('.arrow')\n  }\n\n  Popover.prototype.tip = function () {\n    if (!this.$tip) this.$tip = $(this.options.template)\n    return this.$tip\n  }\n\n\n  // POPOVER PLUGIN DEFINITION\n  // =========================\n\n  var old = $.fn.popover\n\n  $.fn.popover = function (option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.popover')\n      var options = typeof option == 'object' && option\n\n      if (!data) $this.data('bs.popover', (data = new Popover(this, options)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  $.fn.popover.Constructor = Popover\n\n\n  // POPOVER NO CONFLICT\n  // ===================\n\n  $.fn.popover.noConflict = function () {\n    $.fn.popover = old\n    return this\n  }\n\n}(window.jQuery);\n\n/* ========================================================================\n * Bootstrap: scrollspy.js v3.0.0\n * http://twbs.github.com/bootstrap/javascript.html#scrollspy\n * ========================================================================\n * Copyright 2012 Twitter, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * ======================================================================== */\n\n\n+function ($) { \"use strict\";\n\n  // SCROLLSPY CLASS DEFINITION\n  // ==========================\n\n  function ScrollSpy(element, options) {\n    var href\n    var process  = $.proxy(this.process, this)\n\n    this.$element       = $(element).is('body') ? $(window) : $(element)\n    this.$body          = $('body')\n    this.$scrollElement = this.$element.on('scroll.bs.scroll-spy.data-api', process)\n    this.options        = $.extend({}, ScrollSpy.DEFAULTS, options)\n    this.selector       = (this.options.target\n      || ((href = $(element).attr('href')) && href.replace(/.*(?=#[^\\s]+$)/, '')) //strip for ie7\n      || '') + ' .nav li > a'\n    this.offsets        = $([])\n    this.targets        = $([])\n    this.activeTarget   = null\n\n    this.refresh()\n    this.process()\n  }\n\n  ScrollSpy.DEFAULTS = {\n    offset: 10\n  }\n\n  ScrollSpy.prototype.refresh = function () {\n    var offsetMethod = this.$element[0] == window ? 'offset' : 'position'\n\n    this.offsets = $([])\n    this.targets = $([])\n\n    var self     = this\n    var $targets = this.$body\n      .find(this.selector)\n      .map(function () {\n        var $el   = $(this)\n        var href  = $el.data('target') || $el.attr('href')\n        var $href = /^#\\w/.test(href) && $(href)\n\n        return ($href\n          && $href.length\n          && [[ $href[offsetMethod]().top + (!$.isWindow(self.$scrollElement.get(0)) && self.$scrollElement.scrollTop()), href ]]) || null\n      })\n      .sort(function (a, b) { return a[0] - b[0] })\n      .each(function () {\n        self.offsets.push(this[0])\n        self.targets.push(this[1])\n      })\n  }\n\n  ScrollSpy.prototype.process = function () {\n    var scrollTop    = this.$scrollElement.scrollTop() + this.options.offset\n    var scrollHeight = this.$scrollElement[0].scrollHeight || this.$body[0].scrollHeight\n    var maxScroll    = scrollHeight - this.$scrollElement.height()\n    var offsets      = this.offsets\n    var targets      = this.targets\n    var activeTarget = this.activeTarget\n    var i\n\n    if (scrollTop >= maxScroll) {\n      return activeTarget != (i = targets.last()[0]) && this.activate(i)\n    }\n\n    for (i = offsets.length; i--;) {\n      activeTarget != targets[i]\n        && scrollTop >= offsets[i]\n        && (!offsets[i + 1] || scrollTop <= offsets[i + 1])\n        && this.activate( targets[i] )\n    }\n  }\n\n  ScrollSpy.prototype.activate = function (target) {\n    this.activeTarget = target\n\n    $(this.selector)\n      .parents('.active')\n      .removeClass('active')\n\n    var selector = this.selector\n      + '[data-target=\"' + target + '\"],'\n      + this.selector + '[href=\"' + target + '\"]'\n\n    var active = $(selector)\n      .parents('li')\n      .addClass('active')\n\n    if (active.parent('.dropdown-menu').length)  {\n      active = active\n        .closest('li.dropdown')\n        .addClass('active')\n    }\n\n    active.trigger('activate')\n  }\n\n\n  // SCROLLSPY PLUGIN DEFINITION\n  // ===========================\n\n  var old = $.fn.scrollspy\n\n  $.fn.scrollspy = function (option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.scrollspy')\n      var options = typeof option == 'object' && option\n\n      if (!data) $this.data('bs.scrollspy', (data = new ScrollSpy(this, options)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  $.fn.scrollspy.Constructor = ScrollSpy\n\n\n  // SCROLLSPY NO CONFLICT\n  // =====================\n\n  $.fn.scrollspy.noConflict = function () {\n    $.fn.scrollspy = old\n    return this\n  }\n\n\n  // SCROLLSPY DATA-API\n  // ==================\n\n  $(window).on('load', function () {\n    $('[data-spy=\"scroll\"]').each(function () {\n      var $spy = $(this)\n      $spy.scrollspy($spy.data())\n    })\n  })\n\n}(window.jQuery);\n\n/* ========================================================================\n * Bootstrap: tab.js v3.0.0\n * http://twbs.github.com/bootstrap/javascript.html#tabs\n * ========================================================================\n * Copyright 2012 Twitter, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * ======================================================================== */\n\n\n+function ($) { \"use strict\";\n\n  // TAB CLASS DEFINITION\n  // ====================\n\n  var Tab = function (element) {\n    this.element = $(element)\n  }\n\n  Tab.prototype.show = function () {\n    var $this    = this.element\n    var $ul      = $this.closest('ul:not(.dropdown-menu)')\n    var selector = $this.attr('data-target')\n\n    if (!selector) {\n      selector = $this.attr('href')\n      selector = selector && selector.replace(/.*(?=#[^\\s]*$)/, '') //strip for ie7\n    }\n\n    if ($this.parent('li').hasClass('active')) return\n\n    var previous = $ul.find('.active:last a')[0]\n    var e        = $.Event('show.bs.tab', {\n      relatedTarget: previous\n    })\n\n    $this.trigger(e)\n\n    if (e.isDefaultPrevented()) return\n\n    var $target = $(selector)\n\n    this.activate($this.parent('li'), $ul)\n    this.activate($target, $target.parent(), function () {\n      $this.trigger({\n        type: 'shown.bs.tab'\n      , relatedTarget: previous\n      })\n    })\n  }\n\n  Tab.prototype.activate = function (element, container, callback) {\n    var $active    = container.find('> .active')\n    var transition = callback\n      && $.support.transition\n      && $active.hasClass('fade')\n\n    function next() {\n      $active\n        .removeClass('active')\n        .find('> .dropdown-menu > .active')\n        .removeClass('active')\n\n      element.addClass('active')\n\n      if (transition) {\n        element[0].offsetWidth // reflow for transition\n        element.addClass('in')\n      } else {\n        element.removeClass('fade')\n      }\n\n      if (element.parent('.dropdown-menu')) {\n        element.closest('li.dropdown').addClass('active')\n      }\n\n      callback && callback()\n    }\n\n    transition ?\n      $active\n        .one($.support.transition.end, next)\n        .emulateTransitionEnd(150) :\n      next()\n\n    $active.removeClass('in')\n  }\n\n\n  // TAB PLUGIN DEFINITION\n  // =====================\n\n  var old = $.fn.tab\n\n  $.fn.tab = function ( option ) {\n    return this.each(function () {\n      var $this = $(this)\n      var data  = $this.data('bs.tab')\n\n      if (!data) $this.data('bs.tab', (data = new Tab(this)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  $.fn.tab.Constructor = Tab\n\n\n  // TAB NO CONFLICT\n  // ===============\n\n  $.fn.tab.noConflict = function () {\n    $.fn.tab = old\n    return this\n  }\n\n\n  // TAB DATA-API\n  // ============\n\n  $(document).on('click.bs.tab.data-api', '[data-toggle=\"tab\"], [data-toggle=\"pill\"]', function (e) {\n    e.preventDefault()\n    $(this).tab('show')\n  })\n\n}(window.jQuery);\n\n/* ========================================================================\n * Bootstrap: affix.js v3.0.0\n * http://twbs.github.com/bootstrap/javascript.html#affix\n * ========================================================================\n * Copyright 2012 Twitter, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * ======================================================================== */\n\n\n+function ($) { \"use strict\";\n\n  // AFFIX CLASS DEFINITION\n  // ======================\n\n  var Affix = function (element, options) {\n    this.options = $.extend({}, Affix.DEFAULTS, options)\n    this.$window = $(window)\n      .on('scroll.bs.affix.data-api', $.proxy(this.checkPosition, this))\n      .on('click.bs.affix.data-api',  $.proxy(this.checkPositionWithEventLoop, this))\n\n    this.$element = $(element)\n    this.affixed  =\n    this.unpin    = null\n\n    this.checkPosition()\n  }\n\n  Affix.RESET = 'affix affix-top affix-bottom'\n\n  Affix.DEFAULTS = {\n    offset: 0\n  }\n\n  Affix.prototype.checkPositionWithEventLoop = function () {\n    setTimeout($.proxy(this.checkPosition, this), 1)\n  }\n\n  Affix.prototype.checkPosition = function () {\n    if (!this.$element.is(':visible')) return\n\n    var scrollHeight = $(document).height()\n    var scrollTop    = this.$window.scrollTop()\n    var position     = this.$element.offset()\n    var offset       = this.options.offset\n    var offsetTop    = offset.top\n    var offsetBottom = offset.bottom\n\n    if (typeof offset != 'object')         offsetBottom = offsetTop = offset\n    if (typeof offsetTop == 'function')    offsetTop    = offset.top()\n    if (typeof offsetBottom == 'function') offsetBottom = offset.bottom()\n\n    var affix = this.unpin   != null && (scrollTop + this.unpin <= position.top) ? false :\n                offsetBottom != null && (position.top + this.$element.height() >= scrollHeight - offsetBottom) ? 'bottom' :\n                offsetTop    != null && (scrollTop <= offsetTop) ? 'top' : false\n\n    if (this.affixed === affix) return\n    if (this.unpin) this.$element.css('top', '')\n\n    this.affixed = affix\n    this.unpin   = affix == 'bottom' ? position.top - scrollTop : null\n\n    this.$element.removeClass(Affix.RESET).addClass('affix' + (affix ? '-' + affix : ''))\n\n    if (affix == 'bottom') {\n      this.$element.offset({ top: document.body.offsetHeight - offsetBottom - this.$element.height() })\n    }\n  }\n\n\n  // AFFIX PLUGIN DEFINITION\n  // =======================\n\n  var old = $.fn.affix\n\n  $.fn.affix = function (option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.affix')\n      var options = typeof option == 'object' && option\n\n      if (!data) $this.data('bs.affix', (data = new Affix(this, options)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  $.fn.affix.Constructor = Affix\n\n\n  // AFFIX NO CONFLICT\n  // =================\n\n  $.fn.affix.noConflict = function () {\n    $.fn.affix = old\n    return this\n  }\n\n\n  // AFFIX DATA-API\n  // ==============\n\n  $(window).on('load', function () {\n    $('[data-spy=\"affix\"]').each(function () {\n      var $spy = $(this)\n      var data = $spy.data()\n\n      data.offset = data.offset || {}\n\n      if (data.offsetBottom) data.offset.bottom = data.offsetBottom\n      if (data.offsetTop)    data.offset.top    = data.offsetTop\n\n      $spy.affix(data)\n    })\n  })\n\n}(window.jQuery);\n"
  },
  {
    "path": "AlexaSkillsKit.Sample/Scripts/jquery-1.10.2.intellisense.js",
    "content": "﻿/* NUGET: BEGIN LICENSE TEXT\n *\n * Microsoft grants you the right to use these script files for the sole\n * purpose of either: (i) interacting through your browser with the Microsoft\n * website or online service, subject to the applicable licensing or use\n * terms; or (ii) using the files as included with a Microsoft product subject\n * to that product's license terms. Microsoft reserves all other rights to the\n * files not expressly granted by Microsoft, whether by implication, estoppel\n * or otherwise. Insofar as a script file is dual licensed under GPL,\n * Microsoft neither took the code under GPL nor distributes it thereunder but\n * under the terms set out in this paragraph. All notices and licenses\n * below are for informational purposes only.\n *\n * NUGET: END LICENSE TEXT */\nintellisense.annotate(jQuery, {\n  'ajax': function() {\n    /// <signature>\n    ///   <summary>Perform an asynchronous HTTP (Ajax) request.</summary>\n    ///   <param name=\"url\" type=\"String\">A string containing the URL to which the request is sent.</param>\n    ///   <param name=\"settings\" type=\"PlainObject\">A set of key/value pairs that configure the Ajax request. All settings are optional. A default can be set for any option with $.ajaxSetup(). See jQuery.ajax( settings ) below for a complete list of all settings.</param>\n    ///   <returns type=\"jqXHR\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Perform an asynchronous HTTP (Ajax) request.</summary>\n    ///   <param name=\"settings\" type=\"PlainObject\">A set of key/value pairs that configure the Ajax request. All settings are optional. A default can be set for any option with $.ajaxSetup().</param>\n    ///   <returns type=\"jqXHR\" />\n    /// </signature>\n  },\n  'ajaxPrefilter': function() {\n    /// <signature>\n    ///   <summary>Handle custom Ajax options or modify existing options before each request is sent and before they are processed by $.ajax().</summary>\n    ///   <param name=\"dataTypes\" type=\"String\">An optional string containing one or more space-separated dataTypes</param>\n    ///   <param name=\"handler(options, originalOptions, jqXHR)\" type=\"Function\">A handler to set default values for future Ajax requests.</param>\n    /// </signature>\n  },\n  'ajaxSetup': function() {\n    /// <signature>\n    ///   <summary>Set default values for future Ajax requests.</summary>\n    ///   <param name=\"options\" type=\"PlainObject\">A set of key/value pairs that configure the default Ajax request. All options are optional.</param>\n    /// </signature>\n  },\n  'ajaxTransport': function() {\n    /// <signature>\n    ///   <summary>Creates an object that handles the actual transmission of Ajax data.</summary>\n    ///   <param name=\"dataType\" type=\"String\">A string identifying the data type to use</param>\n    ///   <param name=\"handler(options, originalOptions, jqXHR)\" type=\"Function\">A handler to return the new transport object to use with the data type provided in the first argument.</param>\n    /// </signature>\n  },\n  'boxModel': function() {\n    /// <summary>Deprecated in jQuery 1.3 (see jQuery.support). States if the current page, in the user's browser, is being rendered using the W3C CSS Box Model.</summary>\n    /// <returns type=\"Boolean\" />\n  },\n  'browser': function() {\n    /// <summary>Contains flags for the useragent, read from navigator.userAgent. We recommend against using this property; please try to use feature detection instead (see jQuery.support). jQuery.browser may be moved to a plugin in a future release of jQuery.</summary>\n    /// <returns type=\"PlainObject\" />\n  },\n  'browser.version': function() {\n    /// <summary>The version number of the rendering engine for the user's browser.</summary>\n    /// <returns type=\"String\" />\n  },\n  'Callbacks': function() {\n    /// <signature>\n    ///   <summary>A multi-purpose callbacks list object that provides a powerful way to manage callback lists.</summary>\n    ///   <param name=\"flags\" type=\"String\">An optional list of space-separated flags that change how the callback list behaves.</param>\n    ///   <returns type=\"Callbacks\" />\n    /// </signature>\n  },\n  'contains': function() {\n    /// <signature>\n    ///   <summary>Check to see if a DOM element is a descendant of another DOM element.</summary>\n    ///   <param name=\"container\" type=\"Element\">The DOM element that may contain the other element.</param>\n    ///   <param name=\"contained\" type=\"Element\">The DOM element that may be contained by (a descendant of) the other element.</param>\n    ///   <returns type=\"Boolean\" />\n    /// </signature>\n  },\n  'cssHooks': function() {\n    /// <summary>Hook directly into jQuery to override how particular CSS properties are retrieved or set, normalize CSS property naming, or create custom properties.</summary>\n    /// <returns type=\"Object\" />\n  },\n  'data': function() {\n    /// <signature>\n    ///   <summary>Returns value at named data store for the element, as set by jQuery.data(element, name, value), or the full data store for the element.</summary>\n    ///   <param name=\"element\" type=\"Element\">The DOM element to query for the data.</param>\n    ///   <param name=\"key\" type=\"String\">Name of the data stored.</param>\n    ///   <returns type=\"Object\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Returns value at named data store for the element, as set by jQuery.data(element, name, value), or the full data store for the element.</summary>\n    ///   <param name=\"element\" type=\"Element\">The DOM element to query for the data.</param>\n    ///   <returns type=\"Object\" />\n    /// </signature>\n  },\n  'Deferred': function() {\n    /// <signature>\n    ///   <summary>A constructor function that returns a chainable utility object with methods to register multiple callbacks into callback queues, invoke callback queues, and relay the success or failure state of any synchronous or asynchronous function.</summary>\n    ///   <param name=\"beforeStart\" type=\"Function\">A function that is called just before the constructor returns.</param>\n    ///   <returns type=\"Deferred\" />\n    /// </signature>\n  },\n  'dequeue': function() {\n    /// <signature>\n    ///   <summary>Execute the next function on the queue for the matched element.</summary>\n    ///   <param name=\"element\" type=\"Element\">A DOM element from which to remove and execute a queued function.</param>\n    ///   <param name=\"queueName\" type=\"String\">A string containing the name of the queue. Defaults to fx, the standard effects queue.</param>\n    /// </signature>\n  },\n  'each': function() {\n    /// <signature>\n    ///   <summary>A generic iterator function, which can be used to seamlessly iterate over both objects and arrays. Arrays and array-like objects with a length property (such as a function's arguments object) are iterated by numeric index, from 0 to length-1. Other objects are iterated via their named properties.</summary>\n    ///   <param name=\"collection\" type=\"Object\">The object or array to iterate over.</param>\n    ///   <param name=\"callback(indexInArray, valueOfElement)\" type=\"Function\">The function that will be executed on every object.</param>\n    ///   <returns type=\"Object\" />\n    /// </signature>\n  },\n  'error': function() {\n    /// <signature>\n    ///   <summary>Takes a string and throws an exception containing it.</summary>\n    ///   <param name=\"message\" type=\"String\">The message to send out.</param>\n    /// </signature>\n  },\n  'extend': function() {\n    /// <signature>\n    ///   <summary>Merge the contents of two or more objects together into the first object.</summary>\n    ///   <param name=\"target\" type=\"Object\">An object that will receive the new properties if additional objects are passed in or that will extend the jQuery namespace if it is the sole argument.</param>\n    ///   <param name=\"object1\" type=\"Object\">An object containing additional properties to merge in.</param>\n    ///   <param name=\"objectN\" type=\"Object\">Additional objects containing properties to merge in.</param>\n    ///   <returns type=\"Object\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Merge the contents of two or more objects together into the first object.</summary>\n    ///   <param name=\"deep\" type=\"Boolean\">If true, the merge becomes recursive (aka. deep copy).</param>\n    ///   <param name=\"target\" type=\"Object\">The object to extend. It will receive the new properties.</param>\n    ///   <param name=\"object1\" type=\"Object\">An object containing additional properties to merge in.</param>\n    ///   <param name=\"objectN\" type=\"Object\">Additional objects containing properties to merge in.</param>\n    ///   <returns type=\"Object\" />\n    /// </signature>\n  },\n  'get': function() {\n    /// <signature>\n    ///   <summary>Load data from the server using a HTTP GET request.</summary>\n    ///   <param name=\"url\" type=\"String\">A string containing the URL to which the request is sent.</param>\n    ///   <param name=\"data\" type=\"String\">A plain object or string that is sent to the server with the request.</param>\n    ///   <param name=\"success(data, textStatus, jqXHR)\" type=\"Function\">A callback function that is executed if the request succeeds.</param>\n    ///   <param name=\"dataType\" type=\"String\">The type of data expected from the server. Default: Intelligent Guess (xml, json, script, or html).</param>\n    ///   <returns type=\"jqXHR\" />\n    /// </signature>\n  },\n  'getJSON': function() {\n    /// <signature>\n    ///   <summary>Load JSON-encoded data from the server using a GET HTTP request.</summary>\n    ///   <param name=\"url\" type=\"String\">A string containing the URL to which the request is sent.</param>\n    ///   <param name=\"data\" type=\"PlainObject\">A plain object or string that is sent to the server with the request.</param>\n    ///   <param name=\"success(data, textStatus, jqXHR)\" type=\"Function\">A callback function that is executed if the request succeeds.</param>\n    ///   <returns type=\"jqXHR\" />\n    /// </signature>\n  },\n  'getScript': function() {\n    /// <signature>\n    ///   <summary>Load a JavaScript file from the server using a GET HTTP request, then execute it.</summary>\n    ///   <param name=\"url\" type=\"String\">A string containing the URL to which the request is sent.</param>\n    ///   <param name=\"success(script, textStatus, jqXHR)\" type=\"Function\">A callback function that is executed if the request succeeds.</param>\n    ///   <returns type=\"jqXHR\" />\n    /// </signature>\n  },\n  'globalEval': function() {\n    /// <signature>\n    ///   <summary>Execute some JavaScript code globally.</summary>\n    ///   <param name=\"code\" type=\"String\">The JavaScript code to execute.</param>\n    /// </signature>\n  },\n  'grep': function() {\n    /// <signature>\n    ///   <summary>Finds the elements of an array which satisfy a filter function. The original array is not affected.</summary>\n    ///   <param name=\"array\" type=\"Array\">The array to search through.</param>\n    ///   <param name=\"function(elementOfArray, indexInArray)\" type=\"Function\">The function to process each item against.  The first argument to the function is the item, and the second argument is the index.  The function should return a Boolean value.  this will be the global window object.</param>\n    ///   <param name=\"invert\" type=\"Boolean\">If \"invert\" is false, or not provided, then the function returns an array consisting of all elements for which \"callback\" returns true.  If \"invert\" is true, then the function returns an array consisting of all elements for which \"callback\" returns false.</param>\n    ///   <returns type=\"Array\" />\n    /// </signature>\n  },\n  'hasData': function() {\n    /// <signature>\n    ///   <summary>Determine whether an element has any jQuery data associated with it.</summary>\n    ///   <param name=\"element\" type=\"Element\">A DOM element to be checked for data.</param>\n    ///   <returns type=\"Boolean\" />\n    /// </signature>\n  },\n  'holdReady': function() {\n    /// <signature>\n    ///   <summary>Holds or releases the execution of jQuery's ready event.</summary>\n    ///   <param name=\"hold\" type=\"Boolean\">Indicates whether the ready hold is being requested or released</param>\n    /// </signature>\n  },\n  'inArray': function() {\n    /// <signature>\n    ///   <summary>Search for a specified value within an array and return its index (or -1 if not found).</summary>\n    ///   <param name=\"value\" type=\"Anything\">The value to search for.</param>\n    ///   <param name=\"array\" type=\"Array\">An array through which to search.</param>\n    ///   <param name=\"fromIndex\" type=\"Number\">The index of the array at which to begin the search. The default is 0, which will search the whole array.</param>\n    ///   <returns type=\"Number\" />\n    /// </signature>\n  },\n  'isArray': function() {\n    /// <signature>\n    ///   <summary>Determine whether the argument is an array.</summary>\n    ///   <param name=\"obj\" type=\"Object\">Object to test whether or not it is an array.</param>\n    ///   <returns type=\"boolean\" />\n    /// </signature>\n  },\n  'isEmptyObject': function() {\n    /// <signature>\n    ///   <summary>Check to see if an object is empty (contains no enumerable properties).</summary>\n    ///   <param name=\"object\" type=\"Object\">The object that will be checked to see if it's empty.</param>\n    ///   <returns type=\"Boolean\" />\n    /// </signature>\n  },\n  'isFunction': function() {\n    /// <signature>\n    ///   <summary>Determine if the argument passed is a Javascript function object.</summary>\n    ///   <param name=\"obj\" type=\"PlainObject\">Object to test whether or not it is a function.</param>\n    ///   <returns type=\"boolean\" />\n    /// </signature>\n  },\n  'isNumeric': function() {\n    /// <signature>\n    ///   <summary>Determines whether its argument is a number.</summary>\n    ///   <param name=\"value\" type=\"PlainObject\">The value to be tested.</param>\n    ///   <returns type=\"Boolean\" />\n    /// </signature>\n  },\n  'isPlainObject': function() {\n    /// <signature>\n    ///   <summary>Check to see if an object is a plain object (created using \"{}\" or \"new Object\").</summary>\n    ///   <param name=\"object\" type=\"PlainObject\">The object that will be checked to see if it's a plain object.</param>\n    ///   <returns type=\"Boolean\" />\n    /// </signature>\n  },\n  'isWindow': function() {\n    /// <signature>\n    ///   <summary>Determine whether the argument is a window.</summary>\n    ///   <param name=\"obj\" type=\"PlainObject\">Object to test whether or not it is a window.</param>\n    ///   <returns type=\"boolean\" />\n    /// </signature>\n  },\n  'isXMLDoc': function() {\n    /// <signature>\n    ///   <summary>Check to see if a DOM node is within an XML document (or is an XML document).</summary>\n    ///   <param name=\"node\" type=\"Element\">The DOM node that will be checked to see if it's in an XML document.</param>\n    ///   <returns type=\"Boolean\" />\n    /// </signature>\n  },\n  'makeArray': function() {\n    /// <signature>\n    ///   <summary>Convert an array-like object into a true JavaScript array.</summary>\n    ///   <param name=\"obj\" type=\"PlainObject\">Any object to turn into a native Array.</param>\n    ///   <returns type=\"Array\" />\n    /// </signature>\n  },\n  'map': function() {\n    /// <signature>\n    ///   <summary>Translate all items in an array or object to new array of items.</summary>\n    ///   <param name=\"array\" type=\"Array\">The Array to translate.</param>\n    ///   <param name=\"callback(elementOfArray, indexInArray)\" type=\"Function\">The function to process each item against.  The first argument to the function is the array item, the second argument is the index in array The function can return any value. Within the function, this refers to the global (window) object.</param>\n    ///   <returns type=\"Array\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Translate all items in an array or object to new array of items.</summary>\n    ///   <param name=\"arrayOrObject\" type=\"Object\">The Array or Object to translate.</param>\n    ///   <param name=\"callback( value, indexOrKey )\" type=\"Function\">The function to process each item against.  The first argument to the function is the value; the second argument is the index or key of the array or object property. The function can return any value to add to the array. A returned array will be flattened into the resulting array. Within the function, this refers to the global (window) object.</param>\n    ///   <returns type=\"Array\" />\n    /// </signature>\n  },\n  'merge': function() {\n    /// <signature>\n    ///   <summary>Merge the contents of two arrays together into the first array.</summary>\n    ///   <param name=\"first\" type=\"Array\">The first array to merge, the elements of second added.</param>\n    ///   <param name=\"second\" type=\"Array\">The second array to merge into the first, unaltered.</param>\n    ///   <returns type=\"Array\" />\n    /// </signature>\n  },\n  'noConflict': function() {\n    /// <signature>\n    ///   <summary>Relinquish jQuery's control of the $ variable.</summary>\n    ///   <param name=\"removeAll\" type=\"Boolean\">A Boolean indicating whether to remove all jQuery variables from the global scope (including jQuery itself).</param>\n    ///   <returns type=\"Object\" />\n    /// </signature>\n  },\n  'noop': function() {\n    /// <summary>An empty function.</summary>\n  },\n  'now': function() {\n    /// <summary>Return a number representing the current time.</summary>\n    /// <returns type=\"Number\" />\n  },\n  'param': function() {\n    /// <signature>\n    ///   <summary>Create a serialized representation of an array or object, suitable for use in a URL query string or Ajax request.</summary>\n    ///   <param name=\"obj\" type=\"Object\">An array or object to serialize.</param>\n    ///   <returns type=\"String\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Create a serialized representation of an array or object, suitable for use in a URL query string or Ajax request.</summary>\n    ///   <param name=\"obj\" type=\"Object\">An array or object to serialize.</param>\n    ///   <param name=\"traditional\" type=\"Boolean\">A Boolean indicating whether to perform a traditional \"shallow\" serialization.</param>\n    ///   <returns type=\"String\" />\n    /// </signature>\n  },\n  'parseHTML': function() {\n    /// <signature>\n    ///   <summary>Parses a string into an array of DOM nodes.</summary>\n    ///   <param name=\"data\" type=\"String\">HTML string to be parsed</param>\n    ///   <param name=\"context\" type=\"Element\">DOM element to serve as the context in which the HTML fragment will be created</param>\n    ///   <param name=\"keepScripts\" type=\"Boolean\">A Boolean indicating whether to include scripts passed in the HTML string</param>\n    ///   <returns type=\"Array\" />\n    /// </signature>\n  },\n  'parseJSON': function() {\n    /// <signature>\n    ///   <summary>Takes a well-formed JSON string and returns the resulting JavaScript object.</summary>\n    ///   <param name=\"json\" type=\"String\">The JSON string to parse.</param>\n    ///   <returns type=\"Object\" />\n    /// </signature>\n  },\n  'parseXML': function() {\n    /// <signature>\n    ///   <summary>Parses a string into an XML document.</summary>\n    ///   <param name=\"data\" type=\"String\">a well-formed XML string to be parsed</param>\n    ///   <returns type=\"XMLDocument\" />\n    /// </signature>\n  },\n  'post': function() {\n    /// <signature>\n    ///   <summary>Load data from the server using a HTTP POST request.</summary>\n    ///   <param name=\"url\" type=\"String\">A string containing the URL to which the request is sent.</param>\n    ///   <param name=\"data\" type=\"String\">A plain object or string that is sent to the server with the request.</param>\n    ///   <param name=\"success(data, textStatus, jqXHR)\" type=\"Function\">A callback function that is executed if the request succeeds.</param>\n    ///   <param name=\"dataType\" type=\"String\">The type of data expected from the server. Default: Intelligent Guess (xml, json, script, text, html).</param>\n    ///   <returns type=\"jqXHR\" />\n    /// </signature>\n  },\n  'proxy': function() {\n    /// <signature>\n    ///   <summary>Takes a function and returns a new one that will always have a particular context.</summary>\n    ///   <param name=\"function\" type=\"Function\">The function whose context will be changed.</param>\n    ///   <param name=\"context\" type=\"PlainObject\">The object to which the context (this) of the function should be set.</param>\n    ///   <returns type=\"Function\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Takes a function and returns a new one that will always have a particular context.</summary>\n    ///   <param name=\"context\" type=\"PlainObject\">The object to which the context of the function should be set.</param>\n    ///   <param name=\"name\" type=\"String\">The name of the function whose context will be changed (should be a property of the context object).</param>\n    ///   <returns type=\"Function\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Takes a function and returns a new one that will always have a particular context.</summary>\n    ///   <param name=\"function\" type=\"Function\">The function whose context will be changed.</param>\n    ///   <param name=\"context\" type=\"PlainObject\">The object to which the context (this) of the function should be set.</param>\n    ///   <param name=\"additionalArguments\" type=\"Anything\">Any number of arguments to be passed to the function referenced in the function argument.</param>\n    ///   <returns type=\"Function\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Takes a function and returns a new one that will always have a particular context.</summary>\n    ///   <param name=\"context\" type=\"PlainObject\">The object to which the context of the function should be set.</param>\n    ///   <param name=\"name\" type=\"String\">The name of the function whose context will be changed (should be a property of the context object).</param>\n    ///   <param name=\"additionalArguments\" type=\"Anything\">Any number of arguments to be passed to the function named in the name argument.</param>\n    ///   <returns type=\"Function\" />\n    /// </signature>\n  },\n  'queue': function() {\n    /// <signature>\n    ///   <summary>Manipulate the queue of functions to be executed on the matched element.</summary>\n    ///   <param name=\"element\" type=\"Element\">A DOM element where the array of queued functions is attached.</param>\n    ///   <param name=\"queueName\" type=\"String\">A string containing the name of the queue. Defaults to fx, the standard effects queue.</param>\n    ///   <param name=\"newQueue\" type=\"Array\">An array of functions to replace the current queue contents.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Manipulate the queue of functions to be executed on the matched element.</summary>\n    ///   <param name=\"element\" type=\"Element\">A DOM element on which to add a queued function.</param>\n    ///   <param name=\"queueName\" type=\"String\">A string containing the name of the queue. Defaults to fx, the standard effects queue.</param>\n    ///   <param name=\"callback()\" type=\"Function\">The new function to add to the queue.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'removeData': function() {\n    /// <signature>\n    ///   <summary>Remove a previously-stored piece of data.</summary>\n    ///   <param name=\"element\" type=\"Element\">A DOM element from which to remove data.</param>\n    ///   <param name=\"name\" type=\"String\">A string naming the piece of data to remove.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'sub': function() {\n    /// <summary>Creates a new copy of jQuery whose properties and methods can be modified without affecting the original jQuery object.</summary>\n    /// <returns type=\"jQuery\" />\n  },\n  'support': function() {\n    /// <summary>A collection of properties that represent the presence of different browser features or bugs. Primarily intended for jQuery's internal use; specific properties may be removed when they are no longer needed internally to improve page startup performance.</summary>\n    /// <returns type=\"Object\" />\n  },\n  'trim': function() {\n    /// <signature>\n    ///   <summary>Remove the whitespace from the beginning and end of a string.</summary>\n    ///   <param name=\"str\" type=\"String\">The string to trim.</param>\n    ///   <returns type=\"String\" />\n    /// </signature>\n  },\n  'type': function() {\n    /// <signature>\n    ///   <summary>Determine the internal JavaScript [[Class]] of an object.</summary>\n    ///   <param name=\"obj\" type=\"PlainObject\">Object to get the internal JavaScript [[Class]] of.</param>\n    ///   <returns type=\"String\" />\n    /// </signature>\n  },\n  'unique': function() {\n    /// <signature>\n    ///   <summary>Sorts an array of DOM elements, in place, with the duplicates removed. Note that this only works on arrays of DOM elements, not strings or numbers.</summary>\n    ///   <param name=\"array\" type=\"Array\">The Array of DOM elements.</param>\n    ///   <returns type=\"Array\" />\n    /// </signature>\n  },\n  'when': function() {\n    /// <signature>\n    ///   <summary>Provides a way to execute callback functions based on one or more objects, usually Deferred objects that represent asynchronous events.</summary>\n    ///   <param name=\"deferreds\" type=\"Deferred\">One or more Deferred objects, or plain JavaScript objects.</param>\n    ///   <returns type=\"Promise\" />\n    /// </signature>\n  },\n});\n\nvar _1228819969 = jQuery.Callbacks;\njQuery.Callbacks = function(flags) {\nvar _object = _1228819969(flags);\nintellisense.annotate(_object, {\n  'add': function() {\n    /// <signature>\n    ///   <summary>Add a callback or a collection of callbacks to a callback list.</summary>\n    ///   <param name=\"callbacks\" type=\"Array\">A function, or array of functions, that are to be added to the callback list.</param>\n    ///   <returns type=\"Callbacks\" />\n    /// </signature>\n  },\n  'disable': function() {\n    /// <summary>Disable a callback list from doing anything more.</summary>\n    /// <returns type=\"Callbacks\" />\n  },\n  'disabled': function() {\n    /// <summary>Determine if the callbacks list has been disabled.</summary>\n    /// <returns type=\"Boolean\" />\n  },\n  'empty': function() {\n    /// <summary>Remove all of the callbacks from a list.</summary>\n    /// <returns type=\"Callbacks\" />\n  },\n  'fire': function() {\n    /// <signature>\n    ///   <summary>Call all of the callbacks with the given arguments</summary>\n    ///   <param name=\"arguments\" type=\"Anything\">The argument or list of arguments to pass back to the callback list.</param>\n    ///   <returns type=\"Callbacks\" />\n    /// </signature>\n  },\n  'fired': function() {\n    /// <summary>Determine if the callbacks have already been called at least once.</summary>\n    /// <returns type=\"Boolean\" />\n  },\n  'fireWith': function() {\n    /// <signature>\n    ///   <summary>Call all callbacks in a list with the given context and arguments.</summary>\n    ///   <param name=\"context\" type=\"\">A reference to the context in which the callbacks in the list should be fired.</param>\n    ///   <param name=\"args\" type=\"\">An argument, or array of arguments, to pass to the callbacks in the list.</param>\n    ///   <returns type=\"Callbacks\" />\n    /// </signature>\n  },\n  'has': function() {\n    /// <signature>\n    ///   <summary>Determine whether a supplied callback is in a list</summary>\n    ///   <param name=\"callback\" type=\"Function\">The callback to search for.</param>\n    ///   <returns type=\"Boolean\" />\n    /// </signature>\n  },\n  'lock': function() {\n    /// <summary>Lock a callback list in its current state.</summary>\n    /// <returns type=\"Callbacks\" />\n  },\n  'locked': function() {\n    /// <summary>Determine if the callbacks list has been locked.</summary>\n    /// <returns type=\"Boolean\" />\n  },\n  'remove': function() {\n    /// <signature>\n    ///   <summary>Remove a callback or a collection of callbacks from a callback list.</summary>\n    ///   <param name=\"callbacks\" type=\"Array\">A function, or array of functions, that are to be removed from the callback list.</param>\n    ///   <returns type=\"Callbacks\" />\n    /// </signature>\n  },\n});\n\nreturn _object;\n};\nintellisense.redirectDefinition(jQuery.Callbacks, _1228819969);\n\nvar _731531622 = jQuery.Deferred;\njQuery.Deferred = function(func) {\nvar _object = _731531622(func);\nintellisense.annotate(_object, {\n  'always': function() {\n    /// <signature>\n    ///   <summary>Add handlers to be called when the Deferred object is either resolved or rejected.</summary>\n    ///   <param name=\"alwaysCallbacks\" type=\"Function\">A function, or array of functions, that is called when the Deferred is resolved or rejected.</param>\n    ///   <param name=\"alwaysCallbacks\" type=\"Function\">Optional additional functions, or arrays of functions, that are called when the Deferred is resolved or rejected.</param>\n    ///   <returns type=\"Deferred\" />\n    /// </signature>\n  },\n  'done': function() {\n    /// <signature>\n    ///   <summary>Add handlers to be called when the Deferred object is resolved.</summary>\n    ///   <param name=\"doneCallbacks\" type=\"Function\">A function, or array of functions, that are called when the Deferred is resolved.</param>\n    ///   <param name=\"doneCallbacks\" type=\"Function\">Optional additional functions, or arrays of functions, that are called when the Deferred is resolved.</param>\n    ///   <returns type=\"Deferred\" />\n    /// </signature>\n  },\n  'fail': function() {\n    /// <signature>\n    ///   <summary>Add handlers to be called when the Deferred object is rejected.</summary>\n    ///   <param name=\"failCallbacks\" type=\"Function\">A function, or array of functions, that are called when the Deferred is rejected.</param>\n    ///   <param name=\"failCallbacks\" type=\"Function\">Optional additional functions, or arrays of functions, that are called when the Deferred is rejected.</param>\n    ///   <returns type=\"Deferred\" />\n    /// </signature>\n  },\n  'isRejected': function() {\n    /// <summary>Determine whether a Deferred object has been rejected.</summary>\n    /// <returns type=\"Boolean\" />\n  },\n  'isResolved': function() {\n    /// <summary>Determine whether a Deferred object has been resolved.</summary>\n    /// <returns type=\"Boolean\" />\n  },\n  'notify': function() {\n    /// <signature>\n    ///   <summary>Call the progressCallbacks on a Deferred object with the given args.</summary>\n    ///   <param name=\"args\" type=\"Object\">Optional arguments that are passed to the progressCallbacks.</param>\n    ///   <returns type=\"Deferred\" />\n    /// </signature>\n  },\n  'notifyWith': function() {\n    /// <signature>\n    ///   <summary>Call the progressCallbacks on a Deferred object with the given context and args.</summary>\n    ///   <param name=\"context\" type=\"Object\">Context passed to the progressCallbacks as the this object.</param>\n    ///   <param name=\"args\" type=\"Object\">Optional arguments that are passed to the progressCallbacks.</param>\n    ///   <returns type=\"Deferred\" />\n    /// </signature>\n  },\n  'pipe': function() {\n    /// <signature>\n    ///   <summary>Utility method to filter and/or chain Deferreds.</summary>\n    ///   <param name=\"doneFilter\" type=\"Function\">An optional function that is called when the Deferred is resolved.</param>\n    ///   <param name=\"failFilter\" type=\"Function\">An optional function that is called when the Deferred is rejected.</param>\n    ///   <returns type=\"Promise\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Utility method to filter and/or chain Deferreds.</summary>\n    ///   <param name=\"doneFilter\" type=\"Function\">An optional function that is called when the Deferred is resolved.</param>\n    ///   <param name=\"failFilter\" type=\"Function\">An optional function that is called when the Deferred is rejected.</param>\n    ///   <param name=\"progressFilter\" type=\"Function\">An optional function that is called when progress notifications are sent to the Deferred.</param>\n    ///   <returns type=\"Promise\" />\n    /// </signature>\n  },\n  'progress': function() {\n    /// <signature>\n    ///   <summary>Add handlers to be called when the Deferred object generates progress notifications.</summary>\n    ///   <param name=\"progressCallbacks\" type=\"Function\">A function, or array of functions, that is called when the Deferred generates progress notifications.</param>\n    ///   <returns type=\"Deferred\" />\n    /// </signature>\n  },\n  'promise': function() {\n    /// <signature>\n    ///   <summary>Return a Deferred's Promise object.</summary>\n    ///   <param name=\"target\" type=\"Object\">Object onto which the promise methods have to be attached</param>\n    ///   <returns type=\"Promise\" />\n    /// </signature>\n  },\n  'reject': function() {\n    /// <signature>\n    ///   <summary>Reject a Deferred object and call any failCallbacks with the given args.</summary>\n    ///   <param name=\"args\" type=\"Object\">Optional arguments that are passed to the failCallbacks.</param>\n    ///   <returns type=\"Deferred\" />\n    /// </signature>\n  },\n  'rejectWith': function() {\n    /// <signature>\n    ///   <summary>Reject a Deferred object and call any failCallbacks with the given context and args.</summary>\n    ///   <param name=\"context\" type=\"Object\">Context passed to the failCallbacks as the this object.</param>\n    ///   <param name=\"args\" type=\"Array\">An optional array of arguments that are passed to the failCallbacks.</param>\n    ///   <returns type=\"Deferred\" />\n    /// </signature>\n  },\n  'resolve': function() {\n    /// <signature>\n    ///   <summary>Resolve a Deferred object and call any doneCallbacks with the given args.</summary>\n    ///   <param name=\"args\" type=\"Object\">Optional arguments that are passed to the doneCallbacks.</param>\n    ///   <returns type=\"Deferred\" />\n    /// </signature>\n  },\n  'resolveWith': function() {\n    /// <signature>\n    ///   <summary>Resolve a Deferred object and call any doneCallbacks with the given context and args.</summary>\n    ///   <param name=\"context\" type=\"Object\">Context passed to the doneCallbacks as the this object.</param>\n    ///   <param name=\"args\" type=\"Array\">An optional array of arguments that are passed to the doneCallbacks.</param>\n    ///   <returns type=\"Deferred\" />\n    /// </signature>\n  },\n  'state': function() {\n    /// <summary>Determine the current state of a Deferred object.</summary>\n    /// <returns type=\"String\" />\n  },\n  'then': function() {\n    /// <signature>\n    ///   <summary>Add handlers to be called when the Deferred object is resolved, rejected, or still in progress.</summary>\n    ///   <param name=\"doneFilter\" type=\"Function\">A function that is called when the Deferred is resolved.</param>\n    ///   <param name=\"failFilter\" type=\"Function\">An optional function that is called when the Deferred is rejected.</param>\n    ///   <param name=\"progressFilter\" type=\"Function\">An optional function that is called when progress notifications are sent to the Deferred.</param>\n    ///   <returns type=\"Promise\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Add handlers to be called when the Deferred object is resolved, rejected, or still in progress.</summary>\n    ///   <param name=\"doneCallbacks\" type=\"Function\">A function, or array of functions, called when the Deferred is resolved.</param>\n    ///   <param name=\"failCallbacks\" type=\"Function\">A function, or array of functions, called when the Deferred is rejected.</param>\n    ///   <returns type=\"Promise\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Add handlers to be called when the Deferred object is resolved, rejected, or still in progress.</summary>\n    ///   <param name=\"doneCallbacks\" type=\"Function\">A function, or array of functions, called when the Deferred is resolved.</param>\n    ///   <param name=\"failCallbacks\" type=\"Function\">A function, or array of functions, called when the Deferred is rejected.</param>\n    ///   <param name=\"progressCallbacks\" type=\"Function\">A function, or array of functions, called when the Deferred notifies progress.</param>\n    ///   <returns type=\"Promise\" />\n    /// </signature>\n  },\n});\n\nreturn _object;\n};\nintellisense.redirectDefinition(jQuery.Callbacks, _731531622);\n\nintellisense.annotate(jQuery.Event.prototype, {\n  'currentTarget': function() {\n    /// <summary>The current DOM element within the event bubbling phase.</summary>\n    /// <returns type=\"Element\" />\n  },\n  'data': function() {\n    /// <summary>An optional object of data passed to an event method when the current executing handler is bound.</summary>\n    /// <returns type=\"Object\" />\n  },\n  'delegateTarget': function() {\n    /// <summary>The element where the currently-called jQuery event handler was attached.</summary>\n    /// <returns type=\"Element\" />\n  },\n  'isDefaultPrevented': function() {\n    /// <summary>Returns whether event.preventDefault() was ever called on this event object.</summary>\n    /// <returns type=\"Boolean\" />\n  },\n  'isImmediatePropagationStopped': function() {\n    /// <summary>Returns whether event.stopImmediatePropagation() was ever called on this event object.</summary>\n    /// <returns type=\"Boolean\" />\n  },\n  'isPropagationStopped': function() {\n    /// <summary>Returns whether event.stopPropagation() was ever called on this event object.</summary>\n    /// <returns type=\"Boolean\" />\n  },\n  'metaKey': function() {\n    /// <summary>Indicates whether the META key was pressed when the event fired.</summary>\n    /// <returns type=\"Boolean\" />\n  },\n  'namespace': function() {\n    /// <summary>The namespace specified when the event was triggered.</summary>\n    /// <returns type=\"String\" />\n  },\n  'pageX': function() {\n    /// <summary>The mouse position relative to the left edge of the document.</summary>\n    /// <returns type=\"Number\" />\n  },\n  'pageY': function() {\n    /// <summary>The mouse position relative to the top edge of the document.</summary>\n    /// <returns type=\"Number\" />\n  },\n  'preventDefault': function() {\n    /// <summary>If this method is called, the default action of the event will not be triggered.</summary>\n  },\n  'relatedTarget': function() {\n    /// <summary>The other DOM element involved in the event, if any.</summary>\n    /// <returns type=\"Element\" />\n  },\n  'result': function() {\n    /// <summary>The last value returned by an event handler that was triggered by this event, unless the value was undefined.</summary>\n    /// <returns type=\"Object\" />\n  },\n  'stopImmediatePropagation': function() {\n    /// <summary>Keeps the rest of the handlers from being executed and prevents the event from bubbling up the DOM tree.</summary>\n  },\n  'stopPropagation': function() {\n    /// <summary>Prevents the event from bubbling up the DOM tree, preventing any parent handlers from being notified of the event.</summary>\n  },\n  'target': function() {\n    /// <summary>The DOM element that initiated the event.</summary>\n    /// <returns type=\"Element\" />\n  },\n  'timeStamp': function() {\n    /// <summary>The difference in milliseconds between the time the browser created the event and January 1, 1970.</summary>\n    /// <returns type=\"Number\" />\n  },\n  'type': function() {\n    /// <summary>Describes the nature of the event.</summary>\n    /// <returns type=\"String\" />\n  },\n  'which': function() {\n    /// <summary>For key or mouse events, this property indicates the specific key or button that was pressed.</summary>\n    /// <returns type=\"Number\" />\n  },\n});\n\nintellisense.annotate(jQuery.fn, {\n  'add': function() {\n    /// <signature>\n    ///   <summary>Add elements to the set of matched elements.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string representing a selector expression to find additional elements to add to the set of matched elements.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Add elements to the set of matched elements.</summary>\n    ///   <param name=\"elements\" type=\"Array\">One or more elements to add to the set of matched elements.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Add elements to the set of matched elements.</summary>\n    ///   <param name=\"html\" type=\"String\">An HTML fragment to add to the set of matched elements.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Add elements to the set of matched elements.</summary>\n    ///   <param name=\"jQuery object\" type=\"jQuery object \">An existing jQuery object to add to the set of matched elements.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Add elements to the set of matched elements.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string representing a selector expression to find additional elements to add to the set of matched elements.</param>\n    ///   <param name=\"context\" type=\"Element\">The point in the document at which the selector should begin matching; similar to the context argument of the $(selector, context) method.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'addBack': function() {\n    /// <signature>\n    ///   <summary>Add the previous set of elements on the stack to the current set, optionally filtered by a selector.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression to match the current set of elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'addClass': function() {\n    /// <signature>\n    ///   <summary>Adds the specified class(es) to each of the set of matched elements.</summary>\n    ///   <param name=\"className\" type=\"String\">One or more space-separated classes to be added to the class attribute of each matched element.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Adds the specified class(es) to each of the set of matched elements.</summary>\n    ///   <param name=\"function(index, currentClass)\" type=\"Function\">A function returning one or more space-separated class names to be added to the existing class name(s). Receives the index position of the element in the set and the existing class name(s) as arguments. Within the function, this refers to the current element in the set.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'after': function() {\n    /// <signature>\n    ///   <summary>Insert content, specified by the parameter, after each element in the set of matched elements.</summary>\n    ///   <param name=\"content\" type=\"jQuery\">HTML string, DOM element, or jQuery object to insert after each element in the set of matched elements.</param>\n    ///   <param name=\"content\" type=\"jQuery\">One or more additional DOM elements, arrays of elements, HTML strings, or jQuery objects to insert after each element in the set of matched elements.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Insert content, specified by the parameter, after each element in the set of matched elements.</summary>\n    ///   <param name=\"function(index)\" type=\"Function\">A function that returns an HTML string, DOM element(s), or jQuery object to insert after each element in the set of matched elements. Receives the index position of the element in the set as an argument. Within the function, this refers to the current element in the set.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'ajaxComplete': function() {\n    /// <signature>\n    ///   <summary>Register a handler to be called when Ajax requests complete. This is an AjaxEvent.</summary>\n    ///   <param name=\"handler(event, XMLHttpRequest, ajaxOptions)\" type=\"Function\">The function to be invoked.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'ajaxError': function() {\n    /// <signature>\n    ///   <summary>Register a handler to be called when Ajax requests complete with an error. This is an Ajax Event.</summary>\n    ///   <param name=\"handler(event, jqXHR, ajaxSettings, thrownError)\" type=\"Function\">The function to be invoked.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'ajaxSend': function() {\n    /// <signature>\n    ///   <summary>Attach a function to be executed before an Ajax request is sent. This is an Ajax Event.</summary>\n    ///   <param name=\"handler(event, jqXHR, ajaxOptions)\" type=\"Function\">The function to be invoked.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'ajaxStart': function() {\n    /// <signature>\n    ///   <summary>Register a handler to be called when the first Ajax request begins. This is an Ajax Event.</summary>\n    ///   <param name=\"handler()\" type=\"Function\">The function to be invoked.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'ajaxStop': function() {\n    /// <signature>\n    ///   <summary>Register a handler to be called when all Ajax requests have completed. This is an Ajax Event.</summary>\n    ///   <param name=\"handler()\" type=\"Function\">The function to be invoked.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'ajaxSuccess': function() {\n    /// <signature>\n    ///   <summary>Attach a function to be executed whenever an Ajax request completes successfully. This is an Ajax Event.</summary>\n    ///   <param name=\"handler(event, XMLHttpRequest, ajaxOptions)\" type=\"Function\">The function to be invoked.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'all': function() {\n    /// <summary>Selects all elements.</summary>\n  },\n  'andSelf': function() {\n    /// <summary>Add the previous set of elements on the stack to the current set.</summary>\n    /// <returns type=\"jQuery\" />\n  },\n  'animate': function() {\n    /// <signature>\n    ///   <summary>Perform a custom animation of a set of CSS properties.</summary>\n    ///   <param name=\"properties\" type=\"PlainObject\">An object of CSS properties and values that the animation will move toward.</param>\n    ///   <param name=\"duration\" type=\"\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"easing\" type=\"String\">A string indicating which easing function to use for the transition.</param>\n    ///   <param name=\"complete\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Perform a custom animation of a set of CSS properties.</summary>\n    ///   <param name=\"properties\" type=\"PlainObject\">An object of CSS properties and values that the animation will move toward.</param>\n    ///   <param name=\"options\" type=\"PlainObject\">A map of additional options to pass to the method.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'animated': function() {\n    /// <summary>Select all elements that are in the progress of an animation at the time the selector is run.</summary>\n  },\n  'append': function() {\n    /// <signature>\n    ///   <summary>Insert content, specified by the parameter, to the end of each element in the set of matched elements.</summary>\n    ///   <param name=\"content\" type=\"jQuery\">DOM element, HTML string, or jQuery object to insert at the end of each element in the set of matched elements.</param>\n    ///   <param name=\"content\" type=\"jQuery\">One or more additional DOM elements, arrays of elements, HTML strings, or jQuery objects to insert at the end of each element in the set of matched elements.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Insert content, specified by the parameter, to the end of each element in the set of matched elements.</summary>\n    ///   <param name=\"function(index, html)\" type=\"Function\">A function that returns an HTML string, DOM element(s), or jQuery object to insert at the end of each element in the set of matched elements. Receives the index position of the element in the set and the old HTML value of the element as arguments. Within the function, this refers to the current element in the set.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'appendTo': function() {\n    /// <signature>\n    ///   <summary>Insert every element in the set of matched elements to the end of the target.</summary>\n    ///   <param name=\"target\" type=\"jQuery\">A selector, element, HTML string, or jQuery object; the matched set of elements will be inserted at the end of the element(s) specified by this parameter.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'attr': function() {\n    /// <signature>\n    ///   <summary>Set one or more attributes for the set of matched elements.</summary>\n    ///   <param name=\"attributeName\" type=\"String\">The name of the attribute to set.</param>\n    ///   <param name=\"value\" type=\"Number\">A value to set for the attribute.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Set one or more attributes for the set of matched elements.</summary>\n    ///   <param name=\"attributes\" type=\"PlainObject\">An object of attribute-value pairs to set.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Set one or more attributes for the set of matched elements.</summary>\n    ///   <param name=\"attributeName\" type=\"String\">The name of the attribute to set.</param>\n    ///   <param name=\"function(index, attr)\" type=\"Function\">A function returning the value to set. this is the current element. Receives the index position of the element in the set and the old attribute value as arguments.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'attributeContains': function() {\n    /// <signature>\n    ///   <summary>Selects elements that have the specified attribute with a value containing the a given substring.</summary>\n    ///   <param name=\"attribute\" type=\"String\">An attribute name.</param>\n    ///   <param name=\"value\" type=\"String\">An attribute value. Can be either an unquoted single word or a quoted string.</param>\n    /// </signature>\n  },\n  'attributeContainsPrefix': function() {\n    /// <signature>\n    ///   <summary>Selects elements that have the specified attribute with a value either equal to a given string or starting with that string followed by a hyphen (-).</summary>\n    ///   <param name=\"attribute\" type=\"String\">An attribute name.</param>\n    ///   <param name=\"value\" type=\"String\">An attribute value. Can be either an unquoted single word or a quoted string.</param>\n    /// </signature>\n  },\n  'attributeContainsWord': function() {\n    /// <signature>\n    ///   <summary>Selects elements that have the specified attribute with a value containing a given word, delimited by spaces.</summary>\n    ///   <param name=\"attribute\" type=\"String\">An attribute name.</param>\n    ///   <param name=\"value\" type=\"String\">An attribute value. Can be either an unquoted single word or a quoted string.</param>\n    /// </signature>\n  },\n  'attributeEndsWith': function() {\n    /// <signature>\n    ///   <summary>Selects elements that have the specified attribute with a value ending exactly with a given string. The comparison is case sensitive.</summary>\n    ///   <param name=\"attribute\" type=\"String\">An attribute name.</param>\n    ///   <param name=\"value\" type=\"String\">An attribute value. Can be either an unquoted single word or a quoted string.</param>\n    /// </signature>\n  },\n  'attributeEquals': function() {\n    /// <signature>\n    ///   <summary>Selects elements that have the specified attribute with a value exactly equal to a certain value.</summary>\n    ///   <param name=\"attribute\" type=\"String\">An attribute name.</param>\n    ///   <param name=\"value\" type=\"String\">An attribute value. Can be either an unquoted single word or a quoted string.</param>\n    /// </signature>\n  },\n  'attributeHas': function() {\n    /// <signature>\n    ///   <summary>Selects elements that have the specified attribute, with any value.</summary>\n    ///   <param name=\"attribute\" type=\"String\">An attribute name.</param>\n    /// </signature>\n  },\n  'attributeMultiple': function() {\n    /// <signature>\n    ///   <summary>Matches elements that match all of the specified attribute filters.</summary>\n    ///   <param name=\"attributeFilter1\" type=\"String\">An attribute filter.</param>\n    ///   <param name=\"attributeFilter2\" type=\"String\">Another attribute filter, reducing the selection even more</param>\n    ///   <param name=\"attributeFilterN\" type=\"String\">As many more attribute filters as necessary</param>\n    /// </signature>\n  },\n  'attributeNotEqual': function() {\n    /// <signature>\n    ///   <summary>Select elements that either don't have the specified attribute, or do have the specified attribute but not with a certain value.</summary>\n    ///   <param name=\"attribute\" type=\"String\">An attribute name.</param>\n    ///   <param name=\"value\" type=\"String\">An attribute value. Can be either an unquoted single word or a quoted string.</param>\n    /// </signature>\n  },\n  'attributeStartsWith': function() {\n    /// <signature>\n    ///   <summary>Selects elements that have the specified attribute with a value beginning exactly with a given string.</summary>\n    ///   <param name=\"attribute\" type=\"String\">An attribute name.</param>\n    ///   <param name=\"value\" type=\"String\">An attribute value. Can be either an unquoted single word or a quoted string.</param>\n    /// </signature>\n  },\n  'before': function() {\n    /// <signature>\n    ///   <summary>Insert content, specified by the parameter, before each element in the set of matched elements.</summary>\n    ///   <param name=\"content\" type=\"jQuery\">HTML string, DOM element, or jQuery object to insert before each element in the set of matched elements.</param>\n    ///   <param name=\"content\" type=\"jQuery\">One or more additional DOM elements, arrays of elements, HTML strings, or jQuery objects to insert before each element in the set of matched elements.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Insert content, specified by the parameter, before each element in the set of matched elements.</summary>\n    ///   <param name=\"function\" type=\"Function\">A function that returns an HTML string, DOM element(s), or jQuery object to insert before each element in the set of matched elements. Receives the index position of the element in the set as an argument. Within the function, this refers to the current element in the set.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'bind': function() {\n    /// <signature>\n    ///   <summary>Attach a handler to an event for the elements.</summary>\n    ///   <param name=\"eventType\" type=\"String\">A string containing one or more DOM event types, such as \"click\" or \"submit,\" or custom event names.</param>\n    ///   <param name=\"eventData\" type=\"Object\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Attach a handler to an event for the elements.</summary>\n    ///   <param name=\"eventType\" type=\"String\">A string containing one or more DOM event types, such as \"click\" or \"submit,\" or custom event names.</param>\n    ///   <param name=\"eventData\" type=\"Object\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"preventBubble\" type=\"Boolean\">Setting the third argument to false will attach a function that prevents the default action from occurring and stops the event from bubbling. The default is true.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Attach a handler to an event for the elements.</summary>\n    ///   <param name=\"events\" type=\"Object\">An object containing one or more DOM event types and functions to execute for them.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'blur': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"blur\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"blur\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"eventData\" type=\"Object\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'button': function() {\n    /// <summary>Selects all button elements and elements of type button.</summary>\n  },\n  'change': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"change\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"change\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"eventData\" type=\"Object\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'checkbox': function() {\n    /// <summary>Selects all elements of type checkbox.</summary>\n  },\n  'checked': function() {\n    /// <summary>Matches all elements that are checked.</summary>\n  },\n  'child': function() {\n    /// <signature>\n    ///   <summary>Selects all direct child elements specified by \"child\" of elements specified by \"parent\".</summary>\n    ///   <param name=\"parent\" type=\"String\">Any valid selector.</param>\n    ///   <param name=\"child\" type=\"String\">A selector to filter the child elements.</param>\n    /// </signature>\n  },\n  'children': function() {\n    /// <signature>\n    ///   <summary>Get the children of each element in the set of matched elements, optionally filtered by a selector.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'class': function() {\n    /// <signature>\n    ///   <summary>Selects all elements with the given class.</summary>\n    ///   <param name=\"class\" type=\"String\">A class to search for. An element can have multiple classes; only one of them must match.</param>\n    /// </signature>\n  },\n  'clearQueue': function() {\n    /// <signature>\n    ///   <summary>Remove from the queue all items that have not yet been run.</summary>\n    ///   <param name=\"queueName\" type=\"String\">A string containing the name of the queue. Defaults to fx, the standard effects queue.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'click': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"click\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"click\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"eventData\" type=\"Object\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'clone': function() {\n    /// <signature>\n    ///   <summary>Create a deep copy of the set of matched elements.</summary>\n    ///   <param name=\"withDataAndEvents\" type=\"Boolean\">A Boolean indicating whether event handlers should be copied along with the elements. As of jQuery 1.4, element data will be copied as well.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Create a deep copy of the set of matched elements.</summary>\n    ///   <param name=\"withDataAndEvents\" type=\"Boolean\">A Boolean indicating whether event handlers and data should be copied along with the elements. The default value is false. *In jQuery 1.5.0 the default value was incorrectly true; it was changed back to false in 1.5.1 and up.</param>\n    ///   <param name=\"deepWithDataAndEvents\" type=\"Boolean\">A Boolean indicating whether event handlers and data for all children of the cloned element should be copied. By default its value matches the first argument's value (which defaults to false).</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'closest': function() {\n    /// <signature>\n    ///   <summary>For each element in the set, get the first element that matches the selector by testing the element itself and traversing up through its ancestors in the DOM tree.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>For each element in the set, get the first element that matches the selector by testing the element itself and traversing up through its ancestors in the DOM tree.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <param name=\"context\" type=\"Element\">A DOM element within which a matching element may be found. If no context is passed in then the context of the jQuery set will be used instead.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>For each element in the set, get the first element that matches the selector by testing the element itself and traversing up through its ancestors in the DOM tree.</summary>\n    ///   <param name=\"jQuery object\" type=\"jQuery\">A jQuery object to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>For each element in the set, get the first element that matches the selector by testing the element itself and traversing up through its ancestors in the DOM tree.</summary>\n    ///   <param name=\"element\" type=\"Element\">An element to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'contains': function() {\n    /// <signature>\n    ///   <summary>Select all elements that contain the specified text.</summary>\n    ///   <param name=\"text\" type=\"String\">A string of text to look for. It's case sensitive.</param>\n    /// </signature>\n  },\n  'contents': function() {\n    /// <summary>Get the children of each element in the set of matched elements, including text and comment nodes.</summary>\n    /// <returns type=\"jQuery\" />\n  },\n  'context': function() {\n    /// <summary>The DOM node context originally passed to jQuery(); if none was passed then context will likely be the document.</summary>\n    /// <returns type=\"Element\" />\n  },\n  'css': function() {\n    /// <signature>\n    ///   <summary>Set one or more CSS properties for the set of matched elements.</summary>\n    ///   <param name=\"propertyName\" type=\"String\">A CSS property name.</param>\n    ///   <param name=\"value\" type=\"Number\">A value to set for the property.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Set one or more CSS properties for the set of matched elements.</summary>\n    ///   <param name=\"propertyName\" type=\"String\">A CSS property name.</param>\n    ///   <param name=\"function(index, value)\" type=\"Function\">A function returning the value to set. this is the current element. Receives the index position of the element in the set and the old value as arguments.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Set one or more CSS properties for the set of matched elements.</summary>\n    ///   <param name=\"properties\" type=\"PlainObject\">An object of property-value pairs to set.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'data': function() {\n    /// <signature>\n    ///   <summary>Store arbitrary data associated with the matched elements.</summary>\n    ///   <param name=\"key\" type=\"String\">A string naming the piece of data to set.</param>\n    ///   <param name=\"value\" type=\"Object\">The new data value; it can be any Javascript type including Array or Object.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Store arbitrary data associated with the matched elements.</summary>\n    ///   <param name=\"obj\" type=\"Object\">An object of key-value pairs of data to update.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'dblclick': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"dblclick\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"dblclick\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"eventData\" type=\"Object\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'delay': function() {\n    /// <signature>\n    ///   <summary>Set a timer to delay execution of subsequent items in the queue.</summary>\n    ///   <param name=\"duration\" type=\"Number\">An integer indicating the number of milliseconds to delay execution of the next item in the queue.</param>\n    ///   <param name=\"queueName\" type=\"String\">A string containing the name of the queue. Defaults to fx, the standard effects queue.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'delegate': function() {\n    /// <signature>\n    ///   <summary>Attach a handler to one or more events for all elements that match the selector, now or in the future, based on a specific set of root elements.</summary>\n    ///   <param name=\"selector\" type=\"String\">A selector to filter the elements that trigger the event.</param>\n    ///   <param name=\"eventType\" type=\"String\">A string containing one or more space-separated JavaScript event types, such as \"click\" or \"keydown,\" or custom event names.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute at the time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Attach a handler to one or more events for all elements that match the selector, now or in the future, based on a specific set of root elements.</summary>\n    ///   <param name=\"selector\" type=\"String\">A selector to filter the elements that trigger the event.</param>\n    ///   <param name=\"eventType\" type=\"String\">A string containing one or more space-separated JavaScript event types, such as \"click\" or \"keydown,\" or custom event names.</param>\n    ///   <param name=\"eventData\" type=\"Object\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute at the time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Attach a handler to one or more events for all elements that match the selector, now or in the future, based on a specific set of root elements.</summary>\n    ///   <param name=\"selector\" type=\"String\">A selector to filter the elements that trigger the event.</param>\n    ///   <param name=\"events\" type=\"PlainObject\">A plain object of one or more event types and functions to execute for them.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'dequeue': function() {\n    /// <signature>\n    ///   <summary>Execute the next function on the queue for the matched elements.</summary>\n    ///   <param name=\"queueName\" type=\"String\">A string containing the name of the queue. Defaults to fx, the standard effects queue.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'descendant': function() {\n    /// <signature>\n    ///   <summary>Selects all elements that are descendants of a given ancestor.</summary>\n    ///   <param name=\"ancestor\" type=\"String\">Any valid selector.</param>\n    ///   <param name=\"descendant\" type=\"String\">A selector to filter the descendant elements.</param>\n    /// </signature>\n  },\n  'detach': function() {\n    /// <signature>\n    ///   <summary>Remove the set of matched elements from the DOM.</summary>\n    ///   <param name=\"selector\" type=\"String\">A selector expression that filters the set of matched elements to be removed.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'die': function() {\n    /// <signature>\n    ///   <summary>Remove event handlers previously attached using .live() from the elements.</summary>\n    ///   <param name=\"eventType\" type=\"String\">A string containing a JavaScript event type, such as click or keydown.</param>\n    ///   <param name=\"handler\" type=\"String\">The function that is no longer to be executed.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Remove event handlers previously attached using .live() from the elements.</summary>\n    ///   <param name=\"events\" type=\"PlainObject\">A plain object of one or more event types, such as click or keydown and their corresponding functions that are no longer to be executed.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'disabled': function() {\n    /// <summary>Selects all elements that are disabled.</summary>\n  },\n  'each': function() {\n    /// <signature>\n    ///   <summary>Iterate over a jQuery object, executing a function for each matched element.</summary>\n    ///   <param name=\"function(index, Element)\" type=\"Function\">A function to execute for each matched element.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'element': function() {\n    /// <signature>\n    ///   <summary>Selects all elements with the given tag name.</summary>\n    ///   <param name=\"element\" type=\"String\">An element to search for. Refers to the tagName of DOM nodes.</param>\n    /// </signature>\n  },\n  'empty': function() {\n    /// <summary>Select all elements that have no children (including text nodes).</summary>\n  },\n  'enabled': function() {\n    /// <summary>Selects all elements that are enabled.</summary>\n  },\n  'end': function() {\n    /// <summary>End the most recent filtering operation in the current chain and return the set of matched elements to its previous state.</summary>\n    /// <returns type=\"jQuery\" />\n  },\n  'eq': function() {\n    /// <signature>\n    ///   <summary>Select the element at index n within the matched set.</summary>\n    ///   <param name=\"index\" type=\"Number\">Zero-based index of the element to match.</param>\n    /// </signature>\n    /// <signature>\n    ///   <summary>Select the element at index n within the matched set.</summary>\n    ///   <param name=\"-index\" type=\"Number\">Zero-based index of the element to match, counting backwards from the last element.</param>\n    /// </signature>\n  },\n  'error': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"error\" JavaScript event.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute when the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"error\" JavaScript event.</summary>\n    ///   <param name=\"eventData\" type=\"Object\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'even': function() {\n    /// <summary>Selects even elements, zero-indexed.  See also odd.</summary>\n  },\n  'fadeIn': function() {\n    /// <signature>\n    ///   <summary>Display the matched elements by fading them to opaque.</summary>\n    ///   <param name=\"duration\" type=\"\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"complete\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Display the matched elements by fading them to opaque.</summary>\n    ///   <param name=\"options\" type=\"PlainObject\">A map of additional options to pass to the method.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Display the matched elements by fading them to opaque.</summary>\n    ///   <param name=\"duration\" type=\"\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"easing\" type=\"String\">A string indicating which easing function to use for the transition.</param>\n    ///   <param name=\"complete\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'fadeOut': function() {\n    /// <signature>\n    ///   <summary>Hide the matched elements by fading them to transparent.</summary>\n    ///   <param name=\"duration\" type=\"\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"complete\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Hide the matched elements by fading them to transparent.</summary>\n    ///   <param name=\"options\" type=\"PlainObject\">A map of additional options to pass to the method.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Hide the matched elements by fading them to transparent.</summary>\n    ///   <param name=\"duration\" type=\"\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"easing\" type=\"String\">A string indicating which easing function to use for the transition.</param>\n    ///   <param name=\"complete\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'fadeTo': function() {\n    /// <signature>\n    ///   <summary>Adjust the opacity of the matched elements.</summary>\n    ///   <param name=\"duration\" type=\"Number\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"opacity\" type=\"Number\">A number between 0 and 1 denoting the target opacity.</param>\n    ///   <param name=\"complete\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Adjust the opacity of the matched elements.</summary>\n    ///   <param name=\"duration\" type=\"Number\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"opacity\" type=\"Number\">A number between 0 and 1 denoting the target opacity.</param>\n    ///   <param name=\"easing\" type=\"String\">A string indicating which easing function to use for the transition.</param>\n    ///   <param name=\"complete\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'fadeToggle': function() {\n    /// <signature>\n    ///   <summary>Display or hide the matched elements by animating their opacity.</summary>\n    ///   <param name=\"duration\" type=\"\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"easing\" type=\"String\">A string indicating which easing function to use for the transition.</param>\n    ///   <param name=\"complete\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Display or hide the matched elements by animating their opacity.</summary>\n    ///   <param name=\"options\" type=\"PlainObject\">A map of additional options to pass to the method.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'file': function() {\n    /// <summary>Selects all elements of type file.</summary>\n  },\n  'filter': function() {\n    /// <signature>\n    ///   <summary>Reduce the set of matched elements to those that match the selector or pass the function's test.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression to match the current set of elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Reduce the set of matched elements to those that match the selector or pass the function's test.</summary>\n    ///   <param name=\"function(index)\" type=\"Function\">A function used as a test for each element in the set. this is the current DOM element.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Reduce the set of matched elements to those that match the selector or pass the function's test.</summary>\n    ///   <param name=\"element\" type=\"Element\">An element to match the current set of elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Reduce the set of matched elements to those that match the selector or pass the function's test.</summary>\n    ///   <param name=\"jQuery object\" type=\"Object\">An existing jQuery object to match the current set of elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'find': function() {\n    /// <signature>\n    ///   <summary>Get the descendants of each element in the current set of matched elements, filtered by a selector, jQuery object, or element.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Get the descendants of each element in the current set of matched elements, filtered by a selector, jQuery object, or element.</summary>\n    ///   <param name=\"jQuery object\" type=\"Object\">A jQuery object to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Get the descendants of each element in the current set of matched elements, filtered by a selector, jQuery object, or element.</summary>\n    ///   <param name=\"element\" type=\"Element\">An element to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'finish': function() {\n    /// <signature>\n    ///   <summary>Stop the currently-running animation, remove all queued animations, and complete all animations for the matched elements.</summary>\n    ///   <param name=\"queue\" type=\"String\">The name of the queue in which to stop animations.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'first': function() {\n    /// <summary>Selects the first matched element.</summary>\n  },\n  'first-child': function() {\n    /// <summary>Selects all elements that are the first child of their parent.</summary>\n  },\n  'first-of-type': function() {\n    /// <summary>Selects all elements that are the first among siblings of the same element name.</summary>\n  },\n  'focus': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"focus\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"focus\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"eventData\" type=\"Object\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'focusin': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"focusin\" event.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"focusin\" event.</summary>\n    ///   <param name=\"eventData\" type=\"Object\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'focusout': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"focusout\" JavaScript event.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"focusout\" JavaScript event.</summary>\n    ///   <param name=\"eventData\" type=\"Object\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'get': function() {\n    /// <signature>\n    ///   <summary>Retrieve the DOM elements matched by the jQuery object.</summary>\n    ///   <param name=\"index\" type=\"Number\">A zero-based integer indicating which element to retrieve.</param>\n    ///   <returns type=\"Element, Array\" />\n    /// </signature>\n  },\n  'gt': function() {\n    /// <signature>\n    ///   <summary>Select all elements at an index greater than index within the matched set.</summary>\n    ///   <param name=\"index\" type=\"Number\">Zero-based index.</param>\n    /// </signature>\n  },\n  'has': function() {\n    /// <signature>\n    ///   <summary>Reduce the set of matched elements to those that have a descendant that matches the selector or DOM element.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Reduce the set of matched elements to those that have a descendant that matches the selector or DOM element.</summary>\n    ///   <param name=\"contained\" type=\"Element\">A DOM element to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'hasClass': function() {\n    /// <signature>\n    ///   <summary>Determine whether any of the matched elements are assigned the given class.</summary>\n    ///   <param name=\"className\" type=\"String\">The class name to search for.</param>\n    ///   <returns type=\"Boolean\" />\n    /// </signature>\n  },\n  'header': function() {\n    /// <summary>Selects all elements that are headers, like h1, h2, h3 and so on.</summary>\n  },\n  'height': function() {\n    /// <signature>\n    ///   <summary>Set the CSS height of every matched element.</summary>\n    ///   <param name=\"value\" type=\"Number\">An integer representing the number of pixels, or an integer with an optional unit of measure appended (as a string).</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Set the CSS height of every matched element.</summary>\n    ///   <param name=\"function(index, height)\" type=\"Function\">A function returning the height to set. Receives the index position of the element in the set and the old height as arguments. Within the function, this refers to the current element in the set.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'hidden': function() {\n    /// <summary>Selects all elements that are hidden.</summary>\n  },\n  'hide': function() {\n    /// <signature>\n    ///   <summary>Hide the matched elements.</summary>\n    ///   <param name=\"duration\" type=\"\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"complete\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Hide the matched elements.</summary>\n    ///   <param name=\"options\" type=\"PlainObject\">A map of additional options to pass to the method.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Hide the matched elements.</summary>\n    ///   <param name=\"duration\" type=\"\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"easing\" type=\"String\">A string indicating which easing function to use for the transition.</param>\n    ///   <param name=\"complete\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'hover': function() {\n    /// <signature>\n    ///   <summary>Bind two handlers to the matched elements, to be executed when the mouse pointer enters and leaves the elements.</summary>\n    ///   <param name=\"handlerIn(eventObject)\" type=\"Function\">A function to execute when the mouse pointer enters the element.</param>\n    ///   <param name=\"handlerOut(eventObject)\" type=\"Function\">A function to execute when the mouse pointer leaves the element.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'html': function() {\n    /// <signature>\n    ///   <summary>Set the HTML contents of each element in the set of matched elements.</summary>\n    ///   <param name=\"htmlString\" type=\"String\">A string of HTML to set as the content of each matched element.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Set the HTML contents of each element in the set of matched elements.</summary>\n    ///   <param name=\"function(index, oldhtml)\" type=\"Function\">A function returning the HTML content to set. Receives the           index position of the element in the set and the old HTML value as arguments.           jQuery empties the element before calling the function;           use the oldhtml argument to reference the previous content.           Within the function, this refers to the current element in the set.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'id': function() {\n    /// <signature>\n    ///   <summary>Selects a single element with the given id attribute.</summary>\n    ///   <param name=\"id\" type=\"String\">An ID to search for, specified via the id attribute of an element.</param>\n    /// </signature>\n  },\n  'image': function() {\n    /// <summary>Selects all elements of type image.</summary>\n  },\n  'index': function() {\n    /// <signature>\n    ///   <summary>Search for a given element from among the matched elements.</summary>\n    ///   <param name=\"selector\" type=\"String\">A selector representing a jQuery collection in which to look for an element.</param>\n    ///   <returns type=\"Number\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Search for a given element from among the matched elements.</summary>\n    ///   <param name=\"element\" type=\"jQuery\">The DOM element or first element within the jQuery object to look for.</param>\n    ///   <returns type=\"Number\" />\n    /// </signature>\n  },\n  'init': function() {\n    /// <signature>\n    ///   <summary>Accepts a string containing a CSS selector which is then used to match a set of elements.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression</param>\n    ///   <param name=\"context\" type=\"jQuery\">A DOM Element, Document, or jQuery to use as context</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Accepts a string containing a CSS selector which is then used to match a set of elements.</summary>\n    ///   <param name=\"element\" type=\"Element\">A DOM element to wrap in a jQuery object.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Accepts a string containing a CSS selector which is then used to match a set of elements.</summary>\n    ///   <param name=\"elementArray\" type=\"Array\">An array containing a set of DOM elements to wrap in a jQuery object.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Accepts a string containing a CSS selector which is then used to match a set of elements.</summary>\n    ///   <param name=\"object\" type=\"PlainObject\">A plain object to wrap in a jQuery object.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Accepts a string containing a CSS selector which is then used to match a set of elements.</summary>\n    ///   <param name=\"jQuery object\" type=\"PlainObject\">An existing jQuery object to clone.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'innerHeight': function() {\n    /// <summary>Get the current computed height for the first element in the set of matched elements, including padding but not border.</summary>\n    /// <returns type=\"Integer\" />\n  },\n  'innerWidth': function() {\n    /// <summary>Get the current computed width for the first element in the set of matched elements, including padding but not border.</summary>\n    /// <returns type=\"Integer\" />\n  },\n  'input': function() {\n    /// <summary>Selects all input, textarea, select and button elements.</summary>\n  },\n  'insertAfter': function() {\n    /// <signature>\n    ///   <summary>Insert every element in the set of matched elements after the target.</summary>\n    ///   <param name=\"target\" type=\"jQuery\">A selector, element, HTML string, or jQuery object; the matched set of elements will be inserted after the element(s) specified by this parameter.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'insertBefore': function() {\n    /// <signature>\n    ///   <summary>Insert every element in the set of matched elements before the target.</summary>\n    ///   <param name=\"target\" type=\"jQuery\">A selector, element, HTML string, or jQuery object; the matched set of elements will be inserted before the element(s) specified by this parameter.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'is': function() {\n    /// <signature>\n    ///   <summary>Check the current matched set of elements against a selector, element, or jQuery object and return true if at least one of these elements matches the given arguments.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <returns type=\"Boolean\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Check the current matched set of elements against a selector, element, or jQuery object and return true if at least one of these elements matches the given arguments.</summary>\n    ///   <param name=\"function(index)\" type=\"Function\">A function used as a test for the set of elements. It accepts one argument, index, which is the element's index in the jQuery collection.Within the function, this refers to the current DOM element.</param>\n    ///   <returns type=\"Boolean\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Check the current matched set of elements against a selector, element, or jQuery object and return true if at least one of these elements matches the given arguments.</summary>\n    ///   <param name=\"jQuery object\" type=\"Object\">An existing jQuery object to match the current set of elements against.</param>\n    ///   <returns type=\"Boolean\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Check the current matched set of elements against a selector, element, or jQuery object and return true if at least one of these elements matches the given arguments.</summary>\n    ///   <param name=\"element\" type=\"Element\">An element to match the current set of elements against.</param>\n    ///   <returns type=\"Boolean\" />\n    /// </signature>\n  },\n  'jquery': function() {\n    /// <summary>A string containing the jQuery version number.</summary>\n    /// <returns type=\"String\" />\n  },\n  'keydown': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"keydown\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"keydown\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"eventData\" type=\"PlainObject\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'keypress': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"keypress\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"keypress\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"eventData\" type=\"PlainObject\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'keyup': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"keyup\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"keyup\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"eventData\" type=\"PlainObject\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'lang': function() {\n    /// <signature>\n    ///   <summary>Selects all elements of the specified language.</summary>\n    ///   <param name=\"language\" type=\"String\">A language code.</param>\n    /// </signature>\n  },\n  'last': function() {\n    /// <summary>Selects the last matched element.</summary>\n  },\n  'last-child': function() {\n    /// <summary>Selects all elements that are the last child of their parent.</summary>\n  },\n  'last-of-type': function() {\n    /// <summary>Selects all elements that are the last among siblings of the same element name.</summary>\n  },\n  'length': function() {\n    /// <summary>The number of elements in the jQuery object.</summary>\n    /// <returns type=\"Number\" />\n  },\n  'live': function() {\n    /// <signature>\n    ///   <summary>Attach an event handler for all elements which match the current selector, now and in the future.</summary>\n    ///   <param name=\"events\" type=\"String\">A string containing a JavaScript event type, such as \"click\" or \"keydown.\" As of jQuery 1.4 the string can contain multiple, space-separated event types or custom event names.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute at the time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Attach an event handler for all elements which match the current selector, now and in the future.</summary>\n    ///   <param name=\"events\" type=\"String\">A string containing a JavaScript event type, such as \"click\" or \"keydown.\" As of jQuery 1.4 the string can contain multiple, space-separated event types or custom event names.</param>\n    ///   <param name=\"data\" type=\"PlainObject\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute at the time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Attach an event handler for all elements which match the current selector, now and in the future.</summary>\n    ///   <param name=\"events\" type=\"PlainObject\">A plain object of one or more JavaScript event types and functions to execute for them.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'load': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"load\" JavaScript event.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute when the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"load\" JavaScript event.</summary>\n    ///   <param name=\"eventData\" type=\"PlainObject\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'lt': function() {\n    /// <signature>\n    ///   <summary>Select all elements at an index less than index within the matched set.</summary>\n    ///   <param name=\"index\" type=\"Number\">Zero-based index.</param>\n    /// </signature>\n  },\n  'map': function() {\n    /// <signature>\n    ///   <summary>Pass each element in the current matched set through a function, producing a new jQuery object containing the return values.</summary>\n    ///   <param name=\"callback(index, domElement)\" type=\"Function\">A function object that will be invoked for each element in the current set.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'mousedown': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"mousedown\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"mousedown\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"eventData\" type=\"PlainObject\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'mouseenter': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to be fired when the mouse enters an element, or trigger that handler on an element.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to be fired when the mouse enters an element, or trigger that handler on an element.</summary>\n    ///   <param name=\"eventData\" type=\"PlainObject\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'mouseleave': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to be fired when the mouse leaves an element, or trigger that handler on an element.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to be fired when the mouse leaves an element, or trigger that handler on an element.</summary>\n    ///   <param name=\"eventData\" type=\"PlainObject\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'mousemove': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"mousemove\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"mousemove\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"eventData\" type=\"PlainObject\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'mouseout': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"mouseout\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"mouseout\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"eventData\" type=\"PlainObject\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'mouseover': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"mouseover\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"mouseover\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"eventData\" type=\"PlainObject\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'mouseup': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"mouseup\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"mouseup\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"eventData\" type=\"PlainObject\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'multiple': function() {\n    /// <signature>\n    ///   <summary>Selects the combined results of all the specified selectors.</summary>\n    ///   <param name=\"selector1\" type=\"String\">Any valid selector.</param>\n    ///   <param name=\"selector2\" type=\"String\">Another valid selector.</param>\n    ///   <param name=\"selectorN\" type=\"String\">As many more valid selectors as you like.</param>\n    /// </signature>\n  },\n  'next': function() {\n    /// <signature>\n    ///   <summary>Get the immediately following sibling of each element in the set of matched elements. If a selector is provided, it retrieves the next sibling only if it matches that selector.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'next adjacent': function() {\n    /// <signature>\n    ///   <summary>Selects all next elements matching \"next\" that are immediately preceded by a sibling \"prev\".</summary>\n    ///   <param name=\"prev\" type=\"String\">Any valid selector.</param>\n    ///   <param name=\"next\" type=\"String\">A selector to match the element that is next to the first selector.</param>\n    /// </signature>\n  },\n  'next siblings': function() {\n    /// <signature>\n    ///   <summary>Selects all sibling elements that follow after the \"prev\" element, have the same parent, and match the filtering \"siblings\" selector.</summary>\n    ///   <param name=\"prev\" type=\"String\">Any valid selector.</param>\n    ///   <param name=\"siblings\" type=\"String\">A selector to filter elements that are the following siblings of the first selector.</param>\n    /// </signature>\n  },\n  'nextAll': function() {\n    /// <signature>\n    ///   <summary>Get all following siblings of each element in the set of matched elements, optionally filtered by a selector.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'nextUntil': function() {\n    /// <signature>\n    ///   <summary>Get all following siblings of each element up to but not including the element matched by the selector, DOM node, or jQuery object passed.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression to indicate where to stop matching following sibling elements.</param>\n    ///   <param name=\"filter\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Get all following siblings of each element up to but not including the element matched by the selector, DOM node, or jQuery object passed.</summary>\n    ///   <param name=\"element\" type=\"Element\">A DOM node or jQuery object indicating where to stop matching following sibling elements.</param>\n    ///   <param name=\"filter\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'not': function() {\n    /// <signature>\n    ///   <summary>Remove elements from the set of matched elements.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Remove elements from the set of matched elements.</summary>\n    ///   <param name=\"elements\" type=\"Array\">One or more DOM elements to remove from the matched set.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Remove elements from the set of matched elements.</summary>\n    ///   <param name=\"function(index)\" type=\"Function\">A function used as a test for each element in the set. this is the current DOM element.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Remove elements from the set of matched elements.</summary>\n    ///   <param name=\"jQuery object\" type=\"PlainObject\">An existing jQuery object to match the current set of elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'nth-child': function() {\n    /// <signature>\n    ///   <summary>Selects all elements that are the nth-child of their parent.</summary>\n    ///   <param name=\"index\" type=\"String\">The index of each child to match, starting with 1, the string even or odd, or an equation ( eg. :nth-child(even), :nth-child(4n) )</param>\n    /// </signature>\n  },\n  'nth-last-child': function() {\n    /// <signature>\n    ///   <summary>Selects all elements that are the nth-child of their parent, counting from the last element to the first.</summary>\n    ///   <param name=\"index\" type=\"String\">The index of each child to match, starting with the last one (1), the string even or odd, or an equation ( eg. :nth-last-child(even), :nth-last-child(4n) )</param>\n    /// </signature>\n  },\n  'nth-last-of-type': function() {\n    /// <signature>\n    ///   <summary>Selects all elements that are the nth-child of their parent, counting from the last element to the first.</summary>\n    ///   <param name=\"index\" type=\"String\">The index of each child to match, starting with the last one (1), the string even or odd, or an equation ( eg. :nth-last-of-type(even), :nth-last-of-type(4n) )</param>\n    /// </signature>\n  },\n  'nth-of-type': function() {\n    /// <signature>\n    ///   <summary>Selects all elements that are the nth child of their parent in relation to siblings with the same element name.</summary>\n    ///   <param name=\"index\" type=\"String\">The index of each child to match, starting with 1, the string even or odd, or an equation ( eg. :nth-of-type(even), :nth-of-type(4n) )</param>\n    /// </signature>\n  },\n  'odd': function() {\n    /// <summary>Selects odd elements, zero-indexed.  See also even.</summary>\n  },\n  'off': function() {\n    /// <signature>\n    ///   <summary>Remove an event handler.</summary>\n    ///   <param name=\"events\" type=\"String\">One or more space-separated event types and optional namespaces, or just namespaces, such as \"click\", \"keydown.myPlugin\", or \".myPlugin\".</param>\n    ///   <param name=\"selector\" type=\"String\">A selector which should match the one originally passed to .on() when attaching event handlers.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A handler function previously attached for the event(s), or the special value false.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Remove an event handler.</summary>\n    ///   <param name=\"events\" type=\"PlainObject\">An object where the string keys represent one or more space-separated event types and optional namespaces, and the values represent handler functions previously attached for the event(s).</param>\n    ///   <param name=\"selector\" type=\"String\">A selector which should match the one originally passed to .on() when attaching event handlers.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'offset': function() {\n    /// <signature>\n    ///   <summary>Set the current coordinates of every element in the set of matched elements, relative to the document.</summary>\n    ///   <param name=\"coordinates\" type=\"PlainObject\">An object containing the properties top and left, which are integers indicating the new top and left coordinates for the elements.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Set the current coordinates of every element in the set of matched elements, relative to the document.</summary>\n    ///   <param name=\"function(index, coords)\" type=\"Function\">A function to return the coordinates to set. Receives the index of the element in the collection as the first argument and the current coordinates as the second argument. The function should return an object with the new top and left properties.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'offsetParent': function() {\n    /// <summary>Get the closest ancestor element that is positioned.</summary>\n    /// <returns type=\"jQuery\" />\n  },\n  'on': function() {\n    /// <signature>\n    ///   <summary>Attach an event handler function for one or more events to the selected elements.</summary>\n    ///   <param name=\"events\" type=\"String\">One or more space-separated event types and optional namespaces, such as \"click\" or \"keydown.myPlugin\".</param>\n    ///   <param name=\"selector\" type=\"String\">A selector string to filter the descendants of the selected elements that trigger the event. If the selector is null or omitted, the event is always triggered when it reaches the selected element.</param>\n    ///   <param name=\"data\" type=\"Anything\">Data to be passed to the handler in event.data when an event is triggered.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute when the event is triggered. The value false is also allowed as a shorthand for a function that simply does return false.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Attach an event handler function for one or more events to the selected elements.</summary>\n    ///   <param name=\"events\" type=\"PlainObject\">An object in which the string keys represent one or more space-separated event types and optional namespaces, and the values represent a handler function to be called for the event(s).</param>\n    ///   <param name=\"selector\" type=\"String\">A selector string to filter the descendants of the selected elements that will call the handler. If the selector is null or omitted, the handler is always called when it reaches the selected element.</param>\n    ///   <param name=\"data\" type=\"Anything\">Data to be passed to the handler in event.data when an event occurs.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'one': function() {\n    /// <signature>\n    ///   <summary>Attach a handler to an event for the elements. The handler is executed at most once per element.</summary>\n    ///   <param name=\"events\" type=\"String\">A string containing one or more JavaScript event types, such as \"click\" or \"submit,\" or custom event names.</param>\n    ///   <param name=\"data\" type=\"PlainObject\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute at the time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Attach a handler to an event for the elements. The handler is executed at most once per element.</summary>\n    ///   <param name=\"events\" type=\"String\">One or more space-separated event types and optional namespaces, such as \"click\" or \"keydown.myPlugin\".</param>\n    ///   <param name=\"selector\" type=\"String\">A selector string to filter the descendants of the selected elements that trigger the event. If the selector is null or omitted, the event is always triggered when it reaches the selected element.</param>\n    ///   <param name=\"data\" type=\"Anything\">Data to be passed to the handler in event.data when an event is triggered.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute when the event is triggered. The value false is also allowed as a shorthand for a function that simply does return false.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Attach a handler to an event for the elements. The handler is executed at most once per element.</summary>\n    ///   <param name=\"events\" type=\"PlainObject\">An object in which the string keys represent one or more space-separated event types and optional namespaces, and the values represent a handler function to be called for the event(s).</param>\n    ///   <param name=\"selector\" type=\"String\">A selector string to filter the descendants of the selected elements that will call the handler. If the selector is null or omitted, the handler is always called when it reaches the selected element.</param>\n    ///   <param name=\"data\" type=\"Anything\">Data to be passed to the handler in event.data when an event occurs.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'only-child': function() {\n    /// <summary>Selects all elements that are the only child of their parent.</summary>\n  },\n  'only-of-type': function() {\n    /// <summary>Selects all elements that have no siblings with the same element name.</summary>\n  },\n  'outerHeight': function() {\n    /// <signature>\n    ///   <summary>Get the current computed height for the first element in the set of matched elements, including padding, border, and optionally margin. Returns an integer (without \"px\") representation of the value or null if called on an empty set of elements.</summary>\n    ///   <param name=\"includeMargin\" type=\"Boolean\">A Boolean indicating whether to include the element's margin in the calculation.</param>\n    ///   <returns type=\"Integer\" />\n    /// </signature>\n  },\n  'outerWidth': function() {\n    /// <signature>\n    ///   <summary>Get the current computed width for the first element in the set of matched elements, including padding and border.</summary>\n    ///   <param name=\"includeMargin\" type=\"Boolean\">A Boolean indicating whether to include the element's margin in the calculation.</param>\n    ///   <returns type=\"Integer\" />\n    /// </signature>\n  },\n  'parent': function() {\n    /// <signature>\n    ///   <summary>Get the parent of each element in the current set of matched elements, optionally filtered by a selector.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'parents': function() {\n    /// <signature>\n    ///   <summary>Get the ancestors of each element in the current set of matched elements, optionally filtered by a selector.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'parentsUntil': function() {\n    /// <signature>\n    ///   <summary>Get the ancestors of each element in the current set of matched elements, up to but not including the element matched by the selector, DOM node, or jQuery object.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression to indicate where to stop matching ancestor elements.</param>\n    ///   <param name=\"filter\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Get the ancestors of each element in the current set of matched elements, up to but not including the element matched by the selector, DOM node, or jQuery object.</summary>\n    ///   <param name=\"element\" type=\"Element\">A DOM node or jQuery object indicating where to stop matching ancestor elements.</param>\n    ///   <param name=\"filter\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'password': function() {\n    /// <summary>Selects all elements of type password.</summary>\n  },\n  'position': function() {\n    /// <summary>Get the current coordinates of the first element in the set of matched elements, relative to the offset parent.</summary>\n    /// <returns type=\"Object\" />\n  },\n  'prepend': function() {\n    /// <signature>\n    ///   <summary>Insert content, specified by the parameter, to the beginning of each element in the set of matched elements.</summary>\n    ///   <param name=\"content\" type=\"jQuery\">DOM element, array of elements, HTML string, or jQuery object to insert at the beginning of each element in the set of matched elements.</param>\n    ///   <param name=\"content\" type=\"jQuery\">One or more additional DOM elements, arrays of elements, HTML strings, or jQuery objects to insert at the beginning of each element in the set of matched elements.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Insert content, specified by the parameter, to the beginning of each element in the set of matched elements.</summary>\n    ///   <param name=\"function(index, html)\" type=\"Function\">A function that returns an HTML string, DOM element(s), or jQuery object to insert at the beginning of each element in the set of matched elements. Receives the index position of the element in the set and the old HTML value of the element as arguments. Within the function, this refers to the current element in the set.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'prependTo': function() {\n    /// <signature>\n    ///   <summary>Insert every element in the set of matched elements to the beginning of the target.</summary>\n    ///   <param name=\"target\" type=\"jQuery\">A selector, element, HTML string, or jQuery object; the matched set of elements will be inserted at the beginning of the element(s) specified by this parameter.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'prev': function() {\n    /// <signature>\n    ///   <summary>Get the immediately preceding sibling of each element in the set of matched elements, optionally filtered by a selector.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'prevAll': function() {\n    /// <signature>\n    ///   <summary>Get all preceding siblings of each element in the set of matched elements, optionally filtered by a selector.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'prevUntil': function() {\n    /// <signature>\n    ///   <summary>Get all preceding siblings of each element up to but not including the element matched by the selector, DOM node, or jQuery object.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression to indicate where to stop matching preceding sibling elements.</param>\n    ///   <param name=\"filter\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Get all preceding siblings of each element up to but not including the element matched by the selector, DOM node, or jQuery object.</summary>\n    ///   <param name=\"element\" type=\"Element\">A DOM node or jQuery object indicating where to stop matching preceding sibling elements.</param>\n    ///   <param name=\"filter\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'promise': function() {\n    /// <signature>\n    ///   <summary>Return a Promise object to observe when all actions of a certain type bound to the collection, queued or not, have finished.</summary>\n    ///   <param name=\"type\" type=\"String\">The type of queue that needs to be observed.</param>\n    ///   <param name=\"target\" type=\"PlainObject\">Object onto which the promise methods have to be attached</param>\n    ///   <returns type=\"Promise\" />\n    /// </signature>\n  },\n  'prop': function() {\n    /// <signature>\n    ///   <summary>Set one or more properties for the set of matched elements.</summary>\n    ///   <param name=\"propertyName\" type=\"String\">The name of the property to set.</param>\n    ///   <param name=\"value\" type=\"Boolean\">A value to set for the property.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Set one or more properties for the set of matched elements.</summary>\n    ///   <param name=\"properties\" type=\"PlainObject\">An object of property-value pairs to set.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Set one or more properties for the set of matched elements.</summary>\n    ///   <param name=\"propertyName\" type=\"String\">The name of the property to set.</param>\n    ///   <param name=\"function(index, oldPropertyValue)\" type=\"Function\">A function returning the value to set. Receives the index position of the element in the set and the old property value as arguments. Within the function, the keyword this refers to the current element.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'pushStack': function() {\n    /// <signature>\n    ///   <summary>Add a collection of DOM elements onto the jQuery stack.</summary>\n    ///   <param name=\"elements\" type=\"Array\">An array of elements to push onto the stack and make into a new jQuery object.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Add a collection of DOM elements onto the jQuery stack.</summary>\n    ///   <param name=\"elements\" type=\"Array\">An array of elements to push onto the stack and make into a new jQuery object.</param>\n    ///   <param name=\"name\" type=\"String\">The name of a jQuery method that generated the array of elements.</param>\n    ///   <param name=\"arguments\" type=\"Array\">The arguments that were passed in to the jQuery method (for serialization).</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'queue': function() {\n    /// <signature>\n    ///   <summary>Manipulate the queue of functions to be executed, once for each matched element.</summary>\n    ///   <param name=\"queueName\" type=\"String\">A string containing the name of the queue. Defaults to fx, the standard effects queue.</param>\n    ///   <param name=\"newQueue\" type=\"Array\">An array of functions to replace the current queue contents.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Manipulate the queue of functions to be executed, once for each matched element.</summary>\n    ///   <param name=\"queueName\" type=\"String\">A string containing the name of the queue. Defaults to fx, the standard effects queue.</param>\n    ///   <param name=\"callback( next )\" type=\"Function\">The new function to add to the queue, with a function to call that will dequeue the next item.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'radio': function() {\n    /// <summary>Selects all  elements of type radio.</summary>\n  },\n  'ready': function() {\n    /// <signature>\n    ///   <summary>Specify a function to execute when the DOM is fully loaded.</summary>\n    ///   <param name=\"handler\" type=\"Function\">A function to execute after the DOM is ready.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'remove': function() {\n    /// <signature>\n    ///   <summary>Remove the set of matched elements from the DOM.</summary>\n    ///   <param name=\"selector\" type=\"String\">A selector expression that filters the set of matched elements to be removed.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'removeAttr': function() {\n    /// <signature>\n    ///   <summary>Remove an attribute from each element in the set of matched elements.</summary>\n    ///   <param name=\"attributeName\" type=\"String\">An attribute to remove; as of version 1.7, it can be a space-separated list of attributes.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'removeClass': function() {\n    /// <signature>\n    ///   <summary>Remove a single class, multiple classes, or all classes from each element in the set of matched elements.</summary>\n    ///   <param name=\"className\" type=\"String\">One or more space-separated classes to be removed from the class attribute of each matched element.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Remove a single class, multiple classes, or all classes from each element in the set of matched elements.</summary>\n    ///   <param name=\"function(index, class)\" type=\"Function\">A function returning one or more space-separated class names to be removed. Receives the index position of the element in the set and the old class value as arguments.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'removeData': function() {\n    /// <signature>\n    ///   <summary>Remove a previously-stored piece of data.</summary>\n    ///   <param name=\"name\" type=\"String\">A string naming the piece of data to delete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Remove a previously-stored piece of data.</summary>\n    ///   <param name=\"list\" type=\"String\">An array or space-separated string naming the pieces of data to delete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'removeProp': function() {\n    /// <signature>\n    ///   <summary>Remove a property for the set of matched elements.</summary>\n    ///   <param name=\"propertyName\" type=\"String\">The name of the property to remove.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'replaceAll': function() {\n    /// <signature>\n    ///   <summary>Replace each target element with the set of matched elements.</summary>\n    ///   <param name=\"target\" type=\"String\">A selector expression indicating which element(s) to replace.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'replaceWith': function() {\n    /// <signature>\n    ///   <summary>Replace each element in the set of matched elements with the provided new content and return the set of elements that was removed.</summary>\n    ///   <param name=\"newContent\" type=\"jQuery\">The content to insert. May be an HTML string, DOM element, or jQuery object.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Replace each element in the set of matched elements with the provided new content and return the set of elements that was removed.</summary>\n    ///   <param name=\"function\" type=\"Function\">A function that returns content with which to replace the set of matched elements.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'reset': function() {\n    /// <summary>Selects all elements of type reset.</summary>\n  },\n  'resize': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"resize\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"resize\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"eventData\" type=\"PlainObject\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'root': function() {\n    /// <signature>\n    ///   <summary>Selects the element that is the root of the document.</summary>\n    ///   <param name=\"index\" type=\"String\">The index of each child to match, starting with 1, the string even or odd, or an equation ( eg. :nth-last-child(even), :nth-last-child(4n) )</param>\n    /// </signature>\n  },\n  'scroll': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"scroll\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"scroll\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"eventData\" type=\"PlainObject\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'scrollLeft': function() {\n    /// <signature>\n    ///   <summary>Set the current horizontal position of the scroll bar for each of the set of matched elements.</summary>\n    ///   <param name=\"value\" type=\"Number\">An integer indicating the new position to set the scroll bar to.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'scrollTop': function() {\n    /// <signature>\n    ///   <summary>Set the current vertical position of the scroll bar for each of the set of matched elements.</summary>\n    ///   <param name=\"value\" type=\"Number\">An integer indicating the new position to set the scroll bar to.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'select': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"select\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"select\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"eventData\" type=\"PlainObject\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'selected': function() {\n    /// <summary>Selects all elements that are selected.</summary>\n  },\n  'selector': function() {\n    /// <summary>A selector representing selector originally passed to jQuery().</summary>\n    /// <returns type=\"String\" />\n  },\n  'serialize': function() {\n    /// <summary>Encode a set of form elements as a string for submission.</summary>\n    /// <returns type=\"String\" />\n  },\n  'serializeArray': function() {\n    /// <summary>Encode a set of form elements as an array of names and values.</summary>\n    /// <returns type=\"Array\" />\n  },\n  'show': function() {\n    /// <signature>\n    ///   <summary>Display the matched elements.</summary>\n    ///   <param name=\"duration\" type=\"\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"complete\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Display the matched elements.</summary>\n    ///   <param name=\"options\" type=\"PlainObject\">A map of additional options to pass to the method.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Display the matched elements.</summary>\n    ///   <param name=\"duration\" type=\"\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"easing\" type=\"String\">A string indicating which easing function to use for the transition.</param>\n    ///   <param name=\"complete\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'siblings': function() {\n    /// <signature>\n    ///   <summary>Get the siblings of each element in the set of matched elements, optionally filtered by a selector.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'size': function() {\n    /// <summary>Return the number of elements in the jQuery object.</summary>\n    /// <returns type=\"Number\" />\n  },\n  'slice': function() {\n    /// <signature>\n    ///   <summary>Reduce the set of matched elements to a subset specified by a range of indices.</summary>\n    ///   <param name=\"start\" type=\"Number\">An integer indicating the 0-based position at which the elements begin to be selected. If negative, it indicates an offset from the end of the set.</param>\n    ///   <param name=\"end\" type=\"Number\">An integer indicating the 0-based position at which the elements stop being selected. If negative, it indicates an offset from the end of the set. If omitted, the range continues until the end of the set.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'slideDown': function() {\n    /// <signature>\n    ///   <summary>Display the matched elements with a sliding motion.</summary>\n    ///   <param name=\"duration\" type=\"\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"complete\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Display the matched elements with a sliding motion.</summary>\n    ///   <param name=\"options\" type=\"PlainObject\">A map of additional options to pass to the method.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Display the matched elements with a sliding motion.</summary>\n    ///   <param name=\"duration\" type=\"\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"easing\" type=\"String\">A string indicating which easing function to use for the transition.</param>\n    ///   <param name=\"complete\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'slideToggle': function() {\n    /// <signature>\n    ///   <summary>Display or hide the matched elements with a sliding motion.</summary>\n    ///   <param name=\"duration\" type=\"\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"complete\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Display or hide the matched elements with a sliding motion.</summary>\n    ///   <param name=\"options\" type=\"PlainObject\">A map of additional options to pass to the method.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Display or hide the matched elements with a sliding motion.</summary>\n    ///   <param name=\"duration\" type=\"\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"easing\" type=\"String\">A string indicating which easing function to use for the transition.</param>\n    ///   <param name=\"complete\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'slideUp': function() {\n    /// <signature>\n    ///   <summary>Hide the matched elements with a sliding motion.</summary>\n    ///   <param name=\"duration\" type=\"\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"complete\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Hide the matched elements with a sliding motion.</summary>\n    ///   <param name=\"options\" type=\"PlainObject\">A map of additional options to pass to the method.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Hide the matched elements with a sliding motion.</summary>\n    ///   <param name=\"duration\" type=\"\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"easing\" type=\"String\">A string indicating which easing function to use for the transition.</param>\n    ///   <param name=\"complete\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'stop': function() {\n    /// <signature>\n    ///   <summary>Stop the currently-running animation on the matched elements.</summary>\n    ///   <param name=\"clearQueue\" type=\"Boolean\">A Boolean indicating whether to remove queued animation as well. Defaults to false.</param>\n    ///   <param name=\"jumpToEnd\" type=\"Boolean\">A Boolean indicating whether to complete the current animation immediately. Defaults to false.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Stop the currently-running animation on the matched elements.</summary>\n    ///   <param name=\"queue\" type=\"String\">The name of the queue in which to stop animations.</param>\n    ///   <param name=\"clearQueue\" type=\"Boolean\">A Boolean indicating whether to remove queued animation as well. Defaults to false.</param>\n    ///   <param name=\"jumpToEnd\" type=\"Boolean\">A Boolean indicating whether to complete the current animation immediately. Defaults to false.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'submit': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"submit\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"submit\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"eventData\" type=\"PlainObject\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'target': function() {\n    /// <summary>Selects the target element indicated by the fragment identifier of the document's URI.</summary>\n  },\n  'text': function() {\n    /// <signature>\n    ///   <summary>Set the content of each element in the set of matched elements to the specified text.</summary>\n    ///   <param name=\"textString\" type=\"String\">A string of text to set as the content of each matched element.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Set the content of each element in the set of matched elements to the specified text.</summary>\n    ///   <param name=\"function(index, text)\" type=\"Function\">A function returning the text content to set. Receives the index position of the element in the set and the old text value as arguments.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'toArray': function() {\n    /// <summary>Retrieve all the DOM elements contained in the jQuery set, as an array.</summary>\n    /// <returns type=\"Array\" />\n  },\n  'toggle': function() {\n    /// <signature>\n    ///   <summary>Display or hide the matched elements.</summary>\n    ///   <param name=\"duration\" type=\"\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"complete\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Display or hide the matched elements.</summary>\n    ///   <param name=\"options\" type=\"PlainObject\">A map of additional options to pass to the method.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Display or hide the matched elements.</summary>\n    ///   <param name=\"duration\" type=\"\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"easing\" type=\"String\">A string indicating which easing function to use for the transition.</param>\n    ///   <param name=\"complete\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Display or hide the matched elements.</summary>\n    ///   <param name=\"showOrHide\" type=\"Boolean\">A Boolean indicating whether to show or hide the elements.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'toggleClass': function() {\n    /// <signature>\n    ///   <summary>Add or remove one or more classes from each element in the set of matched elements, depending on either the class's presence or the value of the switch argument.</summary>\n    ///   <param name=\"className\" type=\"String\">One or more class names (separated by spaces) to be toggled for each element in the matched set.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Add or remove one or more classes from each element in the set of matched elements, depending on either the class's presence or the value of the switch argument.</summary>\n    ///   <param name=\"className\" type=\"String\">One or more class names (separated by spaces) to be toggled for each element in the matched set.</param>\n    ///   <param name=\"switch\" type=\"Boolean\">A Boolean (not just truthy/falsy) value to determine whether the class should be added or removed.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Add or remove one or more classes from each element in the set of matched elements, depending on either the class's presence or the value of the switch argument.</summary>\n    ///   <param name=\"switch\" type=\"Boolean\">A boolean value to determine whether the class should be added or removed.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Add or remove one or more classes from each element in the set of matched elements, depending on either the class's presence or the value of the switch argument.</summary>\n    ///   <param name=\"function(index, class, switch)\" type=\"Function\">A function that returns class names to be toggled in the class attribute of each element in the matched set. Receives the index position of the element in the set, the old class value, and the switch as arguments.</param>\n    ///   <param name=\"switch\" type=\"Boolean\">A boolean value to determine whether the class should be added or removed.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'trigger': function() {\n    /// <signature>\n    ///   <summary>Execute all handlers and behaviors attached to the matched elements for the given event type.</summary>\n    ///   <param name=\"eventType\" type=\"String\">A string containing a JavaScript event type, such as click or submit.</param>\n    ///   <param name=\"extraParameters\" type=\"PlainObject\">Additional parameters to pass along to the event handler.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Execute all handlers and behaviors attached to the matched elements for the given event type.</summary>\n    ///   <param name=\"event\" type=\"Event\">A jQuery.Event object.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'triggerHandler': function() {\n    /// <signature>\n    ///   <summary>Execute all handlers attached to an element for an event.</summary>\n    ///   <param name=\"eventType\" type=\"String\">A string containing a JavaScript event type, such as click or submit.</param>\n    ///   <param name=\"extraParameters\" type=\"Array\">An array of additional parameters to pass along to the event handler.</param>\n    ///   <returns type=\"Object\" />\n    /// </signature>\n  },\n  'unbind': function() {\n    /// <signature>\n    ///   <summary>Remove a previously-attached event handler from the elements.</summary>\n    ///   <param name=\"eventType\" type=\"String\">A string containing a JavaScript event type, such as click or submit.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">The function that is to be no longer executed.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Remove a previously-attached event handler from the elements.</summary>\n    ///   <param name=\"eventType\" type=\"String\">A string containing a JavaScript event type, such as click or submit.</param>\n    ///   <param name=\"false\" type=\"Boolean\">Unbinds the corresponding 'return false' function that was bound using .bind( eventType, false ).</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Remove a previously-attached event handler from the elements.</summary>\n    ///   <param name=\"event\" type=\"Object\">A JavaScript event object as passed to an event handler.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'undelegate': function() {\n    /// <signature>\n    ///   <summary>Remove a handler from the event for all elements which match the current selector, based upon a specific set of root elements.</summary>\n    ///   <param name=\"selector\" type=\"String\">A selector which will be used to filter the event results.</param>\n    ///   <param name=\"eventType\" type=\"String\">A string containing a JavaScript event type, such as \"click\" or \"keydown\"</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Remove a handler from the event for all elements which match the current selector, based upon a specific set of root elements.</summary>\n    ///   <param name=\"selector\" type=\"String\">A selector which will be used to filter the event results.</param>\n    ///   <param name=\"eventType\" type=\"String\">A string containing a JavaScript event type, such as \"click\" or \"keydown\"</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute at the time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Remove a handler from the event for all elements which match the current selector, based upon a specific set of root elements.</summary>\n    ///   <param name=\"selector\" type=\"String\">A selector which will be used to filter the event results.</param>\n    ///   <param name=\"events\" type=\"PlainObject\">An object of one or more event types and previously bound functions to unbind from them.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Remove a handler from the event for all elements which match the current selector, based upon a specific set of root elements.</summary>\n    ///   <param name=\"namespace\" type=\"String\">A string containing a namespace to unbind all events from.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'unload': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"unload\" JavaScript event.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute when the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"unload\" JavaScript event.</summary>\n    ///   <param name=\"eventData\" type=\"Object\">A plain object of data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'unwrap': function() {\n    /// <summary>Remove the parents of the set of matched elements from the DOM, leaving the matched elements in their place.</summary>\n    /// <returns type=\"jQuery\" />\n  },\n  'val': function() {\n    /// <signature>\n    ///   <summary>Set the value of each element in the set of matched elements.</summary>\n    ///   <param name=\"value\" type=\"Array\">A string of text or an array of strings corresponding to the value of each matched element to set as selected/checked.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Set the value of each element in the set of matched elements.</summary>\n    ///   <param name=\"function(index, value)\" type=\"Function\">A function returning the value to set. this is the current element. Receives the index position of the element in the set and the old value as arguments.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'visible': function() {\n    /// <summary>Selects all elements that are visible.</summary>\n  },\n  'width': function() {\n    /// <signature>\n    ///   <summary>Set the CSS width of each element in the set of matched elements.</summary>\n    ///   <param name=\"value\" type=\"Number\">An integer representing the number of pixels, or an integer along with an optional unit of measure appended (as a string).</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Set the CSS width of each element in the set of matched elements.</summary>\n    ///   <param name=\"function(index, width)\" type=\"Function\">A function returning the width to set. Receives the index position of the element in the set and the old width as arguments. Within the function, this refers to the current element in the set.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'wrap': function() {\n    /// <signature>\n    ///   <summary>Wrap an HTML structure around each element in the set of matched elements.</summary>\n    ///   <param name=\"wrappingElement\" type=\"jQuery\">An HTML snippet, selector expression, jQuery object, or DOM element specifying the structure to wrap around the matched elements.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Wrap an HTML structure around each element in the set of matched elements.</summary>\n    ///   <param name=\"function(index)\" type=\"Function\">A callback function returning the HTML content or jQuery object to wrap around the matched elements. Receives the index position of the element in the set as an argument. Within the function, this refers to the current element in the set.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'wrapAll': function() {\n    /// <signature>\n    ///   <summary>Wrap an HTML structure around all elements in the set of matched elements.</summary>\n    ///   <param name=\"wrappingElement\" type=\"jQuery\">An HTML snippet, selector expression, jQuery object, or DOM element specifying the structure to wrap around the matched elements.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'wrapInner': function() {\n    /// <signature>\n    ///   <summary>Wrap an HTML structure around the content of each element in the set of matched elements.</summary>\n    ///   <param name=\"wrappingElement\" type=\"String\">An HTML snippet, selector expression, jQuery object, or DOM element specifying the structure to wrap around the content of the matched elements.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Wrap an HTML structure around the content of each element in the set of matched elements.</summary>\n    ///   <param name=\"function(index)\" type=\"Function\">A callback function which generates a structure to wrap around the content of the matched elements. Receives the index position of the element in the set as an argument. Within the function, this refers to the current element in the set.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n});\n\nintellisense.annotate(window, {\n  '$': function() {\n    /// <signature>\n    ///   <summary>Accepts a string containing a CSS selector which is then used to match a set of elements.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression</param>\n    ///   <param name=\"context\" type=\"jQuery\">A DOM Element, Document, or jQuery to use as context</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Accepts a string containing a CSS selector which is then used to match a set of elements.</summary>\n    ///   <param name=\"element\" type=\"Element\">A DOM element to wrap in a jQuery object.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Accepts a string containing a CSS selector which is then used to match a set of elements.</summary>\n    ///   <param name=\"elementArray\" type=\"Array\">An array containing a set of DOM elements to wrap in a jQuery object.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Accepts a string containing a CSS selector which is then used to match a set of elements.</summary>\n    ///   <param name=\"object\" type=\"PlainObject\">A plain object to wrap in a jQuery object.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Accepts a string containing a CSS selector which is then used to match a set of elements.</summary>\n    ///   <param name=\"jQuery object\" type=\"PlainObject\">An existing jQuery object to clone.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n});\n\n"
  },
  {
    "path": "AlexaSkillsKit.Sample/Scripts/jquery-1.10.2.js",
    "content": "/* NUGET: BEGIN LICENSE TEXT\n *\n * Microsoft grants you the right to use these script files for the sole\n * purpose of either: (i) interacting through your browser with the Microsoft\n * website or online service, subject to the applicable licensing or use\n * terms; or (ii) using the files as included with a Microsoft product subject\n * to that product's license terms. Microsoft reserves all other rights to the\n * files not expressly granted by Microsoft, whether by implication, estoppel\n * or otherwise. Insofar as a script file is dual licensed under GPL,\n * Microsoft neither took the code under GPL nor distributes it thereunder but\n * under the terms set out in this paragraph. All notices and licenses\n * below are for informational purposes only.\n *\n * NUGET: END LICENSE TEXT */\n/*!\n * jQuery JavaScript Library v1.10.2\n * http://jquery.com/\n *\n * Includes Sizzle.js\n * http://sizzlejs.com/\n *\n * Copyright 2005, 2013 jQuery Foundation, Inc. and other contributors\n * Released under the MIT license\n * http://jquery.org/license\n *\n * Date: 2013-07-03T13:48Z\n */\n(function( window, undefined ) {\n\n// Can't do this because several apps including ASP.NET trace\n// the stack via arguments.caller.callee and Firefox dies if\n// you try to trace through \"use strict\" call chains. (#13335)\n// Support: Firefox 18+\n//\"use strict\";\nvar\n\t// The deferred used on DOM ready\n\treadyList,\n\n\t// A central reference to the root jQuery(document)\n\trootjQuery,\n\n\t// Support: IE<10\n\t// For `typeof xmlNode.method` instead of `xmlNode.method !== undefined`\n\tcore_strundefined = typeof undefined,\n\n\t// Use the correct document accordingly with window argument (sandbox)\n\tlocation = window.location,\n\tdocument = window.document,\n\tdocElem = document.documentElement,\n\n\t// Map over jQuery in case of overwrite\n\t_jQuery = window.jQuery,\n\n\t// Map over the $ in case of overwrite\n\t_$ = window.$,\n\n\t// [[Class]] -> type pairs\n\tclass2type = {},\n\n\t// List of deleted data cache ids, so we can reuse them\n\tcore_deletedIds = [],\n\n\tcore_version = \"1.10.2\",\n\n\t// Save a reference to some core methods\n\tcore_concat = core_deletedIds.concat,\n\tcore_push = core_deletedIds.push,\n\tcore_slice = core_deletedIds.slice,\n\tcore_indexOf = core_deletedIds.indexOf,\n\tcore_toString = class2type.toString,\n\tcore_hasOwn = class2type.hasOwnProperty,\n\tcore_trim = core_version.trim,\n\n\t// Define a local copy of jQuery\n\tjQuery = function( selector, context ) {\n\t\t// The jQuery object is actually just the init constructor 'enhanced'\n\t\treturn new jQuery.fn.init( selector, context, rootjQuery );\n\t},\n\n\t// Used for matching numbers\n\tcore_pnum = /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/.source,\n\n\t// Used for splitting on whitespace\n\tcore_rnotwhite = /\\S+/g,\n\n\t// Make sure we trim BOM and NBSP (here's looking at you, Safari 5.0 and IE)\n\trtrim = /^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g,\n\n\t// A simple way to check for HTML strings\n\t// Prioritize #id over <tag> to avoid XSS via location.hash (#9521)\n\t// Strict HTML recognition (#11290: must start with <)\n\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]*))$/,\n\n\t// Match a standalone tag\n\trsingleTag = /^<(\\w+)\\s*\\/?>(?:<\\/\\1>|)$/,\n\n\t// JSON RegExp\n\trvalidchars = /^[\\],:{}\\s]*$/,\n\trvalidbraces = /(?:^|:|,)(?:\\s*\\[)+/g,\n\trvalidescape = /\\\\(?:[\"\\\\\\/bfnrt]|u[\\da-fA-F]{4})/g,\n\trvalidtokens = /\"[^\"\\\\\\r\\n]*\"|true|false|null|-?(?:\\d+\\.|)\\d+(?:[eE][+-]?\\d+|)/g,\n\n\t// Matches dashed string for camelizing\n\trmsPrefix = /^-ms-/,\n\trdashAlpha = /-([\\da-z])/gi,\n\n\t// Used by jQuery.camelCase as callback to replace()\n\tfcamelCase = function( all, letter ) {\n\t\treturn letter.toUpperCase();\n\t},\n\n\t// The ready event handler\n\tcompleted = function( event ) {\n\n\t\t// readyState === \"complete\" is good enough for us to call the dom ready in oldIE\n\t\tif ( document.addEventListener || event.type === \"load\" || document.readyState === \"complete\" ) {\n\t\t\tdetach();\n\t\t\tjQuery.ready();\n\t\t}\n\t},\n\t// Clean-up method for dom ready events\n\tdetach = function() {\n\t\tif ( document.addEventListener ) {\n\t\t\tdocument.removeEventListener( \"DOMContentLoaded\", completed, false );\n\t\t\twindow.removeEventListener( \"load\", completed, false );\n\n\t\t} else {\n\t\t\tdocument.detachEvent( \"onreadystatechange\", completed );\n\t\t\twindow.detachEvent( \"onload\", completed );\n\t\t}\n\t};\n\njQuery.fn = jQuery.prototype = {\n\t// The current version of jQuery being used\n\tjquery: core_version,\n\n\tconstructor: jQuery,\n\tinit: function( selector, context, rootjQuery ) {\n\t\tvar match, elem;\n\n\t\t// HANDLE: $(\"\"), $(null), $(undefined), $(false)\n\t\tif ( !selector ) {\n\t\t\treturn this;\n\t\t}\n\n\t\t// Handle HTML strings\n\t\tif ( typeof selector === \"string\" ) {\n\t\t\tif ( selector.charAt(0) === \"<\" && selector.charAt( selector.length - 1 ) === \">\" && selector.length >= 3 ) {\n\t\t\t\t// Assume that strings that start and end with <> are HTML and skip the regex check\n\t\t\t\tmatch = [ null, selector, null ];\n\n\t\t\t} else {\n\t\t\t\tmatch = rquickExpr.exec( selector );\n\t\t\t}\n\n\t\t\t// Match html or make sure no context is specified for #id\n\t\t\tif ( match && (match[1] || !context) ) {\n\n\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\tif ( match[1] ) {\n\t\t\t\t\tcontext = context instanceof jQuery ? context[0] : context;\n\n\t\t\t\t\t// scripts is true for back-compat\n\t\t\t\t\tjQuery.merge( this, jQuery.parseHTML(\n\t\t\t\t\t\tmatch[1],\n\t\t\t\t\t\tcontext && context.nodeType ? context.ownerDocument || context : document,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t) );\n\n\t\t\t\t\t// HANDLE: $(html, props)\n\t\t\t\t\tif ( rsingleTag.test( match[1] ) && jQuery.isPlainObject( context ) ) {\n\t\t\t\t\t\tfor ( match in context ) {\n\t\t\t\t\t\t\t// Properties of context are called as methods if possible\n\t\t\t\t\t\t\tif ( jQuery.isFunction( this[ match ] ) ) {\n\t\t\t\t\t\t\t\tthis[ match ]( context[ match ] );\n\n\t\t\t\t\t\t\t// ...and otherwise set as attributes\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.attr( match, context[ match ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn this;\n\n\t\t\t\t// HANDLE: $(#id)\n\t\t\t\t} else {\n\t\t\t\t\telem = document.getElementById( match[2] );\n\n\t\t\t\t\t// Check parentNode to catch when Blackberry 4.6 returns\n\t\t\t\t\t// nodes that are no longer in the document #6963\n\t\t\t\t\tif ( elem && elem.parentNode ) {\n\t\t\t\t\t\t// Handle the case where IE and Opera return items\n\t\t\t\t\t\t// by name instead of ID\n\t\t\t\t\t\tif ( elem.id !== match[2] ) {\n\t\t\t\t\t\t\treturn rootjQuery.find( selector );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Otherwise, we inject the element directly into the jQuery object\n\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t\tthis[0] = elem;\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.context = document;\n\t\t\t\t\tthis.selector = selector;\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\n\t\t\t// HANDLE: $(expr, $(...))\n\t\t\t} else if ( !context || context.jquery ) {\n\t\t\t\treturn ( context || rootjQuery ).find( selector );\n\n\t\t\t// HANDLE: $(expr, context)\n\t\t\t// (which is just equivalent to: $(context).find(expr)\n\t\t\t} else {\n\t\t\t\treturn this.constructor( context ).find( selector );\n\t\t\t}\n\n\t\t// HANDLE: $(DOMElement)\n\t\t} else if ( selector.nodeType ) {\n\t\t\tthis.context = this[0] = selector;\n\t\t\tthis.length = 1;\n\t\t\treturn this;\n\n\t\t// HANDLE: $(function)\n\t\t// Shortcut for document ready\n\t\t} else if ( jQuery.isFunction( selector ) ) {\n\t\t\treturn rootjQuery.ready( selector );\n\t\t}\n\n\t\tif ( selector.selector !== undefined ) {\n\t\t\tthis.selector = selector.selector;\n\t\t\tthis.context = selector.context;\n\t\t}\n\n\t\treturn jQuery.makeArray( selector, this );\n\t},\n\n\t// Start with an empty selector\n\tselector: \"\",\n\n\t// The default length of a jQuery object is 0\n\tlength: 0,\n\n\ttoArray: function() {\n\t\treturn core_slice.call( this );\n\t},\n\n\t// Get the Nth element in the matched element set OR\n\t// Get the whole matched element set as a clean array\n\tget: function( num ) {\n\t\treturn num == null ?\n\n\t\t\t// Return a 'clean' array\n\t\t\tthis.toArray() :\n\n\t\t\t// Return just the object\n\t\t\t( num < 0 ? this[ this.length + num ] : this[ num ] );\n\t},\n\n\t// Take an array of elements and push it onto the stack\n\t// (returning the new matched element set)\n\tpushStack: function( elems ) {\n\n\t\t// Build a new jQuery matched element set\n\t\tvar ret = jQuery.merge( this.constructor(), elems );\n\n\t\t// Add the old object onto the stack (as a reference)\n\t\tret.prevObject = this;\n\t\tret.context = this.context;\n\n\t\t// Return the newly-formed element set\n\t\treturn ret;\n\t},\n\n\t// Execute a callback for every element in the matched set.\n\t// (You can seed the arguments with an array of args, but this is\n\t// only used internally.)\n\teach: function( callback, args ) {\n\t\treturn jQuery.each( this, callback, args );\n\t},\n\n\tready: function( fn ) {\n\t\t// Add the callback\n\t\tjQuery.ready.promise().done( fn );\n\n\t\treturn this;\n\t},\n\n\tslice: function() {\n\t\treturn this.pushStack( core_slice.apply( this, arguments ) );\n\t},\n\n\tfirst: function() {\n\t\treturn this.eq( 0 );\n\t},\n\n\tlast: function() {\n\t\treturn this.eq( -1 );\n\t},\n\n\teq: function( i ) {\n\t\tvar len = this.length,\n\t\t\tj = +i + ( i < 0 ? len : 0 );\n\t\treturn this.pushStack( j >= 0 && j < len ? [ this[j] ] : [] );\n\t},\n\n\tmap: function( callback ) {\n\t\treturn this.pushStack( jQuery.map(this, function( elem, i ) {\n\t\t\treturn callback.call( elem, i, elem );\n\t\t}));\n\t},\n\n\tend: function() {\n\t\treturn this.prevObject || this.constructor(null);\n\t},\n\n\t// For internal use only.\n\t// Behaves like an Array's method, not like a jQuery method.\n\tpush: core_push,\n\tsort: [].sort,\n\tsplice: [].splice\n};\n\n// Give the init function the jQuery prototype for later instantiation\njQuery.fn.init.prototype = jQuery.fn;\n\njQuery.extend = jQuery.fn.extend = function() {\n\tvar src, copyIsArray, copy, name, options, clone,\n\t\ttarget = arguments[0] || {},\n\t\ti = 1,\n\t\tlength = arguments.length,\n\t\tdeep = false;\n\n\t// Handle a deep copy situation\n\tif ( typeof target === \"boolean\" ) {\n\t\tdeep = target;\n\t\ttarget = arguments[1] || {};\n\t\t// skip the boolean and the target\n\t\ti = 2;\n\t}\n\n\t// Handle case when target is a string or something (possible in deep copy)\n\tif ( typeof target !== \"object\" && !jQuery.isFunction(target) ) {\n\t\ttarget = {};\n\t}\n\n\t// extend jQuery itself if only one argument is passed\n\tif ( length === i ) {\n\t\ttarget = this;\n\t\t--i;\n\t}\n\n\tfor ( ; i < length; i++ ) {\n\t\t// Only deal with non-null/undefined values\n\t\tif ( (options = arguments[ i ]) != null ) {\n\t\t\t// Extend the base object\n\t\t\tfor ( name in options ) {\n\t\t\t\tsrc = target[ name ];\n\t\t\t\tcopy = options[ name ];\n\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif ( target === copy ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\tif ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) {\n\t\t\t\t\tif ( copyIsArray ) {\n\t\t\t\t\t\tcopyIsArray = false;\n\t\t\t\t\t\tclone = src && jQuery.isArray(src) ? src : [];\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclone = src && jQuery.isPlainObject(src) ? src : {};\n\t\t\t\t\t}\n\n\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\ttarget[ name ] = jQuery.extend( deep, clone, copy );\n\n\t\t\t\t// Don't bring in undefined values\n\t\t\t\t} else if ( copy !== undefined ) {\n\t\t\t\t\ttarget[ name ] = copy;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\njQuery.extend({\n\t// Unique for each copy of jQuery on the page\n\t// Non-digits removed to match rinlinejQuery\n\texpando: \"jQuery\" + ( core_version + Math.random() ).replace( /\\D/g, \"\" ),\n\n\tnoConflict: function( deep ) {\n\t\tif ( window.$ === jQuery ) {\n\t\t\twindow.$ = _$;\n\t\t}\n\n\t\tif ( deep && window.jQuery === jQuery ) {\n\t\t\twindow.jQuery = _jQuery;\n\t\t}\n\n\t\treturn jQuery;\n\t},\n\n\t// Is the DOM ready to be used? Set to true once it occurs.\n\tisReady: false,\n\n\t// A counter to track how many items to wait for before\n\t// the ready event fires. See #6781\n\treadyWait: 1,\n\n\t// Hold (or release) the ready event\n\tholdReady: function( hold ) {\n\t\tif ( hold ) {\n\t\t\tjQuery.readyWait++;\n\t\t} else {\n\t\t\tjQuery.ready( true );\n\t\t}\n\t},\n\n\t// Handle when the DOM is ready\n\tready: function( wait ) {\n\n\t\t// Abort if there are pending holds or we're already ready\n\t\tif ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).\n\t\tif ( !document.body ) {\n\t\t\treturn setTimeout( jQuery.ready );\n\t\t}\n\n\t\t// Remember that the DOM is ready\n\t\tjQuery.isReady = true;\n\n\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\tif ( wait !== true && --jQuery.readyWait > 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If there are functions bound, to execute\n\t\treadyList.resolveWith( document, [ jQuery ] );\n\n\t\t// Trigger any bound ready events\n\t\tif ( jQuery.fn.trigger ) {\n\t\t\tjQuery( document ).trigger(\"ready\").off(\"ready\");\n\t\t}\n\t},\n\n\t// See test/unit/core.js for details concerning isFunction.\n\t// Since version 1.3, DOM methods and functions like alert\n\t// aren't supported. They return false on IE (#2968).\n\tisFunction: function( obj ) {\n\t\treturn jQuery.type(obj) === \"function\";\n\t},\n\n\tisArray: Array.isArray || function( obj ) {\n\t\treturn jQuery.type(obj) === \"array\";\n\t},\n\n\tisWindow: function( obj ) {\n\t\t/* jshint eqeqeq: false */\n\t\treturn obj != null && obj == obj.window;\n\t},\n\n\tisNumeric: function( obj ) {\n\t\treturn !isNaN( parseFloat(obj) ) && isFinite( obj );\n\t},\n\n\ttype: function( obj ) {\n\t\tif ( obj == null ) {\n\t\t\treturn String( obj );\n\t\t}\n\t\treturn typeof obj === \"object\" || typeof obj === \"function\" ?\n\t\t\tclass2type[ core_toString.call(obj) ] || \"object\" :\n\t\t\ttypeof obj;\n\t},\n\n\tisPlainObject: function( obj ) {\n\t\tvar key;\n\n\t\t// Must be an Object.\n\t\t// Because of IE, we also have to check the presence of the constructor property.\n\t\t// Make sure that DOM nodes and window objects don't pass through, as well\n\t\tif ( !obj || jQuery.type(obj) !== \"object\" || obj.nodeType || jQuery.isWindow( obj ) ) {\n\t\t\treturn false;\n\t\t}\n\n\t\ttry {\n\t\t\t// Not own constructor property must be Object\n\t\t\tif ( obj.constructor &&\n\t\t\t\t!core_hasOwn.call(obj, \"constructor\") &&\n\t\t\t\t!core_hasOwn.call(obj.constructor.prototype, \"isPrototypeOf\") ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t} catch ( e ) {\n\t\t\t// IE8,9 Will throw exceptions on certain host objects #9897\n\t\t\treturn false;\n\t\t}\n\n\t\t// Support: IE<9\n\t\t// Handle iteration over inherited properties before own properties.\n\t\tif ( jQuery.support.ownLast ) {\n\t\t\tfor ( key in obj ) {\n\t\t\t\treturn core_hasOwn.call( obj, key );\n\t\t\t}\n\t\t}\n\n\t\t// Own properties are enumerated firstly, so to speed up,\n\t\t// if last one is own, then all properties are own.\n\t\tfor ( key in obj ) {}\n\n\t\treturn key === undefined || core_hasOwn.call( obj, key );\n\t},\n\n\tisEmptyObject: function( obj ) {\n\t\tvar name;\n\t\tfor ( name in obj ) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\n\terror: function( msg ) {\n\t\tthrow new Error( msg );\n\t},\n\n\t// data: string of html\n\t// context (optional): If specified, the fragment will be created in this context, defaults to document\n\t// keepScripts (optional): If true, will include scripts passed in the html string\n\tparseHTML: function( data, context, keepScripts ) {\n\t\tif ( !data || typeof data !== \"string\" ) {\n\t\t\treturn null;\n\t\t}\n\t\tif ( typeof context === \"boolean\" ) {\n\t\t\tkeepScripts = context;\n\t\t\tcontext = false;\n\t\t}\n\t\tcontext = context || document;\n\n\t\tvar parsed = rsingleTag.exec( data ),\n\t\t\tscripts = !keepScripts && [];\n\n\t\t// Single tag\n\t\tif ( parsed ) {\n\t\t\treturn [ context.createElement( parsed[1] ) ];\n\t\t}\n\n\t\tparsed = jQuery.buildFragment( [ data ], context, scripts );\n\t\tif ( scripts ) {\n\t\t\tjQuery( scripts ).remove();\n\t\t}\n\t\treturn jQuery.merge( [], parsed.childNodes );\n\t},\n\n\tparseJSON: function( data ) {\n\t\t// Attempt to parse using the native JSON parser first\n\t\tif ( window.JSON && window.JSON.parse ) {\n\t\t\treturn window.JSON.parse( data );\n\t\t}\n\n\t\tif ( data === null ) {\n\t\t\treturn data;\n\t\t}\n\n\t\tif ( typeof data === \"string\" ) {\n\n\t\t\t// Make sure leading/trailing whitespace is removed (IE can't handle it)\n\t\t\tdata = jQuery.trim( data );\n\n\t\t\tif ( data ) {\n\t\t\t\t// Make sure the incoming data is actual JSON\n\t\t\t\t// Logic borrowed from http://json.org/json2.js\n\t\t\t\tif ( rvalidchars.test( data.replace( rvalidescape, \"@\" )\n\t\t\t\t\t.replace( rvalidtokens, \"]\" )\n\t\t\t\t\t.replace( rvalidbraces, \"\")) ) {\n\n\t\t\t\t\treturn ( new Function( \"return \" + data ) )();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tjQuery.error( \"Invalid JSON: \" + data );\n\t},\n\n\t// Cross-browser xml parsing\n\tparseXML: function( data ) {\n\t\tvar xml, tmp;\n\t\tif ( !data || typeof data !== \"string\" ) {\n\t\t\treturn null;\n\t\t}\n\t\ttry {\n\t\t\tif ( window.DOMParser ) { // Standard\n\t\t\t\ttmp = new DOMParser();\n\t\t\t\txml = tmp.parseFromString( data , \"text/xml\" );\n\t\t\t} else { // IE\n\t\t\t\txml = new ActiveXObject( \"Microsoft.XMLDOM\" );\n\t\t\t\txml.async = \"false\";\n\t\t\t\txml.loadXML( data );\n\t\t\t}\n\t\t} catch( e ) {\n\t\t\txml = undefined;\n\t\t}\n\t\tif ( !xml || !xml.documentElement || xml.getElementsByTagName( \"parsererror\" ).length ) {\n\t\t\tjQuery.error( \"Invalid XML: \" + data );\n\t\t}\n\t\treturn xml;\n\t},\n\n\tnoop: function() {},\n\n\t// Evaluates a script in a global context\n\t// Workarounds based on findings by Jim Driscoll\n\t// http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context\n\tglobalEval: function( data ) {\n\t\tif ( data && jQuery.trim( data ) ) {\n\t\t\t// We use execScript on Internet Explorer\n\t\t\t// We use an anonymous function so that context is window\n\t\t\t// rather than jQuery in Firefox\n\t\t\t( window.execScript || function( data ) {\n\t\t\t\twindow[ \"eval\" ].call( window, data );\n\t\t\t} )( data );\n\t\t}\n\t},\n\n\t// Convert dashed to camelCase; used by the css and data modules\n\t// Microsoft forgot to hump their vendor prefix (#9572)\n\tcamelCase: function( string ) {\n\t\treturn string.replace( rmsPrefix, \"ms-\" ).replace( rdashAlpha, fcamelCase );\n\t},\n\n\tnodeName: function( elem, name ) {\n\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n\t},\n\n\t// args is for internal usage only\n\teach: function( obj, callback, args ) {\n\t\tvar value,\n\t\t\ti = 0,\n\t\t\tlength = obj.length,\n\t\t\tisArray = isArraylike( obj );\n\n\t\tif ( args ) {\n\t\t\tif ( isArray ) {\n\t\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\t\tvalue = callback.apply( obj[ i ], args );\n\n\t\t\t\t\tif ( value === false ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( i in obj ) {\n\t\t\t\t\tvalue = callback.apply( obj[ i ], args );\n\n\t\t\t\t\tif ( value === false ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t// A special, fast, case for the most common use of each\n\t\t} else {\n\t\t\tif ( isArray ) {\n\t\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\t\tvalue = callback.call( obj[ i ], i, obj[ i ] );\n\n\t\t\t\t\tif ( value === false ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( i in obj ) {\n\t\t\t\t\tvalue = callback.call( obj[ i ], i, obj[ i ] );\n\n\t\t\t\t\tif ( value === false ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn obj;\n\t},\n\n\t// Use native String.trim function wherever possible\n\ttrim: core_trim && !core_trim.call(\"\\uFEFF\\xA0\") ?\n\t\tfunction( text ) {\n\t\t\treturn text == null ?\n\t\t\t\t\"\" :\n\t\t\t\tcore_trim.call( text );\n\t\t} :\n\n\t\t// Otherwise use our own trimming functionality\n\t\tfunction( text ) {\n\t\t\treturn text == null ?\n\t\t\t\t\"\" :\n\t\t\t\t( text + \"\" ).replace( rtrim, \"\" );\n\t\t},\n\n\t// results is for internal usage only\n\tmakeArray: function( arr, results ) {\n\t\tvar ret = results || [];\n\n\t\tif ( arr != null ) {\n\t\t\tif ( isArraylike( Object(arr) ) ) {\n\t\t\t\tjQuery.merge( ret,\n\t\t\t\t\ttypeof arr === \"string\" ?\n\t\t\t\t\t[ arr ] : arr\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tcore_push.call( ret, arr );\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\tinArray: function( elem, arr, i ) {\n\t\tvar len;\n\n\t\tif ( arr ) {\n\t\t\tif ( core_indexOf ) {\n\t\t\t\treturn core_indexOf.call( arr, elem, i );\n\t\t\t}\n\n\t\t\tlen = arr.length;\n\t\t\ti = i ? i < 0 ? Math.max( 0, len + i ) : i : 0;\n\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\t// Skip accessing in sparse arrays\n\t\t\t\tif ( i in arr && arr[ i ] === elem ) {\n\t\t\t\t\treturn i;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn -1;\n\t},\n\n\tmerge: function( first, second ) {\n\t\tvar l = second.length,\n\t\t\ti = first.length,\n\t\t\tj = 0;\n\n\t\tif ( typeof l === \"number\" ) {\n\t\t\tfor ( ; j < l; j++ ) {\n\t\t\t\tfirst[ i++ ] = second[ j ];\n\t\t\t}\n\t\t} else {\n\t\t\twhile ( second[j] !== undefined ) {\n\t\t\t\tfirst[ i++ ] = second[ j++ ];\n\t\t\t}\n\t\t}\n\n\t\tfirst.length = i;\n\n\t\treturn first;\n\t},\n\n\tgrep: function( elems, callback, inv ) {\n\t\tvar retVal,\n\t\t\tret = [],\n\t\t\ti = 0,\n\t\t\tlength = elems.length;\n\t\tinv = !!inv;\n\n\t\t// Go through the array, only saving the items\n\t\t// that pass the validator function\n\t\tfor ( ; i < length; i++ ) {\n\t\t\tretVal = !!callback( elems[ i ], i );\n\t\t\tif ( inv !== retVal ) {\n\t\t\t\tret.push( elems[ i ] );\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\t// arg is for internal usage only\n\tmap: function( elems, callback, arg ) {\n\t\tvar value,\n\t\t\ti = 0,\n\t\t\tlength = elems.length,\n\t\t\tisArray = isArraylike( elems ),\n\t\t\tret = [];\n\n\t\t// Go through the array, translating each of the items to their\n\t\tif ( isArray ) {\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret[ ret.length ] = value;\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Go through every key on the object,\n\t\t} else {\n\t\t\tfor ( i in elems ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret[ ret.length ] = value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Flatten any nested arrays\n\t\treturn core_concat.apply( [], ret );\n\t},\n\n\t// A global GUID counter for objects\n\tguid: 1,\n\n\t// Bind a function to a context, optionally partially applying any\n\t// arguments.\n\tproxy: function( fn, context ) {\n\t\tvar args, proxy, tmp;\n\n\t\tif ( typeof context === \"string\" ) {\n\t\t\ttmp = fn[ context ];\n\t\t\tcontext = fn;\n\t\t\tfn = tmp;\n\t\t}\n\n\t\t// Quick check to determine if target is callable, in the spec\n\t\t// this throws a TypeError, but we will just return undefined.\n\t\tif ( !jQuery.isFunction( fn ) ) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\t// Simulated bind\n\t\targs = core_slice.call( arguments, 2 );\n\t\tproxy = function() {\n\t\t\treturn fn.apply( context || this, args.concat( core_slice.call( arguments ) ) );\n\t\t};\n\n\t\t// Set the guid of unique handler to the same of original handler, so it can be removed\n\t\tproxy.guid = fn.guid = fn.guid || jQuery.guid++;\n\n\t\treturn proxy;\n\t},\n\n\t// Multifunctional method to get and set values of a collection\n\t// The value/s can optionally be executed if it's a function\n\taccess: function( elems, fn, key, value, chainable, emptyGet, raw ) {\n\t\tvar i = 0,\n\t\t\tlength = elems.length,\n\t\t\tbulk = key == null;\n\n\t\t// Sets many values\n\t\tif ( jQuery.type( key ) === \"object\" ) {\n\t\t\tchainable = true;\n\t\t\tfor ( i in key ) {\n\t\t\t\tjQuery.access( elems, fn, i, key[i], true, emptyGet, raw );\n\t\t\t}\n\n\t\t// Sets one value\n\t\t} else if ( value !== undefined ) {\n\t\t\tchainable = true;\n\n\t\t\tif ( !jQuery.isFunction( value ) ) {\n\t\t\t\traw = true;\n\t\t\t}\n\n\t\t\tif ( bulk ) {\n\t\t\t\t// Bulk operations run against the entire set\n\t\t\t\tif ( raw ) {\n\t\t\t\t\tfn.call( elems, value );\n\t\t\t\t\tfn = null;\n\n\t\t\t\t// ...except when executing function values\n\t\t\t\t} else {\n\t\t\t\t\tbulk = fn;\n\t\t\t\t\tfn = function( elem, key, value ) {\n\t\t\t\t\t\treturn bulk.call( jQuery( elem ), value );\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( fn ) {\n\t\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\t\tfn( elems[i], key, raw ? value : value.call( elems[i], i, fn( elems[i], key ) ) );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn chainable ?\n\t\t\telems :\n\n\t\t\t// Gets\n\t\t\tbulk ?\n\t\t\t\tfn.call( elems ) :\n\t\t\t\tlength ? fn( elems[0], key ) : emptyGet;\n\t},\n\n\tnow: function() {\n\t\treturn ( new Date() ).getTime();\n\t},\n\n\t// A method for quickly swapping in/out CSS properties to get correct calculations.\n\t// Note: this method belongs to the css module but it's needed here for the support module.\n\t// If support gets modularized, this method should be moved back to the css module.\n\tswap: function( elem, options, callback, args ) {\n\t\tvar ret, name,\n\t\t\told = {};\n\n\t\t// Remember the old values, and insert the new ones\n\t\tfor ( name in options ) {\n\t\t\told[ name ] = elem.style[ name ];\n\t\t\telem.style[ name ] = options[ name ];\n\t\t}\n\n\t\tret = callback.apply( elem, args || [] );\n\n\t\t// Revert the old values\n\t\tfor ( name in options ) {\n\t\t\telem.style[ name ] = old[ name ];\n\t\t}\n\n\t\treturn ret;\n\t}\n});\n\njQuery.ready.promise = function( obj ) {\n\tif ( !readyList ) {\n\n\t\treadyList = jQuery.Deferred();\n\n\t\t// Catch cases where $(document).ready() is called after the browser event has already occurred.\n\t\t// we once tried to use readyState \"interactive\" here, but it caused issues like the one\n\t\t// discovered by ChrisS here: http://bugs.jquery.com/ticket/12282#comment:15\n\t\tif ( document.readyState === \"complete\" ) {\n\t\t\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\t\t\tsetTimeout( jQuery.ready );\n\n\t\t// Standards-based browsers support DOMContentLoaded\n\t\t} else if ( document.addEventListener ) {\n\t\t\t// Use the handy event callback\n\t\t\tdocument.addEventListener( \"DOMContentLoaded\", completed, false );\n\n\t\t\t// A fallback to window.onload, that will always work\n\t\t\twindow.addEventListener( \"load\", completed, false );\n\n\t\t// If IE event model is used\n\t\t} else {\n\t\t\t// Ensure firing before onload, maybe late but safe also for iframes\n\t\t\tdocument.attachEvent( \"onreadystatechange\", completed );\n\n\t\t\t// A fallback to window.onload, that will always work\n\t\t\twindow.attachEvent( \"onload\", completed );\n\n\t\t\t// If IE and not a frame\n\t\t\t// continually check to see if the document is ready\n\t\t\tvar top = false;\n\n\t\t\ttry {\n\t\t\t\ttop = window.frameElement == null && document.documentElement;\n\t\t\t} catch(e) {}\n\n\t\t\tif ( top && top.doScroll ) {\n\t\t\t\t(function doScrollCheck() {\n\t\t\t\t\tif ( !jQuery.isReady ) {\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t// Use the trick by Diego Perini\n\t\t\t\t\t\t\t// http://javascript.nwbox.com/IEContentLoaded/\n\t\t\t\t\t\t\ttop.doScroll(\"left\");\n\t\t\t\t\t\t} catch(e) {\n\t\t\t\t\t\t\treturn setTimeout( doScrollCheck, 50 );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// detach all dom ready events\n\t\t\t\t\t\tdetach();\n\n\t\t\t\t\t\t// and execute any waiting functions\n\t\t\t\t\t\tjQuery.ready();\n\t\t\t\t\t}\n\t\t\t\t})();\n\t\t\t}\n\t\t}\n\t}\n\treturn readyList.promise( obj );\n};\n\n// Populate the class2type map\njQuery.each(\"Boolean Number String Function Array Date RegExp Object Error\".split(\" \"), function(i, name) {\n\tclass2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n});\n\nfunction isArraylike( obj ) {\n\tvar length = obj.length,\n\t\ttype = jQuery.type( obj );\n\n\tif ( jQuery.isWindow( obj ) ) {\n\t\treturn false;\n\t}\n\n\tif ( obj.nodeType === 1 && length ) {\n\t\treturn true;\n\t}\n\n\treturn type === \"array\" || type !== \"function\" &&\n\t\t( length === 0 ||\n\t\ttypeof length === \"number\" && length > 0 && ( length - 1 ) in obj );\n}\n\n// All jQuery objects should point back to these\nrootjQuery = jQuery(document);\n/*!\n * Sizzle CSS Selector Engine v1.10.2\n * http://sizzlejs.com/\n *\n * Copyright 2013 jQuery Foundation, Inc. and other contributors\n * Released under the MIT license\n * http://jquery.org/license\n *\n * Date: 2013-07-03\n */\n(function( window, undefined ) {\n\nvar i,\n\tsupport,\n\tcachedruns,\n\tExpr,\n\tgetText,\n\tisXML,\n\tcompile,\n\toutermostContext,\n\tsortInput,\n\n\t// Local document vars\n\tsetDocument,\n\tdocument,\n\tdocElem,\n\tdocumentIsHTML,\n\trbuggyQSA,\n\trbuggyMatches,\n\tmatches,\n\tcontains,\n\n\t// Instance-specific data\n\texpando = \"sizzle\" + -(new Date()),\n\tpreferredDoc = window.document,\n\tdirruns = 0,\n\tdone = 0,\n\tclassCache = createCache(),\n\ttokenCache = createCache(),\n\tcompilerCache = createCache(),\n\thasDuplicate = false,\n\tsortOrder = function( a, b ) {\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\t\treturn 0;\n\t},\n\n\t// General-purpose constants\n\tstrundefined = typeof undefined,\n\tMAX_NEGATIVE = 1 << 31,\n\n\t// Instance methods\n\thasOwn = ({}).hasOwnProperty,\n\tarr = [],\n\tpop = arr.pop,\n\tpush_native = arr.push,\n\tpush = arr.push,\n\tslice = arr.slice,\n\t// Use a stripped-down indexOf if we can't use a native one\n\tindexOf = arr.indexOf || function( elem ) {\n\t\tvar i = 0,\n\t\t\tlen = this.length;\n\t\tfor ( ; i < len; i++ ) {\n\t\t\tif ( this[i] === elem ) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t},\n\n\tbooleans = \"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped\",\n\n\t// Regular expressions\n\n\t// Whitespace characters http://www.w3.org/TR/css3-selectors/#whitespace\n\twhitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",\n\t// http://www.w3.org/TR/css3-syntax/#characters\n\tcharacterEncoding = \"(?:\\\\\\\\.|[\\\\w-]|[^\\\\x00-\\\\xa0])+\",\n\n\t// Loosely modeled on CSS identifier characters\n\t// An unquoted value should be a CSS identifier http://www.w3.org/TR/css3-selectors/#attribute-selectors\n\t// Proper syntax: http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier\n\tidentifier = characterEncoding.replace( \"w\", \"w#\" ),\n\n\t// Acceptable operators http://www.w3.org/TR/selectors/#attribute-selectors\n\tattributes = \"\\\\[\" + whitespace + \"*(\" + characterEncoding + \")\" + whitespace +\n\t\t\"*(?:([*^$|!~]?=)\" + whitespace + \"*(?:(['\\\"])((?:\\\\\\\\.|[^\\\\\\\\])*?)\\\\3|(\" + identifier + \")|)|)\" + whitespace + \"*\\\\]\",\n\n\t// Prefer arguments quoted,\n\t//   then not containing pseudos/brackets,\n\t//   then attribute selectors/non-parenthetical expressions,\n\t//   then anything else\n\t// These preferences are here to reduce the number of selectors\n\t//   needing tokenize in the PSEUDO preFilter\n\tpseudos = \":(\" + characterEncoding + \")(?:\\\\(((['\\\"])((?:\\\\\\\\.|[^\\\\\\\\])*?)\\\\3|((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes.replace( 3, 8 ) + \")*)|.*)\\\\)|)\",\n\n\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\trtrim = new RegExp( \"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\", \"g\" ),\n\n\trcomma = new RegExp( \"^\" + whitespace + \"*,\" + whitespace + \"*\" ),\n\trcombinators = new RegExp( \"^\" + whitespace + \"*([>+~]|\" + whitespace + \")\" + whitespace + \"*\" ),\n\n\trsibling = new RegExp( whitespace + \"*[+~]\" ),\n\trattributeQuotes = new RegExp( \"=\" + whitespace + \"*([^\\\\]'\\\"]*)\" + whitespace + \"*\\\\]\", \"g\" ),\n\n\trpseudo = new RegExp( pseudos ),\n\tridentifier = new RegExp( \"^\" + identifier + \"$\" ),\n\n\tmatchExpr = {\n\t\t\"ID\": new RegExp( \"^#(\" + characterEncoding + \")\" ),\n\t\t\"CLASS\": new RegExp( \"^\\\\.(\" + characterEncoding + \")\" ),\n\t\t\"TAG\": new RegExp( \"^(\" + characterEncoding.replace( \"w\", \"w*\" ) + \")\" ),\n\t\t\"ATTR\": new RegExp( \"^\" + attributes ),\n\t\t\"PSEUDO\": new RegExp( \"^\" + pseudos ),\n\t\t\"CHILD\": new RegExp( \"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" + whitespace +\n\t\t\t\"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" + whitespace +\n\t\t\t\"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\" ),\n\t\t\"bool\": new RegExp( \"^(?:\" + booleans + \")$\", \"i\" ),\n\t\t// For use in libraries implementing .is()\n\t\t// We use this for POS matching in `select`\n\t\t\"needsContext\": new RegExp( \"^\" + whitespace + \"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" +\n\t\t\twhitespace + \"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\" )\n\t},\n\n\trnative = /^[^{]+\\{\\s*\\[native \\w/,\n\n\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\trquickExpr = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\trinputs = /^(?:input|select|textarea|button)$/i,\n\trheader = /^h\\d$/i,\n\n\trescape = /'|\\\\/g,\n\n\t// CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\trunescape = new RegExp( \"\\\\\\\\([\\\\da-f]{1,6}\" + whitespace + \"?|(\" + whitespace + \")|.)\", \"ig\" ),\n\tfunescape = function( _, escaped, escapedWhitespace ) {\n\t\tvar high = \"0x\" + escaped - 0x10000;\n\t\t// NaN means non-codepoint\n\t\t// Support: Firefox\n\t\t// Workaround erroneous numeric interpretation of +\"0x\"\n\t\treturn high !== high || escapedWhitespace ?\n\t\t\tescaped :\n\t\t\t// BMP codepoint\n\t\t\thigh < 0 ?\n\t\t\t\tString.fromCharCode( high + 0x10000 ) :\n\t\t\t\t// Supplemental Plane codepoint (surrogate pair)\n\t\t\t\tString.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );\n\t};\n\n// Optimize for push.apply( _, NodeList )\ntry {\n\tpush.apply(\n\t\t(arr = slice.call( preferredDoc.childNodes )),\n\t\tpreferredDoc.childNodes\n\t);\n\t// Support: Android<4.0\n\t// Detect silently failing push.apply\n\tarr[ preferredDoc.childNodes.length ].nodeType;\n} catch ( e ) {\n\tpush = { apply: arr.length ?\n\n\t\t// Leverage slice if possible\n\t\tfunction( target, els ) {\n\t\t\tpush_native.apply( target, slice.call(els) );\n\t\t} :\n\n\t\t// Support: IE<9\n\t\t// Otherwise append directly\n\t\tfunction( target, els ) {\n\t\t\tvar j = target.length,\n\t\t\t\ti = 0;\n\t\t\t// Can't trust NodeList.length\n\t\t\twhile ( (target[j++] = els[i++]) ) {}\n\t\t\ttarget.length = j - 1;\n\t\t}\n\t};\n}\n\nfunction Sizzle( selector, context, results, seed ) {\n\tvar match, elem, m, nodeType,\n\t\t// QSA vars\n\t\ti, groups, old, nid, newContext, newSelector;\n\n\tif ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {\n\t\tsetDocument( context );\n\t}\n\n\tcontext = context || document;\n\tresults = results || [];\n\n\tif ( !selector || typeof selector !== \"string\" ) {\n\t\treturn results;\n\t}\n\n\tif ( (nodeType = context.nodeType) !== 1 && nodeType !== 9 ) {\n\t\treturn [];\n\t}\n\n\tif ( documentIsHTML && !seed ) {\n\n\t\t// Shortcuts\n\t\tif ( (match = rquickExpr.exec( selector )) ) {\n\t\t\t// Speed-up: Sizzle(\"#ID\")\n\t\t\tif ( (m = match[1]) ) {\n\t\t\t\tif ( nodeType === 9 ) {\n\t\t\t\t\telem = context.getElementById( m );\n\t\t\t\t\t// Check parentNode to catch when Blackberry 4.6 returns\n\t\t\t\t\t// nodes that are no longer in the document #6963\n\t\t\t\t\tif ( elem && elem.parentNode ) {\n\t\t\t\t\t\t// Handle the case where IE, Opera, and Webkit return items\n\t\t\t\t\t\t// by name instead of ID\n\t\t\t\t\t\tif ( elem.id === m ) {\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// Context is not a document\n\t\t\t\t\tif ( context.ownerDocument && (elem = context.ownerDocument.getElementById( m )) &&\n\t\t\t\t\t\tcontains( context, elem ) && elem.id === m ) {\n\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Speed-up: Sizzle(\"TAG\")\n\t\t\t} else if ( match[2] ) {\n\t\t\t\tpush.apply( results, context.getElementsByTagName( selector ) );\n\t\t\t\treturn results;\n\n\t\t\t// Speed-up: Sizzle(\".CLASS\")\n\t\t\t} else if ( (m = match[3]) && support.getElementsByClassName && context.getElementsByClassName ) {\n\t\t\t\tpush.apply( results, context.getElementsByClassName( m ) );\n\t\t\t\treturn results;\n\t\t\t}\n\t\t}\n\n\t\t// QSA path\n\t\tif ( support.qsa && (!rbuggyQSA || !rbuggyQSA.test( selector )) ) {\n\t\t\tnid = old = expando;\n\t\t\tnewContext = context;\n\t\t\tnewSelector = nodeType === 9 && selector;\n\n\t\t\t// qSA works strangely on Element-rooted queries\n\t\t\t// We can work around this by specifying an extra ID on the root\n\t\t\t// and working up from there (Thanks to Andrew Dupont for the technique)\n\t\t\t// IE 8 doesn't work on object elements\n\t\t\tif ( nodeType === 1 && context.nodeName.toLowerCase() !== \"object\" ) {\n\t\t\t\tgroups = tokenize( selector );\n\n\t\t\t\tif ( (old = context.getAttribute(\"id\")) ) {\n\t\t\t\t\tnid = old.replace( rescape, \"\\\\$&\" );\n\t\t\t\t} else {\n\t\t\t\t\tcontext.setAttribute( \"id\", nid );\n\t\t\t\t}\n\t\t\t\tnid = \"[id='\" + nid + \"'] \";\n\n\t\t\t\ti = groups.length;\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tgroups[i] = nid + toSelector( groups[i] );\n\t\t\t\t}\n\t\t\t\tnewContext = rsibling.test( selector ) && context.parentNode || context;\n\t\t\t\tnewSelector = groups.join(\",\");\n\t\t\t}\n\n\t\t\tif ( newSelector ) {\n\t\t\t\ttry {\n\t\t\t\t\tpush.apply( results,\n\t\t\t\t\t\tnewContext.querySelectorAll( newSelector )\n\t\t\t\t\t);\n\t\t\t\t\treturn results;\n\t\t\t\t} catch(qsaError) {\n\t\t\t\t} finally {\n\t\t\t\t\tif ( !old ) {\n\t\t\t\t\t\tcontext.removeAttribute(\"id\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// All others\n\treturn select( selector.replace( rtrim, \"$1\" ), context, results, seed );\n}\n\n/**\n * Create key-value caches of limited size\n * @returns {Function(string, Object)} Returns the Object data after storing it on itself with\n *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n *\tdeleting the oldest entry\n */\nfunction createCache() {\n\tvar keys = [];\n\n\tfunction cache( key, value ) {\n\t\t// Use (key + \" \") to avoid collision with native prototype properties (see Issue #157)\n\t\tif ( keys.push( key += \" \" ) > Expr.cacheLength ) {\n\t\t\t// Only keep the most recent entries\n\t\t\tdelete cache[ keys.shift() ];\n\t\t}\n\t\treturn (cache[ key ] = value);\n\t}\n\treturn cache;\n}\n\n/**\n * Mark a function for special use by Sizzle\n * @param {Function} fn The function to mark\n */\nfunction markFunction( fn ) {\n\tfn[ expando ] = true;\n\treturn fn;\n}\n\n/**\n * Support testing using an element\n * @param {Function} fn Passed the created div and expects a boolean result\n */\nfunction assert( fn ) {\n\tvar div = document.createElement(\"div\");\n\n\ttry {\n\t\treturn !!fn( div );\n\t} catch (e) {\n\t\treturn false;\n\t} finally {\n\t\t// Remove from its parent by default\n\t\tif ( div.parentNode ) {\n\t\t\tdiv.parentNode.removeChild( div );\n\t\t}\n\t\t// release memory in IE\n\t\tdiv = null;\n\t}\n}\n\n/**\n * Adds the same handler for all of the specified attrs\n * @param {String} attrs Pipe-separated list of attributes\n * @param {Function} handler The method that will be applied\n */\nfunction addHandle( attrs, handler ) {\n\tvar arr = attrs.split(\"|\"),\n\t\ti = attrs.length;\n\n\twhile ( i-- ) {\n\t\tExpr.attrHandle[ arr[i] ] = handler;\n\t}\n}\n\n/**\n * Checks document order of two siblings\n * @param {Element} a\n * @param {Element} b\n * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b\n */\nfunction siblingCheck( a, b ) {\n\tvar cur = b && a,\n\t\tdiff = cur && a.nodeType === 1 && b.nodeType === 1 &&\n\t\t\t( ~b.sourceIndex || MAX_NEGATIVE ) -\n\t\t\t( ~a.sourceIndex || MAX_NEGATIVE );\n\n\t// Use IE sourceIndex if available on both nodes\n\tif ( diff ) {\n\t\treturn diff;\n\t}\n\n\t// Check if b follows a\n\tif ( cur ) {\n\t\twhile ( (cur = cur.nextSibling) ) {\n\t\t\tif ( cur === b ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn a ? 1 : -1;\n}\n\n/**\n * Returns a function to use in pseudos for input types\n * @param {String} type\n */\nfunction createInputPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn name === \"input\" && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for buttons\n * @param {String} type\n */\nfunction createButtonPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn (name === \"input\" || name === \"button\") && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for positionals\n * @param {Function} fn\n */\nfunction createPositionalPseudo( fn ) {\n\treturn markFunction(function( argument ) {\n\t\targument = +argument;\n\t\treturn markFunction(function( seed, matches ) {\n\t\t\tvar j,\n\t\t\t\tmatchIndexes = fn( [], seed.length, argument ),\n\t\t\t\ti = matchIndexes.length;\n\n\t\t\t// Match elements found at the specified indexes\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( seed[ (j = matchIndexes[i]) ] ) {\n\t\t\t\t\tseed[j] = !(matches[j] = seed[j]);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t});\n}\n\n/**\n * Detect xml\n * @param {Element|Object} elem An element or a document\n */\nisXML = Sizzle.isXML = function( elem ) {\n\t// documentElement is verified for cases where it doesn't yet exist\n\t// (such as loading iframes in IE - #4833)\n\tvar documentElement = elem && (elem.ownerDocument || elem).documentElement;\n\treturn documentElement ? documentElement.nodeName !== \"HTML\" : false;\n};\n\n// Expose support vars for convenience\nsupport = Sizzle.support = {};\n\n/**\n * Sets document-related variables once based on the current document\n * @param {Element|Object} [doc] An element or document object to use to set the document\n * @returns {Object} Returns the current document\n */\nsetDocument = Sizzle.setDocument = function( node ) {\n\tvar doc = node ? node.ownerDocument || node : preferredDoc,\n\t\tparent = doc.defaultView;\n\n\t// If no document and documentElement is available, return\n\tif ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {\n\t\treturn document;\n\t}\n\n\t// Set our document\n\tdocument = doc;\n\tdocElem = doc.documentElement;\n\n\t// Support tests\n\tdocumentIsHTML = !isXML( doc );\n\n\t// Support: IE>8\n\t// If iframe document is assigned to \"document\" variable and if iframe has been reloaded,\n\t// IE will throw \"permission denied\" error when accessing \"document\" variable, see jQuery #13936\n\t// IE6-8 do not support the defaultView property so parent will be undefined\n\tif ( parent && parent.attachEvent && parent !== parent.top ) {\n\t\tparent.attachEvent( \"onbeforeunload\", function() {\n\t\t\tsetDocument();\n\t\t});\n\t}\n\n\t/* Attributes\n\t---------------------------------------------------------------------- */\n\n\t// Support: IE<8\n\t// Verify that getAttribute really returns attributes and not properties (excepting IE8 booleans)\n\tsupport.attributes = assert(function( div ) {\n\t\tdiv.className = \"i\";\n\t\treturn !div.getAttribute(\"className\");\n\t});\n\n\t/* getElement(s)By*\n\t---------------------------------------------------------------------- */\n\n\t// Check if getElementsByTagName(\"*\") returns only elements\n\tsupport.getElementsByTagName = assert(function( div ) {\n\t\tdiv.appendChild( doc.createComment(\"\") );\n\t\treturn !div.getElementsByTagName(\"*\").length;\n\t});\n\n\t// Check if getElementsByClassName can be trusted\n\tsupport.getElementsByClassName = assert(function( div ) {\n\t\tdiv.innerHTML = \"<div class='a'></div><div class='a i'></div>\";\n\n\t\t// Support: Safari<4\n\t\t// Catch class over-caching\n\t\tdiv.firstChild.className = \"i\";\n\t\t// Support: Opera<10\n\t\t// Catch gEBCN failure to find non-leading classes\n\t\treturn div.getElementsByClassName(\"i\").length === 2;\n\t});\n\n\t// Support: IE<10\n\t// Check if getElementById returns elements by name\n\t// The broken getElementById methods don't pick up programatically-set names,\n\t// so use a roundabout getElementsByName test\n\tsupport.getById = assert(function( div ) {\n\t\tdocElem.appendChild( div ).id = expando;\n\t\treturn !doc.getElementsByName || !doc.getElementsByName( expando ).length;\n\t});\n\n\t// ID find and filter\n\tif ( support.getById ) {\n\t\tExpr.find[\"ID\"] = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== strundefined && documentIsHTML ) {\n\t\t\t\tvar m = context.getElementById( id );\n\t\t\t\t// Check parentNode to catch when Blackberry 4.6 returns\n\t\t\t\t// nodes that are no longer in the document #6963\n\t\t\t\treturn m && m.parentNode ? [m] : [];\n\t\t\t}\n\t\t};\n\t\tExpr.filter[\"ID\"] = function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn elem.getAttribute(\"id\") === attrId;\n\t\t\t};\n\t\t};\n\t} else {\n\t\t// Support: IE6/7\n\t\t// getElementById is not reliable as a find shortcut\n\t\tdelete Expr.find[\"ID\"];\n\n\t\tExpr.filter[\"ID\"] =  function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\tvar node = typeof elem.getAttributeNode !== strundefined && elem.getAttributeNode(\"id\");\n\t\t\t\treturn node && node.value === attrId;\n\t\t\t};\n\t\t};\n\t}\n\n\t// Tag\n\tExpr.find[\"TAG\"] = support.getElementsByTagName ?\n\t\tfunction( tag, context ) {\n\t\t\tif ( typeof context.getElementsByTagName !== strundefined ) {\n\t\t\t\treturn context.getElementsByTagName( tag );\n\t\t\t}\n\t\t} :\n\t\tfunction( tag, context ) {\n\t\t\tvar elem,\n\t\t\t\ttmp = [],\n\t\t\t\ti = 0,\n\t\t\t\tresults = context.getElementsByTagName( tag );\n\n\t\t\t// Filter out possible comments\n\t\t\tif ( tag === \"*\" ) {\n\t\t\t\twhile ( (elem = results[i++]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\ttmp.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn tmp;\n\t\t\t}\n\t\t\treturn results;\n\t\t};\n\n\t// Class\n\tExpr.find[\"CLASS\"] = support.getElementsByClassName && function( className, context ) {\n\t\tif ( typeof context.getElementsByClassName !== strundefined && documentIsHTML ) {\n\t\t\treturn context.getElementsByClassName( className );\n\t\t}\n\t};\n\n\t/* QSA/matchesSelector\n\t---------------------------------------------------------------------- */\n\n\t// QSA and matchesSelector support\n\n\t// matchesSelector(:active) reports false when true (IE9/Opera 11.5)\n\trbuggyMatches = [];\n\n\t// qSa(:focus) reports false when true (Chrome 21)\n\t// We allow this because of a bug in IE8/9 that throws an error\n\t// whenever `document.activeElement` is accessed on an iframe\n\t// So, we allow :focus to pass through QSA all the time to avoid the IE error\n\t// See http://bugs.jquery.com/ticket/13378\n\trbuggyQSA = [];\n\n\tif ( (support.qsa = rnative.test( doc.querySelectorAll )) ) {\n\t\t// Build QSA regex\n\t\t// Regex strategy adopted from Diego Perini\n\t\tassert(function( div ) {\n\t\t\t// Select is set to empty string on purpose\n\t\t\t// This is to test IE's treatment of not explicitly\n\t\t\t// setting a boolean content attribute,\n\t\t\t// since its presence should be enough\n\t\t\t// http://bugs.jquery.com/ticket/12359\n\t\t\tdiv.innerHTML = \"<select><option selected=''></option></select>\";\n\n\t\t\t// Support: IE8\n\t\t\t// Boolean attributes and \"value\" are not treated correctly\n\t\t\tif ( !div.querySelectorAll(\"[selected]\").length ) {\n\t\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*(?:value|\" + booleans + \")\" );\n\t\t\t}\n\n\t\t\t// Webkit/Opera - :checked should return selected option elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( !div.querySelectorAll(\":checked\").length ) {\n\t\t\t\trbuggyQSA.push(\":checked\");\n\t\t\t}\n\t\t});\n\n\t\tassert(function( div ) {\n\n\t\t\t// Support: Opera 10-12/IE8\n\t\t\t// ^= $= *= and empty values\n\t\t\t// Should not select anything\n\t\t\t// Support: Windows 8 Native Apps\n\t\t\t// The type attribute is restricted during .innerHTML assignment\n\t\t\tvar input = doc.createElement(\"input\");\n\t\t\tinput.setAttribute( \"type\", \"hidden\" );\n\t\t\tdiv.appendChild( input ).setAttribute( \"t\", \"\" );\n\n\t\t\tif ( div.querySelectorAll(\"[t^='']\").length ) {\n\t\t\t\trbuggyQSA.push( \"[*^$]=\" + whitespace + \"*(?:''|\\\"\\\")\" );\n\t\t\t}\n\n\t\t\t// FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( !div.querySelectorAll(\":enabled\").length ) {\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t\t}\n\n\t\t\t// Opera 10-11 does not throw on post-comma invalid pseudos\n\t\t\tdiv.querySelectorAll(\"*,:x\");\n\t\t\trbuggyQSA.push(\",.*:\");\n\t\t});\n\t}\n\n\tif ( (support.matchesSelector = rnative.test( (matches = docElem.webkitMatchesSelector ||\n\t\tdocElem.mozMatchesSelector ||\n\t\tdocElem.oMatchesSelector ||\n\t\tdocElem.msMatchesSelector) )) ) {\n\n\t\tassert(function( div ) {\n\t\t\t// Check to see if it's possible to do matchesSelector\n\t\t\t// on a disconnected node (IE 9)\n\t\t\tsupport.disconnectedMatch = matches.call( div, \"div\" );\n\n\t\t\t// This should fail with an exception\n\t\t\t// Gecko does not error, returns false instead\n\t\t\tmatches.call( div, \"[s!='']:x\" );\n\t\t\trbuggyMatches.push( \"!=\", pseudos );\n\t\t});\n\t}\n\n\trbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join(\"|\") );\n\trbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join(\"|\") );\n\n\t/* Contains\n\t---------------------------------------------------------------------- */\n\n\t// Element contains another\n\t// Purposefully does not implement inclusive descendent\n\t// As in, an element does not contain itself\n\tcontains = rnative.test( docElem.contains ) || docElem.compareDocumentPosition ?\n\t\tfunction( a, b ) {\n\t\t\tvar adown = a.nodeType === 9 ? a.documentElement : a,\n\t\t\t\tbup = b && b.parentNode;\n\t\t\treturn a === bup || !!( bup && bup.nodeType === 1 && (\n\t\t\t\tadown.contains ?\n\t\t\t\t\tadown.contains( bup ) :\n\t\t\t\t\ta.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16\n\t\t\t));\n\t\t} :\n\t\tfunction( a, b ) {\n\t\t\tif ( b ) {\n\t\t\t\twhile ( (b = b.parentNode) ) {\n\t\t\t\t\tif ( b === a ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\n\t/* Sorting\n\t---------------------------------------------------------------------- */\n\n\t// Document order sorting\n\tsortOrder = docElem.compareDocumentPosition ?\n\tfunction( a, b ) {\n\n\t\t// Flag for duplicate removal\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\tvar compare = b.compareDocumentPosition && a.compareDocumentPosition && a.compareDocumentPosition( b );\n\n\t\tif ( compare ) {\n\t\t\t// Disconnected nodes\n\t\t\tif ( compare & 1 ||\n\t\t\t\t(!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {\n\n\t\t\t\t// Choose the first element that is related to our preferred document\n\t\t\t\tif ( a === doc || contains(preferredDoc, a) ) {\n\t\t\t\t\treturn -1;\n\t\t\t\t}\n\t\t\t\tif ( b === doc || contains(preferredDoc, b) ) {\n\t\t\t\t\treturn 1;\n\t\t\t\t}\n\n\t\t\t\t// Maintain original order\n\t\t\t\treturn sortInput ?\n\t\t\t\t\t( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) :\n\t\t\t\t\t0;\n\t\t\t}\n\n\t\t\treturn compare & 4 ? -1 : 1;\n\t\t}\n\n\t\t// Not directly comparable, sort on existence of method\n\t\treturn a.compareDocumentPosition ? -1 : 1;\n\t} :\n\tfunction( a, b ) {\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\taup = a.parentNode,\n\t\t\tbup = b.parentNode,\n\t\t\tap = [ a ],\n\t\t\tbp = [ b ];\n\n\t\t// Exit early if the nodes are identical\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\n\t\t// Parentless nodes are either documents or disconnected\n\t\t} else if ( !aup || !bup ) {\n\t\t\treturn a === doc ? -1 :\n\t\t\t\tb === doc ? 1 :\n\t\t\t\taup ? -1 :\n\t\t\t\tbup ? 1 :\n\t\t\t\tsortInput ?\n\t\t\t\t( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) :\n\t\t\t\t0;\n\n\t\t// If the nodes are siblings, we can do a quick check\n\t\t} else if ( aup === bup ) {\n\t\t\treturn siblingCheck( a, b );\n\t\t}\n\n\t\t// Otherwise we need full lists of their ancestors for comparison\n\t\tcur = a;\n\t\twhile ( (cur = cur.parentNode) ) {\n\t\t\tap.unshift( cur );\n\t\t}\n\t\tcur = b;\n\t\twhile ( (cur = cur.parentNode) ) {\n\t\t\tbp.unshift( cur );\n\t\t}\n\n\t\t// Walk down the tree looking for a discrepancy\n\t\twhile ( ap[i] === bp[i] ) {\n\t\t\ti++;\n\t\t}\n\n\t\treturn i ?\n\t\t\t// Do a sibling check if the nodes have a common ancestor\n\t\t\tsiblingCheck( ap[i], bp[i] ) :\n\n\t\t\t// Otherwise nodes in our document sort first\n\t\t\tap[i] === preferredDoc ? -1 :\n\t\t\tbp[i] === preferredDoc ? 1 :\n\t\t\t0;\n\t};\n\n\treturn doc;\n};\n\nSizzle.matches = function( expr, elements ) {\n\treturn Sizzle( expr, null, null, elements );\n};\n\nSizzle.matchesSelector = function( elem, expr ) {\n\t// Set document vars if needed\n\tif ( ( elem.ownerDocument || elem ) !== document ) {\n\t\tsetDocument( elem );\n\t}\n\n\t// Make sure that attribute selectors are quoted\n\texpr = expr.replace( rattributeQuotes, \"='$1']\" );\n\n\tif ( support.matchesSelector && documentIsHTML &&\n\t\t( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&\n\t\t( !rbuggyQSA     || !rbuggyQSA.test( expr ) ) ) {\n\n\t\ttry {\n\t\t\tvar ret = matches.call( elem, expr );\n\n\t\t\t// IE 9's matchesSelector returns false on disconnected nodes\n\t\t\tif ( ret || support.disconnectedMatch ||\n\t\t\t\t\t// As well, disconnected nodes are said to be in a document\n\t\t\t\t\t// fragment in IE 9\n\t\t\t\t\telem.document && elem.document.nodeType !== 11 ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\t\t} catch(e) {}\n\t}\n\n\treturn Sizzle( expr, document, null, [elem] ).length > 0;\n};\n\nSizzle.contains = function( context, elem ) {\n\t// Set document vars if needed\n\tif ( ( context.ownerDocument || context ) !== document ) {\n\t\tsetDocument( context );\n\t}\n\treturn contains( context, elem );\n};\n\nSizzle.attr = function( elem, name ) {\n\t// Set document vars if needed\n\tif ( ( elem.ownerDocument || elem ) !== document ) {\n\t\tsetDocument( elem );\n\t}\n\n\tvar fn = Expr.attrHandle[ name.toLowerCase() ],\n\t\t// Don't get fooled by Object.prototype properties (jQuery #13807)\n\t\tval = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?\n\t\t\tfn( elem, name, !documentIsHTML ) :\n\t\t\tundefined;\n\n\treturn val === undefined ?\n\t\tsupport.attributes || !documentIsHTML ?\n\t\t\telem.getAttribute( name ) :\n\t\t\t(val = elem.getAttributeNode(name)) && val.specified ?\n\t\t\t\tval.value :\n\t\t\t\tnull :\n\t\tval;\n};\n\nSizzle.error = function( msg ) {\n\tthrow new Error( \"Syntax error, unrecognized expression: \" + msg );\n};\n\n/**\n * Document sorting and removing duplicates\n * @param {ArrayLike} results\n */\nSizzle.uniqueSort = function( results ) {\n\tvar elem,\n\t\tduplicates = [],\n\t\tj = 0,\n\t\ti = 0;\n\n\t// Unless we *know* we can detect duplicates, assume their presence\n\thasDuplicate = !support.detectDuplicates;\n\tsortInput = !support.sortStable && results.slice( 0 );\n\tresults.sort( sortOrder );\n\n\tif ( hasDuplicate ) {\n\t\twhile ( (elem = results[i++]) ) {\n\t\t\tif ( elem === results[ i ] ) {\n\t\t\t\tj = duplicates.push( i );\n\t\t\t}\n\t\t}\n\t\twhile ( j-- ) {\n\t\t\tresults.splice( duplicates[ j ], 1 );\n\t\t}\n\t}\n\n\treturn results;\n};\n\n/**\n * Utility function for retrieving the text value of an array of DOM nodes\n * @param {Array|Element} elem\n */\ngetText = Sizzle.getText = function( elem ) {\n\tvar node,\n\t\tret = \"\",\n\t\ti = 0,\n\t\tnodeType = elem.nodeType;\n\n\tif ( !nodeType ) {\n\t\t// If no nodeType, this is expected to be an array\n\t\tfor ( ; (node = elem[i]); i++ ) {\n\t\t\t// Do not traverse comment nodes\n\t\t\tret += getText( node );\n\t\t}\n\t} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {\n\t\t// Use textContent for elements\n\t\t// innerText usage removed for consistency of new lines (see #11153)\n\t\tif ( typeof elem.textContent === \"string\" ) {\n\t\t\treturn elem.textContent;\n\t\t} else {\n\t\t\t// Traverse its children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tret += getText( elem );\n\t\t\t}\n\t\t}\n\t} else if ( nodeType === 3 || nodeType === 4 ) {\n\t\treturn elem.nodeValue;\n\t}\n\t// Do not include comment or processing instruction nodes\n\n\treturn ret;\n};\n\nExpr = Sizzle.selectors = {\n\n\t// Can be adjusted by the user\n\tcacheLength: 50,\n\n\tcreatePseudo: markFunction,\n\n\tmatch: matchExpr,\n\n\tattrHandle: {},\n\n\tfind: {},\n\n\trelative: {\n\t\t\">\": { dir: \"parentNode\", first: true },\n\t\t\" \": { dir: \"parentNode\" },\n\t\t\"+\": { dir: \"previousSibling\", first: true },\n\t\t\"~\": { dir: \"previousSibling\" }\n\t},\n\n\tpreFilter: {\n\t\t\"ATTR\": function( match ) {\n\t\t\tmatch[1] = match[1].replace( runescape, funescape );\n\n\t\t\t// Move the given value to match[3] whether quoted or unquoted\n\t\t\tmatch[3] = ( match[4] || match[5] || \"\" ).replace( runescape, funescape );\n\n\t\t\tif ( match[2] === \"~=\" ) {\n\t\t\t\tmatch[3] = \" \" + match[3] + \" \";\n\t\t\t}\n\n\t\t\treturn match.slice( 0, 4 );\n\t\t},\n\n\t\t\"CHILD\": function( match ) {\n\t\t\t/* matches from matchExpr[\"CHILD\"]\n\t\t\t\t1 type (only|nth|...)\n\t\t\t\t2 what (child|of-type)\n\t\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n\t\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\n\t\t\t\t5 sign of xn-component\n\t\t\t\t6 x of xn-component\n\t\t\t\t7 sign of y-component\n\t\t\t\t8 y of y-component\n\t\t\t*/\n\t\t\tmatch[1] = match[1].toLowerCase();\n\n\t\t\tif ( match[1].slice( 0, 3 ) === \"nth\" ) {\n\t\t\t\t// nth-* requires argument\n\t\t\t\tif ( !match[3] ) {\n\t\t\t\t\tSizzle.error( match[0] );\n\t\t\t\t}\n\n\t\t\t\t// numeric x and y parameters for Expr.filter.CHILD\n\t\t\t\t// remember that false/true cast respectively to 0/1\n\t\t\t\tmatch[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === \"even\" || match[3] === \"odd\" ) );\n\t\t\t\tmatch[5] = +( ( match[7] + match[8] ) || match[3] === \"odd\" );\n\n\t\t\t// other types prohibit arguments\n\t\t\t} else if ( match[3] ) {\n\t\t\t\tSizzle.error( match[0] );\n\t\t\t}\n\n\t\t\treturn match;\n\t\t},\n\n\t\t\"PSEUDO\": function( match ) {\n\t\t\tvar excess,\n\t\t\t\tunquoted = !match[5] && match[2];\n\n\t\t\tif ( matchExpr[\"CHILD\"].test( match[0] ) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\t// Accept quoted arguments as-is\n\t\t\tif ( match[3] && match[4] !== undefined ) {\n\t\t\t\tmatch[2] = match[4];\n\n\t\t\t// Strip excess characters from unquoted arguments\n\t\t\t} else if ( unquoted && rpseudo.test( unquoted ) &&\n\t\t\t\t// Get excess from tokenize (recursively)\n\t\t\t\t(excess = tokenize( unquoted, true )) &&\n\t\t\t\t// advance to the next closing parenthesis\n\t\t\t\t(excess = unquoted.indexOf( \")\", unquoted.length - excess ) - unquoted.length) ) {\n\n\t\t\t\t// excess is a negative index\n\t\t\t\tmatch[0] = match[0].slice( 0, excess );\n\t\t\t\tmatch[2] = unquoted.slice( 0, excess );\n\t\t\t}\n\n\t\t\t// Return only captures needed by the pseudo filter method (type and argument)\n\t\t\treturn match.slice( 0, 3 );\n\t\t}\n\t},\n\n\tfilter: {\n\n\t\t\"TAG\": function( nodeNameSelector ) {\n\t\t\tvar nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn nodeNameSelector === \"*\" ?\n\t\t\t\tfunction() { return true; } :\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === nodeName;\n\t\t\t\t};\n\t\t},\n\n\t\t\"CLASS\": function( className ) {\n\t\t\tvar pattern = classCache[ className + \" \" ];\n\n\t\t\treturn pattern ||\n\t\t\t\t(pattern = new RegExp( \"(^|\" + whitespace + \")\" + className + \"(\" + whitespace + \"|$)\" )) &&\n\t\t\t\tclassCache( className, function( elem ) {\n\t\t\t\t\treturn pattern.test( typeof elem.className === \"string\" && elem.className || typeof elem.getAttribute !== strundefined && elem.getAttribute(\"class\") || \"\" );\n\t\t\t\t});\n\t\t},\n\n\t\t\"ATTR\": function( name, operator, check ) {\n\t\t\treturn function( elem ) {\n\t\t\t\tvar result = Sizzle.attr( elem, name );\n\n\t\t\t\tif ( result == null ) {\n\t\t\t\t\treturn operator === \"!=\";\n\t\t\t\t}\n\t\t\t\tif ( !operator ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tresult += \"\";\n\n\t\t\t\treturn operator === \"=\" ? result === check :\n\t\t\t\t\toperator === \"!=\" ? result !== check :\n\t\t\t\t\toperator === \"^=\" ? check && result.indexOf( check ) === 0 :\n\t\t\t\t\toperator === \"*=\" ? check && result.indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"$=\" ? check && result.slice( -check.length ) === check :\n\t\t\t\t\toperator === \"~=\" ? ( \" \" + result + \" \" ).indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"|=\" ? result === check || result.slice( 0, check.length + 1 ) === check + \"-\" :\n\t\t\t\t\tfalse;\n\t\t\t};\n\t\t},\n\n\t\t\"CHILD\": function( type, what, argument, first, last ) {\n\t\t\tvar simple = type.slice( 0, 3 ) !== \"nth\",\n\t\t\t\tforward = type.slice( -4 ) !== \"last\",\n\t\t\t\tofType = what === \"of-type\";\n\n\t\t\treturn first === 1 && last === 0 ?\n\n\t\t\t\t// Shortcut for :nth-*(n)\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn !!elem.parentNode;\n\t\t\t\t} :\n\n\t\t\t\tfunction( elem, context, xml ) {\n\t\t\t\t\tvar cache, outerCache, node, diff, nodeIndex, start,\n\t\t\t\t\t\tdir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n\t\t\t\t\t\tparent = elem.parentNode,\n\t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\n\t\t\t\t\t\tuseCache = !xml && !ofType;\n\n\t\t\t\t\tif ( parent ) {\n\n\t\t\t\t\t\t// :(first|last|only)-(child|of-type)\n\t\t\t\t\t\tif ( simple ) {\n\t\t\t\t\t\t\twhile ( dir ) {\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\twhile ( (node = node[ dir ]) ) {\n\t\t\t\t\t\t\t\t\tif ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) {\n\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// Reverse direction for :only-* (if we haven't yet done so)\n\t\t\t\t\t\t\t\tstart = dir = type === \"only\" && !start && \"nextSibling\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstart = [ forward ? parent.firstChild : parent.lastChild ];\n\n\t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\n\t\t\t\t\t\tif ( forward && useCache ) {\n\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\n\t\t\t\t\t\t\touterCache = parent[ expando ] || (parent[ expando ] = {});\n\t\t\t\t\t\t\tcache = outerCache[ type ] || [];\n\t\t\t\t\t\t\tnodeIndex = cache[0] === dirruns && cache[1];\n\t\t\t\t\t\t\tdiff = cache[0] === dirruns && cache[2];\n\t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[ nodeIndex ];\n\n\t\t\t\t\t\t\twhile ( (node = ++nodeIndex && node && node[ dir ] ||\n\n\t\t\t\t\t\t\t\t// Fallback to seeking `elem` from the start\n\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop()) ) {\n\n\t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\n\t\t\t\t\t\t\t\tif ( node.nodeType === 1 && ++diff && node === elem ) {\n\t\t\t\t\t\t\t\t\touterCache[ type ] = [ dirruns, nodeIndex, diff ];\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Use previously-cached element index if available\n\t\t\t\t\t\t} else if ( useCache && (cache = (elem[ expando ] || (elem[ expando ] = {}))[ type ]) && cache[0] === dirruns ) {\n\t\t\t\t\t\t\tdiff = cache[1];\n\n\t\t\t\t\t\t// xml :nth-child(...) or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\n\t\t\t\t\t\t\twhile ( (node = ++nodeIndex && node && node[ dir ] ||\n\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop()) ) {\n\n\t\t\t\t\t\t\t\tif ( ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) && ++diff ) {\n\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\n\t\t\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t\t\t(node[ expando ] || (node[ expando ] = {}))[ type ] = [ dirruns, diff ];\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\tif ( node === elem ) {\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\n\t\t\t\t\t\tdiff -= last;\n\t\t\t\t\t\treturn diff === first || ( diff % first === 0 && diff / first >= 0 );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t},\n\n\t\t\"PSEUDO\": function( pseudo, argument ) {\n\t\t\t// pseudo-class names are case-insensitive\n\t\t\t// http://www.w3.org/TR/selectors/#pseudo-classes\n\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n\t\t\t// Remember that setFilters inherits from pseudos\n\t\t\tvar args,\n\t\t\t\tfn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||\n\t\t\t\t\tSizzle.error( \"unsupported pseudo: \" + pseudo );\n\n\t\t\t// The user may use createPseudo to indicate that\n\t\t\t// arguments are needed to create the filter function\n\t\t\t// just as Sizzle does\n\t\t\tif ( fn[ expando ] ) {\n\t\t\t\treturn fn( argument );\n\t\t\t}\n\n\t\t\t// But maintain support for old signatures\n\t\t\tif ( fn.length > 1 ) {\n\t\t\t\targs = [ pseudo, pseudo, \"\", argument ];\n\t\t\t\treturn Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?\n\t\t\t\t\tmarkFunction(function( seed, matches ) {\n\t\t\t\t\t\tvar idx,\n\t\t\t\t\t\t\tmatched = fn( seed, argument ),\n\t\t\t\t\t\t\ti = matched.length;\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tidx = indexOf.call( seed, matched[i] );\n\t\t\t\t\t\t\tseed[ idx ] = !( matches[ idx ] = matched[i] );\n\t\t\t\t\t\t}\n\t\t\t\t\t}) :\n\t\t\t\t\tfunction( elem ) {\n\t\t\t\t\t\treturn fn( elem, 0, args );\n\t\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn fn;\n\t\t}\n\t},\n\n\tpseudos: {\n\t\t// Potentially complex pseudos\n\t\t\"not\": markFunction(function( selector ) {\n\t\t\t// Trim the selector passed to compile\n\t\t\t// to avoid treating leading and trailing\n\t\t\t// spaces as combinators\n\t\t\tvar input = [],\n\t\t\t\tresults = [],\n\t\t\t\tmatcher = compile( selector.replace( rtrim, \"$1\" ) );\n\n\t\t\treturn matcher[ expando ] ?\n\t\t\t\tmarkFunction(function( seed, matches, context, xml ) {\n\t\t\t\t\tvar elem,\n\t\t\t\t\t\tunmatched = matcher( seed, null, xml, [] ),\n\t\t\t\t\t\ti = seed.length;\n\n\t\t\t\t\t// Match elements unmatched by `matcher`\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( (elem = unmatched[i]) ) {\n\t\t\t\t\t\t\tseed[i] = !(matches[i] = elem);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}) :\n\t\t\t\tfunction( elem, context, xml ) {\n\t\t\t\t\tinput[0] = elem;\n\t\t\t\t\tmatcher( input, null, xml, results );\n\t\t\t\t\treturn !results.pop();\n\t\t\t\t};\n\t\t}),\n\n\t\t\"has\": markFunction(function( selector ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn Sizzle( selector, elem ).length > 0;\n\t\t\t};\n\t\t}),\n\n\t\t\"contains\": markFunction(function( text ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;\n\t\t\t};\n\t\t}),\n\n\t\t// \"Whether an element is represented by a :lang() selector\n\t\t// is based solely on the element's language value\n\t\t// being equal to the identifier C,\n\t\t// or beginning with the identifier C immediately followed by \"-\".\n\t\t// The matching of C against the element's language value is performed case-insensitively.\n\t\t// The identifier C does not have to be a valid language name.\"\n\t\t// http://www.w3.org/TR/selectors/#lang-pseudo\n\t\t\"lang\": markFunction( function( lang ) {\n\t\t\t// lang value must be a valid identifier\n\t\t\tif ( !ridentifier.test(lang || \"\") ) {\n\t\t\t\tSizzle.error( \"unsupported lang: \" + lang );\n\t\t\t}\n\t\t\tlang = lang.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn function( elem ) {\n\t\t\t\tvar elemLang;\n\t\t\t\tdo {\n\t\t\t\t\tif ( (elemLang = documentIsHTML ?\n\t\t\t\t\t\telem.lang :\n\t\t\t\t\t\telem.getAttribute(\"xml:lang\") || elem.getAttribute(\"lang\")) ) {\n\n\t\t\t\t\t\telemLang = elemLang.toLowerCase();\n\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf( lang + \"-\" ) === 0;\n\t\t\t\t\t}\n\t\t\t\t} while ( (elem = elem.parentNode) && elem.nodeType === 1 );\n\t\t\t\treturn false;\n\t\t\t};\n\t\t}),\n\n\t\t// Miscellaneous\n\t\t\"target\": function( elem ) {\n\t\t\tvar hash = window.location && window.location.hash;\n\t\t\treturn hash && hash.slice( 1 ) === elem.id;\n\t\t},\n\n\t\t\"root\": function( elem ) {\n\t\t\treturn elem === docElem;\n\t\t},\n\n\t\t\"focus\": function( elem ) {\n\t\t\treturn elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);\n\t\t},\n\n\t\t// Boolean properties\n\t\t\"enabled\": function( elem ) {\n\t\t\treturn elem.disabled === false;\n\t\t},\n\n\t\t\"disabled\": function( elem ) {\n\t\t\treturn elem.disabled === true;\n\t\t},\n\n\t\t\"checked\": function( elem ) {\n\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\tvar nodeName = elem.nodeName.toLowerCase();\n\t\t\treturn (nodeName === \"input\" && !!elem.checked) || (nodeName === \"option\" && !!elem.selected);\n\t\t},\n\n\t\t\"selected\": function( elem ) {\n\t\t\t// Accessing this property makes selected-by-default\n\t\t\t// options in Safari work properly\n\t\t\tif ( elem.parentNode ) {\n\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t}\n\n\t\t\treturn elem.selected === true;\n\t\t},\n\n\t\t// Contents\n\t\t\"empty\": function( elem ) {\n\t\t\t// http://www.w3.org/TR/selectors/#empty-pseudo\n\t\t\t// :empty is only affected by element nodes and content nodes(including text(3), cdata(4)),\n\t\t\t//   not comment, processing instructions, or others\n\t\t\t// Thanks to Diego Perini for the nodeName shortcut\n\t\t\t//   Greater than \"@\" means alpha characters (specifically not starting with \"#\" or \"?\")\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tif ( elem.nodeName > \"@\" || elem.nodeType === 3 || elem.nodeType === 4 ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\t\"parent\": function( elem ) {\n\t\t\treturn !Expr.pseudos[\"empty\"]( elem );\n\t\t},\n\n\t\t// Element/input types\n\t\t\"header\": function( elem ) {\n\t\t\treturn rheader.test( elem.nodeName );\n\t\t},\n\n\t\t\"input\": function( elem ) {\n\t\t\treturn rinputs.test( elem.nodeName );\n\t\t},\n\n\t\t\"button\": function( elem ) {\n\t\t\tvar name = elem.nodeName.toLowerCase();\n\t\t\treturn name === \"input\" && elem.type === \"button\" || name === \"button\";\n\t\t},\n\n\t\t\"text\": function( elem ) {\n\t\t\tvar attr;\n\t\t\t// IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc)\n\t\t\t// use getAttribute instead to test this case\n\t\t\treturn elem.nodeName.toLowerCase() === \"input\" &&\n\t\t\t\telem.type === \"text\" &&\n\t\t\t\t( (attr = elem.getAttribute(\"type\")) == null || attr.toLowerCase() === elem.type );\n\t\t},\n\n\t\t// Position-in-collection\n\t\t\"first\": createPositionalPseudo(function() {\n\t\t\treturn [ 0 ];\n\t\t}),\n\n\t\t\"last\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\treturn [ length - 1 ];\n\t\t}),\n\n\t\t\"eq\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\treturn [ argument < 0 ? argument + length : argument ];\n\t\t}),\n\n\t\t\"even\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"odd\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\tvar i = 1;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"lt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; --i >= 0; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"gt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; ++i < length; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t})\n\t}\n};\n\nExpr.pseudos[\"nth\"] = Expr.pseudos[\"eq\"];\n\n// Add button/input type pseudos\nfor ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {\n\tExpr.pseudos[ i ] = createInputPseudo( i );\n}\nfor ( i in { submit: true, reset: true } ) {\n\tExpr.pseudos[ i ] = createButtonPseudo( i );\n}\n\n// Easy API for creating new setFilters\nfunction setFilters() {}\nsetFilters.prototype = Expr.filters = Expr.pseudos;\nExpr.setFilters = new setFilters();\n\nfunction tokenize( selector, parseOnly ) {\n\tvar matched, match, tokens, type,\n\t\tsoFar, groups, preFilters,\n\t\tcached = tokenCache[ selector + \" \" ];\n\n\tif ( cached ) {\n\t\treturn parseOnly ? 0 : cached.slice( 0 );\n\t}\n\n\tsoFar = selector;\n\tgroups = [];\n\tpreFilters = Expr.preFilter;\n\n\twhile ( soFar ) {\n\n\t\t// Comma and first run\n\t\tif ( !matched || (match = rcomma.exec( soFar )) ) {\n\t\t\tif ( match ) {\n\t\t\t\t// Don't consume trailing commas as valid\n\t\t\t\tsoFar = soFar.slice( match[0].length ) || soFar;\n\t\t\t}\n\t\t\tgroups.push( tokens = [] );\n\t\t}\n\n\t\tmatched = false;\n\n\t\t// Combinators\n\t\tif ( (match = rcombinators.exec( soFar )) ) {\n\t\t\tmatched = match.shift();\n\t\t\ttokens.push({\n\t\t\t\tvalue: matched,\n\t\t\t\t// Cast descendant combinators to space\n\t\t\t\ttype: match[0].replace( rtrim, \" \" )\n\t\t\t});\n\t\t\tsoFar = soFar.slice( matched.length );\n\t\t}\n\n\t\t// Filters\n\t\tfor ( type in Expr.filter ) {\n\t\t\tif ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||\n\t\t\t\t(match = preFilters[ type ]( match ))) ) {\n\t\t\t\tmatched = match.shift();\n\t\t\t\ttokens.push({\n\t\t\t\t\tvalue: matched,\n\t\t\t\t\ttype: type,\n\t\t\t\t\tmatches: match\n\t\t\t\t});\n\t\t\t\tsoFar = soFar.slice( matched.length );\n\t\t\t}\n\t\t}\n\n\t\tif ( !matched ) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t// Return the length of the invalid excess\n\t// if we're just parsing\n\t// Otherwise, throw an error or return tokens\n\treturn parseOnly ?\n\t\tsoFar.length :\n\t\tsoFar ?\n\t\t\tSizzle.error( selector ) :\n\t\t\t// Cache the tokens\n\t\t\ttokenCache( selector, groups ).slice( 0 );\n}\n\nfunction toSelector( tokens ) {\n\tvar i = 0,\n\t\tlen = tokens.length,\n\t\tselector = \"\";\n\tfor ( ; i < len; i++ ) {\n\t\tselector += tokens[i].value;\n\t}\n\treturn selector;\n}\n\nfunction addCombinator( matcher, combinator, base ) {\n\tvar dir = combinator.dir,\n\t\tcheckNonElements = base && dir === \"parentNode\",\n\t\tdoneName = done++;\n\n\treturn combinator.first ?\n\t\t// Check against closest ancestor/preceding element\n\t\tfunction( elem, context, xml ) {\n\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\treturn matcher( elem, context, xml );\n\t\t\t\t}\n\t\t\t}\n\t\t} :\n\n\t\t// Check against all ancestor/preceding elements\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar data, cache, outerCache,\n\t\t\t\tdirkey = dirruns + \" \" + doneName;\n\n\t\t\t// We can't set arbitrary data on XML nodes, so they don't benefit from dir caching\n\t\t\tif ( xml ) {\n\t\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\touterCache = elem[ expando ] || (elem[ expando ] = {});\n\t\t\t\t\t\tif ( (cache = outerCache[ dir ]) && cache[0] === dirkey ) {\n\t\t\t\t\t\t\tif ( (data = cache[1]) === true || data === cachedruns ) {\n\t\t\t\t\t\t\t\treturn data === true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcache = outerCache[ dir ] = [ dirkey ];\n\t\t\t\t\t\t\tcache[1] = matcher( elem, context, xml ) || cachedruns;\n\t\t\t\t\t\t\tif ( cache[1] === true ) {\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n}\n\nfunction elementMatcher( matchers ) {\n\treturn matchers.length > 1 ?\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar i = matchers.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( !matchers[i]( elem, context, xml ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t} :\n\t\tmatchers[0];\n}\n\nfunction condense( unmatched, map, filter, context, xml ) {\n\tvar elem,\n\t\tnewUnmatched = [],\n\t\ti = 0,\n\t\tlen = unmatched.length,\n\t\tmapped = map != null;\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( (elem = unmatched[i]) ) {\n\t\t\tif ( !filter || filter( elem, context, xml ) ) {\n\t\t\t\tnewUnmatched.push( elem );\n\t\t\t\tif ( mapped ) {\n\t\t\t\t\tmap.push( i );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn newUnmatched;\n}\n\nfunction setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {\n\tif ( postFilter && !postFilter[ expando ] ) {\n\t\tpostFilter = setMatcher( postFilter );\n\t}\n\tif ( postFinder && !postFinder[ expando ] ) {\n\t\tpostFinder = setMatcher( postFinder, postSelector );\n\t}\n\treturn markFunction(function( seed, results, context, xml ) {\n\t\tvar temp, i, elem,\n\t\t\tpreMap = [],\n\t\t\tpostMap = [],\n\t\t\tpreexisting = results.length,\n\n\t\t\t// Get initial elements from seed or context\n\t\t\telems = seed || multipleContexts( selector || \"*\", context.nodeType ? [ context ] : context, [] ),\n\n\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\n\t\t\tmatcherIn = preFilter && ( seed || !selector ) ?\n\t\t\t\tcondense( elems, preMap, preFilter, context, xml ) :\n\t\t\t\telems,\n\n\t\t\tmatcherOut = matcher ?\n\t\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,\n\t\t\t\tpostFinder || ( seed ? preFilter : preexisting || postFilter ) ?\n\n\t\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t\t[] :\n\n\t\t\t\t\t// ...otherwise use results directly\n\t\t\t\t\tresults :\n\t\t\t\tmatcherIn;\n\n\t\t// Find primary matches\n\t\tif ( matcher ) {\n\t\t\tmatcher( matcherIn, matcherOut, context, xml );\n\t\t}\n\n\t\t// Apply postFilter\n\t\tif ( postFilter ) {\n\t\t\ttemp = condense( matcherOut, postMap );\n\t\t\tpostFilter( temp, [], context, xml );\n\n\t\t\t// Un-match failing elements by moving them back to matcherIn\n\t\t\ti = temp.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( (elem = temp[i]) ) {\n\t\t\t\t\tmatcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( seed ) {\n\t\t\tif ( postFinder || preFilter ) {\n\t\t\t\tif ( postFinder ) {\n\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\n\t\t\t\t\ttemp = [];\n\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( (elem = matcherOut[i]) ) {\n\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\n\t\t\t\t\t\t\ttemp.push( (matcherIn[i] = elem) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpostFinder( null, (matcherOut = []), temp, xml );\n\t\t\t\t}\n\n\t\t\t\t// Move matched elements from seed to results to keep them synchronized\n\t\t\t\ti = matcherOut.length;\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tif ( (elem = matcherOut[i]) &&\n\t\t\t\t\t\t(temp = postFinder ? indexOf.call( seed, elem ) : preMap[i]) > -1 ) {\n\n\t\t\t\t\t\tseed[temp] = !(results[temp] = elem);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Add elements to results, through postFinder if defined\n\t\t} else {\n\t\t\tmatcherOut = condense(\n\t\t\t\tmatcherOut === results ?\n\t\t\t\t\tmatcherOut.splice( preexisting, matcherOut.length ) :\n\t\t\t\t\tmatcherOut\n\t\t\t);\n\t\t\tif ( postFinder ) {\n\t\t\t\tpostFinder( null, results, matcherOut, xml );\n\t\t\t} else {\n\t\t\t\tpush.apply( results, matcherOut );\n\t\t\t}\n\t\t}\n\t});\n}\n\nfunction matcherFromTokens( tokens ) {\n\tvar checkContext, matcher, j,\n\t\tlen = tokens.length,\n\t\tleadingRelative = Expr.relative[ tokens[0].type ],\n\t\timplicitRelative = leadingRelative || Expr.relative[\" \"],\n\t\ti = leadingRelative ? 1 : 0,\n\n\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\n\t\tmatchContext = addCombinator( function( elem ) {\n\t\t\treturn elem === checkContext;\n\t\t}, implicitRelative, true ),\n\t\tmatchAnyContext = addCombinator( function( elem ) {\n\t\t\treturn indexOf.call( checkContext, elem ) > -1;\n\t\t}, implicitRelative, true ),\n\t\tmatchers = [ function( elem, context, xml ) {\n\t\t\treturn ( !leadingRelative && ( xml || context !== outermostContext ) ) || (\n\t\t\t\t(checkContext = context).nodeType ?\n\t\t\t\t\tmatchContext( elem, context, xml ) :\n\t\t\t\t\tmatchAnyContext( elem, context, xml ) );\n\t\t} ];\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( (matcher = Expr.relative[ tokens[i].type ]) ) {\n\t\t\tmatchers = [ addCombinator(elementMatcher( matchers ), matcher) ];\n\t\t} else {\n\t\t\tmatcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );\n\n\t\t\t// Return special upon seeing a positional matcher\n\t\t\tif ( matcher[ expando ] ) {\n\t\t\t\t// Find the next relative operator (if any) for proper handling\n\t\t\t\tj = ++i;\n\t\t\t\tfor ( ; j < len; j++ ) {\n\t\t\t\t\tif ( Expr.relative[ tokens[j].type ] ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn setMatcher(\n\t\t\t\t\ti > 1 && elementMatcher( matchers ),\n\t\t\t\t\ti > 1 && toSelector(\n\t\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\t\ttokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === \" \" ? \"*\" : \"\" })\n\t\t\t\t\t).replace( rtrim, \"$1\" ),\n\t\t\t\t\tmatcher,\n\t\t\t\t\ti < j && matcherFromTokens( tokens.slice( i, j ) ),\n\t\t\t\t\tj < len && matcherFromTokens( (tokens = tokens.slice( j )) ),\n\t\t\t\t\tj < len && toSelector( tokens )\n\t\t\t\t);\n\t\t\t}\n\t\t\tmatchers.push( matcher );\n\t\t}\n\t}\n\n\treturn elementMatcher( matchers );\n}\n\nfunction matcherFromGroupMatchers( elementMatchers, setMatchers ) {\n\t// A counter to specify which element is currently being matched\n\tvar matcherCachedRuns = 0,\n\t\tbySet = setMatchers.length > 0,\n\t\tbyElement = elementMatchers.length > 0,\n\t\tsuperMatcher = function( seed, context, xml, results, expandContext ) {\n\t\t\tvar elem, j, matcher,\n\t\t\t\tsetMatched = [],\n\t\t\t\tmatchedCount = 0,\n\t\t\t\ti = \"0\",\n\t\t\t\tunmatched = seed && [],\n\t\t\t\toutermost = expandContext != null,\n\t\t\t\tcontextBackup = outermostContext,\n\t\t\t\t// We must always have either seed elements or context\n\t\t\t\telems = seed || byElement && Expr.find[\"TAG\"]( \"*\", expandContext && context.parentNode || context ),\n\t\t\t\t// Use integer dirruns iff this is the outermost matcher\n\t\t\t\tdirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1);\n\n\t\t\tif ( outermost ) {\n\t\t\t\toutermostContext = context !== document && context;\n\t\t\t\tcachedruns = matcherCachedRuns;\n\t\t\t}\n\n\t\t\t// Add elements passing elementMatchers directly to results\n\t\t\t// Keep `i` a string if there are no elements so `matchedCount` will be \"00\" below\n\t\t\tfor ( ; (elem = elems[i]) != null; i++ ) {\n\t\t\t\tif ( byElement && elem ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( (matcher = elementMatchers[j++]) ) {\n\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( outermost ) {\n\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t\tcachedruns = ++matcherCachedRuns;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Track unmatched elements for set filters\n\t\t\t\tif ( bySet ) {\n\t\t\t\t\t// They will have gone through all possible matchers\n\t\t\t\t\tif ( (elem = !matcher && elem) ) {\n\t\t\t\t\t\tmatchedCount--;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Lengthen the array for every element, matched or not\n\t\t\t\t\tif ( seed ) {\n\t\t\t\t\t\tunmatched.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Apply set filters to unmatched elements\n\t\t\tmatchedCount += i;\n\t\t\tif ( bySet && i !== matchedCount ) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ( (matcher = setMatchers[j++]) ) {\n\t\t\t\t\tmatcher( unmatched, setMatched, context, xml );\n\t\t\t\t}\n\n\t\t\t\tif ( seed ) {\n\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\n\t\t\t\t\tif ( matchedCount > 0 ) {\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tif ( !(unmatched[i] || setMatched[i]) ) {\n\t\t\t\t\t\t\t\tsetMatched[i] = pop.call( results );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Discard index placeholder values to get only actual matches\n\t\t\t\t\tsetMatched = condense( setMatched );\n\t\t\t\t}\n\n\t\t\t\t// Add matches to results\n\t\t\t\tpush.apply( results, setMatched );\n\n\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\n\t\t\t\tif ( outermost && !seed && setMatched.length > 0 &&\n\t\t\t\t\t( matchedCount + setMatchers.length ) > 1 ) {\n\n\t\t\t\t\tSizzle.uniqueSort( results );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override manipulation of globals by nested matchers\n\t\t\tif ( outermost ) {\n\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\toutermostContext = contextBackup;\n\t\t\t}\n\n\t\t\treturn unmatched;\n\t\t};\n\n\treturn bySet ?\n\t\tmarkFunction( superMatcher ) :\n\t\tsuperMatcher;\n}\n\ncompile = Sizzle.compile = function( selector, group /* Internal Use Only */ ) {\n\tvar i,\n\t\tsetMatchers = [],\n\t\telementMatchers = [],\n\t\tcached = compilerCache[ selector + \" \" ];\n\n\tif ( !cached ) {\n\t\t// Generate a function of recursive functions that can be used to check each element\n\t\tif ( !group ) {\n\t\t\tgroup = tokenize( selector );\n\t\t}\n\t\ti = group.length;\n\t\twhile ( i-- ) {\n\t\t\tcached = matcherFromTokens( group[i] );\n\t\t\tif ( cached[ expando ] ) {\n\t\t\t\tsetMatchers.push( cached );\n\t\t\t} else {\n\t\t\t\telementMatchers.push( cached );\n\t\t\t}\n\t\t}\n\n\t\t// Cache the compiled function\n\t\tcached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );\n\t}\n\treturn cached;\n};\n\nfunction multipleContexts( selector, contexts, results ) {\n\tvar i = 0,\n\t\tlen = contexts.length;\n\tfor ( ; i < len; i++ ) {\n\t\tSizzle( selector, contexts[i], results );\n\t}\n\treturn results;\n}\n\nfunction select( selector, context, results, seed ) {\n\tvar i, tokens, token, type, find,\n\t\tmatch = tokenize( selector );\n\n\tif ( !seed ) {\n\t\t// Try to minimize operations if there is only one group\n\t\tif ( match.length === 1 ) {\n\n\t\t\t// Take a shortcut and set the context if the root selector is an ID\n\t\t\ttokens = match[0] = match[0].slice( 0 );\n\t\t\tif ( tokens.length > 2 && (token = tokens[0]).type === \"ID\" &&\n\t\t\t\t\tsupport.getById && context.nodeType === 9 && documentIsHTML &&\n\t\t\t\t\tExpr.relative[ tokens[1].type ] ) {\n\n\t\t\t\tcontext = ( Expr.find[\"ID\"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0];\n\t\t\t\tif ( !context ) {\n\t\t\t\t\treturn results;\n\t\t\t\t}\n\t\t\t\tselector = selector.slice( tokens.shift().value.length );\n\t\t\t}\n\n\t\t\t// Fetch a seed set for right-to-left matching\n\t\t\ti = matchExpr[\"needsContext\"].test( selector ) ? 0 : tokens.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\ttoken = tokens[i];\n\n\t\t\t\t// Abort if we hit a combinator\n\t\t\t\tif ( Expr.relative[ (type = token.type) ] ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif ( (find = Expr.find[ type ]) ) {\n\t\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\t\tif ( (seed = find(\n\t\t\t\t\t\ttoken.matches[0].replace( runescape, funescape ),\n\t\t\t\t\t\trsibling.test( tokens[0].type ) && context.parentNode || context\n\t\t\t\t\t)) ) {\n\n\t\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\t\ttokens.splice( i, 1 );\n\t\t\t\t\t\tselector = seed.length && toSelector( tokens );\n\t\t\t\t\t\tif ( !selector ) {\n\t\t\t\t\t\t\tpush.apply( results, seed );\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Compile and execute a filtering function\n\t// Provide `match` to avoid retokenization if we modified the selector above\n\tcompile( selector, match )(\n\t\tseed,\n\t\tcontext,\n\t\t!documentIsHTML,\n\t\tresults,\n\t\trsibling.test( selector )\n\t);\n\treturn results;\n}\n\n// One-time assignments\n\n// Sort stability\nsupport.sortStable = expando.split(\"\").sort( sortOrder ).join(\"\") === expando;\n\n// Support: Chrome<14\n// Always assume duplicates if they aren't passed to the comparison function\nsupport.detectDuplicates = hasDuplicate;\n\n// Initialize against the default document\nsetDocument();\n\n// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)\n// Detached nodes confoundingly follow *each other*\nsupport.sortDetached = assert(function( div1 ) {\n\t// Should return 1, but returns 4 (following)\n\treturn div1.compareDocumentPosition( document.createElement(\"div\") ) & 1;\n});\n\n// Support: IE<8\n// Prevent attribute/property \"interpolation\"\n// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx\nif ( !assert(function( div ) {\n\tdiv.innerHTML = \"<a href='#'></a>\";\n\treturn div.firstChild.getAttribute(\"href\") === \"#\" ;\n}) ) {\n\taddHandle( \"type|href|height|width\", function( elem, name, isXML ) {\n\t\tif ( !isXML ) {\n\t\t\treturn elem.getAttribute( name, name.toLowerCase() === \"type\" ? 1 : 2 );\n\t\t}\n\t});\n}\n\n// Support: IE<9\n// Use defaultValue in place of getAttribute(\"value\")\nif ( !support.attributes || !assert(function( div ) {\n\tdiv.innerHTML = \"<input/>\";\n\tdiv.firstChild.setAttribute( \"value\", \"\" );\n\treturn div.firstChild.getAttribute( \"value\" ) === \"\";\n}) ) {\n\taddHandle( \"value\", function( elem, name, isXML ) {\n\t\tif ( !isXML && elem.nodeName.toLowerCase() === \"input\" ) {\n\t\t\treturn elem.defaultValue;\n\t\t}\n\t});\n}\n\n// Support: IE<9\n// Use getAttributeNode to fetch booleans when getAttribute lies\nif ( !assert(function( div ) {\n\treturn div.getAttribute(\"disabled\") == null;\n}) ) {\n\taddHandle( booleans, function( elem, name, isXML ) {\n\t\tvar val;\n\t\tif ( !isXML ) {\n\t\t\treturn (val = elem.getAttributeNode( name )) && val.specified ?\n\t\t\t\tval.value :\n\t\t\t\telem[ name ] === true ? name.toLowerCase() : null;\n\t\t}\n\t});\n}\n\njQuery.find = Sizzle;\njQuery.expr = Sizzle.selectors;\njQuery.expr[\":\"] = jQuery.expr.pseudos;\njQuery.unique = Sizzle.uniqueSort;\njQuery.text = Sizzle.getText;\njQuery.isXMLDoc = Sizzle.isXML;\njQuery.contains = Sizzle.contains;\n\n\n})( window );\n// String to Object options format cache\nvar optionsCache = {};\n\n// Convert String-formatted options into Object-formatted ones and store in cache\nfunction createOptions( options ) {\n\tvar object = optionsCache[ options ] = {};\n\tjQuery.each( options.match( core_rnotwhite ) || [], function( _, flag ) {\n\t\tobject[ flag ] = true;\n\t});\n\treturn object;\n}\n\n/*\n * Create a callback list using the following parameters:\n *\n *\toptions: an optional list of space-separated options that will change how\n *\t\t\tthe callback list behaves or a more traditional option object\n *\n * By default a callback list will act like an event callback list and can be\n * \"fired\" multiple times.\n *\n * Possible options:\n *\n *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n *\n *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n *\t\t\t\t\tvalues (like a Deferred)\n *\n *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n *\n *\tstopOnFalse:\tinterrupt callings when a callback returns false\n *\n */\njQuery.Callbacks = function( options ) {\n\n\t// Convert options from String-formatted to Object-formatted if needed\n\t// (we check in cache first)\n\toptions = typeof options === \"string\" ?\n\t\t( optionsCache[ options ] || createOptions( options ) ) :\n\t\tjQuery.extend( {}, options );\n\n\tvar // Flag to know if list is currently firing\n\t\tfiring,\n\t\t// Last fire value (for non-forgettable lists)\n\t\tmemory,\n\t\t// Flag to know if list was already fired\n\t\tfired,\n\t\t// End of the loop when firing\n\t\tfiringLength,\n\t\t// Index of currently firing callback (modified by remove if needed)\n\t\tfiringIndex,\n\t\t// First callback to fire (used internally by add and fireWith)\n\t\tfiringStart,\n\t\t// Actual callback list\n\t\tlist = [],\n\t\t// Stack of fire calls for repeatable lists\n\t\tstack = !options.once && [],\n\t\t// Fire callbacks\n\t\tfire = function( data ) {\n\t\t\tmemory = options.memory && data;\n\t\t\tfired = true;\n\t\t\tfiringIndex = firingStart || 0;\n\t\t\tfiringStart = 0;\n\t\t\tfiringLength = list.length;\n\t\t\tfiring = true;\n\t\t\tfor ( ; list && firingIndex < firingLength; firingIndex++ ) {\n\t\t\t\tif ( list[ firingIndex ].apply( data[ 0 ], data[ 1 ] ) === false && options.stopOnFalse ) {\n\t\t\t\t\tmemory = false; // To prevent further calls using add\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tfiring = false;\n\t\t\tif ( list ) {\n\t\t\t\tif ( stack ) {\n\t\t\t\t\tif ( stack.length ) {\n\t\t\t\t\t\tfire( stack.shift() );\n\t\t\t\t\t}\n\t\t\t\t} else if ( memory ) {\n\t\t\t\t\tlist = [];\n\t\t\t\t} else {\n\t\t\t\t\tself.disable();\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t// Actual Callbacks object\n\t\tself = {\n\t\t\t// Add a callback or a collection of callbacks to the list\n\t\t\tadd: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\t// First, we save the current length\n\t\t\t\t\tvar start = list.length;\n\t\t\t\t\t(function add( args ) {\n\t\t\t\t\t\tjQuery.each( args, function( _, arg ) {\n\t\t\t\t\t\t\tvar type = jQuery.type( arg );\n\t\t\t\t\t\t\tif ( type === \"function\" ) {\n\t\t\t\t\t\t\t\tif ( !options.unique || !self.has( arg ) ) {\n\t\t\t\t\t\t\t\t\tlist.push( arg );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if ( arg && arg.length && type !== \"string\" ) {\n\t\t\t\t\t\t\t\t// Inspect recursively\n\t\t\t\t\t\t\t\tadd( arg );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t})( arguments );\n\t\t\t\t\t// Do we need to add the callbacks to the\n\t\t\t\t\t// current firing batch?\n\t\t\t\t\tif ( firing ) {\n\t\t\t\t\t\tfiringLength = list.length;\n\t\t\t\t\t// With memory, if we're not firing then\n\t\t\t\t\t// we should call right away\n\t\t\t\t\t} else if ( memory ) {\n\t\t\t\t\t\tfiringStart = start;\n\t\t\t\t\t\tfire( memory );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\t// Remove a callback from the list\n\t\t\tremove: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\tjQuery.each( arguments, function( _, arg ) {\n\t\t\t\t\t\tvar index;\n\t\t\t\t\t\twhile( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {\n\t\t\t\t\t\t\tlist.splice( index, 1 );\n\t\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\t\tif ( firing ) {\n\t\t\t\t\t\t\t\tif ( index <= firingLength ) {\n\t\t\t\t\t\t\t\t\tfiringLength--;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif ( index <= firingIndex ) {\n\t\t\t\t\t\t\t\t\tfiringIndex--;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\t// Check if a given callback is in the list.\n\t\t\t// If no argument is given, return whether or not list has callbacks attached.\n\t\t\thas: function( fn ) {\n\t\t\t\treturn fn ? jQuery.inArray( fn, list ) > -1 : !!( list && list.length );\n\t\t\t},\n\t\t\t// Remove all callbacks from the list\n\t\t\tempty: function() {\n\t\t\t\tlist = [];\n\t\t\t\tfiringLength = 0;\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\t// Have the list do nothing anymore\n\t\t\tdisable: function() {\n\t\t\t\tlist = stack = memory = undefined;\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\t// Is it disabled?\n\t\t\tdisabled: function() {\n\t\t\t\treturn !list;\n\t\t\t},\n\t\t\t// Lock the list in its current state\n\t\t\tlock: function() {\n\t\t\t\tstack = undefined;\n\t\t\t\tif ( !memory ) {\n\t\t\t\t\tself.disable();\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\t// Is it locked?\n\t\t\tlocked: function() {\n\t\t\t\treturn !stack;\n\t\t\t},\n\t\t\t// Call all callbacks with the given context and arguments\n\t\t\tfireWith: function( context, args ) {\n\t\t\t\tif ( list && ( !fired || stack ) ) {\n\t\t\t\t\targs = args || [];\n\t\t\t\t\targs = [ context, args.slice ? args.slice() : args ];\n\t\t\t\t\tif ( firing ) {\n\t\t\t\t\t\tstack.push( args );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tfire( args );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\t// Call all the callbacks with the given arguments\n\t\t\tfire: function() {\n\t\t\t\tself.fireWith( this, arguments );\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\t// To know if the callbacks have already been called at least once\n\t\t\tfired: function() {\n\t\t\t\treturn !!fired;\n\t\t\t}\n\t\t};\n\n\treturn self;\n};\njQuery.extend({\n\n\tDeferred: function( func ) {\n\t\tvar tuples = [\n\t\t\t\t// action, add listener, listener list, final state\n\t\t\t\t[ \"resolve\", \"done\", jQuery.Callbacks(\"once memory\"), \"resolved\" ],\n\t\t\t\t[ \"reject\", \"fail\", jQuery.Callbacks(\"once memory\"), \"rejected\" ],\n\t\t\t\t[ \"notify\", \"progress\", jQuery.Callbacks(\"memory\") ]\n\t\t\t],\n\t\t\tstate = \"pending\",\n\t\t\tpromise = {\n\t\t\t\tstate: function() {\n\t\t\t\t\treturn state;\n\t\t\t\t},\n\t\t\t\talways: function() {\n\t\t\t\t\tdeferred.done( arguments ).fail( arguments );\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\tthen: function( /* fnDone, fnFail, fnProgress */ ) {\n\t\t\t\t\tvar fns = arguments;\n\t\t\t\t\treturn jQuery.Deferred(function( newDefer ) {\n\t\t\t\t\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\t\t\t\t\tvar action = tuple[ 0 ],\n\t\t\t\t\t\t\t\tfn = jQuery.isFunction( fns[ i ] ) && fns[ i ];\n\t\t\t\t\t\t\t// deferred[ done | fail | progress ] for forwarding actions to newDefer\n\t\t\t\t\t\t\tdeferred[ tuple[1] ](function() {\n\t\t\t\t\t\t\t\tvar returned = fn && fn.apply( this, arguments );\n\t\t\t\t\t\t\t\tif ( returned && jQuery.isFunction( returned.promise ) ) {\n\t\t\t\t\t\t\t\t\treturned.promise()\n\t\t\t\t\t\t\t\t\t\t.done( newDefer.resolve )\n\t\t\t\t\t\t\t\t\t\t.fail( newDefer.reject )\n\t\t\t\t\t\t\t\t\t\t.progress( newDefer.notify );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tnewDefer[ action + \"With\" ]( this === promise ? newDefer.promise() : this, fn ? [ returned ] : arguments );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t});\n\t\t\t\t\t\tfns = null;\n\t\t\t\t\t}).promise();\n\t\t\t\t},\n\t\t\t\t// Get a promise for this deferred\n\t\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\t\tpromise: function( obj ) {\n\t\t\t\t\treturn obj != null ? jQuery.extend( obj, promise ) : promise;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdeferred = {};\n\n\t\t// Keep pipe for back-compat\n\t\tpromise.pipe = promise.then;\n\n\t\t// Add list-specific methods\n\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\tvar list = tuple[ 2 ],\n\t\t\t\tstateString = tuple[ 3 ];\n\n\t\t\t// promise[ done | fail | progress ] = list.add\n\t\t\tpromise[ tuple[1] ] = list.add;\n\n\t\t\t// Handle state\n\t\t\tif ( stateString ) {\n\t\t\t\tlist.add(function() {\n\t\t\t\t\t// state = [ resolved | rejected ]\n\t\t\t\t\tstate = stateString;\n\n\t\t\t\t// [ reject_list | resolve_list ].disable; progress_list.lock\n\t\t\t\t}, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock );\n\t\t\t}\n\n\t\t\t// deferred[ resolve | reject | notify ]\n\t\t\tdeferred[ tuple[0] ] = function() {\n\t\t\t\tdeferred[ tuple[0] + \"With\" ]( this === deferred ? promise : this, arguments );\n\t\t\t\treturn this;\n\t\t\t};\n\t\t\tdeferred[ tuple[0] + \"With\" ] = list.fireWith;\n\t\t});\n\n\t\t// Make the deferred a promise\n\t\tpromise.promise( deferred );\n\n\t\t// Call given func if any\n\t\tif ( func ) {\n\t\t\tfunc.call( deferred, deferred );\n\t\t}\n\n\t\t// All done!\n\t\treturn deferred;\n\t},\n\n\t// Deferred helper\n\twhen: function( subordinate /* , ..., subordinateN */ ) {\n\t\tvar i = 0,\n\t\t\tresolveValues = core_slice.call( arguments ),\n\t\t\tlength = resolveValues.length,\n\n\t\t\t// the count of uncompleted subordinates\n\t\t\tremaining = length !== 1 || ( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0,\n\n\t\t\t// the master Deferred. If resolveValues consist of only a single Deferred, just use that.\n\t\t\tdeferred = remaining === 1 ? subordinate : jQuery.Deferred(),\n\n\t\t\t// Update function for both resolve and progress values\n\t\t\tupdateFunc = function( i, contexts, values ) {\n\t\t\t\treturn function( value ) {\n\t\t\t\t\tcontexts[ i ] = this;\n\t\t\t\t\tvalues[ i ] = arguments.length > 1 ? core_slice.call( arguments ) : value;\n\t\t\t\t\tif( values === progressValues ) {\n\t\t\t\t\t\tdeferred.notifyWith( contexts, values );\n\t\t\t\t\t} else if ( !( --remaining ) ) {\n\t\t\t\t\t\tdeferred.resolveWith( contexts, values );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t},\n\n\t\t\tprogressValues, progressContexts, resolveContexts;\n\n\t\t// add listeners to Deferred subordinates; treat others as resolved\n\t\tif ( length > 1 ) {\n\t\t\tprogressValues = new Array( length );\n\t\t\tprogressContexts = new Array( length );\n\t\t\tresolveContexts = new Array( length );\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) {\n\t\t\t\t\tresolveValues[ i ].promise()\n\t\t\t\t\t\t.done( updateFunc( i, resolveContexts, resolveValues ) )\n\t\t\t\t\t\t.fail( deferred.reject )\n\t\t\t\t\t\t.progress( updateFunc( i, progressContexts, progressValues ) );\n\t\t\t\t} else {\n\t\t\t\t\t--remaining;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// if we're not waiting on anything, resolve the master\n\t\tif ( !remaining ) {\n\t\t\tdeferred.resolveWith( resolveContexts, resolveValues );\n\t\t}\n\n\t\treturn deferred.promise();\n\t}\n});\njQuery.support = (function( support ) {\n\n\tvar all, a, input, select, fragment, opt, eventName, isSupported, i,\n\t\tdiv = document.createElement(\"div\");\n\n\t// Setup\n\tdiv.setAttribute( \"className\", \"t\" );\n\tdiv.innerHTML = \"  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>\";\n\n\t// Finish early in limited (non-browser) environments\n\tall = div.getElementsByTagName(\"*\") || [];\n\ta = div.getElementsByTagName(\"a\")[ 0 ];\n\tif ( !a || !a.style || !all.length ) {\n\t\treturn support;\n\t}\n\n\t// First batch of tests\n\tselect = document.createElement(\"select\");\n\topt = select.appendChild( document.createElement(\"option\") );\n\tinput = div.getElementsByTagName(\"input\")[ 0 ];\n\n\ta.style.cssText = \"top:1px;float:left;opacity:.5\";\n\n\t// Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7)\n\tsupport.getSetAttribute = div.className !== \"t\";\n\n\t// IE strips leading whitespace when .innerHTML is used\n\tsupport.leadingWhitespace = div.firstChild.nodeType === 3;\n\n\t// Make sure that tbody elements aren't automatically inserted\n\t// IE will insert them into empty tables\n\tsupport.tbody = !div.getElementsByTagName(\"tbody\").length;\n\n\t// Make sure that link elements get serialized correctly by innerHTML\n\t// This requires a wrapper element in IE\n\tsupport.htmlSerialize = !!div.getElementsByTagName(\"link\").length;\n\n\t// Get the style information from getAttribute\n\t// (IE uses .cssText instead)\n\tsupport.style = /top/.test( a.getAttribute(\"style\") );\n\n\t// Make sure that URLs aren't manipulated\n\t// (IE normalizes it by default)\n\tsupport.hrefNormalized = a.getAttribute(\"href\") === \"/a\";\n\n\t// Make sure that element opacity exists\n\t// (IE uses filter instead)\n\t// Use a regex to work around a WebKit issue. See #5145\n\tsupport.opacity = /^0.5/.test( a.style.opacity );\n\n\t// Verify style float existence\n\t// (IE uses styleFloat instead of cssFloat)\n\tsupport.cssFloat = !!a.style.cssFloat;\n\n\t// Check the default checkbox/radio value (\"\" on WebKit; \"on\" elsewhere)\n\tsupport.checkOn = !!input.value;\n\n\t// Make sure that a selected-by-default option has a working selected property.\n\t// (WebKit defaults to false instead of true, IE too, if it's in an optgroup)\n\tsupport.optSelected = opt.selected;\n\n\t// Tests for enctype support on a form (#6743)\n\tsupport.enctype = !!document.createElement(\"form\").enctype;\n\n\t// Makes sure cloning an html5 element does not cause problems\n\t// Where outerHTML is undefined, this still works\n\tsupport.html5Clone = document.createElement(\"nav\").cloneNode( true ).outerHTML !== \"<:nav></:nav>\";\n\n\t// Will be defined later\n\tsupport.inlineBlockNeedsLayout = false;\n\tsupport.shrinkWrapBlocks = false;\n\tsupport.pixelPosition = false;\n\tsupport.deleteExpando = true;\n\tsupport.noCloneEvent = true;\n\tsupport.reliableMarginRight = true;\n\tsupport.boxSizingReliable = true;\n\n\t// Make sure checked status is properly cloned\n\tinput.checked = true;\n\tsupport.noCloneChecked = input.cloneNode( true ).checked;\n\n\t// Make sure that the options inside disabled selects aren't marked as disabled\n\t// (WebKit marks them as disabled)\n\tselect.disabled = true;\n\tsupport.optDisabled = !opt.disabled;\n\n\t// Support: IE<9\n\ttry {\n\t\tdelete div.test;\n\t} catch( e ) {\n\t\tsupport.deleteExpando = false;\n\t}\n\n\t// Check if we can trust getAttribute(\"value\")\n\tinput = document.createElement(\"input\");\n\tinput.setAttribute( \"value\", \"\" );\n\tsupport.input = input.getAttribute( \"value\" ) === \"\";\n\n\t// Check if an input maintains its value after becoming a radio\n\tinput.value = \"t\";\n\tinput.setAttribute( \"type\", \"radio\" );\n\tsupport.radioValue = input.value === \"t\";\n\n\t// #11217 - WebKit loses check when the name is after the checked attribute\n\tinput.setAttribute( \"checked\", \"t\" );\n\tinput.setAttribute( \"name\", \"t\" );\n\n\tfragment = document.createDocumentFragment();\n\tfragment.appendChild( input );\n\n\t// Check if a disconnected checkbox will retain its checked\n\t// value of true after appended to the DOM (IE6/7)\n\tsupport.appendChecked = input.checked;\n\n\t// WebKit doesn't clone checked state correctly in fragments\n\tsupport.checkClone = fragment.cloneNode( true ).cloneNode( true ).lastChild.checked;\n\n\t// Support: IE<9\n\t// Opera does not clone events (and typeof div.attachEvent === undefined).\n\t// IE9-10 clones events bound via attachEvent, but they don't trigger with .click()\n\tif ( div.attachEvent ) {\n\t\tdiv.attachEvent( \"onclick\", function() {\n\t\t\tsupport.noCloneEvent = false;\n\t\t});\n\n\t\tdiv.cloneNode( true ).click();\n\t}\n\n\t// Support: IE<9 (lack submit/change bubble), Firefox 17+ (lack focusin event)\n\t// Beware of CSP restrictions (https://developer.mozilla.org/en/Security/CSP)\n\tfor ( i in { submit: true, change: true, focusin: true }) {\n\t\tdiv.setAttribute( eventName = \"on\" + i, \"t\" );\n\n\t\tsupport[ i + \"Bubbles\" ] = eventName in window || div.attributes[ eventName ].expando === false;\n\t}\n\n\tdiv.style.backgroundClip = \"content-box\";\n\tdiv.cloneNode( true ).style.backgroundClip = \"\";\n\tsupport.clearCloneStyle = div.style.backgroundClip === \"content-box\";\n\n\t// Support: IE<9\n\t// Iteration over object's inherited properties before its own.\n\tfor ( i in jQuery( support ) ) {\n\t\tbreak;\n\t}\n\tsupport.ownLast = i !== \"0\";\n\n\t// Run tests that need a body at doc ready\n\tjQuery(function() {\n\t\tvar container, marginDiv, tds,\n\t\t\tdivReset = \"padding:0;margin:0;border:0;display:block;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;\",\n\t\t\tbody = document.getElementsByTagName(\"body\")[0];\n\n\t\tif ( !body ) {\n\t\t\t// Return for frameset docs that don't have a body\n\t\t\treturn;\n\t\t}\n\n\t\tcontainer = document.createElement(\"div\");\n\t\tcontainer.style.cssText = \"border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px\";\n\n\t\tbody.appendChild( container ).appendChild( div );\n\n\t\t// Support: IE8\n\t\t// Check if table cells still have offsetWidth/Height when they are set\n\t\t// to display:none and there are still other visible table cells in a\n\t\t// table row; if so, offsetWidth/Height are not reliable for use when\n\t\t// determining if an element has been hidden directly using\n\t\t// display:none (it is still safe to use offsets if a parent element is\n\t\t// hidden; don safety goggles and see bug #4512 for more information).\n\t\tdiv.innerHTML = \"<table><tr><td></td><td>t</td></tr></table>\";\n\t\ttds = div.getElementsByTagName(\"td\");\n\t\ttds[ 0 ].style.cssText = \"padding:0;margin:0;border:0;display:none\";\n\t\tisSupported = ( tds[ 0 ].offsetHeight === 0 );\n\n\t\ttds[ 0 ].style.display = \"\";\n\t\ttds[ 1 ].style.display = \"none\";\n\n\t\t// Support: IE8\n\t\t// Check if empty table cells still have offsetWidth/Height\n\t\tsupport.reliableHiddenOffsets = isSupported && ( tds[ 0 ].offsetHeight === 0 );\n\n\t\t// Check box-sizing and margin behavior.\n\t\tdiv.innerHTML = \"\";\n\t\tdiv.style.cssText = \"box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;\";\n\n\t\t// Workaround failing boxSizing test due to offsetWidth returning wrong value\n\t\t// with some non-1 values of body zoom, ticket #13543\n\t\tjQuery.swap( body, body.style.zoom != null ? { zoom: 1 } : {}, function() {\n\t\t\tsupport.boxSizing = div.offsetWidth === 4;\n\t\t});\n\n\t\t// Use window.getComputedStyle because jsdom on node.js will break without it.\n\t\tif ( window.getComputedStyle ) {\n\t\t\tsupport.pixelPosition = ( window.getComputedStyle( div, null ) || {} ).top !== \"1%\";\n\t\t\tsupport.boxSizingReliable = ( window.getComputedStyle( div, null ) || { width: \"4px\" } ).width === \"4px\";\n\n\t\t\t// Check if div with explicit width and no margin-right incorrectly\n\t\t\t// gets computed margin-right based on width of container. (#3333)\n\t\t\t// Fails in WebKit before Feb 2011 nightlies\n\t\t\t// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right\n\t\t\tmarginDiv = div.appendChild( document.createElement(\"div\") );\n\t\t\tmarginDiv.style.cssText = div.style.cssText = divReset;\n\t\t\tmarginDiv.style.marginRight = marginDiv.style.width = \"0\";\n\t\t\tdiv.style.width = \"1px\";\n\n\t\t\tsupport.reliableMarginRight =\n\t\t\t\t!parseFloat( ( window.getComputedStyle( marginDiv, null ) || {} ).marginRight );\n\t\t}\n\n\t\tif ( typeof div.style.zoom !== core_strundefined ) {\n\t\t\t// Support: IE<8\n\t\t\t// Check if natively block-level elements act like inline-block\n\t\t\t// elements when setting their display to 'inline' and giving\n\t\t\t// them layout\n\t\t\tdiv.innerHTML = \"\";\n\t\t\tdiv.style.cssText = divReset + \"width:1px;padding:1px;display:inline;zoom:1\";\n\t\t\tsupport.inlineBlockNeedsLayout = ( div.offsetWidth === 3 );\n\n\t\t\t// Support: IE6\n\t\t\t// Check if elements with layout shrink-wrap their children\n\t\t\tdiv.style.display = \"block\";\n\t\t\tdiv.innerHTML = \"<div></div>\";\n\t\t\tdiv.firstChild.style.width = \"5px\";\n\t\t\tsupport.shrinkWrapBlocks = ( div.offsetWidth !== 3 );\n\n\t\t\tif ( support.inlineBlockNeedsLayout ) {\n\t\t\t\t// Prevent IE 6 from affecting layout for positioned elements #11048\n\t\t\t\t// Prevent IE from shrinking the body in IE 7 mode #12869\n\t\t\t\t// Support: IE<8\n\t\t\t\tbody.style.zoom = 1;\n\t\t\t}\n\t\t}\n\n\t\tbody.removeChild( container );\n\n\t\t// Null elements to avoid leaks in IE\n\t\tcontainer = div = tds = marginDiv = null;\n\t});\n\n\t// Null elements to avoid leaks in IE\n\tall = select = fragment = opt = a = input = null;\n\n\treturn support;\n})({});\n\nvar rbrace = /(?:\\{[\\s\\S]*\\}|\\[[\\s\\S]*\\])$/,\n\trmultiDash = /([A-Z])/g;\n\nfunction internalData( elem, name, data, pvt /* Internal Use Only */ ){\n\tif ( !jQuery.acceptData( elem ) ) {\n\t\treturn;\n\t}\n\n\tvar ret, thisCache,\n\t\tinternalKey = jQuery.expando,\n\n\t\t// We have to handle DOM nodes and JS objects differently because IE6-7\n\t\t// can't GC object references properly across the DOM-JS boundary\n\t\tisNode = elem.nodeType,\n\n\t\t// Only DOM nodes need the global jQuery cache; JS object data is\n\t\t// attached directly to the object so GC can occur automatically\n\t\tcache = isNode ? jQuery.cache : elem,\n\n\t\t// Only defining an ID for JS objects if its cache already exists allows\n\t\t// the code to shortcut on the same path as a DOM node with no cache\n\t\tid = isNode ? elem[ internalKey ] : elem[ internalKey ] && internalKey;\n\n\t// Avoid doing any more work than we need to when trying to get data on an\n\t// object that has no data at all\n\tif ( (!id || !cache[id] || (!pvt && !cache[id].data)) && data === undefined && typeof name === \"string\" ) {\n\t\treturn;\n\t}\n\n\tif ( !id ) {\n\t\t// Only DOM nodes need a new unique ID for each element since their data\n\t\t// ends up in the global cache\n\t\tif ( isNode ) {\n\t\t\tid = elem[ internalKey ] = core_deletedIds.pop() || jQuery.guid++;\n\t\t} else {\n\t\t\tid = internalKey;\n\t\t}\n\t}\n\n\tif ( !cache[ id ] ) {\n\t\t// Avoid exposing jQuery metadata on plain JS objects when the object\n\t\t// is serialized using JSON.stringify\n\t\tcache[ id ] = isNode ? {} : { toJSON: jQuery.noop };\n\t}\n\n\t// An object can be passed to jQuery.data instead of a key/value pair; this gets\n\t// shallow copied over onto the existing cache\n\tif ( typeof name === \"object\" || typeof name === \"function\" ) {\n\t\tif ( pvt ) {\n\t\t\tcache[ id ] = jQuery.extend( cache[ id ], name );\n\t\t} else {\n\t\t\tcache[ id ].data = jQuery.extend( cache[ id ].data, name );\n\t\t}\n\t}\n\n\tthisCache = cache[ id ];\n\n\t// jQuery data() is stored in a separate object inside the object's internal data\n\t// cache in order to avoid key collisions between internal data and user-defined\n\t// data.\n\tif ( !pvt ) {\n\t\tif ( !thisCache.data ) {\n\t\t\tthisCache.data = {};\n\t\t}\n\n\t\tthisCache = thisCache.data;\n\t}\n\n\tif ( data !== undefined ) {\n\t\tthisCache[ jQuery.camelCase( name ) ] = data;\n\t}\n\n\t// Check for both converted-to-camel and non-converted data property names\n\t// If a data property was specified\n\tif ( typeof name === \"string\" ) {\n\n\t\t// First Try to find as-is property data\n\t\tret = thisCache[ name ];\n\n\t\t// Test for null|undefined property data\n\t\tif ( ret == null ) {\n\n\t\t\t// Try to find the camelCased property\n\t\t\tret = thisCache[ jQuery.camelCase( name ) ];\n\t\t}\n\t} else {\n\t\tret = thisCache;\n\t}\n\n\treturn ret;\n}\n\nfunction internalRemoveData( elem, name, pvt ) {\n\tif ( !jQuery.acceptData( elem ) ) {\n\t\treturn;\n\t}\n\n\tvar thisCache, i,\n\t\tisNode = elem.nodeType,\n\n\t\t// See jQuery.data for more information\n\t\tcache = isNode ? jQuery.cache : elem,\n\t\tid = isNode ? elem[ jQuery.expando ] : jQuery.expando;\n\n\t// If there is already no cache entry for this object, there is no\n\t// purpose in continuing\n\tif ( !cache[ id ] ) {\n\t\treturn;\n\t}\n\n\tif ( name ) {\n\n\t\tthisCache = pvt ? cache[ id ] : cache[ id ].data;\n\n\t\tif ( thisCache ) {\n\n\t\t\t// Support array or space separated string names for data keys\n\t\t\tif ( !jQuery.isArray( name ) ) {\n\n\t\t\t\t// try the string as a key before any manipulation\n\t\t\t\tif ( name in thisCache ) {\n\t\t\t\t\tname = [ name ];\n\t\t\t\t} else {\n\n\t\t\t\t\t// split the camel cased version by spaces unless a key with the spaces exists\n\t\t\t\t\tname = jQuery.camelCase( name );\n\t\t\t\t\tif ( name in thisCache ) {\n\t\t\t\t\t\tname = [ name ];\n\t\t\t\t\t} else {\n\t\t\t\t\t\tname = name.split(\" \");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// If \"name\" is an array of keys...\n\t\t\t\t// When data is initially created, via (\"key\", \"val\") signature,\n\t\t\t\t// keys will be converted to camelCase.\n\t\t\t\t// Since there is no way to tell _how_ a key was added, remove\n\t\t\t\t// both plain key and camelCase key. #12786\n\t\t\t\t// This will only penalize the array argument path.\n\t\t\t\tname = name.concat( jQuery.map( name, jQuery.camelCase ) );\n\t\t\t}\n\n\t\t\ti = name.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tdelete thisCache[ name[i] ];\n\t\t\t}\n\n\t\t\t// If there is no data left in the cache, we want to continue\n\t\t\t// and let the cache object itself get destroyed\n\t\t\tif ( pvt ? !isEmptyDataObject(thisCache) : !jQuery.isEmptyObject(thisCache) ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t}\n\n\t// See jQuery.data for more information\n\tif ( !pvt ) {\n\t\tdelete cache[ id ].data;\n\n\t\t// Don't destroy the parent cache unless the internal data object\n\t\t// had been the only thing left in it\n\t\tif ( !isEmptyDataObject( cache[ id ] ) ) {\n\t\t\treturn;\n\t\t}\n\t}\n\n\t// Destroy the cache\n\tif ( isNode ) {\n\t\tjQuery.cleanData( [ elem ], true );\n\n\t// Use delete when supported for expandos or `cache` is not a window per isWindow (#10080)\n\t/* jshint eqeqeq: false */\n\t} else if ( jQuery.support.deleteExpando || cache != cache.window ) {\n\t\t/* jshint eqeqeq: true */\n\t\tdelete cache[ id ];\n\n\t// When all else fails, null\n\t} else {\n\t\tcache[ id ] = null;\n\t}\n}\n\njQuery.extend({\n\tcache: {},\n\n\t// The following elements throw uncatchable exceptions if you\n\t// attempt to add expando properties to them.\n\tnoData: {\n\t\t\"applet\": true,\n\t\t\"embed\": true,\n\t\t// Ban all objects except for Flash (which handle expandos)\n\t\t\"object\": \"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000\"\n\t},\n\n\thasData: function( elem ) {\n\t\telem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ];\n\t\treturn !!elem && !isEmptyDataObject( elem );\n\t},\n\n\tdata: function( elem, name, data ) {\n\t\treturn internalData( elem, name, data );\n\t},\n\n\tremoveData: function( elem, name ) {\n\t\treturn internalRemoveData( elem, name );\n\t},\n\n\t// For internal use only.\n\t_data: function( elem, name, data ) {\n\t\treturn internalData( elem, name, data, true );\n\t},\n\n\t_removeData: function( elem, name ) {\n\t\treturn internalRemoveData( elem, name, true );\n\t},\n\n\t// A method for determining if a DOM node can handle the data expando\n\tacceptData: function( elem ) {\n\t\t// Do not set data on non-element because it will not be cleared (#8335).\n\t\tif ( elem.nodeType && elem.nodeType !== 1 && elem.nodeType !== 9 ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tvar noData = elem.nodeName && jQuery.noData[ elem.nodeName.toLowerCase() ];\n\n\t\t// nodes accept data unless otherwise specified; rejection can be conditional\n\t\treturn !noData || noData !== true && elem.getAttribute(\"classid\") === noData;\n\t}\n});\n\njQuery.fn.extend({\n\tdata: function( key, value ) {\n\t\tvar attrs, name,\n\t\t\tdata = null,\n\t\t\ti = 0,\n\t\t\telem = this[0];\n\n\t\t// Special expections of .data basically thwart jQuery.access,\n\t\t// so implement the relevant behavior ourselves\n\n\t\t// Gets all values\n\t\tif ( key === undefined ) {\n\t\t\tif ( this.length ) {\n\t\t\t\tdata = jQuery.data( elem );\n\n\t\t\t\tif ( elem.nodeType === 1 && !jQuery._data( elem, \"parsedAttrs\" ) ) {\n\t\t\t\t\tattrs = elem.attributes;\n\t\t\t\t\tfor ( ; i < attrs.length; i++ ) {\n\t\t\t\t\t\tname = attrs[i].name;\n\n\t\t\t\t\t\tif ( name.indexOf(\"data-\") === 0 ) {\n\t\t\t\t\t\t\tname = jQuery.camelCase( name.slice(5) );\n\n\t\t\t\t\t\t\tdataAttr( elem, name, data[ name ] );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tjQuery._data( elem, \"parsedAttrs\", true );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn data;\n\t\t}\n\n\t\t// Sets multiple values\n\t\tif ( typeof key === \"object\" ) {\n\t\t\treturn this.each(function() {\n\t\t\t\tjQuery.data( this, key );\n\t\t\t});\n\t\t}\n\n\t\treturn arguments.length > 1 ?\n\n\t\t\t// Sets one value\n\t\t\tthis.each(function() {\n\t\t\t\tjQuery.data( this, key, value );\n\t\t\t}) :\n\n\t\t\t// Gets one value\n\t\t\t// Try to fetch any internally stored data first\n\t\t\telem ? dataAttr( elem, key, jQuery.data( elem, key ) ) : null;\n\t},\n\n\tremoveData: function( key ) {\n\t\treturn this.each(function() {\n\t\t\tjQuery.removeData( this, key );\n\t\t});\n\t}\n});\n\nfunction dataAttr( elem, key, data ) {\n\t// If nothing was found internally, try to fetch any\n\t// data from the HTML5 data-* attribute\n\tif ( data === undefined && elem.nodeType === 1 ) {\n\n\t\tvar name = \"data-\" + key.replace( rmultiDash, \"-$1\" ).toLowerCase();\n\n\t\tdata = elem.getAttribute( name );\n\n\t\tif ( typeof data === \"string\" ) {\n\t\t\ttry {\n\t\t\t\tdata = data === \"true\" ? true :\n\t\t\t\t\tdata === \"false\" ? false :\n\t\t\t\t\tdata === \"null\" ? null :\n\t\t\t\t\t// Only convert to a number if it doesn't change the string\n\t\t\t\t\t+data + \"\" === data ? +data :\n\t\t\t\t\trbrace.test( data ) ? jQuery.parseJSON( data ) :\n\t\t\t\t\t\tdata;\n\t\t\t} catch( e ) {}\n\n\t\t\t// Make sure we set the data so it isn't changed later\n\t\t\tjQuery.data( elem, key, data );\n\n\t\t} else {\n\t\t\tdata = undefined;\n\t\t}\n\t}\n\n\treturn data;\n}\n\n// checks a cache object for emptiness\nfunction isEmptyDataObject( obj ) {\n\tvar name;\n\tfor ( name in obj ) {\n\n\t\t// if the public data object is empty, the private is still empty\n\t\tif ( name === \"data\" && jQuery.isEmptyObject( obj[name] ) ) {\n\t\t\tcontinue;\n\t\t}\n\t\tif ( name !== \"toJSON\" ) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\treturn true;\n}\njQuery.extend({\n\tqueue: function( elem, type, data ) {\n\t\tvar queue;\n\n\t\tif ( elem ) {\n\t\t\ttype = ( type || \"fx\" ) + \"queue\";\n\t\t\tqueue = jQuery._data( elem, type );\n\n\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\tif ( data ) {\n\t\t\t\tif ( !queue || jQuery.isArray(data) ) {\n\t\t\t\t\tqueue = jQuery._data( elem, type, jQuery.makeArray(data) );\n\t\t\t\t} else {\n\t\t\t\t\tqueue.push( data );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn queue || [];\n\t\t}\n\t},\n\n\tdequeue: function( elem, type ) {\n\t\ttype = type || \"fx\";\n\n\t\tvar queue = jQuery.queue( elem, type ),\n\t\t\tstartLength = queue.length,\n\t\t\tfn = queue.shift(),\n\t\t\thooks = jQuery._queueHooks( elem, type ),\n\t\t\tnext = function() {\n\t\t\t\tjQuery.dequeue( elem, type );\n\t\t\t};\n\n\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\tif ( fn === \"inprogress\" ) {\n\t\t\tfn = queue.shift();\n\t\t\tstartLength--;\n\t\t}\n\n\t\tif ( fn ) {\n\n\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t// automatically dequeued\n\t\t\tif ( type === \"fx\" ) {\n\t\t\t\tqueue.unshift( \"inprogress\" );\n\t\t\t}\n\n\t\t\t// clear up the last queue stop function\n\t\t\tdelete hooks.stop;\n\t\t\tfn.call( elem, next, hooks );\n\t\t}\n\n\t\tif ( !startLength && hooks ) {\n\t\t\thooks.empty.fire();\n\t\t}\n\t},\n\n\t// not intended for public consumption - generates a queueHooks object, or returns the current one\n\t_queueHooks: function( elem, type ) {\n\t\tvar key = type + \"queueHooks\";\n\t\treturn jQuery._data( elem, key ) || jQuery._data( elem, key, {\n\t\t\tempty: jQuery.Callbacks(\"once memory\").add(function() {\n\t\t\t\tjQuery._removeData( elem, type + \"queue\" );\n\t\t\t\tjQuery._removeData( elem, key );\n\t\t\t})\n\t\t});\n\t}\n});\n\njQuery.fn.extend({\n\tqueue: function( type, data ) {\n\t\tvar setter = 2;\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tdata = type;\n\t\t\ttype = \"fx\";\n\t\t\tsetter--;\n\t\t}\n\n\t\tif ( arguments.length < setter ) {\n\t\t\treturn jQuery.queue( this[0], type );\n\t\t}\n\n\t\treturn data === undefined ?\n\t\t\tthis :\n\t\t\tthis.each(function() {\n\t\t\t\tvar queue = jQuery.queue( this, type, data );\n\n\t\t\t\t// ensure a hooks for this queue\n\t\t\t\tjQuery._queueHooks( this, type );\n\n\t\t\t\tif ( type === \"fx\" && queue[0] !== \"inprogress\" ) {\n\t\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t\t}\n\t\t\t});\n\t},\n\tdequeue: function( type ) {\n\t\treturn this.each(function() {\n\t\t\tjQuery.dequeue( this, type );\n\t\t});\n\t},\n\t// Based off of the plugin by Clint Helfers, with permission.\n\t// http://blindsignals.com/index.php/2009/07/jquery-delay/\n\tdelay: function( time, type ) {\n\t\ttime = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;\n\t\ttype = type || \"fx\";\n\n\t\treturn this.queue( type, function( next, hooks ) {\n\t\t\tvar timeout = setTimeout( next, time );\n\t\t\thooks.stop = function() {\n\t\t\t\tclearTimeout( timeout );\n\t\t\t};\n\t\t});\n\t},\n\tclearQueue: function( type ) {\n\t\treturn this.queue( type || \"fx\", [] );\n\t},\n\t// Get a promise resolved when queues of a certain type\n\t// are emptied (fx is the type by default)\n\tpromise: function( type, obj ) {\n\t\tvar tmp,\n\t\t\tcount = 1,\n\t\t\tdefer = jQuery.Deferred(),\n\t\t\telements = this,\n\t\t\ti = this.length,\n\t\t\tresolve = function() {\n\t\t\t\tif ( !( --count ) ) {\n\t\t\t\t\tdefer.resolveWith( elements, [ elements ] );\n\t\t\t\t}\n\t\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tobj = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\ttype = type || \"fx\";\n\n\t\twhile( i-- ) {\n\t\t\ttmp = jQuery._data( elements[ i ], type + \"queueHooks\" );\n\t\t\tif ( tmp && tmp.empty ) {\n\t\t\t\tcount++;\n\t\t\t\ttmp.empty.add( resolve );\n\t\t\t}\n\t\t}\n\t\tresolve();\n\t\treturn defer.promise( obj );\n\t}\n});\nvar nodeHook, boolHook,\n\trclass = /[\\t\\r\\n\\f]/g,\n\trreturn = /\\r/g,\n\trfocusable = /^(?:input|select|textarea|button|object)$/i,\n\trclickable = /^(?:a|area)$/i,\n\truseDefault = /^(?:checked|selected)$/i,\n\tgetSetAttribute = jQuery.support.getSetAttribute,\n\tgetSetInput = jQuery.support.input;\n\njQuery.fn.extend({\n\tattr: function( name, value ) {\n\t\treturn jQuery.access( this, jQuery.attr, name, value, arguments.length > 1 );\n\t},\n\n\tremoveAttr: function( name ) {\n\t\treturn this.each(function() {\n\t\t\tjQuery.removeAttr( this, name );\n\t\t});\n\t},\n\n\tprop: function( name, value ) {\n\t\treturn jQuery.access( this, jQuery.prop, name, value, arguments.length > 1 );\n\t},\n\n\tremoveProp: function( name ) {\n\t\tname = jQuery.propFix[ name ] || name;\n\t\treturn this.each(function() {\n\t\t\t// try/catch handles cases where IE balks (such as removing a property on window)\n\t\t\ttry {\n\t\t\t\tthis[ name ] = undefined;\n\t\t\t\tdelete this[ name ];\n\t\t\t} catch( e ) {}\n\t\t});\n\t},\n\n\taddClass: function( value ) {\n\t\tvar classes, elem, cur, clazz, j,\n\t\t\ti = 0,\n\t\t\tlen = this.length,\n\t\t\tproceed = typeof value === \"string\" && value;\n\n\t\tif ( jQuery.isFunction( value ) ) {\n\t\t\treturn this.each(function( j ) {\n\t\t\t\tjQuery( this ).addClass( value.call( this, j, this.className ) );\n\t\t\t});\n\t\t}\n\n\t\tif ( proceed ) {\n\t\t\t// The disjunction here is for better compressibility (see removeClass)\n\t\t\tclasses = ( value || \"\" ).match( core_rnotwhite ) || [];\n\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\telem = this[ i ];\n\t\t\t\tcur = elem.nodeType === 1 && ( elem.className ?\n\t\t\t\t\t( \" \" + elem.className + \" \" ).replace( rclass, \" \" ) :\n\t\t\t\t\t\" \"\n\t\t\t\t);\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( (clazz = classes[j++]) ) {\n\t\t\t\t\t\tif ( cur.indexOf( \" \" + clazz + \" \" ) < 0 ) {\n\t\t\t\t\t\t\tcur += clazz + \" \";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telem.className = jQuery.trim( cur );\n\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tremoveClass: function( value ) {\n\t\tvar classes, elem, cur, clazz, j,\n\t\t\ti = 0,\n\t\t\tlen = this.length,\n\t\t\tproceed = arguments.length === 0 || typeof value === \"string\" && value;\n\n\t\tif ( jQuery.isFunction( value ) ) {\n\t\t\treturn this.each(function( j ) {\n\t\t\t\tjQuery( this ).removeClass( value.call( this, j, this.className ) );\n\t\t\t});\n\t\t}\n\t\tif ( proceed ) {\n\t\t\tclasses = ( value || \"\" ).match( core_rnotwhite ) || [];\n\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\telem = this[ i ];\n\t\t\t\t// This expression is here for better compressibility (see addClass)\n\t\t\t\tcur = elem.nodeType === 1 && ( elem.className ?\n\t\t\t\t\t( \" \" + elem.className + \" \" ).replace( rclass, \" \" ) :\n\t\t\t\t\t\"\"\n\t\t\t\t);\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( (clazz = classes[j++]) ) {\n\t\t\t\t\t\t// Remove *all* instances\n\t\t\t\t\t\twhile ( cur.indexOf( \" \" + clazz + \" \" ) >= 0 ) {\n\t\t\t\t\t\t\tcur = cur.replace( \" \" + clazz + \" \", \" \" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telem.className = value ? jQuery.trim( cur ) : \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\ttoggleClass: function( value, stateVal ) {\n\t\tvar type = typeof value;\n\n\t\tif ( typeof stateVal === \"boolean\" && type === \"string\" ) {\n\t\t\treturn stateVal ? this.addClass( value ) : this.removeClass( value );\n\t\t}\n\n\t\tif ( jQuery.isFunction( value ) ) {\n\t\t\treturn this.each(function( i ) {\n\t\t\t\tjQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal );\n\t\t\t});\n\t\t}\n\n\t\treturn this.each(function() {\n\t\t\tif ( type === \"string\" ) {\n\t\t\t\t// toggle individual class names\n\t\t\t\tvar className,\n\t\t\t\t\ti = 0,\n\t\t\t\t\tself = jQuery( this ),\n\t\t\t\t\tclassNames = value.match( core_rnotwhite ) || [];\n\n\t\t\t\twhile ( (className = classNames[ i++ ]) ) {\n\t\t\t\t\t// check each className given, space separated list\n\t\t\t\t\tif ( self.hasClass( className ) ) {\n\t\t\t\t\t\tself.removeClass( className );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.addClass( className );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Toggle whole class name\n\t\t\t} else if ( type === core_strundefined || type === \"boolean\" ) {\n\t\t\t\tif ( this.className ) {\n\t\t\t\t\t// store className if set\n\t\t\t\t\tjQuery._data( this, \"__className__\", this.className );\n\t\t\t\t}\n\n\t\t\t\t// If the element has a class name or if we're passed \"false\",\n\t\t\t\t// then remove the whole classname (if there was one, the above saved it).\n\t\t\t\t// Otherwise bring back whatever was previously saved (if anything),\n\t\t\t\t// falling back to the empty string if nothing was stored.\n\t\t\t\tthis.className = this.className || value === false ? \"\" : jQuery._data( this, \"__className__\" ) || \"\";\n\t\t\t}\n\t\t});\n\t},\n\n\thasClass: function( selector ) {\n\t\tvar className = \" \" + selector + \" \",\n\t\t\ti = 0,\n\t\t\tl = this.length;\n\t\tfor ( ; i < l; i++ ) {\n\t\t\tif ( this[i].nodeType === 1 && (\" \" + this[i].className + \" \").replace(rclass, \" \").indexOf( className ) >= 0 ) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t},\n\n\tval: function( value ) {\n\t\tvar ret, hooks, isFunction,\n\t\t\telem = this[0];\n\n\t\tif ( !arguments.length ) {\n\t\t\tif ( elem ) {\n\t\t\t\thooks = jQuery.valHooks[ elem.type ] || jQuery.valHooks[ elem.nodeName.toLowerCase() ];\n\n\t\t\t\tif ( hooks && \"get\" in hooks && (ret = hooks.get( elem, \"value\" )) !== undefined ) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\tret = elem.value;\n\n\t\t\t\treturn typeof ret === \"string\" ?\n\t\t\t\t\t// handle most common string cases\n\t\t\t\t\tret.replace(rreturn, \"\") :\n\t\t\t\t\t// handle cases where value is null/undef or number\n\t\t\t\t\tret == null ? \"\" : ret;\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tisFunction = jQuery.isFunction( value );\n\n\t\treturn this.each(function( i ) {\n\t\t\tvar val;\n\n\t\t\tif ( this.nodeType !== 1 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( isFunction ) {\n\t\t\t\tval = value.call( this, i, jQuery( this ).val() );\n\t\t\t} else {\n\t\t\t\tval = value;\n\t\t\t}\n\n\t\t\t// Treat null/undefined as \"\"; convert numbers to string\n\t\t\tif ( val == null ) {\n\t\t\t\tval = \"\";\n\t\t\t} else if ( typeof val === \"number\" ) {\n\t\t\t\tval += \"\";\n\t\t\t} else if ( jQuery.isArray( val ) ) {\n\t\t\t\tval = jQuery.map(val, function ( value ) {\n\t\t\t\t\treturn value == null ? \"\" : value + \"\";\n\t\t\t\t});\n\t\t\t}\n\n\t\t\thooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];\n\n\t\t\t// If set returns undefined, fall back to normal setting\n\t\t\tif ( !hooks || !(\"set\" in hooks) || hooks.set( this, val, \"value\" ) === undefined ) {\n\t\t\t\tthis.value = val;\n\t\t\t}\n\t\t});\n\t}\n});\n\njQuery.extend({\n\tvalHooks: {\n\t\toption: {\n\t\t\tget: function( elem ) {\n\t\t\t\t// Use proper attribute retrieval(#6932, #12072)\n\t\t\t\tvar val = jQuery.find.attr( elem, \"value\" );\n\t\t\t\treturn val != null ?\n\t\t\t\t\tval :\n\t\t\t\t\telem.text;\n\t\t\t}\n\t\t},\n\t\tselect: {\n\t\t\tget: function( elem ) {\n\t\t\t\tvar value, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tindex = elem.selectedIndex,\n\t\t\t\t\tone = elem.type === \"select-one\" || index < 0,\n\t\t\t\t\tvalues = one ? null : [],\n\t\t\t\t\tmax = one ? index + 1 : options.length,\n\t\t\t\t\ti = index < 0 ?\n\t\t\t\t\t\tmax :\n\t\t\t\t\t\tone ? index : 0;\n\n\t\t\t\t// Loop through all the selected options\n\t\t\t\tfor ( ; i < max; i++ ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t// oldIE doesn't update selected after form reset (#2551)\n\t\t\t\t\tif ( ( option.selected || i === index ) &&\n\t\t\t\t\t\t\t// Don't return options that are disabled or in a disabled optgroup\n\t\t\t\t\t\t\t( jQuery.support.optDisabled ? !option.disabled : option.getAttribute(\"disabled\") === null ) &&\n\t\t\t\t\t\t\t( !option.parentNode.disabled || !jQuery.nodeName( option.parentNode, \"optgroup\" ) ) ) {\n\n\t\t\t\t\t\t// Get the specific value for the option\n\t\t\t\t\t\tvalue = jQuery( option ).val();\n\n\t\t\t\t\t\t// We don't need an array for one selects\n\t\t\t\t\t\tif ( one ) {\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Multi-Selects return an array\n\t\t\t\t\t\tvalues.push( value );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn values;\n\t\t\t},\n\n\t\t\tset: function( elem, value ) {\n\t\t\t\tvar optionSet, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tvalues = jQuery.makeArray( value ),\n\t\t\t\t\ti = options.length;\n\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\toption = options[ i ];\n\t\t\t\t\tif ( (option.selected = jQuery.inArray( jQuery(option).val(), values ) >= 0) ) {\n\t\t\t\t\t\toptionSet = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// force browsers to behave consistently when non-matching value is set\n\t\t\t\tif ( !optionSet ) {\n\t\t\t\t\telem.selectedIndex = -1;\n\t\t\t\t}\n\t\t\t\treturn values;\n\t\t\t}\n\t\t}\n\t},\n\n\tattr: function( elem, name, value ) {\n\t\tvar hooks, ret,\n\t\t\tnType = elem.nodeType;\n\n\t\t// don't get/set attributes on text, comment and attribute nodes\n\t\tif ( !elem || nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Fallback to prop when attributes are not supported\n\t\tif ( typeof elem.getAttribute === core_strundefined ) {\n\t\t\treturn jQuery.prop( elem, name, value );\n\t\t}\n\n\t\t// All attributes are lowercase\n\t\t// Grab necessary hook if one is defined\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\t\t\tname = name.toLowerCase();\n\t\t\thooks = jQuery.attrHooks[ name ] ||\n\t\t\t\t( jQuery.expr.match.bool.test( name ) ? boolHook : nodeHook );\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\n\t\t\tif ( value === null ) {\n\t\t\t\tjQuery.removeAttr( elem, name );\n\n\t\t\t} else if ( hooks && \"set\" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) {\n\t\t\t\treturn ret;\n\n\t\t\t} else {\n\t\t\t\telem.setAttribute( name, value + \"\" );\n\t\t\t\treturn value;\n\t\t\t}\n\n\t\t} else if ( hooks && \"get\" in hooks && (ret = hooks.get( elem, name )) !== null ) {\n\t\t\treturn ret;\n\n\t\t} else {\n\t\t\tret = jQuery.find.attr( elem, name );\n\n\t\t\t// Non-existent attributes return null, we normalize to undefined\n\t\t\treturn ret == null ?\n\t\t\t\tundefined :\n\t\t\t\tret;\n\t\t}\n\t},\n\n\tremoveAttr: function( elem, value ) {\n\t\tvar name, propName,\n\t\t\ti = 0,\n\t\t\tattrNames = value && value.match( core_rnotwhite );\n\n\t\tif ( attrNames && elem.nodeType === 1 ) {\n\t\t\twhile ( (name = attrNames[i++]) ) {\n\t\t\t\tpropName = jQuery.propFix[ name ] || name;\n\n\t\t\t\t// Boolean attributes get special treatment (#10870)\n\t\t\t\tif ( jQuery.expr.match.bool.test( name ) ) {\n\t\t\t\t\t// Set corresponding property to false\n\t\t\t\t\tif ( getSetInput && getSetAttribute || !ruseDefault.test( name ) ) {\n\t\t\t\t\t\telem[ propName ] = false;\n\t\t\t\t\t// Support: IE<9\n\t\t\t\t\t// Also clear defaultChecked/defaultSelected (if appropriate)\n\t\t\t\t\t} else {\n\t\t\t\t\t\telem[ jQuery.camelCase( \"default-\" + name ) ] =\n\t\t\t\t\t\t\telem[ propName ] = false;\n\t\t\t\t\t}\n\n\t\t\t\t// See #9699 for explanation of this approach (setting first, then removal)\n\t\t\t\t} else {\n\t\t\t\t\tjQuery.attr( elem, name, \"\" );\n\t\t\t\t}\n\n\t\t\t\telem.removeAttribute( getSetAttribute ? name : propName );\n\t\t\t}\n\t\t}\n\t},\n\n\tattrHooks: {\n\t\ttype: {\n\t\t\tset: function( elem, value ) {\n\t\t\t\tif ( !jQuery.support.radioValue && value === \"radio\" && jQuery.nodeName(elem, \"input\") ) {\n\t\t\t\t\t// Setting the type on a radio button after the value resets the value in IE6-9\n\t\t\t\t\t// Reset value to default in case type is set after value during creation\n\t\t\t\t\tvar val = elem.value;\n\t\t\t\t\telem.setAttribute( \"type\", value );\n\t\t\t\t\tif ( val ) {\n\t\t\t\t\t\telem.value = val;\n\t\t\t\t\t}\n\t\t\t\t\treturn value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tpropFix: {\n\t\t\"for\": \"htmlFor\",\n\t\t\"class\": \"className\"\n\t},\n\n\tprop: function( elem, name, value ) {\n\t\tvar ret, hooks, notxml,\n\t\t\tnType = elem.nodeType;\n\n\t\t// don't get/set properties on text, comment and attribute nodes\n\t\tif ( !elem || nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tnotxml = nType !== 1 || !jQuery.isXMLDoc( elem );\n\n\t\tif ( notxml ) {\n\t\t\t// Fix name and attach hooks\n\t\t\tname = jQuery.propFix[ name ] || name;\n\t\t\thooks = jQuery.propHooks[ name ];\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\treturn hooks && \"set\" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ?\n\t\t\t\tret :\n\t\t\t\t( elem[ name ] = value );\n\n\t\t} else {\n\t\t\treturn hooks && \"get\" in hooks && (ret = hooks.get( elem, name )) !== null ?\n\t\t\t\tret :\n\t\t\t\telem[ name ];\n\t\t}\n\t},\n\n\tpropHooks: {\n\t\ttabIndex: {\n\t\t\tget: function( elem ) {\n\t\t\t\t// elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set\n\t\t\t\t// http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/\n\t\t\t\t// Use proper attribute retrieval(#12072)\n\t\t\t\tvar tabindex = jQuery.find.attr( elem, \"tabindex\" );\n\n\t\t\t\treturn tabindex ?\n\t\t\t\t\tparseInt( tabindex, 10 ) :\n\t\t\t\t\trfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ?\n\t\t\t\t\t\t0 :\n\t\t\t\t\t\t-1;\n\t\t\t}\n\t\t}\n\t}\n});\n\n// Hooks for boolean attributes\nboolHook = {\n\tset: function( elem, value, name ) {\n\t\tif ( value === false ) {\n\t\t\t// Remove boolean attributes when set to false\n\t\t\tjQuery.removeAttr( elem, name );\n\t\t} else if ( getSetInput && getSetAttribute || !ruseDefault.test( name ) ) {\n\t\t\t// IE<8 needs the *property* name\n\t\t\telem.setAttribute( !getSetAttribute && jQuery.propFix[ name ] || name, name );\n\n\t\t// Use defaultChecked and defaultSelected for oldIE\n\t\t} else {\n\t\t\telem[ jQuery.camelCase( \"default-\" + name ) ] = elem[ name ] = true;\n\t\t}\n\n\t\treturn name;\n\t}\n};\njQuery.each( jQuery.expr.match.bool.source.match( /\\w+/g ), function( i, name ) {\n\tvar getter = jQuery.expr.attrHandle[ name ] || jQuery.find.attr;\n\n\tjQuery.expr.attrHandle[ name ] = getSetInput && getSetAttribute || !ruseDefault.test( name ) ?\n\t\tfunction( elem, name, isXML ) {\n\t\t\tvar fn = jQuery.expr.attrHandle[ name ],\n\t\t\t\tret = isXML ?\n\t\t\t\t\tundefined :\n\t\t\t\t\t/* jshint eqeqeq: false */\n\t\t\t\t\t(jQuery.expr.attrHandle[ name ] = undefined) !=\n\t\t\t\t\t\tgetter( elem, name, isXML ) ?\n\n\t\t\t\t\t\tname.toLowerCase() :\n\t\t\t\t\t\tnull;\n\t\t\tjQuery.expr.attrHandle[ name ] = fn;\n\t\t\treturn ret;\n\t\t} :\n\t\tfunction( elem, name, isXML ) {\n\t\t\treturn isXML ?\n\t\t\t\tundefined :\n\t\t\t\telem[ jQuery.camelCase( \"default-\" + name ) ] ?\n\t\t\t\t\tname.toLowerCase() :\n\t\t\t\t\tnull;\n\t\t};\n});\n\n// fix oldIE attroperties\nif ( !getSetInput || !getSetAttribute ) {\n\tjQuery.attrHooks.value = {\n\t\tset: function( elem, value, name ) {\n\t\t\tif ( jQuery.nodeName( elem, \"input\" ) ) {\n\t\t\t\t// Does not return so that setAttribute is also used\n\t\t\t\telem.defaultValue = value;\n\t\t\t} else {\n\t\t\t\t// Use nodeHook if defined (#1954); otherwise setAttribute is fine\n\t\t\t\treturn nodeHook && nodeHook.set( elem, value, name );\n\t\t\t}\n\t\t}\n\t};\n}\n\n// IE6/7 do not support getting/setting some attributes with get/setAttribute\nif ( !getSetAttribute ) {\n\n\t// Use this for any attribute in IE6/7\n\t// This fixes almost every IE6/7 issue\n\tnodeHook = {\n\t\tset: function( elem, value, name ) {\n\t\t\t// Set the existing or create a new attribute node\n\t\t\tvar ret = elem.getAttributeNode( name );\n\t\t\tif ( !ret ) {\n\t\t\t\telem.setAttributeNode(\n\t\t\t\t\t(ret = elem.ownerDocument.createAttribute( name ))\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tret.value = value += \"\";\n\n\t\t\t// Break association with cloned elements by also using setAttribute (#9646)\n\t\t\treturn name === \"value\" || value === elem.getAttribute( name ) ?\n\t\t\t\tvalue :\n\t\t\t\tundefined;\n\t\t}\n\t};\n\tjQuery.expr.attrHandle.id = jQuery.expr.attrHandle.name = jQuery.expr.attrHandle.coords =\n\t\t// Some attributes are constructed with empty-string values when not defined\n\t\tfunction( elem, name, isXML ) {\n\t\t\tvar ret;\n\t\t\treturn isXML ?\n\t\t\t\tundefined :\n\t\t\t\t(ret = elem.getAttributeNode( name )) && ret.value !== \"\" ?\n\t\t\t\t\tret.value :\n\t\t\t\t\tnull;\n\t\t};\n\tjQuery.valHooks.button = {\n\t\tget: function( elem, name ) {\n\t\t\tvar ret = elem.getAttributeNode( name );\n\t\t\treturn ret && ret.specified ?\n\t\t\t\tret.value :\n\t\t\t\tundefined;\n\t\t},\n\t\tset: nodeHook.set\n\t};\n\n\t// Set contenteditable to false on removals(#10429)\n\t// Setting to empty string throws an error as an invalid value\n\tjQuery.attrHooks.contenteditable = {\n\t\tset: function( elem, value, name ) {\n\t\t\tnodeHook.set( elem, value === \"\" ? false : value, name );\n\t\t}\n\t};\n\n\t// Set width and height to auto instead of 0 on empty string( Bug #8150 )\n\t// This is for removals\n\tjQuery.each([ \"width\", \"height\" ], function( i, name ) {\n\t\tjQuery.attrHooks[ name ] = {\n\t\t\tset: function( elem, value ) {\n\t\t\t\tif ( value === \"\" ) {\n\t\t\t\t\telem.setAttribute( name, \"auto\" );\n\t\t\t\t\treturn value;\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t});\n}\n\n\n// Some attributes require a special call on IE\n// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx\nif ( !jQuery.support.hrefNormalized ) {\n\t// href/src property should get the full normalized URL (#10299/#12915)\n\tjQuery.each([ \"href\", \"src\" ], function( i, name ) {\n\t\tjQuery.propHooks[ name ] = {\n\t\t\tget: function( elem ) {\n\t\t\t\treturn elem.getAttribute( name, 4 );\n\t\t\t}\n\t\t};\n\t});\n}\n\nif ( !jQuery.support.style ) {\n\tjQuery.attrHooks.style = {\n\t\tget: function( elem ) {\n\t\t\t// Return undefined in the case of empty string\n\t\t\t// Note: IE uppercases css property names, but if we were to .toLowerCase()\n\t\t\t// .cssText, that would destroy case senstitivity in URL's, like in \"background\"\n\t\t\treturn elem.style.cssText || undefined;\n\t\t},\n\t\tset: function( elem, value ) {\n\t\t\treturn ( elem.style.cssText = value + \"\" );\n\t\t}\n\t};\n}\n\n// Safari mis-reports the default selected property of an option\n// Accessing the parent's selectedIndex property fixes it\nif ( !jQuery.support.optSelected ) {\n\tjQuery.propHooks.selected = {\n\t\tget: function( elem ) {\n\t\t\tvar parent = elem.parentNode;\n\n\t\t\tif ( parent ) {\n\t\t\t\tparent.selectedIndex;\n\n\t\t\t\t// Make sure that it also works with optgroups, see #5701\n\t\t\t\tif ( parent.parentNode ) {\n\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn null;\n\t\t}\n\t};\n}\n\njQuery.each([\n\t\"tabIndex\",\n\t\"readOnly\",\n\t\"maxLength\",\n\t\"cellSpacing\",\n\t\"cellPadding\",\n\t\"rowSpan\",\n\t\"colSpan\",\n\t\"useMap\",\n\t\"frameBorder\",\n\t\"contentEditable\"\n], function() {\n\tjQuery.propFix[ this.toLowerCase() ] = this;\n});\n\n// IE6/7 call enctype encoding\nif ( !jQuery.support.enctype ) {\n\tjQuery.propFix.enctype = \"encoding\";\n}\n\n// Radios and checkboxes getter/setter\njQuery.each([ \"radio\", \"checkbox\" ], function() {\n\tjQuery.valHooks[ this ] = {\n\t\tset: function( elem, value ) {\n\t\t\tif ( jQuery.isArray( value ) ) {\n\t\t\t\treturn ( elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0 );\n\t\t\t}\n\t\t}\n\t};\n\tif ( !jQuery.support.checkOn ) {\n\t\tjQuery.valHooks[ this ].get = function( elem ) {\n\t\t\t// Support: Webkit\n\t\t\t// \"\" is returned instead of \"on\" if a value isn't specified\n\t\t\treturn elem.getAttribute(\"value\") === null ? \"on\" : elem.value;\n\t\t};\n\t}\n});\nvar rformElems = /^(?:input|select|textarea)$/i,\n\trkeyEvent = /^key/,\n\trmouseEvent = /^(?:mouse|contextmenu)|click/,\n\trfocusMorph = /^(?:focusinfocus|focusoutblur)$/,\n\trtypenamespace = /^([^.]*)(?:\\.(.+)|)$/;\n\nfunction returnTrue() {\n\treturn true;\n}\n\nfunction returnFalse() {\n\treturn false;\n}\n\nfunction safeActiveElement() {\n\ttry {\n\t\treturn document.activeElement;\n\t} catch ( err ) { }\n}\n\n/*\n * Helper functions for managing events -- not part of the public interface.\n * Props to Dean Edwards' addEvent library for many of the ideas.\n */\njQuery.event = {\n\n\tglobal: {},\n\n\tadd: function( elem, types, handler, data, selector ) {\n\t\tvar tmp, events, t, handleObjIn,\n\t\t\tspecial, eventHandle, handleObj,\n\t\t\thandlers, type, namespaces, origType,\n\t\t\telemData = jQuery._data( elem );\n\n\t\t// Don't attach events to noData or text/comment nodes (but allow plain objects)\n\t\tif ( !elemData ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Caller can pass in an object of custom data in lieu of the handler\n\t\tif ( handler.handler ) {\n\t\t\thandleObjIn = handler;\n\t\t\thandler = handleObjIn.handler;\n\t\t\tselector = handleObjIn.selector;\n\t\t}\n\n\t\t// Make sure that the handler has a unique ID, used to find/remove it later\n\t\tif ( !handler.guid ) {\n\t\t\thandler.guid = jQuery.guid++;\n\t\t}\n\n\t\t// Init the element's event structure and main handler, if this is the first\n\t\tif ( !(events = elemData.events) ) {\n\t\t\tevents = elemData.events = {};\n\t\t}\n\t\tif ( !(eventHandle = elemData.handle) ) {\n\t\t\teventHandle = elemData.handle = function( e ) {\n\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n\t\t\t\t// when an event is called after a page has unloaded\n\t\t\t\treturn typeof jQuery !== core_strundefined && (!e || jQuery.event.triggered !== e.type) ?\n\t\t\t\t\tjQuery.event.dispatch.apply( eventHandle.elem, arguments ) :\n\t\t\t\t\tundefined;\n\t\t\t};\n\t\t\t// Add elem as a property of the handle fn to prevent a memory leak with IE non-native events\n\t\t\teventHandle.elem = elem;\n\t\t}\n\n\t\t// Handle multiple events separated by a space\n\t\ttypes = ( types || \"\" ).match( core_rnotwhite ) || [\"\"];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[t] ) || [];\n\t\t\ttype = origType = tmp[1];\n\t\t\tnamespaces = ( tmp[2] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// There *must* be a type, no attaching namespace-only handlers\n\t\t\tif ( !type ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// If event changes its type, use the special event handlers for the changed type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// If selector defined, determine special event api type, otherwise given type\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\n\t\t\t// Update special based on newly reset type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// handleObj is passed to all event handlers\n\t\t\thandleObj = jQuery.extend({\n\t\t\t\ttype: type,\n\t\t\t\torigType: origType,\n\t\t\t\tdata: data,\n\t\t\t\thandler: handler,\n\t\t\t\tguid: handler.guid,\n\t\t\t\tselector: selector,\n\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test( selector ),\n\t\t\t\tnamespace: namespaces.join(\".\")\n\t\t\t}, handleObjIn );\n\n\t\t\t// Init the event handler queue if we're the first\n\t\t\tif ( !(handlers = events[ type ]) ) {\n\t\t\t\thandlers = events[ type ] = [];\n\t\t\t\thandlers.delegateCount = 0;\n\n\t\t\t\t// Only use addEventListener/attachEvent if the special events handler returns false\n\t\t\t\tif ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) {\n\t\t\t\t\t// Bind the global event handler to the element\n\t\t\t\t\tif ( elem.addEventListener ) {\n\t\t\t\t\t\telem.addEventListener( type, eventHandle, false );\n\n\t\t\t\t\t} else if ( elem.attachEvent ) {\n\t\t\t\t\t\telem.attachEvent( \"on\" + type, eventHandle );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( special.add ) {\n\t\t\t\tspecial.add.call( elem, handleObj );\n\n\t\t\t\tif ( !handleObj.handler.guid ) {\n\t\t\t\t\thandleObj.handler.guid = handler.guid;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add to the element's handler list, delegates in front\n\t\t\tif ( selector ) {\n\t\t\t\thandlers.splice( handlers.delegateCount++, 0, handleObj );\n\t\t\t} else {\n\t\t\t\thandlers.push( handleObj );\n\t\t\t}\n\n\t\t\t// Keep track of which events have ever been used, for event optimization\n\t\t\tjQuery.event.global[ type ] = true;\n\t\t}\n\n\t\t// Nullify elem to prevent memory leaks in IE\n\t\telem = null;\n\t},\n\n\t// Detach an event or set of events from an element\n\tremove: function( elem, types, handler, selector, mappedTypes ) {\n\t\tvar j, handleObj, tmp,\n\t\t\torigCount, t, events,\n\t\t\tspecial, handlers, type,\n\t\t\tnamespaces, origType,\n\t\t\telemData = jQuery.hasData( elem ) && jQuery._data( elem );\n\n\t\tif ( !elemData || !(events = elemData.events) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Once for each type.namespace in types; type may be omitted\n\t\ttypes = ( types || \"\" ).match( core_rnotwhite ) || [\"\"];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[t] ) || [];\n\t\t\ttype = origType = tmp[1];\n\t\t\tnamespaces = ( tmp[2] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// Unbind all events (on this namespace, if provided) for the element\n\t\t\tif ( !type ) {\n\t\t\t\tfor ( type in events ) {\n\t\t\t\t\tjQuery.event.remove( elem, type + types[ t ], handler, selector, true );\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\t\t\thandlers = events[ type ] || [];\n\t\t\ttmp = tmp[2] && new RegExp( \"(^|\\\\.)\" + namespaces.join(\"\\\\.(?:.*\\\\.|)\") + \"(\\\\.|$)\" );\n\n\t\t\t// Remove matching events\n\t\t\torigCount = j = handlers.length;\n\t\t\twhile ( j-- ) {\n\t\t\t\thandleObj = handlers[ j ];\n\n\t\t\t\tif ( ( mappedTypes || origType === handleObj.origType ) &&\n\t\t\t\t\t( !handler || handler.guid === handleObj.guid ) &&\n\t\t\t\t\t( !tmp || tmp.test( handleObj.namespace ) ) &&\n\t\t\t\t\t( !selector || selector === handleObj.selector || selector === \"**\" && handleObj.selector ) ) {\n\t\t\t\t\thandlers.splice( j, 1 );\n\n\t\t\t\t\tif ( handleObj.selector ) {\n\t\t\t\t\t\thandlers.delegateCount--;\n\t\t\t\t\t}\n\t\t\t\t\tif ( special.remove ) {\n\t\t\t\t\t\tspecial.remove.call( elem, handleObj );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove generic event handler if we removed something and no more handlers exist\n\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\n\t\t\tif ( origCount && !handlers.length ) {\n\t\t\t\tif ( !special.teardown || special.teardown.call( elem, namespaces, elemData.handle ) === false ) {\n\t\t\t\t\tjQuery.removeEvent( elem, type, elemData.handle );\n\t\t\t\t}\n\n\t\t\t\tdelete events[ type ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove the expando if it's no longer used\n\t\tif ( jQuery.isEmptyObject( events ) ) {\n\t\t\tdelete elemData.handle;\n\n\t\t\t// removeData also checks for emptiness and clears the expando if empty\n\t\t\t// so use it instead of delete\n\t\t\tjQuery._removeData( elem, \"events\" );\n\t\t}\n\t},\n\n\ttrigger: function( event, data, elem, onlyHandlers ) {\n\t\tvar handle, ontype, cur,\n\t\t\tbubbleType, special, tmp, i,\n\t\t\teventPath = [ elem || document ],\n\t\t\ttype = core_hasOwn.call( event, \"type\" ) ? event.type : event,\n\t\t\tnamespaces = core_hasOwn.call( event, \"namespace\" ) ? event.namespace.split(\".\") : [];\n\n\t\tcur = tmp = elem = elem || document;\n\n\t\t// Don't do events on text and comment nodes\n\t\tif ( elem.nodeType === 3 || elem.nodeType === 8 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// focus/blur morphs to focusin/out; ensure we're not firing them right now\n\t\tif ( rfocusMorph.test( type + jQuery.event.triggered ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( type.indexOf(\".\") >= 0 ) {\n\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\n\t\t\tnamespaces = type.split(\".\");\n\t\t\ttype = namespaces.shift();\n\t\t\tnamespaces.sort();\n\t\t}\n\t\tontype = type.indexOf(\":\") < 0 && \"on\" + type;\n\n\t\t// Caller can pass in a jQuery.Event object, Object, or just an event type string\n\t\tevent = event[ jQuery.expando ] ?\n\t\t\tevent :\n\t\t\tnew jQuery.Event( type, typeof event === \"object\" && event );\n\n\t\t// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n\t\tevent.isTrigger = onlyHandlers ? 2 : 3;\n\t\tevent.namespace = namespaces.join(\".\");\n\t\tevent.namespace_re = event.namespace ?\n\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join(\"\\\\.(?:.*\\\\.|)\") + \"(\\\\.|$)\" ) :\n\t\t\tnull;\n\n\t\t// Clean up the event in case it is being reused\n\t\tevent.result = undefined;\n\t\tif ( !event.target ) {\n\t\t\tevent.target = elem;\n\t\t}\n\n\t\t// Clone any incoming data and prepend the event, creating the handler arg list\n\t\tdata = data == null ?\n\t\t\t[ event ] :\n\t\t\tjQuery.makeArray( data, [ event ] );\n\n\t\t// Allow special events to draw outside the lines\n\t\tspecial = jQuery.event.special[ type ] || {};\n\t\tif ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine event propagation path in advance, per W3C events spec (#9951)\n\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (#9724)\n\t\tif ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {\n\n\t\t\tbubbleType = special.delegateType || type;\n\t\t\tif ( !rfocusMorph.test( bubbleType + type ) ) {\n\t\t\t\tcur = cur.parentNode;\n\t\t\t}\n\t\t\tfor ( ; cur; cur = cur.parentNode ) {\n\t\t\t\teventPath.push( cur );\n\t\t\t\ttmp = cur;\n\t\t\t}\n\n\t\t\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\n\t\t\tif ( tmp === (elem.ownerDocument || document) ) {\n\t\t\t\teventPath.push( tmp.defaultView || tmp.parentWindow || window );\n\t\t\t}\n\t\t}\n\n\t\t// Fire handlers on the event path\n\t\ti = 0;\n\t\twhile ( (cur = eventPath[i++]) && !event.isPropagationStopped() ) {\n\n\t\t\tevent.type = i > 1 ?\n\t\t\t\tbubbleType :\n\t\t\t\tspecial.bindType || type;\n\n\t\t\t// jQuery handler\n\t\t\thandle = ( jQuery._data( cur, \"events\" ) || {} )[ event.type ] && jQuery._data( cur, \"handle\" );\n\t\t\tif ( handle ) {\n\t\t\t\thandle.apply( cur, data );\n\t\t\t}\n\n\t\t\t// Native handler\n\t\t\thandle = ontype && cur[ ontype ];\n\t\t\tif ( handle && jQuery.acceptData( cur ) && handle.apply && handle.apply( cur, data ) === false ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\t\t}\n\t\tevent.type = type;\n\n\t\t// If nobody prevented the default action, do it now\n\t\tif ( !onlyHandlers && !event.isDefaultPrevented() ) {\n\n\t\t\tif ( (!special._default || special._default.apply( eventPath.pop(), data ) === false) &&\n\t\t\t\tjQuery.acceptData( elem ) ) {\n\n\t\t\t\t// Call a native DOM method on the target with the same name name as the event.\n\t\t\t\t// Can't use an .isFunction() check here because IE6/7 fails that test.\n\t\t\t\t// Don't do default actions on window, that's where global variables be (#6170)\n\t\t\t\tif ( ontype && elem[ type ] && !jQuery.isWindow( elem ) ) {\n\n\t\t\t\t\t// Don't re-trigger an onFOO event when we call its FOO() method\n\t\t\t\t\ttmp = elem[ ontype ];\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prevent re-triggering of the same event, since we already bubbled it above\n\t\t\t\t\tjQuery.event.triggered = type;\n\t\t\t\t\ttry {\n\t\t\t\t\t\telem[ type ]();\n\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t// IE<9 dies on focus/blur to hidden element (#1486,#12518)\n\t\t\t\t\t\t// only reproducible on winXP IE8 native, not IE9 in IE8 mode\n\t\t\t\t\t}\n\t\t\t\t\tjQuery.event.triggered = undefined;\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = tmp;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\tdispatch: function( event ) {\n\n\t\t// Make a writable jQuery.Event from the native event object\n\t\tevent = jQuery.event.fix( event );\n\n\t\tvar i, ret, handleObj, matched, j,\n\t\t\thandlerQueue = [],\n\t\t\targs = core_slice.call( arguments ),\n\t\t\thandlers = ( jQuery._data( this, \"events\" ) || {} )[ event.type ] || [],\n\t\t\tspecial = jQuery.event.special[ event.type ] || {};\n\n\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n\t\targs[0] = event;\n\t\tevent.delegateTarget = this;\n\n\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\n\t\tif ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine handlers\n\t\thandlerQueue = jQuery.event.handlers.call( this, event, handlers );\n\n\t\t// Run delegates first; they may want to stop propagation beneath us\n\t\ti = 0;\n\t\twhile ( (matched = handlerQueue[ i++ ]) && !event.isPropagationStopped() ) {\n\t\t\tevent.currentTarget = matched.elem;\n\n\t\t\tj = 0;\n\t\t\twhile ( (handleObj = matched.handlers[ j++ ]) && !event.isImmediatePropagationStopped() ) {\n\n\t\t\t\t// Triggered event must either 1) have no namespace, or\n\t\t\t\t// 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace).\n\t\t\t\tif ( !event.namespace_re || event.namespace_re.test( handleObj.namespace ) ) {\n\n\t\t\t\t\tevent.handleObj = handleObj;\n\t\t\t\t\tevent.data = handleObj.data;\n\n\t\t\t\t\tret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler )\n\t\t\t\t\t\t\t.apply( matched.elem, args );\n\n\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\tif ( (event.result = ret) === false ) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Call the postDispatch hook for the mapped type\n\t\tif ( special.postDispatch ) {\n\t\t\tspecial.postDispatch.call( this, event );\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\thandlers: function( event, handlers ) {\n\t\tvar sel, handleObj, matches, i,\n\t\t\thandlerQueue = [],\n\t\t\tdelegateCount = handlers.delegateCount,\n\t\t\tcur = event.target;\n\n\t\t// Find delegate handlers\n\t\t// Black-hole SVG <use> instance trees (#13180)\n\t\t// Avoid non-left-click bubbling in Firefox (#3861)\n\t\tif ( delegateCount && cur.nodeType && (!event.button || event.type !== \"click\") ) {\n\n\t\t\t/* jshint eqeqeq: false */\n\t\t\tfor ( ; cur != this; cur = cur.parentNode || this ) {\n\t\t\t\t/* jshint eqeqeq: true */\n\n\t\t\t\t// Don't check non-elements (#13208)\n\t\t\t\t// Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)\n\t\t\t\tif ( cur.nodeType === 1 && (cur.disabled !== true || event.type !== \"click\") ) {\n\t\t\t\t\tmatches = [];\n\t\t\t\t\tfor ( i = 0; i < delegateCount; i++ ) {\n\t\t\t\t\t\thandleObj = handlers[ i ];\n\n\t\t\t\t\t\t// Don't conflict with Object.prototype properties (#13203)\n\t\t\t\t\t\tsel = handleObj.selector + \" \";\n\n\t\t\t\t\t\tif ( matches[ sel ] === undefined ) {\n\t\t\t\t\t\t\tmatches[ sel ] = handleObj.needsContext ?\n\t\t\t\t\t\t\t\tjQuery( sel, this ).index( cur ) >= 0 :\n\t\t\t\t\t\t\t\tjQuery.find( sel, this, null, [ cur ] ).length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( matches[ sel ] ) {\n\t\t\t\t\t\t\tmatches.push( handleObj );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( matches.length ) {\n\t\t\t\t\t\thandlerQueue.push({ elem: cur, handlers: matches });\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Add the remaining (directly-bound) handlers\n\t\tif ( delegateCount < handlers.length ) {\n\t\t\thandlerQueue.push({ elem: this, handlers: handlers.slice( delegateCount ) });\n\t\t}\n\n\t\treturn handlerQueue;\n\t},\n\n\tfix: function( event ) {\n\t\tif ( event[ jQuery.expando ] ) {\n\t\t\treturn event;\n\t\t}\n\n\t\t// Create a writable copy of the event object and normalize some properties\n\t\tvar i, prop, copy,\n\t\t\ttype = event.type,\n\t\t\toriginalEvent = event,\n\t\t\tfixHook = this.fixHooks[ type ];\n\n\t\tif ( !fixHook ) {\n\t\t\tthis.fixHooks[ type ] = fixHook =\n\t\t\t\trmouseEvent.test( type ) ? this.mouseHooks :\n\t\t\t\trkeyEvent.test( type ) ? this.keyHooks :\n\t\t\t\t{};\n\t\t}\n\t\tcopy = fixHook.props ? this.props.concat( fixHook.props ) : this.props;\n\n\t\tevent = new jQuery.Event( originalEvent );\n\n\t\ti = copy.length;\n\t\twhile ( i-- ) {\n\t\t\tprop = copy[ i ];\n\t\t\tevent[ prop ] = originalEvent[ prop ];\n\t\t}\n\n\t\t// Support: IE<9\n\t\t// Fix target property (#1925)\n\t\tif ( !event.target ) {\n\t\t\tevent.target = originalEvent.srcElement || document;\n\t\t}\n\n\t\t// Support: Chrome 23+, Safari?\n\t\t// Target should not be a text node (#504, #13143)\n\t\tif ( event.target.nodeType === 3 ) {\n\t\t\tevent.target = event.target.parentNode;\n\t\t}\n\n\t\t// Support: IE<9\n\t\t// For mouse/key events, metaKey==false if it's undefined (#3368, #11328)\n\t\tevent.metaKey = !!event.metaKey;\n\n\t\treturn fixHook.filter ? fixHook.filter( event, originalEvent ) : event;\n\t},\n\n\t// Includes some event props shared by KeyEvent and MouseEvent\n\tprops: \"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which\".split(\" \"),\n\n\tfixHooks: {},\n\n\tkeyHooks: {\n\t\tprops: \"char charCode key keyCode\".split(\" \"),\n\t\tfilter: function( event, original ) {\n\n\t\t\t// Add which for key events\n\t\t\tif ( event.which == null ) {\n\t\t\t\tevent.which = original.charCode != null ? original.charCode : original.keyCode;\n\t\t\t}\n\n\t\t\treturn event;\n\t\t}\n\t},\n\n\tmouseHooks: {\n\t\tprops: \"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement\".split(\" \"),\n\t\tfilter: function( event, original ) {\n\t\t\tvar body, eventDoc, doc,\n\t\t\t\tbutton = original.button,\n\t\t\t\tfromElement = original.fromElement;\n\n\t\t\t// Calculate pageX/Y if missing and clientX/Y available\n\t\t\tif ( event.pageX == null && original.clientX != null ) {\n\t\t\t\teventDoc = event.target.ownerDocument || document;\n\t\t\t\tdoc = eventDoc.documentElement;\n\t\t\t\tbody = eventDoc.body;\n\n\t\t\t\tevent.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 );\n\t\t\t\tevent.pageY = original.clientY + ( doc && doc.scrollTop  || body && body.scrollTop  || 0 ) - ( doc && doc.clientTop  || body && body.clientTop  || 0 );\n\t\t\t}\n\n\t\t\t// Add relatedTarget, if necessary\n\t\t\tif ( !event.relatedTarget && fromElement ) {\n\t\t\t\tevent.relatedTarget = fromElement === event.target ? original.toElement : fromElement;\n\t\t\t}\n\n\t\t\t// Add which for click: 1 === left; 2 === middle; 3 === right\n\t\t\t// Note: button is not normalized, so don't use it\n\t\t\tif ( !event.which && button !== undefined ) {\n\t\t\t\tevent.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) );\n\t\t\t}\n\n\t\t\treturn event;\n\t\t}\n\t},\n\n\tspecial: {\n\t\tload: {\n\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\tnoBubble: true\n\t\t},\n\t\tfocus: {\n\t\t\t// Fire native event if possible so blur/focus sequence is correct\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this !== safeActiveElement() && this.focus ) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tthis.focus();\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t// Support: IE<9\n\t\t\t\t\t\t// If we error on focus to hidden element (#1486, #12518),\n\t\t\t\t\t\t// let .trigger() run the handlers\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\tdelegateType: \"focusin\"\n\t\t},\n\t\tblur: {\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this === safeActiveElement() && this.blur ) {\n\t\t\t\t\tthis.blur();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdelegateType: \"focusout\"\n\t\t},\n\t\tclick: {\n\t\t\t// For checkbox, fire native event so checked state will be right\n\t\t\ttrigger: function() {\n\t\t\t\tif ( jQuery.nodeName( this, \"input\" ) && this.type === \"checkbox\" && this.click ) {\n\t\t\t\t\tthis.click();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// For cross-browser consistency, don't fire native .click() on links\n\t\t\t_default: function( event ) {\n\t\t\t\treturn jQuery.nodeName( event.target, \"a\" );\n\t\t\t}\n\t\t},\n\n\t\tbeforeunload: {\n\t\t\tpostDispatch: function( event ) {\n\n\t\t\t\t// Even when returnValue equals to undefined Firefox will still show alert\n\t\t\t\tif ( event.result !== undefined ) {\n\t\t\t\t\tevent.originalEvent.returnValue = event.result;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tsimulate: function( type, elem, event, bubble ) {\n\t\t// Piggyback on a donor event to simulate a different one.\n\t\t// Fake originalEvent to avoid donor's stopPropagation, but if the\n\t\t// simulated event prevents default then we do the same on the donor.\n\t\tvar e = jQuery.extend(\n\t\t\tnew jQuery.Event(),\n\t\t\tevent,\n\t\t\t{\n\t\t\t\ttype: type,\n\t\t\t\tisSimulated: true,\n\t\t\t\toriginalEvent: {}\n\t\t\t}\n\t\t);\n\t\tif ( bubble ) {\n\t\t\tjQuery.event.trigger( e, null, elem );\n\t\t} else {\n\t\t\tjQuery.event.dispatch.call( elem, e );\n\t\t}\n\t\tif ( e.isDefaultPrevented() ) {\n\t\t\tevent.preventDefault();\n\t\t}\n\t}\n};\n\njQuery.removeEvent = document.removeEventListener ?\n\tfunction( elem, type, handle ) {\n\t\tif ( elem.removeEventListener ) {\n\t\t\telem.removeEventListener( type, handle, false );\n\t\t}\n\t} :\n\tfunction( elem, type, handle ) {\n\t\tvar name = \"on\" + type;\n\n\t\tif ( elem.detachEvent ) {\n\n\t\t\t// #8545, #7054, preventing memory leaks for custom events in IE6-8\n\t\t\t// detachEvent needed property on element, by name of that event, to properly expose it to GC\n\t\t\tif ( typeof elem[ name ] === core_strundefined ) {\n\t\t\t\telem[ name ] = null;\n\t\t\t}\n\n\t\t\telem.detachEvent( name, handle );\n\t\t}\n\t};\n\njQuery.Event = function( src, props ) {\n\t// Allow instantiation without the 'new' keyword\n\tif ( !(this instanceof jQuery.Event) ) {\n\t\treturn new jQuery.Event( src, props );\n\t}\n\n\t// Event object\n\tif ( src && src.type ) {\n\t\tthis.originalEvent = src;\n\t\tthis.type = src.type;\n\n\t\t// Events bubbling up the document may have been marked as prevented\n\t\t// by a handler lower down the tree; reflect the correct value.\n\t\tthis.isDefaultPrevented = ( src.defaultPrevented || src.returnValue === false ||\n\t\t\tsrc.getPreventDefault && src.getPreventDefault() ) ? returnTrue : returnFalse;\n\n\t// Event type\n\t} else {\n\t\tthis.type = src;\n\t}\n\n\t// Put explicitly provided properties onto the event object\n\tif ( props ) {\n\t\tjQuery.extend( this, props );\n\t}\n\n\t// Create a timestamp if incoming event doesn't have one\n\tthis.timeStamp = src && src.timeStamp || jQuery.now();\n\n\t// Mark it as fixed\n\tthis[ jQuery.expando ] = true;\n};\n\n// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\njQuery.Event.prototype = {\n\tisDefaultPrevented: returnFalse,\n\tisPropagationStopped: returnFalse,\n\tisImmediatePropagationStopped: returnFalse,\n\n\tpreventDefault: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isDefaultPrevented = returnTrue;\n\t\tif ( !e ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If preventDefault exists, run it on the original event\n\t\tif ( e.preventDefault ) {\n\t\t\te.preventDefault();\n\n\t\t// Support: IE\n\t\t// Otherwise set the returnValue property of the original event to false\n\t\t} else {\n\t\t\te.returnValue = false;\n\t\t}\n\t},\n\tstopPropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isPropagationStopped = returnTrue;\n\t\tif ( !e ) {\n\t\t\treturn;\n\t\t}\n\t\t// If stopPropagation exists, run it on the original event\n\t\tif ( e.stopPropagation ) {\n\t\t\te.stopPropagation();\n\t\t}\n\n\t\t// Support: IE\n\t\t// Set the cancelBubble property of the original event to true\n\t\te.cancelBubble = true;\n\t},\n\tstopImmediatePropagation: function() {\n\t\tthis.isImmediatePropagationStopped = returnTrue;\n\t\tthis.stopPropagation();\n\t}\n};\n\n// Create mouseenter/leave events using mouseover/out and event-time checks\njQuery.each({\n\tmouseenter: \"mouseover\",\n\tmouseleave: \"mouseout\"\n}, function( orig, fix ) {\n\tjQuery.event.special[ orig ] = {\n\t\tdelegateType: fix,\n\t\tbindType: fix,\n\n\t\thandle: function( event ) {\n\t\t\tvar ret,\n\t\t\t\ttarget = this,\n\t\t\t\trelated = event.relatedTarget,\n\t\t\t\thandleObj = event.handleObj;\n\n\t\t\t// For mousenter/leave call the handler if related is outside the target.\n\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\tif ( !related || (related !== target && !jQuery.contains( target, related )) ) {\n\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\tret = handleObj.handler.apply( this, arguments );\n\t\t\t\tevent.type = fix;\n\t\t\t}\n\t\t\treturn ret;\n\t\t}\n\t};\n});\n\n// IE submit delegation\nif ( !jQuery.support.submitBubbles ) {\n\n\tjQuery.event.special.submit = {\n\t\tsetup: function() {\n\t\t\t// Only need this for delegated form submit events\n\t\t\tif ( jQuery.nodeName( this, \"form\" ) ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t// Lazy-add a submit handler when a descendant form may potentially be submitted\n\t\t\tjQuery.event.add( this, \"click._submit keypress._submit\", function( e ) {\n\t\t\t\t// Node name check avoids a VML-related crash in IE (#9807)\n\t\t\t\tvar elem = e.target,\n\t\t\t\t\tform = jQuery.nodeName( elem, \"input\" ) || jQuery.nodeName( elem, \"button\" ) ? elem.form : undefined;\n\t\t\t\tif ( form && !jQuery._data( form, \"submitBubbles\" ) ) {\n\t\t\t\t\tjQuery.event.add( form, \"submit._submit\", function( event ) {\n\t\t\t\t\t\tevent._submit_bubble = true;\n\t\t\t\t\t});\n\t\t\t\t\tjQuery._data( form, \"submitBubbles\", true );\n\t\t\t\t}\n\t\t\t});\n\t\t\t// return undefined since we don't need an event listener\n\t\t},\n\n\t\tpostDispatch: function( event ) {\n\t\t\t// If form was submitted by the user, bubble the event up the tree\n\t\t\tif ( event._submit_bubble ) {\n\t\t\t\tdelete event._submit_bubble;\n\t\t\t\tif ( this.parentNode && !event.isTrigger ) {\n\t\t\t\t\tjQuery.event.simulate( \"submit\", this.parentNode, event, true );\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tteardown: function() {\n\t\t\t// Only need this for delegated form submit events\n\t\t\tif ( jQuery.nodeName( this, \"form\" ) ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t// Remove delegated handlers; cleanData eventually reaps submit handlers attached above\n\t\t\tjQuery.event.remove( this, \"._submit\" );\n\t\t}\n\t};\n}\n\n// IE change delegation and checkbox/radio fix\nif ( !jQuery.support.changeBubbles ) {\n\n\tjQuery.event.special.change = {\n\n\t\tsetup: function() {\n\n\t\t\tif ( rformElems.test( this.nodeName ) ) {\n\t\t\t\t// IE doesn't fire change on a check/radio until blur; trigger it on click\n\t\t\t\t// after a propertychange. Eat the blur-change in special.change.handle.\n\t\t\t\t// This still fires onchange a second time for check/radio after blur.\n\t\t\t\tif ( this.type === \"checkbox\" || this.type === \"radio\" ) {\n\t\t\t\t\tjQuery.event.add( this, \"propertychange._change\", function( event ) {\n\t\t\t\t\t\tif ( event.originalEvent.propertyName === \"checked\" ) {\n\t\t\t\t\t\t\tthis._just_changed = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\tjQuery.event.add( this, \"click._change\", function( event ) {\n\t\t\t\t\t\tif ( this._just_changed && !event.isTrigger ) {\n\t\t\t\t\t\t\tthis._just_changed = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Allow triggered, simulated change events (#11500)\n\t\t\t\t\t\tjQuery.event.simulate( \"change\", this, event, true );\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\t// Delegated event; lazy-add a change handler on descendant inputs\n\t\t\tjQuery.event.add( this, \"beforeactivate._change\", function( e ) {\n\t\t\t\tvar elem = e.target;\n\n\t\t\t\tif ( rformElems.test( elem.nodeName ) && !jQuery._data( elem, \"changeBubbles\" ) ) {\n\t\t\t\t\tjQuery.event.add( elem, \"change._change\", function( event ) {\n\t\t\t\t\t\tif ( this.parentNode && !event.isSimulated && !event.isTrigger ) {\n\t\t\t\t\t\t\tjQuery.event.simulate( \"change\", this.parentNode, event, true );\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\tjQuery._data( elem, \"changeBubbles\", true );\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\thandle: function( event ) {\n\t\t\tvar elem = event.target;\n\n\t\t\t// Swallow native change events from checkbox/radio, we already triggered them above\n\t\t\tif ( this !== elem || event.isSimulated || event.isTrigger || (elem.type !== \"radio\" && elem.type !== \"checkbox\") ) {\n\t\t\t\treturn event.handleObj.handler.apply( this, arguments );\n\t\t\t}\n\t\t},\n\n\t\tteardown: function() {\n\t\t\tjQuery.event.remove( this, \"._change\" );\n\n\t\t\treturn !rformElems.test( this.nodeName );\n\t\t}\n\t};\n}\n\n// Create \"bubbling\" focus and blur events\nif ( !jQuery.support.focusinBubbles ) {\n\tjQuery.each({ focus: \"focusin\", blur: \"focusout\" }, function( orig, fix ) {\n\n\t\t// Attach a single capturing handler while someone wants focusin/focusout\n\t\tvar attaches = 0,\n\t\t\thandler = function( event ) {\n\t\t\t\tjQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true );\n\t\t\t};\n\n\t\tjQuery.event.special[ fix ] = {\n\t\t\tsetup: function() {\n\t\t\t\tif ( attaches++ === 0 ) {\n\t\t\t\t\tdocument.addEventListener( orig, handler, true );\n\t\t\t\t}\n\t\t\t},\n\t\t\tteardown: function() {\n\t\t\t\tif ( --attaches === 0 ) {\n\t\t\t\t\tdocument.removeEventListener( orig, handler, true );\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t});\n}\n\njQuery.fn.extend({\n\n\ton: function( types, selector, data, fn, /*INTERNAL*/ one ) {\n\t\tvar type, origFn;\n\n\t\t// Types can be a map of types/handlers\n\t\tif ( typeof types === \"object\" ) {\n\t\t\t// ( types-Object, selector, data )\n\t\t\tif ( typeof selector !== \"string\" ) {\n\t\t\t\t// ( types-Object, data )\n\t\t\t\tdata = data || selector;\n\t\t\t\tselector = undefined;\n\t\t\t}\n\t\t\tfor ( type in types ) {\n\t\t\t\tthis.on( type, selector, data, types[ type ], one );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\n\t\tif ( data == null && fn == null ) {\n\t\t\t// ( types, fn )\n\t\t\tfn = selector;\n\t\t\tdata = selector = undefined;\n\t\t} else if ( fn == null ) {\n\t\t\tif ( typeof selector === \"string\" ) {\n\t\t\t\t// ( types, selector, fn )\n\t\t\t\tfn = data;\n\t\t\t\tdata = undefined;\n\t\t\t} else {\n\t\t\t\t// ( types, data, fn )\n\t\t\t\tfn = data;\n\t\t\t\tdata = selector;\n\t\t\t\tselector = undefined;\n\t\t\t}\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t} else if ( !fn ) {\n\t\t\treturn this;\n\t\t}\n\n\t\tif ( one === 1 ) {\n\t\t\torigFn = fn;\n\t\t\tfn = function( event ) {\n\t\t\t\t// Can use an empty set, since event contains the info\n\t\t\t\tjQuery().off( event );\n\t\t\t\treturn origFn.apply( this, arguments );\n\t\t\t};\n\t\t\t// Use same guid so caller can remove using origFn\n\t\t\tfn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.add( this, types, fn, data, selector );\n\t\t});\n\t},\n\tone: function( types, selector, data, fn ) {\n\t\treturn this.on( types, selector, data, fn, 1 );\n\t},\n\toff: function( types, selector, fn ) {\n\t\tvar handleObj, type;\n\t\tif ( types && types.preventDefault && types.handleObj ) {\n\t\t\t// ( event )  dispatched jQuery.Event\n\t\t\thandleObj = types.handleObj;\n\t\t\tjQuery( types.delegateTarget ).off(\n\t\t\t\thandleObj.namespace ? handleObj.origType + \".\" + handleObj.namespace : handleObj.origType,\n\t\t\t\thandleObj.selector,\n\t\t\t\thandleObj.handler\n\t\t\t);\n\t\t\treturn this;\n\t\t}\n\t\tif ( typeof types === \"object\" ) {\n\t\t\t// ( types-object [, selector] )\n\t\t\tfor ( type in types ) {\n\t\t\t\tthis.off( type, selector, types[ type ] );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\tif ( selector === false || typeof selector === \"function\" ) {\n\t\t\t// ( types [, fn] )\n\t\t\tfn = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t}\n\t\treturn this.each(function() {\n\t\t\tjQuery.event.remove( this, types, fn, selector );\n\t\t});\n\t},\n\n\ttrigger: function( type, data ) {\n\t\treturn this.each(function() {\n\t\t\tjQuery.event.trigger( type, data, this );\n\t\t});\n\t},\n\ttriggerHandler: function( type, data ) {\n\t\tvar elem = this[0];\n\t\tif ( elem ) {\n\t\t\treturn jQuery.event.trigger( type, data, elem, true );\n\t\t}\n\t}\n});\nvar isSimple = /^.[^:#\\[\\.,]*$/,\n\trparentsprev = /^(?:parents|prev(?:Until|All))/,\n\trneedsContext = jQuery.expr.match.needsContext,\n\t// methods guaranteed to produce a unique set when starting from a unique set\n\tguaranteedUnique = {\n\t\tchildren: true,\n\t\tcontents: true,\n\t\tnext: true,\n\t\tprev: true\n\t};\n\njQuery.fn.extend({\n\tfind: function( selector ) {\n\t\tvar i,\n\t\t\tret = [],\n\t\t\tself = this,\n\t\t\tlen = self.length;\n\n\t\tif ( typeof selector !== \"string\" ) {\n\t\t\treturn this.pushStack( jQuery( selector ).filter(function() {\n\t\t\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\t\t\tif ( jQuery.contains( self[ i ], this ) ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}) );\n\t\t}\n\n\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\tjQuery.find( selector, self[ i ], ret );\n\t\t}\n\n\t\t// Needed because $( selector, context ) becomes $( context ).find( selector )\n\t\tret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret );\n\t\tret.selector = this.selector ? this.selector + \" \" + selector : selector;\n\t\treturn ret;\n\t},\n\n\thas: function( target ) {\n\t\tvar i,\n\t\t\ttargets = jQuery( target, this ),\n\t\t\tlen = targets.length;\n\n\t\treturn this.filter(function() {\n\t\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\t\tif ( jQuery.contains( this, targets[i] ) ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t},\n\n\tnot: function( selector ) {\n\t\treturn this.pushStack( winnow(this, selector || [], true) );\n\t},\n\n\tfilter: function( selector ) {\n\t\treturn this.pushStack( winnow(this, selector || [], false) );\n\t},\n\n\tis: function( selector ) {\n\t\treturn !!winnow(\n\t\t\tthis,\n\n\t\t\t// If this is a positional/relative selector, check membership in the returned set\n\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n\t\t\ttypeof selector === \"string\" && rneedsContext.test( selector ) ?\n\t\t\t\tjQuery( selector ) :\n\t\t\t\tselector || [],\n\t\t\tfalse\n\t\t).length;\n\t},\n\n\tclosest: function( selectors, context ) {\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\tl = this.length,\n\t\t\tret = [],\n\t\t\tpos = rneedsContext.test( selectors ) || typeof selectors !== \"string\" ?\n\t\t\t\tjQuery( selectors, context || this.context ) :\n\t\t\t\t0;\n\n\t\tfor ( ; i < l; i++ ) {\n\t\t\tfor ( cur = this[i]; cur && cur !== context; cur = cur.parentNode ) {\n\t\t\t\t// Always skip document fragments\n\t\t\t\tif ( cur.nodeType < 11 && (pos ?\n\t\t\t\t\tpos.index(cur) > -1 :\n\n\t\t\t\t\t// Don't pass non-elements to Sizzle\n\t\t\t\t\tcur.nodeType === 1 &&\n\t\t\t\t\t\tjQuery.find.matchesSelector(cur, selectors)) ) {\n\n\t\t\t\t\tcur = ret.push( cur );\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( ret.length > 1 ? jQuery.unique( ret ) : ret );\n\t},\n\n\t// Determine the position of an element within\n\t// the matched set of elements\n\tindex: function( elem ) {\n\n\t\t// No argument, return index in parent\n\t\tif ( !elem ) {\n\t\t\treturn ( this[0] && this[0].parentNode ) ? this.first().prevAll().length : -1;\n\t\t}\n\n\t\t// index in selector\n\t\tif ( typeof elem === \"string\" ) {\n\t\t\treturn jQuery.inArray( this[0], jQuery( elem ) );\n\t\t}\n\n\t\t// Locate the position of the desired element\n\t\treturn jQuery.inArray(\n\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\telem.jquery ? elem[0] : elem, this );\n\t},\n\n\tadd: function( selector, context ) {\n\t\tvar set = typeof selector === \"string\" ?\n\t\t\t\tjQuery( selector, context ) :\n\t\t\t\tjQuery.makeArray( selector && selector.nodeType ? [ selector ] : selector ),\n\t\t\tall = jQuery.merge( this.get(), set );\n\n\t\treturn this.pushStack( jQuery.unique(all) );\n\t},\n\n\taddBack: function( selector ) {\n\t\treturn this.add( selector == null ?\n\t\t\tthis.prevObject : this.prevObject.filter(selector)\n\t\t);\n\t}\n});\n\nfunction sibling( cur, dir ) {\n\tdo {\n\t\tcur = cur[ dir ];\n\t} while ( cur && cur.nodeType !== 1 );\n\n\treturn cur;\n}\n\njQuery.each({\n\tparent: function( elem ) {\n\t\tvar parent = elem.parentNode;\n\t\treturn parent && parent.nodeType !== 11 ? parent : null;\n\t},\n\tparents: function( elem ) {\n\t\treturn jQuery.dir( elem, \"parentNode\" );\n\t},\n\tparentsUntil: function( elem, i, until ) {\n\t\treturn jQuery.dir( elem, \"parentNode\", until );\n\t},\n\tnext: function( elem ) {\n\t\treturn sibling( elem, \"nextSibling\" );\n\t},\n\tprev: function( elem ) {\n\t\treturn sibling( elem, \"previousSibling\" );\n\t},\n\tnextAll: function( elem ) {\n\t\treturn jQuery.dir( elem, \"nextSibling\" );\n\t},\n\tprevAll: function( elem ) {\n\t\treturn jQuery.dir( elem, \"previousSibling\" );\n\t},\n\tnextUntil: function( elem, i, until ) {\n\t\treturn jQuery.dir( elem, \"nextSibling\", until );\n\t},\n\tprevUntil: function( elem, i, until ) {\n\t\treturn jQuery.dir( elem, \"previousSibling\", until );\n\t},\n\tsiblings: function( elem ) {\n\t\treturn jQuery.sibling( ( elem.parentNode || {} ).firstChild, elem );\n\t},\n\tchildren: function( elem ) {\n\t\treturn jQuery.sibling( elem.firstChild );\n\t},\n\tcontents: function( elem ) {\n\t\treturn jQuery.nodeName( elem, \"iframe\" ) ?\n\t\t\telem.contentDocument || elem.contentWindow.document :\n\t\t\tjQuery.merge( [], elem.childNodes );\n\t}\n}, function( name, fn ) {\n\tjQuery.fn[ name ] = function( until, selector ) {\n\t\tvar ret = jQuery.map( this, fn, until );\n\n\t\tif ( name.slice( -5 ) !== \"Until\" ) {\n\t\t\tselector = until;\n\t\t}\n\n\t\tif ( selector && typeof selector === \"string\" ) {\n\t\t\tret = jQuery.filter( selector, ret );\n\t\t}\n\n\t\tif ( this.length > 1 ) {\n\t\t\t// Remove duplicates\n\t\t\tif ( !guaranteedUnique[ name ] ) {\n\t\t\t\tret = jQuery.unique( ret );\n\t\t\t}\n\n\t\t\t// Reverse order for parents* and prev-derivatives\n\t\t\tif ( rparentsprev.test( name ) ) {\n\t\t\t\tret = ret.reverse();\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( ret );\n\t};\n});\n\njQuery.extend({\n\tfilter: function( expr, elems, not ) {\n\t\tvar elem = elems[ 0 ];\n\n\t\tif ( not ) {\n\t\t\texpr = \":not(\" + expr + \")\";\n\t\t}\n\n\t\treturn elems.length === 1 && elem.nodeType === 1 ?\n\t\t\tjQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [] :\n\t\t\tjQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {\n\t\t\t\treturn elem.nodeType === 1;\n\t\t\t}));\n\t},\n\n\tdir: function( elem, dir, until ) {\n\t\tvar matched = [],\n\t\t\tcur = elem[ dir ];\n\n\t\twhile ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) {\n\t\t\tif ( cur.nodeType === 1 ) {\n\t\t\t\tmatched.push( cur );\n\t\t\t}\n\t\t\tcur = cur[dir];\n\t\t}\n\t\treturn matched;\n\t},\n\n\tsibling: function( n, elem ) {\n\t\tvar r = [];\n\n\t\tfor ( ; n; n = n.nextSibling ) {\n\t\t\tif ( n.nodeType === 1 && n !== elem ) {\n\t\t\t\tr.push( n );\n\t\t\t}\n\t\t}\n\n\t\treturn r;\n\t}\n});\n\n// Implement the identical functionality for filter and not\nfunction winnow( elements, qualifier, not ) {\n\tif ( jQuery.isFunction( qualifier ) ) {\n\t\treturn jQuery.grep( elements, function( elem, i ) {\n\t\t\t/* jshint -W018 */\n\t\t\treturn !!qualifier.call( elem, i, elem ) !== not;\n\t\t});\n\n\t}\n\n\tif ( qualifier.nodeType ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( elem === qualifier ) !== not;\n\t\t});\n\n\t}\n\n\tif ( typeof qualifier === \"string\" ) {\n\t\tif ( isSimple.test( qualifier ) ) {\n\t\t\treturn jQuery.filter( qualifier, elements, not );\n\t\t}\n\n\t\tqualifier = jQuery.filter( qualifier, elements );\n\t}\n\n\treturn jQuery.grep( elements, function( elem ) {\n\t\treturn ( jQuery.inArray( elem, qualifier ) >= 0 ) !== not;\n\t});\n}\nfunction createSafeFragment( document ) {\n\tvar list = nodeNames.split( \"|\" ),\n\t\tsafeFrag = document.createDocumentFragment();\n\n\tif ( safeFrag.createElement ) {\n\t\twhile ( list.length ) {\n\t\t\tsafeFrag.createElement(\n\t\t\t\tlist.pop()\n\t\t\t);\n\t\t}\n\t}\n\treturn safeFrag;\n}\n\nvar nodeNames = \"abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|\" +\n\t\t\"header|hgroup|mark|meter|nav|output|progress|section|summary|time|video\",\n\trinlinejQuery = / jQuery\\d+=\"(?:null|\\d+)\"/g,\n\trnoshimcache = new RegExp(\"<(?:\" + nodeNames + \")[\\\\s/>]\", \"i\"),\n\trleadingWhitespace = /^\\s+/,\n\trxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\\w:]+)[^>]*)\\/>/gi,\n\trtagName = /<([\\w:]+)/,\n\trtbody = /<tbody/i,\n\trhtml = /<|&#?\\w+;/,\n\trnoInnerhtml = /<(?:script|style|link)/i,\n\tmanipulation_rcheckableType = /^(?:checkbox|radio)$/i,\n\t// checked=\"checked\" or checked\n\trchecked = /checked\\s*(?:[^=]|=\\s*.checked.)/i,\n\trscriptType = /^$|\\/(?:java|ecma)script/i,\n\trscriptTypeMasked = /^true\\/(.*)/,\n\trcleanScript = /^\\s*<!(?:\\[CDATA\\[|--)|(?:\\]\\]|--)>\\s*$/g,\n\n\t// We have to close these tags to support XHTML (#13200)\n\twrapMap = {\n\t\toption: [ 1, \"<select multiple='multiple'>\", \"</select>\" ],\n\t\tlegend: [ 1, \"<fieldset>\", \"</fieldset>\" ],\n\t\tarea: [ 1, \"<map>\", \"</map>\" ],\n\t\tparam: [ 1, \"<object>\", \"</object>\" ],\n\t\tthead: [ 1, \"<table>\", \"</table>\" ],\n\t\ttr: [ 2, \"<table><tbody>\", \"</tbody></table>\" ],\n\t\tcol: [ 2, \"<table><tbody></tbody><colgroup>\", \"</colgroup></table>\" ],\n\t\ttd: [ 3, \"<table><tbody><tr>\", \"</tr></tbody></table>\" ],\n\n\t\t// IE6-8 can't serialize link, script, style, or any html5 (NoScope) tags,\n\t\t// unless wrapped in a div with non-breaking characters in front of it.\n\t\t_default: jQuery.support.htmlSerialize ? [ 0, \"\", \"\" ] : [ 1, \"X<div>\", \"</div>\"  ]\n\t},\n\tsafeFragment = createSafeFragment( document ),\n\tfragmentDiv = safeFragment.appendChild( document.createElement(\"div\") );\n\nwrapMap.optgroup = wrapMap.option;\nwrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\nwrapMap.th = wrapMap.td;\n\njQuery.fn.extend({\n\ttext: function( value ) {\n\t\treturn jQuery.access( this, function( value ) {\n\t\t\treturn value === undefined ?\n\t\t\t\tjQuery.text( this ) :\n\t\t\t\tthis.empty().append( ( this[0] && this[0].ownerDocument || document ).createTextNode( value ) );\n\t\t}, null, value, arguments.length );\n\t},\n\n\tappend: function() {\n\t\treturn this.domManip( arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.appendChild( elem );\n\t\t\t}\n\t\t});\n\t},\n\n\tprepend: function() {\n\t\treturn this.domManip( arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.insertBefore( elem, target.firstChild );\n\t\t\t}\n\t\t});\n\t},\n\n\tbefore: function() {\n\t\treturn this.domManip( arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this );\n\t\t\t}\n\t\t});\n\t},\n\n\tafter: function() {\n\t\treturn this.domManip( arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this.nextSibling );\n\t\t\t}\n\t\t});\n\t},\n\n\t// keepData is for internal use only--do not document\n\tremove: function( selector, keepData ) {\n\t\tvar elem,\n\t\t\telems = selector ? jQuery.filter( selector, this ) : this,\n\t\t\ti = 0;\n\n\t\tfor ( ; (elem = elems[i]) != null; i++ ) {\n\n\t\t\tif ( !keepData && elem.nodeType === 1 ) {\n\t\t\t\tjQuery.cleanData( getAll( elem ) );\n\t\t\t}\n\n\t\t\tif ( elem.parentNode ) {\n\t\t\t\tif ( keepData && jQuery.contains( elem.ownerDocument, elem ) ) {\n\t\t\t\t\tsetGlobalEval( getAll( elem, \"script\" ) );\n\t\t\t\t}\n\t\t\t\telem.parentNode.removeChild( elem );\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tempty: function() {\n\t\tvar elem,\n\t\t\ti = 0;\n\n\t\tfor ( ; (elem = this[i]) != null; i++ ) {\n\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\t\t\t}\n\n\t\t\t// Remove any remaining nodes\n\t\t\twhile ( elem.firstChild ) {\n\t\t\t\telem.removeChild( elem.firstChild );\n\t\t\t}\n\n\t\t\t// If this is a select, ensure that it displays empty (#12336)\n\t\t\t// Support: IE<9\n\t\t\tif ( elem.options && jQuery.nodeName( elem, \"select\" ) ) {\n\t\t\t\telem.options.length = 0;\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tclone: function( dataAndEvents, deepDataAndEvents ) {\n\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\treturn this.map( function () {\n\t\t\treturn jQuery.clone( this, dataAndEvents, deepDataAndEvents );\n\t\t});\n\t},\n\n\thtml: function( value ) {\n\t\treturn jQuery.access( this, function( value ) {\n\t\t\tvar elem = this[0] || {},\n\t\t\t\ti = 0,\n\t\t\t\tl = this.length;\n\n\t\t\tif ( value === undefined ) {\n\t\t\t\treturn elem.nodeType === 1 ?\n\t\t\t\t\telem.innerHTML.replace( rinlinejQuery, \"\" ) :\n\t\t\t\t\tundefined;\n\t\t\t}\n\n\t\t\t// See if we can take a shortcut and just use innerHTML\n\t\t\tif ( typeof value === \"string\" && !rnoInnerhtml.test( value ) &&\n\t\t\t\t( jQuery.support.htmlSerialize || !rnoshimcache.test( value )  ) &&\n\t\t\t\t( jQuery.support.leadingWhitespace || !rleadingWhitespace.test( value ) ) &&\n\t\t\t\t!wrapMap[ ( rtagName.exec( value ) || [\"\", \"\"] )[1].toLowerCase() ] ) {\n\n\t\t\t\tvalue = value.replace( rxhtmlTag, \"<$1></$2>\" );\n\n\t\t\t\ttry {\n\t\t\t\t\tfor (; i < l; i++ ) {\n\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\t\telem = this[i] || {};\n\t\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\t\t\t\t\t\t\telem.innerHTML = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\telem = 0;\n\n\t\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t\t} catch(e) {}\n\t\t\t}\n\n\t\t\tif ( elem ) {\n\t\t\t\tthis.empty().append( value );\n\t\t\t}\n\t\t}, null, value, arguments.length );\n\t},\n\n\treplaceWith: function() {\n\t\tvar\n\t\t\t// Snapshot the DOM in case .domManip sweeps something relevant into its fragment\n\t\t\targs = jQuery.map( this, function( elem ) {\n\t\t\t\treturn [ elem.nextSibling, elem.parentNode ];\n\t\t\t}),\n\t\t\ti = 0;\n\n\t\t// Make the changes, replacing each context element with the new content\n\t\tthis.domManip( arguments, function( elem ) {\n\t\t\tvar next = args[ i++ ],\n\t\t\t\tparent = args[ i++ ];\n\n\t\t\tif ( parent ) {\n\t\t\t\t// Don't use the snapshot next if it has moved (#13810)\n\t\t\t\tif ( next && next.parentNode !== parent ) {\n\t\t\t\t\tnext = this.nextSibling;\n\t\t\t\t}\n\t\t\t\tjQuery( this ).remove();\n\t\t\t\tparent.insertBefore( elem, next );\n\t\t\t}\n\t\t// Allow new content to include elements from the context set\n\t\t}, true );\n\n\t\t// Force removal if there was no new content (e.g., from empty arguments)\n\t\treturn i ? this : this.remove();\n\t},\n\n\tdetach: function( selector ) {\n\t\treturn this.remove( selector, true );\n\t},\n\n\tdomManip: function( args, callback, allowIntersection ) {\n\n\t\t// Flatten any nested arrays\n\t\targs = core_concat.apply( [], args );\n\n\t\tvar first, node, hasScripts,\n\t\t\tscripts, doc, fragment,\n\t\t\ti = 0,\n\t\t\tl = this.length,\n\t\t\tset = this,\n\t\t\tiNoClone = l - 1,\n\t\t\tvalue = args[0],\n\t\t\tisFunction = jQuery.isFunction( value );\n\n\t\t// We can't cloneNode fragments that contain checked, in WebKit\n\t\tif ( isFunction || !( l <= 1 || typeof value !== \"string\" || jQuery.support.checkClone || !rchecked.test( value ) ) ) {\n\t\t\treturn this.each(function( index ) {\n\t\t\t\tvar self = set.eq( index );\n\t\t\t\tif ( isFunction ) {\n\t\t\t\t\targs[0] = value.call( this, index, self.html() );\n\t\t\t\t}\n\t\t\t\tself.domManip( args, callback, allowIntersection );\n\t\t\t});\n\t\t}\n\n\t\tif ( l ) {\n\t\t\tfragment = jQuery.buildFragment( args, this[ 0 ].ownerDocument, false, !allowIntersection && this );\n\t\t\tfirst = fragment.firstChild;\n\n\t\t\tif ( fragment.childNodes.length === 1 ) {\n\t\t\t\tfragment = first;\n\t\t\t}\n\n\t\t\tif ( first ) {\n\t\t\t\tscripts = jQuery.map( getAll( fragment, \"script\" ), disableScript );\n\t\t\t\thasScripts = scripts.length;\n\n\t\t\t\t// Use the original fragment for the last item instead of the first because it can end up\n\t\t\t\t// being emptied incorrectly in certain situations (#8070).\n\t\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\t\tnode = fragment;\n\n\t\t\t\t\tif ( i !== iNoClone ) {\n\t\t\t\t\t\tnode = jQuery.clone( node, true, true );\n\n\t\t\t\t\t\t// Keep references to cloned scripts for later restoration\n\t\t\t\t\t\tif ( hasScripts ) {\n\t\t\t\t\t\t\tjQuery.merge( scripts, getAll( node, \"script\" ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tcallback.call( this[i], node, i );\n\t\t\t\t}\n\n\t\t\t\tif ( hasScripts ) {\n\t\t\t\t\tdoc = scripts[ scripts.length - 1 ].ownerDocument;\n\n\t\t\t\t\t// Reenable scripts\n\t\t\t\t\tjQuery.map( scripts, restoreScript );\n\n\t\t\t\t\t// Evaluate executable scripts on first document insertion\n\t\t\t\t\tfor ( i = 0; i < hasScripts; i++ ) {\n\t\t\t\t\t\tnode = scripts[ i ];\n\t\t\t\t\t\tif ( rscriptType.test( node.type || \"\" ) &&\n\t\t\t\t\t\t\t!jQuery._data( node, \"globalEval\" ) && jQuery.contains( doc, node ) ) {\n\n\t\t\t\t\t\t\tif ( node.src ) {\n\t\t\t\t\t\t\t\t// Hope ajax is available...\n\t\t\t\t\t\t\t\tjQuery._evalUrl( node.src );\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tjQuery.globalEval( ( node.text || node.textContent || node.innerHTML || \"\" ).replace( rcleanScript, \"\" ) );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Fix #11809: Avoid leaking memory\n\t\t\t\tfragment = first = null;\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t}\n});\n\n// Support: IE<8\n// Manipulating tables requires a tbody\nfunction manipulationTarget( elem, content ) {\n\treturn jQuery.nodeName( elem, \"table\" ) &&\n\t\tjQuery.nodeName( content.nodeType === 1 ? content : content.firstChild, \"tr\" ) ?\n\n\t\telem.getElementsByTagName(\"tbody\")[0] ||\n\t\t\telem.appendChild( elem.ownerDocument.createElement(\"tbody\") ) :\n\t\telem;\n}\n\n// Replace/restore the type attribute of script elements for safe DOM manipulation\nfunction disableScript( elem ) {\n\telem.type = (jQuery.find.attr( elem, \"type\" ) !== null) + \"/\" + elem.type;\n\treturn elem;\n}\nfunction restoreScript( elem ) {\n\tvar match = rscriptTypeMasked.exec( elem.type );\n\tif ( match ) {\n\t\telem.type = match[1];\n\t} else {\n\t\telem.removeAttribute(\"type\");\n\t}\n\treturn elem;\n}\n\n// Mark scripts as having already been evaluated\nfunction setGlobalEval( elems, refElements ) {\n\tvar elem,\n\t\ti = 0;\n\tfor ( ; (elem = elems[i]) != null; i++ ) {\n\t\tjQuery._data( elem, \"globalEval\", !refElements || jQuery._data( refElements[i], \"globalEval\" ) );\n\t}\n}\n\nfunction cloneCopyEvent( src, dest ) {\n\n\tif ( dest.nodeType !== 1 || !jQuery.hasData( src ) ) {\n\t\treturn;\n\t}\n\n\tvar type, i, l,\n\t\toldData = jQuery._data( src ),\n\t\tcurData = jQuery._data( dest, oldData ),\n\t\tevents = oldData.events;\n\n\tif ( events ) {\n\t\tdelete curData.handle;\n\t\tcurData.events = {};\n\n\t\tfor ( type in events ) {\n\t\t\tfor ( i = 0, l = events[ type ].length; i < l; i++ ) {\n\t\t\t\tjQuery.event.add( dest, type, events[ type ][ i ] );\n\t\t\t}\n\t\t}\n\t}\n\n\t// make the cloned public data object a copy from the original\n\tif ( curData.data ) {\n\t\tcurData.data = jQuery.extend( {}, curData.data );\n\t}\n}\n\nfunction fixCloneNodeIssues( src, dest ) {\n\tvar nodeName, e, data;\n\n\t// We do not need to do anything for non-Elements\n\tif ( dest.nodeType !== 1 ) {\n\t\treturn;\n\t}\n\n\tnodeName = dest.nodeName.toLowerCase();\n\n\t// IE6-8 copies events bound via attachEvent when using cloneNode.\n\tif ( !jQuery.support.noCloneEvent && dest[ jQuery.expando ] ) {\n\t\tdata = jQuery._data( dest );\n\n\t\tfor ( e in data.events ) {\n\t\t\tjQuery.removeEvent( dest, e, data.handle );\n\t\t}\n\n\t\t// Event data gets referenced instead of copied if the expando gets copied too\n\t\tdest.removeAttribute( jQuery.expando );\n\t}\n\n\t// IE blanks contents when cloning scripts, and tries to evaluate newly-set text\n\tif ( nodeName === \"script\" && dest.text !== src.text ) {\n\t\tdisableScript( dest ).text = src.text;\n\t\trestoreScript( dest );\n\n\t// IE6-10 improperly clones children of object elements using classid.\n\t// IE10 throws NoModificationAllowedError if parent is null, #12132.\n\t} else if ( nodeName === \"object\" ) {\n\t\tif ( dest.parentNode ) {\n\t\t\tdest.outerHTML = src.outerHTML;\n\t\t}\n\n\t\t// This path appears unavoidable for IE9. When cloning an object\n\t\t// element in IE9, the outerHTML strategy above is not sufficient.\n\t\t// If the src has innerHTML and the destination does not,\n\t\t// copy the src.innerHTML into the dest.innerHTML. #10324\n\t\tif ( jQuery.support.html5Clone && ( src.innerHTML && !jQuery.trim(dest.innerHTML) ) ) {\n\t\t\tdest.innerHTML = src.innerHTML;\n\t\t}\n\n\t} else if ( nodeName === \"input\" && manipulation_rcheckableType.test( src.type ) ) {\n\t\t// IE6-8 fails to persist the checked state of a cloned checkbox\n\t\t// or radio button. Worse, IE6-7 fail to give the cloned element\n\t\t// a checked appearance if the defaultChecked value isn't also set\n\n\t\tdest.defaultChecked = dest.checked = src.checked;\n\n\t\t// IE6-7 get confused and end up setting the value of a cloned\n\t\t// checkbox/radio button to an empty string instead of \"on\"\n\t\tif ( dest.value !== src.value ) {\n\t\t\tdest.value = src.value;\n\t\t}\n\n\t// IE6-8 fails to return the selected option to the default selected\n\t// state when cloning options\n\t} else if ( nodeName === \"option\" ) {\n\t\tdest.defaultSelected = dest.selected = src.defaultSelected;\n\n\t// IE6-8 fails to set the defaultValue to the correct value when\n\t// cloning other types of input fields\n\t} else if ( nodeName === \"input\" || nodeName === \"textarea\" ) {\n\t\tdest.defaultValue = src.defaultValue;\n\t}\n}\n\njQuery.each({\n\tappendTo: \"append\",\n\tprependTo: \"prepend\",\n\tinsertBefore: \"before\",\n\tinsertAfter: \"after\",\n\treplaceAll: \"replaceWith\"\n}, function( name, original ) {\n\tjQuery.fn[ name ] = function( selector ) {\n\t\tvar elems,\n\t\t\ti = 0,\n\t\t\tret = [],\n\t\t\tinsert = jQuery( selector ),\n\t\t\tlast = insert.length - 1;\n\n\t\tfor ( ; i <= last; i++ ) {\n\t\t\telems = i === last ? this : this.clone(true);\n\t\t\tjQuery( insert[i] )[ original ]( elems );\n\n\t\t\t// Modern browsers can apply jQuery collections as arrays, but oldIE needs a .get()\n\t\t\tcore_push.apply( ret, elems.get() );\n\t\t}\n\n\t\treturn this.pushStack( ret );\n\t};\n});\n\nfunction getAll( context, tag ) {\n\tvar elems, elem,\n\t\ti = 0,\n\t\tfound = typeof context.getElementsByTagName !== core_strundefined ? context.getElementsByTagName( tag || \"*\" ) :\n\t\t\ttypeof context.querySelectorAll !== core_strundefined ? context.querySelectorAll( tag || \"*\" ) :\n\t\t\tundefined;\n\n\tif ( !found ) {\n\t\tfor ( found = [], elems = context.childNodes || context; (elem = elems[i]) != null; i++ ) {\n\t\t\tif ( !tag || jQuery.nodeName( elem, tag ) ) {\n\t\t\t\tfound.push( elem );\n\t\t\t} else {\n\t\t\t\tjQuery.merge( found, getAll( elem, tag ) );\n\t\t\t}\n\t\t}\n\t}\n\n\treturn tag === undefined || tag && jQuery.nodeName( context, tag ) ?\n\t\tjQuery.merge( [ context ], found ) :\n\t\tfound;\n}\n\n// Used in buildFragment, fixes the defaultChecked property\nfunction fixDefaultChecked( elem ) {\n\tif ( manipulation_rcheckableType.test( elem.type ) ) {\n\t\telem.defaultChecked = elem.checked;\n\t}\n}\n\njQuery.extend({\n\tclone: function( elem, dataAndEvents, deepDataAndEvents ) {\n\t\tvar destElements, node, clone, i, srcElements,\n\t\t\tinPage = jQuery.contains( elem.ownerDocument, elem );\n\n\t\tif ( jQuery.support.html5Clone || jQuery.isXMLDoc(elem) || !rnoshimcache.test( \"<\" + elem.nodeName + \">\" ) ) {\n\t\t\tclone = elem.cloneNode( true );\n\n\t\t// IE<=8 does not properly clone detached, unknown element nodes\n\t\t} else {\n\t\t\tfragmentDiv.innerHTML = elem.outerHTML;\n\t\t\tfragmentDiv.removeChild( clone = fragmentDiv.firstChild );\n\t\t}\n\n\t\tif ( (!jQuery.support.noCloneEvent || !jQuery.support.noCloneChecked) &&\n\t\t\t\t(elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem) ) {\n\n\t\t\t// We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2\n\t\t\tdestElements = getAll( clone );\n\t\t\tsrcElements = getAll( elem );\n\n\t\t\t// Fix all IE cloning issues\n\t\t\tfor ( i = 0; (node = srcElements[i]) != null; ++i ) {\n\t\t\t\t// Ensure that the destination node is not null; Fixes #9587\n\t\t\t\tif ( destElements[i] ) {\n\t\t\t\t\tfixCloneNodeIssues( node, destElements[i] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Copy the events from the original to the clone\n\t\tif ( dataAndEvents ) {\n\t\t\tif ( deepDataAndEvents ) {\n\t\t\t\tsrcElements = srcElements || getAll( elem );\n\t\t\t\tdestElements = destElements || getAll( clone );\n\n\t\t\t\tfor ( i = 0; (node = srcElements[i]) != null; i++ ) {\n\t\t\t\t\tcloneCopyEvent( node, destElements[i] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcloneCopyEvent( elem, clone );\n\t\t\t}\n\t\t}\n\n\t\t// Preserve script evaluation history\n\t\tdestElements = getAll( clone, \"script\" );\n\t\tif ( destElements.length > 0 ) {\n\t\t\tsetGlobalEval( destElements, !inPage && getAll( elem, \"script\" ) );\n\t\t}\n\n\t\tdestElements = srcElements = node = null;\n\n\t\t// Return the cloned set\n\t\treturn clone;\n\t},\n\n\tbuildFragment: function( elems, context, scripts, selection ) {\n\t\tvar j, elem, contains,\n\t\t\ttmp, tag, tbody, wrap,\n\t\t\tl = elems.length,\n\n\t\t\t// Ensure a safe fragment\n\t\t\tsafe = createSafeFragment( context ),\n\n\t\t\tnodes = [],\n\t\t\ti = 0;\n\n\t\tfor ( ; i < l; i++ ) {\n\t\t\telem = elems[ i ];\n\n\t\t\tif ( elem || elem === 0 ) {\n\n\t\t\t\t// Add nodes directly\n\t\t\t\tif ( jQuery.type( elem ) === \"object\" ) {\n\t\t\t\t\tjQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );\n\n\t\t\t\t// Convert non-html into a text node\n\t\t\t\t} else if ( !rhtml.test( elem ) ) {\n\t\t\t\t\tnodes.push( context.createTextNode( elem ) );\n\n\t\t\t\t// Convert html into DOM nodes\n\t\t\t\t} else {\n\t\t\t\t\ttmp = tmp || safe.appendChild( context.createElement(\"div\") );\n\n\t\t\t\t\t// Deserialize a standard representation\n\t\t\t\t\ttag = ( rtagName.exec( elem ) || [\"\", \"\"] )[1].toLowerCase();\n\t\t\t\t\twrap = wrapMap[ tag ] || wrapMap._default;\n\n\t\t\t\t\ttmp.innerHTML = wrap[1] + elem.replace( rxhtmlTag, \"<$1></$2>\" ) + wrap[2];\n\n\t\t\t\t\t// Descend through wrappers to the right content\n\t\t\t\t\tj = wrap[0];\n\t\t\t\t\twhile ( j-- ) {\n\t\t\t\t\t\ttmp = tmp.lastChild;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Manually add leading whitespace removed by IE\n\t\t\t\t\tif ( !jQuery.support.leadingWhitespace && rleadingWhitespace.test( elem ) ) {\n\t\t\t\t\t\tnodes.push( context.createTextNode( rleadingWhitespace.exec( elem )[0] ) );\n\t\t\t\t\t}\n\n\t\t\t\t\t// Remove IE's autoinserted <tbody> from table fragments\n\t\t\t\t\tif ( !jQuery.support.tbody ) {\n\n\t\t\t\t\t\t// String was a <table>, *may* have spurious <tbody>\n\t\t\t\t\t\telem = tag === \"table\" && !rtbody.test( elem ) ?\n\t\t\t\t\t\t\ttmp.firstChild :\n\n\t\t\t\t\t\t\t// String was a bare <thead> or <tfoot>\n\t\t\t\t\t\t\twrap[1] === \"<table>\" && !rtbody.test( elem ) ?\n\t\t\t\t\t\t\t\ttmp :\n\t\t\t\t\t\t\t\t0;\n\n\t\t\t\t\t\tj = elem && elem.childNodes.length;\n\t\t\t\t\t\twhile ( j-- ) {\n\t\t\t\t\t\t\tif ( jQuery.nodeName( (tbody = elem.childNodes[j]), \"tbody\" ) && !tbody.childNodes.length ) {\n\t\t\t\t\t\t\t\telem.removeChild( tbody );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tjQuery.merge( nodes, tmp.childNodes );\n\n\t\t\t\t\t// Fix #12392 for WebKit and IE > 9\n\t\t\t\t\ttmp.textContent = \"\";\n\n\t\t\t\t\t// Fix #12392 for oldIE\n\t\t\t\t\twhile ( tmp.firstChild ) {\n\t\t\t\t\t\ttmp.removeChild( tmp.firstChild );\n\t\t\t\t\t}\n\n\t\t\t\t\t// Remember the top-level container for proper cleanup\n\t\t\t\t\ttmp = safe.lastChild;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Fix #11356: Clear elements from fragment\n\t\tif ( tmp ) {\n\t\t\tsafe.removeChild( tmp );\n\t\t}\n\n\t\t// Reset defaultChecked for any radios and checkboxes\n\t\t// about to be appended to the DOM in IE 6/7 (#8060)\n\t\tif ( !jQuery.support.appendChecked ) {\n\t\t\tjQuery.grep( getAll( nodes, \"input\" ), fixDefaultChecked );\n\t\t}\n\n\t\ti = 0;\n\t\twhile ( (elem = nodes[ i++ ]) ) {\n\n\t\t\t// #4087 - If origin and destination elements are the same, and this is\n\t\t\t// that element, do not do anything\n\t\t\tif ( selection && jQuery.inArray( elem, selection ) !== -1 ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tcontains = jQuery.contains( elem.ownerDocument, elem );\n\n\t\t\t// Append to fragment\n\t\t\ttmp = getAll( safe.appendChild( elem ), \"script\" );\n\n\t\t\t// Preserve script evaluation history\n\t\t\tif ( contains ) {\n\t\t\t\tsetGlobalEval( tmp );\n\t\t\t}\n\n\t\t\t// Capture executables\n\t\t\tif ( scripts ) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ( (elem = tmp[ j++ ]) ) {\n\t\t\t\t\tif ( rscriptType.test( elem.type || \"\" ) ) {\n\t\t\t\t\t\tscripts.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\ttmp = null;\n\n\t\treturn safe;\n\t},\n\n\tcleanData: function( elems, /* internal */ acceptData ) {\n\t\tvar elem, type, id, data,\n\t\t\ti = 0,\n\t\t\tinternalKey = jQuery.expando,\n\t\t\tcache = jQuery.cache,\n\t\t\tdeleteExpando = jQuery.support.deleteExpando,\n\t\t\tspecial = jQuery.event.special;\n\n\t\tfor ( ; (elem = elems[i]) != null; i++ ) {\n\n\t\t\tif ( acceptData || jQuery.acceptData( elem ) ) {\n\n\t\t\t\tid = elem[ internalKey ];\n\t\t\t\tdata = id && cache[ id ];\n\n\t\t\t\tif ( data ) {\n\t\t\t\t\tif ( data.events ) {\n\t\t\t\t\t\tfor ( type in data.events ) {\n\t\t\t\t\t\t\tif ( special[ type ] ) {\n\t\t\t\t\t\t\t\tjQuery.event.remove( elem, type );\n\n\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tjQuery.removeEvent( elem, type, data.handle );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Remove cache only if it was not already removed by jQuery.event.remove\n\t\t\t\t\tif ( cache[ id ] ) {\n\n\t\t\t\t\t\tdelete cache[ id ];\n\n\t\t\t\t\t\t// IE does not allow us to delete expando properties from nodes,\n\t\t\t\t\t\t// nor does it have a removeAttribute function on Document nodes;\n\t\t\t\t\t\t// we must handle all of these cases\n\t\t\t\t\t\tif ( deleteExpando ) {\n\t\t\t\t\t\t\tdelete elem[ internalKey ];\n\n\t\t\t\t\t\t} else if ( typeof elem.removeAttribute !== core_strundefined ) {\n\t\t\t\t\t\t\telem.removeAttribute( internalKey );\n\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\telem[ internalKey ] = null;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tcore_deletedIds.push( id );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t_evalUrl: function( url ) {\n\t\treturn jQuery.ajax({\n\t\t\turl: url,\n\t\t\ttype: \"GET\",\n\t\t\tdataType: \"script\",\n\t\t\tasync: false,\n\t\t\tglobal: false,\n\t\t\t\"throws\": true\n\t\t});\n\t}\n});\njQuery.fn.extend({\n\twrapAll: function( html ) {\n\t\tif ( jQuery.isFunction( html ) ) {\n\t\t\treturn this.each(function(i) {\n\t\t\t\tjQuery(this).wrapAll( html.call(this, i) );\n\t\t\t});\n\t\t}\n\n\t\tif ( this[0] ) {\n\t\t\t// The elements to wrap the target around\n\t\t\tvar wrap = jQuery( html, this[0].ownerDocument ).eq(0).clone(true);\n\n\t\t\tif ( this[0].parentNode ) {\n\t\t\t\twrap.insertBefore( this[0] );\n\t\t\t}\n\n\t\t\twrap.map(function() {\n\t\t\t\tvar elem = this;\n\n\t\t\t\twhile ( elem.firstChild && elem.firstChild.nodeType === 1 ) {\n\t\t\t\t\telem = elem.firstChild;\n\t\t\t\t}\n\n\t\t\t\treturn elem;\n\t\t\t}).append( this );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\twrapInner: function( html ) {\n\t\tif ( jQuery.isFunction( html ) ) {\n\t\t\treturn this.each(function(i) {\n\t\t\t\tjQuery(this).wrapInner( html.call(this, i) );\n\t\t\t});\n\t\t}\n\n\t\treturn this.each(function() {\n\t\t\tvar self = jQuery( this ),\n\t\t\t\tcontents = self.contents();\n\n\t\t\tif ( contents.length ) {\n\t\t\t\tcontents.wrapAll( html );\n\n\t\t\t} else {\n\t\t\t\tself.append( html );\n\t\t\t}\n\t\t});\n\t},\n\n\twrap: function( html ) {\n\t\tvar isFunction = jQuery.isFunction( html );\n\n\t\treturn this.each(function(i) {\n\t\t\tjQuery( this ).wrapAll( isFunction ? html.call(this, i) : html );\n\t\t});\n\t},\n\n\tunwrap: function() {\n\t\treturn this.parent().each(function() {\n\t\t\tif ( !jQuery.nodeName( this, \"body\" ) ) {\n\t\t\t\tjQuery( this ).replaceWith( this.childNodes );\n\t\t\t}\n\t\t}).end();\n\t}\n});\nvar iframe, getStyles, curCSS,\n\tralpha = /alpha\\([^)]*\\)/i,\n\tropacity = /opacity\\s*=\\s*([^)]*)/,\n\trposition = /^(top|right|bottom|left)$/,\n\t// swappable if display is none or starts with table except \"table\", \"table-cell\", or \"table-caption\"\n\t// see here for display values: https://developer.mozilla.org/en-US/docs/CSS/display\n\trdisplayswap = /^(none|table(?!-c[ea]).+)/,\n\trmargin = /^margin/,\n\trnumsplit = new RegExp( \"^(\" + core_pnum + \")(.*)$\", \"i\" ),\n\trnumnonpx = new RegExp( \"^(\" + core_pnum + \")(?!px)[a-z%]+$\", \"i\" ),\n\trrelNum = new RegExp( \"^([+-])=(\" + core_pnum + \")\", \"i\" ),\n\telemdisplay = { BODY: \"block\" },\n\n\tcssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n\tcssNormalTransform = {\n\t\tletterSpacing: 0,\n\t\tfontWeight: 400\n\t},\n\n\tcssExpand = [ \"Top\", \"Right\", \"Bottom\", \"Left\" ],\n\tcssPrefixes = [ \"Webkit\", \"O\", \"Moz\", \"ms\" ];\n\n// return a css property mapped to a potentially vendor prefixed property\nfunction vendorPropName( style, name ) {\n\n\t// shortcut for names that are not vendor prefixed\n\tif ( name in style ) {\n\t\treturn name;\n\t}\n\n\t// check for vendor prefixed names\n\tvar capName = name.charAt(0).toUpperCase() + name.slice(1),\n\t\torigName = name,\n\t\ti = cssPrefixes.length;\n\n\twhile ( i-- ) {\n\t\tname = cssPrefixes[ i ] + capName;\n\t\tif ( name in style ) {\n\t\t\treturn name;\n\t\t}\n\t}\n\n\treturn origName;\n}\n\nfunction isHidden( elem, el ) {\n\t// isHidden might be called from jQuery#filter function;\n\t// in that case, element will be second argument\n\telem = el || elem;\n\treturn jQuery.css( elem, \"display\" ) === \"none\" || !jQuery.contains( elem.ownerDocument, elem );\n}\n\nfunction showHide( elements, show ) {\n\tvar display, elem, hidden,\n\t\tvalues = [],\n\t\tindex = 0,\n\t\tlength = elements.length;\n\n\tfor ( ; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tvalues[ index ] = jQuery._data( elem, \"olddisplay\" );\n\t\tdisplay = elem.style.display;\n\t\tif ( show ) {\n\t\t\t// Reset the inline display of this element to learn if it is\n\t\t\t// being hidden by cascaded rules or not\n\t\t\tif ( !values[ index ] && display === \"none\" ) {\n\t\t\t\telem.style.display = \"\";\n\t\t\t}\n\n\t\t\t// Set elements which have been overridden with display: none\n\t\t\t// in a stylesheet to whatever the default browser style is\n\t\t\t// for such an element\n\t\t\tif ( elem.style.display === \"\" && isHidden( elem ) ) {\n\t\t\t\tvalues[ index ] = jQuery._data( elem, \"olddisplay\", css_defaultDisplay(elem.nodeName) );\n\t\t\t}\n\t\t} else {\n\n\t\t\tif ( !values[ index ] ) {\n\t\t\t\thidden = isHidden( elem );\n\n\t\t\t\tif ( display && display !== \"none\" || !hidden ) {\n\t\t\t\t\tjQuery._data( elem, \"olddisplay\", hidden ? display : jQuery.css( elem, \"display\" ) );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Set the display of most of the elements in a second loop\n\t// to avoid the constant reflow\n\tfor ( index = 0; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\t\tif ( !show || elem.style.display === \"none\" || elem.style.display === \"\" ) {\n\t\t\telem.style.display = show ? values[ index ] || \"\" : \"none\";\n\t\t}\n\t}\n\n\treturn elements;\n}\n\njQuery.fn.extend({\n\tcss: function( name, value ) {\n\t\treturn jQuery.access( this, function( elem, name, value ) {\n\t\t\tvar len, styles,\n\t\t\t\tmap = {},\n\t\t\t\ti = 0;\n\n\t\t\tif ( jQuery.isArray( name ) ) {\n\t\t\t\tstyles = getStyles( elem );\n\t\t\t\tlen = name.length;\n\n\t\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\t\tmap[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );\n\t\t\t\t}\n\n\t\t\t\treturn map;\n\t\t\t}\n\n\t\t\treturn value !== undefined ?\n\t\t\t\tjQuery.style( elem, name, value ) :\n\t\t\t\tjQuery.css( elem, name );\n\t\t}, name, value, arguments.length > 1 );\n\t},\n\tshow: function() {\n\t\treturn showHide( this, true );\n\t},\n\thide: function() {\n\t\treturn showHide( this );\n\t},\n\ttoggle: function( state ) {\n\t\tif ( typeof state === \"boolean\" ) {\n\t\t\treturn state ? this.show() : this.hide();\n\t\t}\n\n\t\treturn this.each(function() {\n\t\t\tif ( isHidden( this ) ) {\n\t\t\t\tjQuery( this ).show();\n\t\t\t} else {\n\t\t\t\tjQuery( this ).hide();\n\t\t\t}\n\t\t});\n\t}\n});\n\njQuery.extend({\n\t// Add in style property hooks for overriding the default\n\t// behavior of getting and setting a style property\n\tcssHooks: {\n\t\topacity: {\n\t\t\tget: function( elem, computed ) {\n\t\t\t\tif ( computed ) {\n\t\t\t\t\t// We should always get a number back from opacity\n\t\t\t\t\tvar ret = curCSS( elem, \"opacity\" );\n\t\t\t\t\treturn ret === \"\" ? \"1\" : ret;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t// Don't automatically add \"px\" to these possibly-unitless properties\n\tcssNumber: {\n\t\t\"columnCount\": true,\n\t\t\"fillOpacity\": true,\n\t\t\"fontWeight\": true,\n\t\t\"lineHeight\": true,\n\t\t\"opacity\": true,\n\t\t\"order\": true,\n\t\t\"orphans\": true,\n\t\t\"widows\": true,\n\t\t\"zIndex\": true,\n\t\t\"zoom\": true\n\t},\n\n\t// Add in properties whose names you wish to fix before\n\t// setting or getting the value\n\tcssProps: {\n\t\t// normalize float css property\n\t\t\"float\": jQuery.support.cssFloat ? \"cssFloat\" : \"styleFloat\"\n\t},\n\n\t// Get and set the style property on a DOM Node\n\tstyle: function( elem, name, value, extra ) {\n\t\t// Don't set styles on text and comment nodes\n\t\tif ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Make sure that we're working with the right name\n\t\tvar ret, type, hooks,\n\t\t\torigName = jQuery.camelCase( name ),\n\t\t\tstyle = elem.style;\n\n\t\tname = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( style, origName ) );\n\n\t\t// gets hook for the prefixed version\n\t\t// followed by the unprefixed version\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// Check if we're setting a value\n\t\tif ( value !== undefined ) {\n\t\t\ttype = typeof value;\n\n\t\t\t// convert relative number strings (+= or -=) to relative numbers. #7345\n\t\t\tif ( type === \"string\" && (ret = rrelNum.exec( value )) ) {\n\t\t\t\tvalue = ( ret[1] + 1 ) * ret[2] + parseFloat( jQuery.css( elem, name ) );\n\t\t\t\t// Fixes bug #9237\n\t\t\t\ttype = \"number\";\n\t\t\t}\n\n\t\t\t// Make sure that NaN and null values aren't set. See: #7116\n\t\t\tif ( value == null || type === \"number\" && isNaN( value ) ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If a number was passed in, add 'px' to the (except for certain CSS properties)\n\t\t\tif ( type === \"number\" && !jQuery.cssNumber[ origName ] ) {\n\t\t\t\tvalue += \"px\";\n\t\t\t}\n\n\t\t\t// Fixes #8908, it can be done more correctly by specifing setters in cssHooks,\n\t\t\t// but it would mean to define eight (for every problematic property) identical functions\n\t\t\tif ( !jQuery.support.clearCloneStyle && value === \"\" && name.indexOf(\"background\") === 0 ) {\n\t\t\t\tstyle[ name ] = \"inherit\";\n\t\t\t}\n\n\t\t\t// If a hook was provided, use that value, otherwise just set the specified value\n\t\t\tif ( !hooks || !(\"set\" in hooks) || (value = hooks.set( elem, value, extra )) !== undefined ) {\n\n\t\t\t\t// Wrapped to prevent IE from throwing errors when 'invalid' values are provided\n\t\t\t\t// Fixes bug #5509\n\t\t\t\ttry {\n\t\t\t\t\tstyle[ name ] = value;\n\t\t\t\t} catch(e) {}\n\t\t\t}\n\n\t\t} else {\n\t\t\t// If a hook was provided get the non-computed value from there\n\t\t\tif ( hooks && \"get\" in hooks && (ret = hooks.get( elem, false, extra )) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\t// Otherwise just get the value from the style object\n\t\t\treturn style[ name ];\n\t\t}\n\t},\n\n\tcss: function( elem, name, extra, styles ) {\n\t\tvar num, val, hooks,\n\t\t\torigName = jQuery.camelCase( name );\n\n\t\t// Make sure that we're working with the right name\n\t\tname = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( elem.style, origName ) );\n\n\t\t// gets hook for the prefixed version\n\t\t// followed by the unprefixed version\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// If a hook was provided get the computed value from there\n\t\tif ( hooks && \"get\" in hooks ) {\n\t\t\tval = hooks.get( elem, true, extra );\n\t\t}\n\n\t\t// Otherwise, if a way to get the computed value exists, use that\n\t\tif ( val === undefined ) {\n\t\t\tval = curCSS( elem, name, styles );\n\t\t}\n\n\t\t//convert \"normal\" to computed value\n\t\tif ( val === \"normal\" && name in cssNormalTransform ) {\n\t\t\tval = cssNormalTransform[ name ];\n\t\t}\n\n\t\t// Return, converting to number if forced or a qualifier was provided and val looks numeric\n\t\tif ( extra === \"\" || extra ) {\n\t\t\tnum = parseFloat( val );\n\t\t\treturn extra === true || jQuery.isNumeric( num ) ? num || 0 : val;\n\t\t}\n\t\treturn val;\n\t}\n});\n\n// NOTE: we've included the \"window\" in window.getComputedStyle\n// because jsdom on node.js will break without it.\nif ( window.getComputedStyle ) {\n\tgetStyles = function( elem ) {\n\t\treturn window.getComputedStyle( elem, null );\n\t};\n\n\tcurCSS = function( elem, name, _computed ) {\n\t\tvar width, minWidth, maxWidth,\n\t\t\tcomputed = _computed || getStyles( elem ),\n\n\t\t\t// getPropertyValue is only needed for .css('filter') in IE9, see #12537\n\t\t\tret = computed ? computed.getPropertyValue( name ) || computed[ name ] : undefined,\n\t\t\tstyle = elem.style;\n\n\t\tif ( computed ) {\n\n\t\t\tif ( ret === \"\" && !jQuery.contains( elem.ownerDocument, elem ) ) {\n\t\t\t\tret = jQuery.style( elem, name );\n\t\t\t}\n\n\t\t\t// A tribute to the \"awesome hack by Dean Edwards\"\n\t\t\t// Chrome < 17 and Safari 5.0 uses \"computed value\" instead of \"used value\" for margin-right\n\t\t\t// Safari 5.1.7 (at least) returns percentage for a larger set of values, but width seems to be reliably pixels\n\t\t\t// this is against the CSSOM draft spec: http://dev.w3.org/csswg/cssom/#resolved-values\n\t\t\tif ( rnumnonpx.test( ret ) && rmargin.test( name ) ) {\n\n\t\t\t\t// Remember the original values\n\t\t\t\twidth = style.width;\n\t\t\t\tminWidth = style.minWidth;\n\t\t\t\tmaxWidth = style.maxWidth;\n\n\t\t\t\t// Put in the new values to get a computed value out\n\t\t\t\tstyle.minWidth = style.maxWidth = style.width = ret;\n\t\t\t\tret = computed.width;\n\n\t\t\t\t// Revert the changed values\n\t\t\t\tstyle.width = width;\n\t\t\t\tstyle.minWidth = minWidth;\n\t\t\t\tstyle.maxWidth = maxWidth;\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t};\n} else if ( document.documentElement.currentStyle ) {\n\tgetStyles = function( elem ) {\n\t\treturn elem.currentStyle;\n\t};\n\n\tcurCSS = function( elem, name, _computed ) {\n\t\tvar left, rs, rsLeft,\n\t\t\tcomputed = _computed || getStyles( elem ),\n\t\t\tret = computed ? computed[ name ] : undefined,\n\t\t\tstyle = elem.style;\n\n\t\t// Avoid setting ret to empty string here\n\t\t// so we don't default to auto\n\t\tif ( ret == null && style && style[ name ] ) {\n\t\t\tret = style[ name ];\n\t\t}\n\n\t\t// From the awesome hack by Dean Edwards\n\t\t// http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291\n\n\t\t// If we're not dealing with a regular pixel number\n\t\t// but a number that has a weird ending, we need to convert it to pixels\n\t\t// but not position css attributes, as those are proportional to the parent element instead\n\t\t// and we can't measure the parent instead because it might trigger a \"stacking dolls\" problem\n\t\tif ( rnumnonpx.test( ret ) && !rposition.test( name ) ) {\n\n\t\t\t// Remember the original values\n\t\t\tleft = style.left;\n\t\t\trs = elem.runtimeStyle;\n\t\t\trsLeft = rs && rs.left;\n\n\t\t\t// Put in the new values to get a computed value out\n\t\t\tif ( rsLeft ) {\n\t\t\t\trs.left = elem.currentStyle.left;\n\t\t\t}\n\t\t\tstyle.left = name === \"fontSize\" ? \"1em\" : ret;\n\t\t\tret = style.pixelLeft + \"px\";\n\n\t\t\t// Revert the changed values\n\t\t\tstyle.left = left;\n\t\t\tif ( rsLeft ) {\n\t\t\t\trs.left = rsLeft;\n\t\t\t}\n\t\t}\n\n\t\treturn ret === \"\" ? \"auto\" : ret;\n\t};\n}\n\nfunction setPositiveNumber( elem, value, subtract ) {\n\tvar matches = rnumsplit.exec( value );\n\treturn matches ?\n\t\t// Guard against undefined \"subtract\", e.g., when used as in cssHooks\n\t\tMath.max( 0, matches[ 1 ] - ( subtract || 0 ) ) + ( matches[ 2 ] || \"px\" ) :\n\t\tvalue;\n}\n\nfunction augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) {\n\tvar i = extra === ( isBorderBox ? \"border\" : \"content\" ) ?\n\t\t// If we already have the right measurement, avoid augmentation\n\t\t4 :\n\t\t// Otherwise initialize for horizontal or vertical properties\n\t\tname === \"width\" ? 1 : 0,\n\n\t\tval = 0;\n\n\tfor ( ; i < 4; i += 2 ) {\n\t\t// both box models exclude margin, so add it if we want it\n\t\tif ( extra === \"margin\" ) {\n\t\t\tval += jQuery.css( elem, extra + cssExpand[ i ], true, styles );\n\t\t}\n\n\t\tif ( isBorderBox ) {\n\t\t\t// border-box includes padding, so remove it if we want content\n\t\t\tif ( extra === \"content\" ) {\n\t\t\t\tval -= jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\t\t\t}\n\n\t\t\t// at this point, extra isn't border nor margin, so remove border\n\t\t\tif ( extra !== \"margin\" ) {\n\t\t\t\tval -= jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t} else {\n\t\t\t// at this point, extra isn't content, so add padding\n\t\t\tval += jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\n\t\t\t// at this point, extra isn't content nor padding, so add border\n\t\t\tif ( extra !== \"padding\" ) {\n\t\t\t\tval += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t}\n\t}\n\n\treturn val;\n}\n\nfunction getWidthOrHeight( elem, name, extra ) {\n\n\t// Start with offset property, which is equivalent to the border-box value\n\tvar valueIsBorderBox = true,\n\t\tval = name === \"width\" ? elem.offsetWidth : elem.offsetHeight,\n\t\tstyles = getStyles( elem ),\n\t\tisBorderBox = jQuery.support.boxSizing && jQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\";\n\n\t// some non-html elements return undefined for offsetWidth, so check for null/undefined\n\t// svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285\n\t// MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668\n\tif ( val <= 0 || val == null ) {\n\t\t// Fall back to computed then uncomputed css if necessary\n\t\tval = curCSS( elem, name, styles );\n\t\tif ( val < 0 || val == null ) {\n\t\t\tval = elem.style[ name ];\n\t\t}\n\n\t\t// Computed unit is not pixels. Stop here and return.\n\t\tif ( rnumnonpx.test(val) ) {\n\t\t\treturn val;\n\t\t}\n\n\t\t// we need the check for style in case a browser which returns unreliable values\n\t\t// for getComputedStyle silently falls back to the reliable elem.style\n\t\tvalueIsBorderBox = isBorderBox && ( jQuery.support.boxSizingReliable || val === elem.style[ name ] );\n\n\t\t// Normalize \"\", auto, and prepare for extra\n\t\tval = parseFloat( val ) || 0;\n\t}\n\n\t// use the active box-sizing model to add/subtract irrelevant styles\n\treturn ( val +\n\t\taugmentWidthOrHeight(\n\t\t\telem,\n\t\t\tname,\n\t\t\textra || ( isBorderBox ? \"border\" : \"content\" ),\n\t\t\tvalueIsBorderBox,\n\t\t\tstyles\n\t\t)\n\t) + \"px\";\n}\n\n// Try to determine the default display value of an element\nfunction css_defaultDisplay( nodeName ) {\n\tvar doc = document,\n\t\tdisplay = elemdisplay[ nodeName ];\n\n\tif ( !display ) {\n\t\tdisplay = actualDisplay( nodeName, doc );\n\n\t\t// If the simple way fails, read from inside an iframe\n\t\tif ( display === \"none\" || !display ) {\n\t\t\t// Use the already-created iframe if possible\n\t\t\tiframe = ( iframe ||\n\t\t\t\tjQuery(\"<iframe frameborder='0' width='0' height='0'/>\")\n\t\t\t\t.css( \"cssText\", \"display:block !important\" )\n\t\t\t).appendTo( doc.documentElement );\n\n\t\t\t// Always write a new HTML skeleton so Webkit and Firefox don't choke on reuse\n\t\t\tdoc = ( iframe[0].contentWindow || iframe[0].contentDocument ).document;\n\t\t\tdoc.write(\"<!doctype html><html><body>\");\n\t\t\tdoc.close();\n\n\t\t\tdisplay = actualDisplay( nodeName, doc );\n\t\t\tiframe.detach();\n\t\t}\n\n\t\t// Store the correct default display\n\t\telemdisplay[ nodeName ] = display;\n\t}\n\n\treturn display;\n}\n\n// Called ONLY from within css_defaultDisplay\nfunction actualDisplay( name, doc ) {\n\tvar elem = jQuery( doc.createElement( name ) ).appendTo( doc.body ),\n\t\tdisplay = jQuery.css( elem[0], \"display\" );\n\telem.remove();\n\treturn display;\n}\n\njQuery.each([ \"height\", \"width\" ], function( i, name ) {\n\tjQuery.cssHooks[ name ] = {\n\t\tget: function( elem, computed, extra ) {\n\t\t\tif ( computed ) {\n\t\t\t\t// certain elements can have dimension info if we invisibly show them\n\t\t\t\t// however, it must have a current display style that would benefit from this\n\t\t\t\treturn elem.offsetWidth === 0 && rdisplayswap.test( jQuery.css( elem, \"display\" ) ) ?\n\t\t\t\t\tjQuery.swap( elem, cssShow, function() {\n\t\t\t\t\t\treturn getWidthOrHeight( elem, name, extra );\n\t\t\t\t\t}) :\n\t\t\t\t\tgetWidthOrHeight( elem, name, extra );\n\t\t\t}\n\t\t},\n\n\t\tset: function( elem, value, extra ) {\n\t\t\tvar styles = extra && getStyles( elem );\n\t\t\treturn setPositiveNumber( elem, value, extra ?\n\t\t\t\taugmentWidthOrHeight(\n\t\t\t\t\telem,\n\t\t\t\t\tname,\n\t\t\t\t\textra,\n\t\t\t\t\tjQuery.support.boxSizing && jQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\t\t\t\tstyles\n\t\t\t\t) : 0\n\t\t\t);\n\t\t}\n\t};\n});\n\nif ( !jQuery.support.opacity ) {\n\tjQuery.cssHooks.opacity = {\n\t\tget: function( elem, computed ) {\n\t\t\t// IE uses filters for opacity\n\t\t\treturn ropacity.test( (computed && elem.currentStyle ? elem.currentStyle.filter : elem.style.filter) || \"\" ) ?\n\t\t\t\t( 0.01 * parseFloat( RegExp.$1 ) ) + \"\" :\n\t\t\t\tcomputed ? \"1\" : \"\";\n\t\t},\n\n\t\tset: function( elem, value ) {\n\t\t\tvar style = elem.style,\n\t\t\t\tcurrentStyle = elem.currentStyle,\n\t\t\t\topacity = jQuery.isNumeric( value ) ? \"alpha(opacity=\" + value * 100 + \")\" : \"\",\n\t\t\t\tfilter = currentStyle && currentStyle.filter || style.filter || \"\";\n\n\t\t\t// IE has trouble with opacity if it does not have layout\n\t\t\t// Force it by setting the zoom level\n\t\t\tstyle.zoom = 1;\n\n\t\t\t// if setting opacity to 1, and no other filters exist - attempt to remove filter attribute #6652\n\t\t\t// if value === \"\", then remove inline opacity #12685\n\t\t\tif ( ( value >= 1 || value === \"\" ) &&\n\t\t\t\t\tjQuery.trim( filter.replace( ralpha, \"\" ) ) === \"\" &&\n\t\t\t\t\tstyle.removeAttribute ) {\n\n\t\t\t\t// Setting style.filter to null, \"\" & \" \" still leave \"filter:\" in the cssText\n\t\t\t\t// if \"filter:\" is present at all, clearType is disabled, we want to avoid this\n\t\t\t\t// style.removeAttribute is IE Only, but so apparently is this code path...\n\t\t\t\tstyle.removeAttribute( \"filter\" );\n\n\t\t\t\t// if there is no filter style applied in a css rule or unset inline opacity, we are done\n\t\t\t\tif ( value === \"\" || currentStyle && !currentStyle.filter ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// otherwise, set new filter values\n\t\t\tstyle.filter = ralpha.test( filter ) ?\n\t\t\t\tfilter.replace( ralpha, opacity ) :\n\t\t\t\tfilter + \" \" + opacity;\n\t\t}\n\t};\n}\n\n// These hooks cannot be added until DOM ready because the support test\n// for it is not run until after DOM ready\njQuery(function() {\n\tif ( !jQuery.support.reliableMarginRight ) {\n\t\tjQuery.cssHooks.marginRight = {\n\t\t\tget: function( elem, computed ) {\n\t\t\t\tif ( computed ) {\n\t\t\t\t\t// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right\n\t\t\t\t\t// Work around by temporarily setting element display to inline-block\n\t\t\t\t\treturn jQuery.swap( elem, { \"display\": \"inline-block\" },\n\t\t\t\t\t\tcurCSS, [ elem, \"marginRight\" ] );\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n\n\t// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084\n\t// getComputedStyle returns percent when specified for top/left/bottom/right\n\t// rather than make the css module depend on the offset module, we just check for it here\n\tif ( !jQuery.support.pixelPosition && jQuery.fn.position ) {\n\t\tjQuery.each( [ \"top\", \"left\" ], function( i, prop ) {\n\t\t\tjQuery.cssHooks[ prop ] = {\n\t\t\t\tget: function( elem, computed ) {\n\t\t\t\t\tif ( computed ) {\n\t\t\t\t\t\tcomputed = curCSS( elem, prop );\n\t\t\t\t\t\t// if curCSS returns percentage, fallback to offset\n\t\t\t\t\t\treturn rnumnonpx.test( computed ) ?\n\t\t\t\t\t\t\tjQuery( elem ).position()[ prop ] + \"px\" :\n\t\t\t\t\t\t\tcomputed;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t});\n\t}\n\n});\n\nif ( jQuery.expr && jQuery.expr.filters ) {\n\tjQuery.expr.filters.hidden = function( elem ) {\n\t\t// Support: Opera <= 12.12\n\t\t// Opera reports offsetWidths and offsetHeights less than zero on some elements\n\t\treturn elem.offsetWidth <= 0 && elem.offsetHeight <= 0 ||\n\t\t\t(!jQuery.support.reliableHiddenOffsets && ((elem.style && elem.style.display) || jQuery.css( elem, \"display\" )) === \"none\");\n\t};\n\n\tjQuery.expr.filters.visible = function( elem ) {\n\t\treturn !jQuery.expr.filters.hidden( elem );\n\t};\n}\n\n// These hooks are used by animate to expand properties\njQuery.each({\n\tmargin: \"\",\n\tpadding: \"\",\n\tborder: \"Width\"\n}, function( prefix, suffix ) {\n\tjQuery.cssHooks[ prefix + suffix ] = {\n\t\texpand: function( value ) {\n\t\t\tvar i = 0,\n\t\t\t\texpanded = {},\n\n\t\t\t\t// assumes a single number if not a string\n\t\t\t\tparts = typeof value === \"string\" ? value.split(\" \") : [ value ];\n\n\t\t\tfor ( ; i < 4; i++ ) {\n\t\t\t\texpanded[ prefix + cssExpand[ i ] + suffix ] =\n\t\t\t\t\tparts[ i ] || parts[ i - 2 ] || parts[ 0 ];\n\t\t\t}\n\n\t\t\treturn expanded;\n\t\t}\n\t};\n\n\tif ( !rmargin.test( prefix ) ) {\n\t\tjQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;\n\t}\n});\nvar r20 = /%20/g,\n\trbracket = /\\[\\]$/,\n\trCRLF = /\\r?\\n/g,\n\trsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n\trsubmittable = /^(?:input|select|textarea|keygen)/i;\n\njQuery.fn.extend({\n\tserialize: function() {\n\t\treturn jQuery.param( this.serializeArray() );\n\t},\n\tserializeArray: function() {\n\t\treturn this.map(function(){\n\t\t\t// Can add propHook for \"elements\" to filter or add form elements\n\t\t\tvar elements = jQuery.prop( this, \"elements\" );\n\t\t\treturn elements ? jQuery.makeArray( elements ) : this;\n\t\t})\n\t\t.filter(function(){\n\t\t\tvar type = this.type;\n\t\t\t// Use .is(\":disabled\") so that fieldset[disabled] works\n\t\t\treturn this.name && !jQuery( this ).is( \":disabled\" ) &&\n\t\t\t\trsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&\n\t\t\t\t( this.checked || !manipulation_rcheckableType.test( type ) );\n\t\t})\n\t\t.map(function( i, elem ){\n\t\t\tvar val = jQuery( this ).val();\n\n\t\t\treturn val == null ?\n\t\t\t\tnull :\n\t\t\t\tjQuery.isArray( val ) ?\n\t\t\t\t\tjQuery.map( val, function( val ){\n\t\t\t\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t\t\t\t}) :\n\t\t\t\t\t{ name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t}).get();\n\t}\n});\n\n//Serialize an array of form elements or a set of\n//key/values into a query string\njQuery.param = function( a, traditional ) {\n\tvar prefix,\n\t\ts = [],\n\t\tadd = function( key, value ) {\n\t\t\t// If value is a function, invoke it and return its value\n\t\t\tvalue = jQuery.isFunction( value ) ? value() : ( value == null ? \"\" : value );\n\t\t\ts[ s.length ] = encodeURIComponent( key ) + \"=\" + encodeURIComponent( value );\n\t\t};\n\n\t// Set traditional to true for jQuery <= 1.3.2 behavior.\n\tif ( traditional === undefined ) {\n\t\ttraditional = jQuery.ajaxSettings && jQuery.ajaxSettings.traditional;\n\t}\n\n\t// If an array was passed in, assume that it is an array of form elements.\n\tif ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {\n\t\t// Serialize the form elements\n\t\tjQuery.each( a, function() {\n\t\t\tadd( this.name, this.value );\n\t\t});\n\n\t} else {\n\t\t// If traditional, encode the \"old\" way (the way 1.3.2 or older\n\t\t// did it), otherwise encode params recursively.\n\t\tfor ( prefix in a ) {\n\t\t\tbuildParams( prefix, a[ prefix ], traditional, add );\n\t\t}\n\t}\n\n\t// Return the resulting serialization\n\treturn s.join( \"&\" ).replace( r20, \"+\" );\n};\n\nfunction buildParams( prefix, obj, traditional, add ) {\n\tvar name;\n\n\tif ( jQuery.isArray( obj ) ) {\n\t\t// Serialize array item.\n\t\tjQuery.each( obj, function( i, v ) {\n\t\t\tif ( traditional || rbracket.test( prefix ) ) {\n\t\t\t\t// Treat each array item as a scalar.\n\t\t\t\tadd( prefix, v );\n\n\t\t\t} else {\n\t\t\t\t// Item is non-scalar (array or object), encode its numeric index.\n\t\t\t\tbuildParams( prefix + \"[\" + ( typeof v === \"object\" ? i : \"\" ) + \"]\", v, traditional, add );\n\t\t\t}\n\t\t});\n\n\t} else if ( !traditional && jQuery.type( obj ) === \"object\" ) {\n\t\t// Serialize object item.\n\t\tfor ( name in obj ) {\n\t\t\tbuildParams( prefix + \"[\" + name + \"]\", obj[ name ], traditional, add );\n\t\t}\n\n\t} else {\n\t\t// Serialize scalar item.\n\t\tadd( prefix, obj );\n\t}\n}\njQuery.each( (\"blur focus focusin focusout load resize scroll unload click dblclick \" +\n\t\"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave \" +\n\t\"change select submit keydown keypress keyup error contextmenu\").split(\" \"), function( i, name ) {\n\n\t// Handle event binding\n\tjQuery.fn[ name ] = function( data, fn ) {\n\t\treturn arguments.length > 0 ?\n\t\t\tthis.on( name, null, data, fn ) :\n\t\t\tthis.trigger( name );\n\t};\n});\n\njQuery.fn.extend({\n\thover: function( fnOver, fnOut ) {\n\t\treturn this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );\n\t},\n\n\tbind: function( types, data, fn ) {\n\t\treturn this.on( types, null, data, fn );\n\t},\n\tunbind: function( types, fn ) {\n\t\treturn this.off( types, null, fn );\n\t},\n\n\tdelegate: function( selector, types, data, fn ) {\n\t\treturn this.on( types, selector, data, fn );\n\t},\n\tundelegate: function( selector, types, fn ) {\n\t\t// ( namespace ) or ( selector, types [, fn] )\n\t\treturn arguments.length === 1 ? this.off( selector, \"**\" ) : this.off( types, selector || \"**\", fn );\n\t}\n});\nvar\n\t// Document location\n\tajaxLocParts,\n\tajaxLocation,\n\tajax_nonce = jQuery.now(),\n\n\tajax_rquery = /\\?/,\n\trhash = /#.*$/,\n\trts = /([?&])_=[^&]*/,\n\trheaders = /^(.*?):[ \\t]*([^\\r\\n]*)\\r?$/mg, // IE leaves an \\r character at EOL\n\t// #7653, #8125, #8152: local protocol detection\n\trlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,\n\trnoContent = /^(?:GET|HEAD)$/,\n\trprotocol = /^\\/\\//,\n\trurl = /^([\\w.+-]+:)(?:\\/\\/([^\\/?#:]*)(?::(\\d+)|)|)/,\n\n\t// Keep a copy of the old load method\n\t_load = jQuery.fn.load,\n\n\t/* Prefilters\n\t * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n\t * 2) These are called:\n\t *    - BEFORE asking for a transport\n\t *    - AFTER param serialization (s.data is a string if s.processData is true)\n\t * 3) key is the dataType\n\t * 4) the catchall symbol \"*\" can be used\n\t * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n\t */\n\tprefilters = {},\n\n\t/* Transports bindings\n\t * 1) key is the dataType\n\t * 2) the catchall symbol \"*\" can be used\n\t * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n\t */\n\ttransports = {},\n\n\t// Avoid comment-prolog char sequence (#10098); must appease lint and evade compression\n\tallTypes = \"*/\".concat(\"*\");\n\n// #8138, IE may throw an exception when accessing\n// a field from window.location if document.domain has been set\ntry {\n\tajaxLocation = location.href;\n} catch( e ) {\n\t// Use the href attribute of an A element\n\t// since IE will modify it given document.location\n\tajaxLocation = document.createElement( \"a\" );\n\tajaxLocation.href = \"\";\n\tajaxLocation = ajaxLocation.href;\n}\n\n// Segment location into parts\najaxLocParts = rurl.exec( ajaxLocation.toLowerCase() ) || [];\n\n// Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\nfunction addToPrefiltersOrTransports( structure ) {\n\n\t// dataTypeExpression is optional and defaults to \"*\"\n\treturn function( dataTypeExpression, func ) {\n\n\t\tif ( typeof dataTypeExpression !== \"string\" ) {\n\t\t\tfunc = dataTypeExpression;\n\t\t\tdataTypeExpression = \"*\";\n\t\t}\n\n\t\tvar dataType,\n\t\t\ti = 0,\n\t\t\tdataTypes = dataTypeExpression.toLowerCase().match( core_rnotwhite ) || [];\n\n\t\tif ( jQuery.isFunction( func ) ) {\n\t\t\t// For each dataType in the dataTypeExpression\n\t\t\twhile ( (dataType = dataTypes[i++]) ) {\n\t\t\t\t// Prepend if requested\n\t\t\t\tif ( dataType[0] === \"+\" ) {\n\t\t\t\t\tdataType = dataType.slice( 1 ) || \"*\";\n\t\t\t\t\t(structure[ dataType ] = structure[ dataType ] || []).unshift( func );\n\n\t\t\t\t// Otherwise append\n\t\t\t\t} else {\n\t\t\t\t\t(structure[ dataType ] = structure[ dataType ] || []).push( func );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\n// Base inspection function for prefilters and transports\nfunction inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {\n\n\tvar inspected = {},\n\t\tseekingTransport = ( structure === transports );\n\n\tfunction inspect( dataType ) {\n\t\tvar selected;\n\t\tinspected[ dataType ] = true;\n\t\tjQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {\n\t\t\tvar dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );\n\t\t\tif( typeof dataTypeOrTransport === \"string\" && !seekingTransport && !inspected[ dataTypeOrTransport ] ) {\n\t\t\t\toptions.dataTypes.unshift( dataTypeOrTransport );\n\t\t\t\tinspect( dataTypeOrTransport );\n\t\t\t\treturn false;\n\t\t\t} else if ( seekingTransport ) {\n\t\t\t\treturn !( selected = dataTypeOrTransport );\n\t\t\t}\n\t\t});\n\t\treturn selected;\n\t}\n\n\treturn inspect( options.dataTypes[ 0 ] ) || !inspected[ \"*\" ] && inspect( \"*\" );\n}\n\n// A special extend for ajax options\n// that takes \"flat\" options (not to be deep extended)\n// Fixes #9887\nfunction ajaxExtend( target, src ) {\n\tvar deep, key,\n\t\tflatOptions = jQuery.ajaxSettings.flatOptions || {};\n\n\tfor ( key in src ) {\n\t\tif ( src[ key ] !== undefined ) {\n\t\t\t( flatOptions[ key ] ? target : ( deep || (deep = {}) ) )[ key ] = src[ key ];\n\t\t}\n\t}\n\tif ( deep ) {\n\t\tjQuery.extend( true, target, deep );\n\t}\n\n\treturn target;\n}\n\njQuery.fn.load = function( url, params, callback ) {\n\tif ( typeof url !== \"string\" && _load ) {\n\t\treturn _load.apply( this, arguments );\n\t}\n\n\tvar selector, response, type,\n\t\tself = this,\n\t\toff = url.indexOf(\" \");\n\n\tif ( off >= 0 ) {\n\t\tselector = url.slice( off, url.length );\n\t\turl = url.slice( 0, off );\n\t}\n\n\t// If it's a function\n\tif ( jQuery.isFunction( params ) ) {\n\n\t\t// We assume that it's the callback\n\t\tcallback = params;\n\t\tparams = undefined;\n\n\t// Otherwise, build a param string\n\t} else if ( params && typeof params === \"object\" ) {\n\t\ttype = \"POST\";\n\t}\n\n\t// If we have elements to modify, make the request\n\tif ( self.length > 0 ) {\n\t\tjQuery.ajax({\n\t\t\turl: url,\n\n\t\t\t// if \"type\" variable is undefined, then \"GET\" method will be used\n\t\t\ttype: type,\n\t\t\tdataType: \"html\",\n\t\t\tdata: params\n\t\t}).done(function( responseText ) {\n\n\t\t\t// Save response for use in complete callback\n\t\t\tresponse = arguments;\n\n\t\t\tself.html( selector ?\n\n\t\t\t\t// If a selector was specified, locate the right elements in a dummy div\n\t\t\t\t// Exclude scripts to avoid IE 'Permission Denied' errors\n\t\t\t\tjQuery(\"<div>\").append( jQuery.parseHTML( responseText ) ).find( selector ) :\n\n\t\t\t\t// Otherwise use the full result\n\t\t\t\tresponseText );\n\n\t\t}).complete( callback && function( jqXHR, status ) {\n\t\t\tself.each( callback, response || [ jqXHR.responseText, status, jqXHR ] );\n\t\t});\n\t}\n\n\treturn this;\n};\n\n// Attach a bunch of functions for handling common AJAX events\njQuery.each( [ \"ajaxStart\", \"ajaxStop\", \"ajaxComplete\", \"ajaxError\", \"ajaxSuccess\", \"ajaxSend\" ], function( i, type ){\n\tjQuery.fn[ type ] = function( fn ){\n\t\treturn this.on( type, fn );\n\t};\n});\n\njQuery.extend({\n\n\t// Counter for holding the number of active queries\n\tactive: 0,\n\n\t// Last-Modified header cache for next request\n\tlastModified: {},\n\tetag: {},\n\n\tajaxSettings: {\n\t\turl: ajaxLocation,\n\t\ttype: \"GET\",\n\t\tisLocal: rlocalProtocol.test( ajaxLocParts[ 1 ] ),\n\t\tglobal: true,\n\t\tprocessData: true,\n\t\tasync: true,\n\t\tcontentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n\t\t/*\n\t\ttimeout: 0,\n\t\tdata: null,\n\t\tdataType: null,\n\t\tusername: null,\n\t\tpassword: null,\n\t\tcache: null,\n\t\tthrows: false,\n\t\ttraditional: false,\n\t\theaders: {},\n\t\t*/\n\n\t\taccepts: {\n\t\t\t\"*\": allTypes,\n\t\t\ttext: \"text/plain\",\n\t\t\thtml: \"text/html\",\n\t\t\txml: \"application/xml, text/xml\",\n\t\t\tjson: \"application/json, text/javascript\"\n\t\t},\n\n\t\tcontents: {\n\t\t\txml: /xml/,\n\t\t\thtml: /html/,\n\t\t\tjson: /json/\n\t\t},\n\n\t\tresponseFields: {\n\t\t\txml: \"responseXML\",\n\t\t\ttext: \"responseText\",\n\t\t\tjson: \"responseJSON\"\n\t\t},\n\n\t\t// Data converters\n\t\t// Keys separate source (or catchall \"*\") and destination types with a single space\n\t\tconverters: {\n\n\t\t\t// Convert anything to text\n\t\t\t\"* text\": String,\n\n\t\t\t// Text to html (true = no transformation)\n\t\t\t\"text html\": true,\n\n\t\t\t// Evaluate text as a json expression\n\t\t\t\"text json\": jQuery.parseJSON,\n\n\t\t\t// Parse text as xml\n\t\t\t\"text xml\": jQuery.parseXML\n\t\t},\n\n\t\t// For options that shouldn't be deep extended:\n\t\t// you can add your own custom options here if\n\t\t// and when you create one that shouldn't be\n\t\t// deep extended (see ajaxExtend)\n\t\tflatOptions: {\n\t\t\turl: true,\n\t\t\tcontext: true\n\t\t}\n\t},\n\n\t// Creates a full fledged settings object into target\n\t// with both ajaxSettings and settings fields.\n\t// If target is omitted, writes into ajaxSettings.\n\tajaxSetup: function( target, settings ) {\n\t\treturn settings ?\n\n\t\t\t// Building a settings object\n\t\t\tajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :\n\n\t\t\t// Extending ajaxSettings\n\t\t\tajaxExtend( jQuery.ajaxSettings, target );\n\t},\n\n\tajaxPrefilter: addToPrefiltersOrTransports( prefilters ),\n\tajaxTransport: addToPrefiltersOrTransports( transports ),\n\n\t// Main method\n\tajax: function( url, options ) {\n\n\t\t// If url is an object, simulate pre-1.5 signature\n\t\tif ( typeof url === \"object\" ) {\n\t\t\toptions = url;\n\t\t\turl = undefined;\n\t\t}\n\n\t\t// Force options to be an object\n\t\toptions = options || {};\n\n\t\tvar // Cross-domain detection vars\n\t\t\tparts,\n\t\t\t// Loop variable\n\t\t\ti,\n\t\t\t// URL without anti-cache param\n\t\t\tcacheURL,\n\t\t\t// Response headers as string\n\t\t\tresponseHeadersString,\n\t\t\t// timeout handle\n\t\t\ttimeoutTimer,\n\n\t\t\t// To know if global events are to be dispatched\n\t\t\tfireGlobals,\n\n\t\t\ttransport,\n\t\t\t// Response headers\n\t\t\tresponseHeaders,\n\t\t\t// Create the final options object\n\t\t\ts = jQuery.ajaxSetup( {}, options ),\n\t\t\t// Callbacks context\n\t\t\tcallbackContext = s.context || s,\n\t\t\t// Context for global events is callbackContext if it is a DOM node or jQuery collection\n\t\t\tglobalEventContext = s.context && ( callbackContext.nodeType || callbackContext.jquery ) ?\n\t\t\t\tjQuery( callbackContext ) :\n\t\t\t\tjQuery.event,\n\t\t\t// Deferreds\n\t\t\tdeferred = jQuery.Deferred(),\n\t\t\tcompleteDeferred = jQuery.Callbacks(\"once memory\"),\n\t\t\t// Status-dependent callbacks\n\t\t\tstatusCode = s.statusCode || {},\n\t\t\t// Headers (they are sent all at once)\n\t\t\trequestHeaders = {},\n\t\t\trequestHeadersNames = {},\n\t\t\t// The jqXHR state\n\t\t\tstate = 0,\n\t\t\t// Default abort message\n\t\t\tstrAbort = \"canceled\",\n\t\t\t// Fake xhr\n\t\t\tjqXHR = {\n\t\t\t\treadyState: 0,\n\n\t\t\t\t// Builds headers hashtable if needed\n\t\t\t\tgetResponseHeader: function( key ) {\n\t\t\t\t\tvar match;\n\t\t\t\t\tif ( state === 2 ) {\n\t\t\t\t\t\tif ( !responseHeaders ) {\n\t\t\t\t\t\t\tresponseHeaders = {};\n\t\t\t\t\t\t\twhile ( (match = rheaders.exec( responseHeadersString )) ) {\n\t\t\t\t\t\t\t\tresponseHeaders[ match[1].toLowerCase() ] = match[ 2 ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmatch = responseHeaders[ key.toLowerCase() ];\n\t\t\t\t\t}\n\t\t\t\t\treturn match == null ? null : match;\n\t\t\t\t},\n\n\t\t\t\t// Raw string\n\t\t\t\tgetAllResponseHeaders: function() {\n\t\t\t\t\treturn state === 2 ? responseHeadersString : null;\n\t\t\t\t},\n\n\t\t\t\t// Caches the header\n\t\t\t\tsetRequestHeader: function( name, value ) {\n\t\t\t\t\tvar lname = name.toLowerCase();\n\t\t\t\t\tif ( !state ) {\n\t\t\t\t\t\tname = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name;\n\t\t\t\t\t\trequestHeaders[ name ] = value;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Overrides response content-type header\n\t\t\t\toverrideMimeType: function( type ) {\n\t\t\t\t\tif ( !state ) {\n\t\t\t\t\t\ts.mimeType = type;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tstatusCode: function( map ) {\n\t\t\t\t\tvar code;\n\t\t\t\t\tif ( map ) {\n\t\t\t\t\t\tif ( state < 2 ) {\n\t\t\t\t\t\t\tfor ( code in map ) {\n\t\t\t\t\t\t\t\t// Lazy-add the new callback in a way that preserves old ones\n\t\t\t\t\t\t\t\tstatusCode[ code ] = [ statusCode[ code ], map[ code ] ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Execute the appropriate callbacks\n\t\t\t\t\t\t\tjqXHR.always( map[ jqXHR.status ] );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Cancel the request\n\t\t\t\tabort: function( statusText ) {\n\t\t\t\t\tvar finalText = statusText || strAbort;\n\t\t\t\t\tif ( transport ) {\n\t\t\t\t\t\ttransport.abort( finalText );\n\t\t\t\t\t}\n\t\t\t\t\tdone( 0, finalText );\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t};\n\n\t\t// Attach deferreds\n\t\tdeferred.promise( jqXHR ).complete = completeDeferred.add;\n\t\tjqXHR.success = jqXHR.done;\n\t\tjqXHR.error = jqXHR.fail;\n\n\t\t// Remove hash character (#7531: and string promotion)\n\t\t// Add protocol if not provided (#5866: IE7 issue with protocol-less urls)\n\t\t// Handle falsy url in the settings object (#10093: consistency with old signature)\n\t\t// We also use the url parameter if available\n\t\ts.url = ( ( url || s.url || ajaxLocation ) + \"\" ).replace( rhash, \"\" ).replace( rprotocol, ajaxLocParts[ 1 ] + \"//\" );\n\n\t\t// Alias method option to type as per ticket #12004\n\t\ts.type = options.method || options.type || s.method || s.type;\n\n\t\t// Extract dataTypes list\n\t\ts.dataTypes = jQuery.trim( s.dataType || \"*\" ).toLowerCase().match( core_rnotwhite ) || [\"\"];\n\n\t\t// A cross-domain request is in order when we have a protocol:host:port mismatch\n\t\tif ( s.crossDomain == null ) {\n\t\t\tparts = rurl.exec( s.url.toLowerCase() );\n\t\t\ts.crossDomain = !!( parts &&\n\t\t\t\t( parts[ 1 ] !== ajaxLocParts[ 1 ] || parts[ 2 ] !== ajaxLocParts[ 2 ] ||\n\t\t\t\t\t( parts[ 3 ] || ( parts[ 1 ] === \"http:\" ? \"80\" : \"443\" ) ) !==\n\t\t\t\t\t\t( ajaxLocParts[ 3 ] || ( ajaxLocParts[ 1 ] === \"http:\" ? \"80\" : \"443\" ) ) )\n\t\t\t);\n\t\t}\n\n\t\t// Convert data if not already a string\n\t\tif ( s.data && s.processData && typeof s.data !== \"string\" ) {\n\t\t\ts.data = jQuery.param( s.data, s.traditional );\n\t\t}\n\n\t\t// Apply prefilters\n\t\tinspectPrefiltersOrTransports( prefilters, s, options, jqXHR );\n\n\t\t// If request was aborted inside a prefilter, stop there\n\t\tif ( state === 2 ) {\n\t\t\treturn jqXHR;\n\t\t}\n\n\t\t// We can fire global events as of now if asked to\n\t\tfireGlobals = s.global;\n\n\t\t// Watch for a new set of requests\n\t\tif ( fireGlobals && jQuery.active++ === 0 ) {\n\t\t\tjQuery.event.trigger(\"ajaxStart\");\n\t\t}\n\n\t\t// Uppercase the type\n\t\ts.type = s.type.toUpperCase();\n\n\t\t// Determine if request has content\n\t\ts.hasContent = !rnoContent.test( s.type );\n\n\t\t// Save the URL in case we're toying with the If-Modified-Since\n\t\t// and/or If-None-Match header later on\n\t\tcacheURL = s.url;\n\n\t\t// More options handling for requests with no content\n\t\tif ( !s.hasContent ) {\n\n\t\t\t// If data is available, append data to url\n\t\t\tif ( s.data ) {\n\t\t\t\tcacheURL = ( s.url += ( ajax_rquery.test( cacheURL ) ? \"&\" : \"?\" ) + s.data );\n\t\t\t\t// #9682: remove data so that it's not used in an eventual retry\n\t\t\t\tdelete s.data;\n\t\t\t}\n\n\t\t\t// Add anti-cache in url if needed\n\t\t\tif ( s.cache === false ) {\n\t\t\t\ts.url = rts.test( cacheURL ) ?\n\n\t\t\t\t\t// If there is already a '_' parameter, set its value\n\t\t\t\t\tcacheURL.replace( rts, \"$1_=\" + ajax_nonce++ ) :\n\n\t\t\t\t\t// Otherwise add one to the end\n\t\t\t\t\tcacheURL + ( ajax_rquery.test( cacheURL ) ? \"&\" : \"?\" ) + \"_=\" + ajax_nonce++;\n\t\t\t}\n\t\t}\n\n\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\tif ( s.ifModified ) {\n\t\t\tif ( jQuery.lastModified[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-Modified-Since\", jQuery.lastModified[ cacheURL ] );\n\t\t\t}\n\t\t\tif ( jQuery.etag[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-None-Match\", jQuery.etag[ cacheURL ] );\n\t\t\t}\n\t\t}\n\n\t\t// Set the correct header, if data is being sent\n\t\tif ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {\n\t\t\tjqXHR.setRequestHeader( \"Content-Type\", s.contentType );\n\t\t}\n\n\t\t// Set the Accepts header for the server, depending on the dataType\n\t\tjqXHR.setRequestHeader(\n\t\t\t\"Accept\",\n\t\t\ts.dataTypes[ 0 ] && s.accepts[ s.dataTypes[0] ] ?\n\t\t\t\ts.accepts[ s.dataTypes[0] ] + ( s.dataTypes[ 0 ] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\" ) :\n\t\t\t\ts.accepts[ \"*\" ]\n\t\t);\n\n\t\t// Check for headers option\n\t\tfor ( i in s.headers ) {\n\t\t\tjqXHR.setRequestHeader( i, s.headers[ i ] );\n\t\t}\n\n\t\t// Allow custom headers/mimetypes and early abort\n\t\tif ( s.beforeSend && ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) {\n\t\t\t// Abort if not done already and return\n\t\t\treturn jqXHR.abort();\n\t\t}\n\n\t\t// aborting is no longer a cancellation\n\t\tstrAbort = \"abort\";\n\n\t\t// Install callbacks on deferreds\n\t\tfor ( i in { success: 1, error: 1, complete: 1 } ) {\n\t\t\tjqXHR[ i ]( s[ i ] );\n\t\t}\n\n\t\t// Get transport\n\t\ttransport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );\n\n\t\t// If no transport, we auto-abort\n\t\tif ( !transport ) {\n\t\t\tdone( -1, \"No Transport\" );\n\t\t} else {\n\t\t\tjqXHR.readyState = 1;\n\n\t\t\t// Send global event\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxSend\", [ jqXHR, s ] );\n\t\t\t}\n\t\t\t// Timeout\n\t\t\tif ( s.async && s.timeout > 0 ) {\n\t\t\t\ttimeoutTimer = setTimeout(function() {\n\t\t\t\t\tjqXHR.abort(\"timeout\");\n\t\t\t\t}, s.timeout );\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tstate = 1;\n\t\t\t\ttransport.send( requestHeaders, done );\n\t\t\t} catch ( e ) {\n\t\t\t\t// Propagate exception as error if not done\n\t\t\t\tif ( state < 2 ) {\n\t\t\t\t\tdone( -1, e );\n\t\t\t\t// Simply rethrow otherwise\n\t\t\t\t} else {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Callback for when everything is done\n\t\tfunction done( status, nativeStatusText, responses, headers ) {\n\t\t\tvar isSuccess, success, error, response, modified,\n\t\t\t\tstatusText = nativeStatusText;\n\n\t\t\t// Called once\n\t\t\tif ( state === 2 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// State is \"done\" now\n\t\t\tstate = 2;\n\n\t\t\t// Clear timeout if it exists\n\t\t\tif ( timeoutTimer ) {\n\t\t\t\tclearTimeout( timeoutTimer );\n\t\t\t}\n\n\t\t\t// Dereference transport for early garbage collection\n\t\t\t// (no matter how long the jqXHR object will be used)\n\t\t\ttransport = undefined;\n\n\t\t\t// Cache response headers\n\t\t\tresponseHeadersString = headers || \"\";\n\n\t\t\t// Set readyState\n\t\t\tjqXHR.readyState = status > 0 ? 4 : 0;\n\n\t\t\t// Determine if successful\n\t\t\tisSuccess = status >= 200 && status < 300 || status === 304;\n\n\t\t\t// Get response data\n\t\t\tif ( responses ) {\n\t\t\t\tresponse = ajaxHandleResponses( s, jqXHR, responses );\n\t\t\t}\n\n\t\t\t// Convert no matter what (that way responseXXX fields are always set)\n\t\t\tresponse = ajaxConvert( s, response, jqXHR, isSuccess );\n\n\t\t\t// If successful, handle type chaining\n\t\t\tif ( isSuccess ) {\n\n\t\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\t\tif ( s.ifModified ) {\n\t\t\t\t\tmodified = jqXHR.getResponseHeader(\"Last-Modified\");\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.lastModified[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t\tmodified = jqXHR.getResponseHeader(\"etag\");\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.etag[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// if no content\n\t\t\t\tif ( status === 204 || s.type === \"HEAD\" ) {\n\t\t\t\t\tstatusText = \"nocontent\";\n\n\t\t\t\t// if not modified\n\t\t\t\t} else if ( status === 304 ) {\n\t\t\t\t\tstatusText = \"notmodified\";\n\n\t\t\t\t// If we have data, let's convert it\n\t\t\t\t} else {\n\t\t\t\t\tstatusText = response.state;\n\t\t\t\t\tsuccess = response.data;\n\t\t\t\t\terror = response.error;\n\t\t\t\t\tisSuccess = !error;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// We extract error from statusText\n\t\t\t\t// then normalize statusText and status for non-aborts\n\t\t\t\terror = statusText;\n\t\t\t\tif ( status || !statusText ) {\n\t\t\t\t\tstatusText = \"error\";\n\t\t\t\t\tif ( status < 0 ) {\n\t\t\t\t\t\tstatus = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set data for the fake xhr object\n\t\t\tjqXHR.status = status;\n\t\t\tjqXHR.statusText = ( nativeStatusText || statusText ) + \"\";\n\n\t\t\t// Success/Error\n\t\t\tif ( isSuccess ) {\n\t\t\t\tdeferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );\n\t\t\t} else {\n\t\t\t\tdeferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );\n\t\t\t}\n\n\t\t\t// Status-dependent callbacks\n\t\t\tjqXHR.statusCode( statusCode );\n\t\t\tstatusCode = undefined;\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( isSuccess ? \"ajaxSuccess\" : \"ajaxError\",\n\t\t\t\t\t[ jqXHR, s, isSuccess ? success : error ] );\n\t\t\t}\n\n\t\t\t// Complete\n\t\t\tcompleteDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxComplete\", [ jqXHR, s ] );\n\t\t\t\t// Handle the global AJAX counter\n\t\t\t\tif ( !( --jQuery.active ) ) {\n\t\t\t\t\tjQuery.event.trigger(\"ajaxStop\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn jqXHR;\n\t},\n\n\tgetJSON: function( url, data, callback ) {\n\t\treturn jQuery.get( url, data, callback, \"json\" );\n\t},\n\n\tgetScript: function( url, callback ) {\n\t\treturn jQuery.get( url, undefined, callback, \"script\" );\n\t}\n});\n\njQuery.each( [ \"get\", \"post\" ], function( i, method ) {\n\tjQuery[ method ] = function( url, data, callback, type ) {\n\t\t// shift arguments if data argument was omitted\n\t\tif ( jQuery.isFunction( data ) ) {\n\t\t\ttype = type || callback;\n\t\t\tcallback = data;\n\t\t\tdata = undefined;\n\t\t}\n\n\t\treturn jQuery.ajax({\n\t\t\turl: url,\n\t\t\ttype: method,\n\t\t\tdataType: type,\n\t\t\tdata: data,\n\t\t\tsuccess: callback\n\t\t});\n\t};\n});\n\n/* Handles responses to an ajax request:\n * - finds the right dataType (mediates between content-type and expected dataType)\n * - returns the corresponding response\n */\nfunction ajaxHandleResponses( s, jqXHR, responses ) {\n\tvar firstDataType, ct, finalDataType, type,\n\t\tcontents = s.contents,\n\t\tdataTypes = s.dataTypes;\n\n\t// Remove auto dataType and get content-type in the process\n\twhile( dataTypes[ 0 ] === \"*\" ) {\n\t\tdataTypes.shift();\n\t\tif ( ct === undefined ) {\n\t\t\tct = s.mimeType || jqXHR.getResponseHeader(\"Content-Type\");\n\t\t}\n\t}\n\n\t// Check if we're dealing with a known content-type\n\tif ( ct ) {\n\t\tfor ( type in contents ) {\n\t\t\tif ( contents[ type ] && contents[ type ].test( ct ) ) {\n\t\t\t\tdataTypes.unshift( type );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check to see if we have a response for the expected dataType\n\tif ( dataTypes[ 0 ] in responses ) {\n\t\tfinalDataType = dataTypes[ 0 ];\n\t} else {\n\t\t// Try convertible dataTypes\n\t\tfor ( type in responses ) {\n\t\t\tif ( !dataTypes[ 0 ] || s.converters[ type + \" \" + dataTypes[0] ] ) {\n\t\t\t\tfinalDataType = type;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( !firstDataType ) {\n\t\t\t\tfirstDataType = type;\n\t\t\t}\n\t\t}\n\t\t// Or just use first one\n\t\tfinalDataType = finalDataType || firstDataType;\n\t}\n\n\t// If we found a dataType\n\t// We add the dataType to the list if needed\n\t// and return the corresponding response\n\tif ( finalDataType ) {\n\t\tif ( finalDataType !== dataTypes[ 0 ] ) {\n\t\t\tdataTypes.unshift( finalDataType );\n\t\t}\n\t\treturn responses[ finalDataType ];\n\t}\n}\n\n/* Chain conversions given the request and the original response\n * Also sets the responseXXX fields on the jqXHR instance\n */\nfunction ajaxConvert( s, response, jqXHR, isSuccess ) {\n\tvar conv2, current, conv, tmp, prev,\n\t\tconverters = {},\n\t\t// Work with a copy of dataTypes in case we need to modify it for conversion\n\t\tdataTypes = s.dataTypes.slice();\n\n\t// Create converters map with lowercased keys\n\tif ( dataTypes[ 1 ] ) {\n\t\tfor ( conv in s.converters ) {\n\t\t\tconverters[ conv.toLowerCase() ] = s.converters[ conv ];\n\t\t}\n\t}\n\n\tcurrent = dataTypes.shift();\n\n\t// Convert to each sequential dataType\n\twhile ( current ) {\n\n\t\tif ( s.responseFields[ current ] ) {\n\t\t\tjqXHR[ s.responseFields[ current ] ] = response;\n\t\t}\n\n\t\t// Apply the dataFilter if provided\n\t\tif ( !prev && isSuccess && s.dataFilter ) {\n\t\t\tresponse = s.dataFilter( response, s.dataType );\n\t\t}\n\n\t\tprev = current;\n\t\tcurrent = dataTypes.shift();\n\n\t\tif ( current ) {\n\n\t\t\t// There's only work to do if current dataType is non-auto\n\t\t\tif ( current === \"*\" ) {\n\n\t\t\t\tcurrent = prev;\n\n\t\t\t// Convert response if prev dataType is non-auto and differs from current\n\t\t\t} else if ( prev !== \"*\" && prev !== current ) {\n\n\t\t\t\t// Seek a direct converter\n\t\t\t\tconv = converters[ prev + \" \" + current ] || converters[ \"* \" + current ];\n\n\t\t\t\t// If none found, seek a pair\n\t\t\t\tif ( !conv ) {\n\t\t\t\t\tfor ( conv2 in converters ) {\n\n\t\t\t\t\t\t// If conv2 outputs current\n\t\t\t\t\t\ttmp = conv2.split( \" \" );\n\t\t\t\t\t\tif ( tmp[ 1 ] === current ) {\n\n\t\t\t\t\t\t\t// If prev can be converted to accepted input\n\t\t\t\t\t\t\tconv = converters[ prev + \" \" + tmp[ 0 ] ] ||\n\t\t\t\t\t\t\t\tconverters[ \"* \" + tmp[ 0 ] ];\n\t\t\t\t\t\t\tif ( conv ) {\n\t\t\t\t\t\t\t\t// Condense equivalence converters\n\t\t\t\t\t\t\t\tif ( conv === true ) {\n\t\t\t\t\t\t\t\t\tconv = converters[ conv2 ];\n\n\t\t\t\t\t\t\t\t// Otherwise, insert the intermediate dataType\n\t\t\t\t\t\t\t\t} else if ( converters[ conv2 ] !== true ) {\n\t\t\t\t\t\t\t\t\tcurrent = tmp[ 0 ];\n\t\t\t\t\t\t\t\t\tdataTypes.unshift( tmp[ 1 ] );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Apply converter (if not an equivalence)\n\t\t\t\tif ( conv !== true ) {\n\n\t\t\t\t\t// Unless errors are allowed to bubble, catch and return them\n\t\t\t\t\tif ( conv && s[ \"throws\" ] ) {\n\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t\treturn { state: \"parsererror\", error: conv ? e : \"No conversion from \" + prev + \" to \" + current };\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { state: \"success\", data: response };\n}\n// Install script dataType\njQuery.ajaxSetup({\n\taccepts: {\n\t\tscript: \"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript\"\n\t},\n\tcontents: {\n\t\tscript: /(?:java|ecma)script/\n\t},\n\tconverters: {\n\t\t\"text script\": function( text ) {\n\t\t\tjQuery.globalEval( text );\n\t\t\treturn text;\n\t\t}\n\t}\n});\n\n// Handle cache's special case and global\njQuery.ajaxPrefilter( \"script\", function( s ) {\n\tif ( s.cache === undefined ) {\n\t\ts.cache = false;\n\t}\n\tif ( s.crossDomain ) {\n\t\ts.type = \"GET\";\n\t\ts.global = false;\n\t}\n});\n\n// Bind script tag hack transport\njQuery.ajaxTransport( \"script\", function(s) {\n\n\t// This transport only deals with cross domain requests\n\tif ( s.crossDomain ) {\n\n\t\tvar script,\n\t\t\thead = document.head || jQuery(\"head\")[0] || document.documentElement;\n\n\t\treturn {\n\n\t\t\tsend: function( _, callback ) {\n\n\t\t\t\tscript = document.createElement(\"script\");\n\n\t\t\t\tscript.async = true;\n\n\t\t\t\tif ( s.scriptCharset ) {\n\t\t\t\t\tscript.charset = s.scriptCharset;\n\t\t\t\t}\n\n\t\t\t\tscript.src = s.url;\n\n\t\t\t\t// Attach handlers for all browsers\n\t\t\t\tscript.onload = script.onreadystatechange = function( _, isAbort ) {\n\n\t\t\t\t\tif ( isAbort || !script.readyState || /loaded|complete/.test( script.readyState ) ) {\n\n\t\t\t\t\t\t// Handle memory leak in IE\n\t\t\t\t\t\tscript.onload = script.onreadystatechange = null;\n\n\t\t\t\t\t\t// Remove the script\n\t\t\t\t\t\tif ( script.parentNode ) {\n\t\t\t\t\t\t\tscript.parentNode.removeChild( script );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Dereference the script\n\t\t\t\t\t\tscript = null;\n\n\t\t\t\t\t\t// Callback if not abort\n\t\t\t\t\t\tif ( !isAbort ) {\n\t\t\t\t\t\t\tcallback( 200, \"success\" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\t// Circumvent IE6 bugs with base elements (#2709 and #4378) by prepending\n\t\t\t\t// Use native DOM manipulation to avoid our domManip AJAX trickery\n\t\t\t\thead.insertBefore( script, head.firstChild );\n\t\t\t},\n\n\t\t\tabort: function() {\n\t\t\t\tif ( script ) {\n\t\t\t\t\tscript.onload( undefined, true );\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n});\nvar oldCallbacks = [],\n\trjsonp = /(=)\\?(?=&|$)|\\?\\?/;\n\n// Default jsonp settings\njQuery.ajaxSetup({\n\tjsonp: \"callback\",\n\tjsonpCallback: function() {\n\t\tvar callback = oldCallbacks.pop() || ( jQuery.expando + \"_\" + ( ajax_nonce++ ) );\n\t\tthis[ callback ] = true;\n\t\treturn callback;\n\t}\n});\n\n// Detect, normalize options and install callbacks for jsonp requests\njQuery.ajaxPrefilter( \"json jsonp\", function( s, originalSettings, jqXHR ) {\n\n\tvar callbackName, overwritten, responseContainer,\n\t\tjsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?\n\t\t\t\"url\" :\n\t\t\ttypeof s.data === \"string\" && !( s.contentType || \"\" ).indexOf(\"application/x-www-form-urlencoded\") && rjsonp.test( s.data ) && \"data\"\n\t\t);\n\n\t// Handle iff the expected data type is \"jsonp\" or we have a parameter to set\n\tif ( jsonProp || s.dataTypes[ 0 ] === \"jsonp\" ) {\n\n\t\t// Get callback name, remembering preexisting value associated with it\n\t\tcallbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ?\n\t\t\ts.jsonpCallback() :\n\t\t\ts.jsonpCallback;\n\n\t\t// Insert callback into url or form data\n\t\tif ( jsonProp ) {\n\t\t\ts[ jsonProp ] = s[ jsonProp ].replace( rjsonp, \"$1\" + callbackName );\n\t\t} else if ( s.jsonp !== false ) {\n\t\t\ts.url += ( ajax_rquery.test( s.url ) ? \"&\" : \"?\" ) + s.jsonp + \"=\" + callbackName;\n\t\t}\n\n\t\t// Use data converter to retrieve json after script execution\n\t\ts.converters[\"script json\"] = function() {\n\t\t\tif ( !responseContainer ) {\n\t\t\t\tjQuery.error( callbackName + \" was not called\" );\n\t\t\t}\n\t\t\treturn responseContainer[ 0 ];\n\t\t};\n\n\t\t// force json dataType\n\t\ts.dataTypes[ 0 ] = \"json\";\n\n\t\t// Install callback\n\t\toverwritten = window[ callbackName ];\n\t\twindow[ callbackName ] = function() {\n\t\t\tresponseContainer = arguments;\n\t\t};\n\n\t\t// Clean-up function (fires after converters)\n\t\tjqXHR.always(function() {\n\t\t\t// Restore preexisting value\n\t\t\twindow[ callbackName ] = overwritten;\n\n\t\t\t// Save back as free\n\t\t\tif ( s[ callbackName ] ) {\n\t\t\t\t// make sure that re-using the options doesn't screw things around\n\t\t\t\ts.jsonpCallback = originalSettings.jsonpCallback;\n\n\t\t\t\t// save the callback name for future use\n\t\t\t\toldCallbacks.push( callbackName );\n\t\t\t}\n\n\t\t\t// Call if it was a function and we have a response\n\t\t\tif ( responseContainer && jQuery.isFunction( overwritten ) ) {\n\t\t\t\toverwritten( responseContainer[ 0 ] );\n\t\t\t}\n\n\t\t\tresponseContainer = overwritten = undefined;\n\t\t});\n\n\t\t// Delegate to script\n\t\treturn \"script\";\n\t}\n});\nvar xhrCallbacks, xhrSupported,\n\txhrId = 0,\n\t// #5280: Internet Explorer will keep connections alive if we don't abort on unload\n\txhrOnUnloadAbort = window.ActiveXObject && function() {\n\t\t// Abort all pending requests\n\t\tvar key;\n\t\tfor ( key in xhrCallbacks ) {\n\t\t\txhrCallbacks[ key ]( undefined, true );\n\t\t}\n\t};\n\n// Functions to create xhrs\nfunction createStandardXHR() {\n\ttry {\n\t\treturn new window.XMLHttpRequest();\n\t} catch( e ) {}\n}\n\nfunction createActiveXHR() {\n\ttry {\n\t\treturn new window.ActiveXObject(\"Microsoft.XMLHTTP\");\n\t} catch( e ) {}\n}\n\n// Create the request object\n// (This is still attached to ajaxSettings for backward compatibility)\njQuery.ajaxSettings.xhr = window.ActiveXObject ?\n\t/* Microsoft failed to properly\n\t * implement the XMLHttpRequest in IE7 (can't request local files),\n\t * so we use the ActiveXObject when it is available\n\t * Additionally XMLHttpRequest can be disabled in IE7/IE8 so\n\t * we need a fallback.\n\t */\n\tfunction() {\n\t\treturn !this.isLocal && createStandardXHR() || createActiveXHR();\n\t} :\n\t// For all other browsers, use the standard XMLHttpRequest object\n\tcreateStandardXHR;\n\n// Determine support properties\nxhrSupported = jQuery.ajaxSettings.xhr();\njQuery.support.cors = !!xhrSupported && ( \"withCredentials\" in xhrSupported );\nxhrSupported = jQuery.support.ajax = !!xhrSupported;\n\n// Create transport if the browser can provide an xhr\nif ( xhrSupported ) {\n\n\tjQuery.ajaxTransport(function( s ) {\n\t\t// Cross domain only allowed if supported through XMLHttpRequest\n\t\tif ( !s.crossDomain || jQuery.support.cors ) {\n\n\t\t\tvar callback;\n\n\t\t\treturn {\n\t\t\t\tsend: function( headers, complete ) {\n\n\t\t\t\t\t// Get a new xhr\n\t\t\t\t\tvar handle, i,\n\t\t\t\t\t\txhr = s.xhr();\n\n\t\t\t\t\t// Open the socket\n\t\t\t\t\t// Passing null username, generates a login popup on Opera (#2865)\n\t\t\t\t\tif ( s.username ) {\n\t\t\t\t\t\txhr.open( s.type, s.url, s.async, s.username, s.password );\n\t\t\t\t\t} else {\n\t\t\t\t\t\txhr.open( s.type, s.url, s.async );\n\t\t\t\t\t}\n\n\t\t\t\t\t// Apply custom fields if provided\n\t\t\t\t\tif ( s.xhrFields ) {\n\t\t\t\t\t\tfor ( i in s.xhrFields ) {\n\t\t\t\t\t\t\txhr[ i ] = s.xhrFields[ i ];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Override mime type if needed\n\t\t\t\t\tif ( s.mimeType && xhr.overrideMimeType ) {\n\t\t\t\t\t\txhr.overrideMimeType( s.mimeType );\n\t\t\t\t\t}\n\n\t\t\t\t\t// X-Requested-With header\n\t\t\t\t\t// For cross-domain requests, seeing as conditions for a preflight are\n\t\t\t\t\t// akin to a jigsaw puzzle, we simply never set it to be sure.\n\t\t\t\t\t// (it can always be set on a per-request basis or even using ajaxSetup)\n\t\t\t\t\t// For same-domain requests, won't change header if already provided.\n\t\t\t\t\tif ( !s.crossDomain && !headers[\"X-Requested-With\"] ) {\n\t\t\t\t\t\theaders[\"X-Requested-With\"] = \"XMLHttpRequest\";\n\t\t\t\t\t}\n\n\t\t\t\t\t// Need an extra try/catch for cross domain requests in Firefox 3\n\t\t\t\t\ttry {\n\t\t\t\t\t\tfor ( i in headers ) {\n\t\t\t\t\t\t\txhr.setRequestHeader( i, headers[ i ] );\n\t\t\t\t\t\t}\n\t\t\t\t\t} catch( err ) {}\n\n\t\t\t\t\t// Do send the request\n\t\t\t\t\t// This may raise an exception which is actually\n\t\t\t\t\t// handled in jQuery.ajax (so no try/catch here)\n\t\t\t\t\txhr.send( ( s.hasContent && s.data ) || null );\n\n\t\t\t\t\t// Listener\n\t\t\t\t\tcallback = function( _, isAbort ) {\n\t\t\t\t\t\tvar status, responseHeaders, statusText, responses;\n\n\t\t\t\t\t\t// Firefox throws exceptions when accessing properties\n\t\t\t\t\t\t// of an xhr when a network error occurred\n\t\t\t\t\t\t// http://helpful.knobs-dials.com/index.php/Component_returned_failure_code:_0x80040111_(NS_ERROR_NOT_AVAILABLE)\n\t\t\t\t\t\ttry {\n\n\t\t\t\t\t\t\t// Was never called and is aborted or complete\n\t\t\t\t\t\t\tif ( callback && ( isAbort || xhr.readyState === 4 ) ) {\n\n\t\t\t\t\t\t\t\t// Only called once\n\t\t\t\t\t\t\t\tcallback = undefined;\n\n\t\t\t\t\t\t\t\t// Do not keep as active anymore\n\t\t\t\t\t\t\t\tif ( handle ) {\n\t\t\t\t\t\t\t\t\txhr.onreadystatechange = jQuery.noop;\n\t\t\t\t\t\t\t\t\tif ( xhrOnUnloadAbort ) {\n\t\t\t\t\t\t\t\t\t\tdelete xhrCallbacks[ handle ];\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// If it's an abort\n\t\t\t\t\t\t\t\tif ( isAbort ) {\n\t\t\t\t\t\t\t\t\t// Abort it manually if needed\n\t\t\t\t\t\t\t\t\tif ( xhr.readyState !== 4 ) {\n\t\t\t\t\t\t\t\t\t\txhr.abort();\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tresponses = {};\n\t\t\t\t\t\t\t\t\tstatus = xhr.status;\n\t\t\t\t\t\t\t\t\tresponseHeaders = xhr.getAllResponseHeaders();\n\n\t\t\t\t\t\t\t\t\t// When requesting binary data, IE6-9 will throw an exception\n\t\t\t\t\t\t\t\t\t// on any attempt to access responseText (#11426)\n\t\t\t\t\t\t\t\t\tif ( typeof xhr.responseText === \"string\" ) {\n\t\t\t\t\t\t\t\t\t\tresponses.text = xhr.responseText;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Firefox throws an exception when accessing\n\t\t\t\t\t\t\t\t\t// statusText for faulty cross-domain requests\n\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\tstatusText = xhr.statusText;\n\t\t\t\t\t\t\t\t\t} catch( e ) {\n\t\t\t\t\t\t\t\t\t\t// We normalize with Webkit giving an empty statusText\n\t\t\t\t\t\t\t\t\t\tstatusText = \"\";\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Filter status for non standard behaviors\n\n\t\t\t\t\t\t\t\t\t// If the request is local and we have data: assume a success\n\t\t\t\t\t\t\t\t\t// (success with no data won't get notified, that's the best we\n\t\t\t\t\t\t\t\t\t// can do given current implementations)\n\t\t\t\t\t\t\t\t\tif ( !status && s.isLocal && !s.crossDomain ) {\n\t\t\t\t\t\t\t\t\t\tstatus = responses.text ? 200 : 404;\n\t\t\t\t\t\t\t\t\t// IE - #1450: sometimes returns 1223 when it should be 204\n\t\t\t\t\t\t\t\t\t} else if ( status === 1223 ) {\n\t\t\t\t\t\t\t\t\t\tstatus = 204;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} catch( firefoxAccessException ) {\n\t\t\t\t\t\t\tif ( !isAbort ) {\n\t\t\t\t\t\t\t\tcomplete( -1, firefoxAccessException );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Call complete if needed\n\t\t\t\t\t\tif ( responses ) {\n\t\t\t\t\t\t\tcomplete( status, statusText, responses, responseHeaders );\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\n\t\t\t\t\tif ( !s.async ) {\n\t\t\t\t\t\t// if we're in sync mode we fire the callback\n\t\t\t\t\t\tcallback();\n\t\t\t\t\t} else if ( xhr.readyState === 4 ) {\n\t\t\t\t\t\t// (IE6 & IE7) if it's in cache and has been\n\t\t\t\t\t\t// retrieved directly we need to fire the callback\n\t\t\t\t\t\tsetTimeout( callback );\n\t\t\t\t\t} else {\n\t\t\t\t\t\thandle = ++xhrId;\n\t\t\t\t\t\tif ( xhrOnUnloadAbort ) {\n\t\t\t\t\t\t\t// Create the active xhrs callbacks list if needed\n\t\t\t\t\t\t\t// and attach the unload handler\n\t\t\t\t\t\t\tif ( !xhrCallbacks ) {\n\t\t\t\t\t\t\t\txhrCallbacks = {};\n\t\t\t\t\t\t\t\tjQuery( window ).unload( xhrOnUnloadAbort );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// Add to list of active xhrs callbacks\n\t\t\t\t\t\t\txhrCallbacks[ handle ] = callback;\n\t\t\t\t\t\t}\n\t\t\t\t\t\txhr.onreadystatechange = callback;\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\tabort: function() {\n\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\tcallback( undefined, true );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t});\n}\nvar fxNow, timerId,\n\trfxtypes = /^(?:toggle|show|hide)$/,\n\trfxnum = new RegExp( \"^(?:([+-])=|)(\" + core_pnum + \")([a-z%]*)$\", \"i\" ),\n\trrun = /queueHooks$/,\n\tanimationPrefilters = [ defaultPrefilter ],\n\ttweeners = {\n\t\t\"*\": [function( prop, value ) {\n\t\t\tvar tween = this.createTween( prop, value ),\n\t\t\t\ttarget = tween.cur(),\n\t\t\t\tparts = rfxnum.exec( value ),\n\t\t\t\tunit = parts && parts[ 3 ] || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" ),\n\n\t\t\t\t// Starting value computation is required for potential unit mismatches\n\t\t\t\tstart = ( jQuery.cssNumber[ prop ] || unit !== \"px\" && +target ) &&\n\t\t\t\t\trfxnum.exec( jQuery.css( tween.elem, prop ) ),\n\t\t\t\tscale = 1,\n\t\t\t\tmaxIterations = 20;\n\n\t\t\tif ( start && start[ 3 ] !== unit ) {\n\t\t\t\t// Trust units reported by jQuery.css\n\t\t\t\tunit = unit || start[ 3 ];\n\n\t\t\t\t// Make sure we update the tween properties later on\n\t\t\t\tparts = parts || [];\n\n\t\t\t\t// Iteratively approximate from a nonzero starting point\n\t\t\t\tstart = +target || 1;\n\n\t\t\t\tdo {\n\t\t\t\t\t// If previous iteration zeroed out, double until we get *something*\n\t\t\t\t\t// Use a string for doubling factor so we don't accidentally see scale as unchanged below\n\t\t\t\t\tscale = scale || \".5\";\n\n\t\t\t\t\t// Adjust and apply\n\t\t\t\t\tstart = start / scale;\n\t\t\t\t\tjQuery.style( tween.elem, prop, start + unit );\n\n\t\t\t\t// Update scale, tolerating zero or NaN from tween.cur()\n\t\t\t\t// And breaking the loop if scale is unchanged or perfect, or if we've just had enough\n\t\t\t\t} while ( scale !== (scale = tween.cur() / target) && scale !== 1 && --maxIterations );\n\t\t\t}\n\n\t\t\t// Update tween properties\n\t\t\tif ( parts ) {\n\t\t\t\tstart = tween.start = +start || +target || 0;\n\t\t\t\ttween.unit = unit;\n\t\t\t\t// If a +=/-= token was provided, we're doing a relative animation\n\t\t\t\ttween.end = parts[ 1 ] ?\n\t\t\t\t\tstart + ( parts[ 1 ] + 1 ) * parts[ 2 ] :\n\t\t\t\t\t+parts[ 2 ];\n\t\t\t}\n\n\t\t\treturn tween;\n\t\t}]\n\t};\n\n// Animations created synchronously will run synchronously\nfunction createFxNow() {\n\tsetTimeout(function() {\n\t\tfxNow = undefined;\n\t});\n\treturn ( fxNow = jQuery.now() );\n}\n\nfunction createTween( value, prop, animation ) {\n\tvar tween,\n\t\tcollection = ( tweeners[ prop ] || [] ).concat( tweeners[ \"*\" ] ),\n\t\tindex = 0,\n\t\tlength = collection.length;\n\tfor ( ; index < length; index++ ) {\n\t\tif ( (tween = collection[ index ].call( animation, prop, value )) ) {\n\n\t\t\t// we're done with this property\n\t\t\treturn tween;\n\t\t}\n\t}\n}\n\nfunction Animation( elem, properties, options ) {\n\tvar result,\n\t\tstopped,\n\t\tindex = 0,\n\t\tlength = animationPrefilters.length,\n\t\tdeferred = jQuery.Deferred().always( function() {\n\t\t\t// don't match elem in the :animated selector\n\t\t\tdelete tick.elem;\n\t\t}),\n\t\ttick = function() {\n\t\t\tif ( stopped ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar currentTime = fxNow || createFxNow(),\n\t\t\t\tremaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),\n\t\t\t\t// archaic crash bug won't allow us to use 1 - ( 0.5 || 0 ) (#12497)\n\t\t\t\ttemp = remaining / animation.duration || 0,\n\t\t\t\tpercent = 1 - temp,\n\t\t\t\tindex = 0,\n\t\t\t\tlength = animation.tweens.length;\n\n\t\t\tfor ( ; index < length ; index++ ) {\n\t\t\t\tanimation.tweens[ index ].run( percent );\n\t\t\t}\n\n\t\t\tdeferred.notifyWith( elem, [ animation, percent, remaining ]);\n\n\t\t\tif ( percent < 1 && length ) {\n\t\t\t\treturn remaining;\n\t\t\t} else {\n\t\t\t\tdeferred.resolveWith( elem, [ animation ] );\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\t\tanimation = deferred.promise({\n\t\t\telem: elem,\n\t\t\tprops: jQuery.extend( {}, properties ),\n\t\t\topts: jQuery.extend( true, { specialEasing: {} }, options ),\n\t\t\toriginalProperties: properties,\n\t\t\toriginalOptions: options,\n\t\t\tstartTime: fxNow || createFxNow(),\n\t\t\tduration: options.duration,\n\t\t\ttweens: [],\n\t\t\tcreateTween: function( prop, end ) {\n\t\t\t\tvar tween = jQuery.Tween( elem, animation.opts, prop, end,\n\t\t\t\t\t\tanimation.opts.specialEasing[ prop ] || animation.opts.easing );\n\t\t\t\tanimation.tweens.push( tween );\n\t\t\t\treturn tween;\n\t\t\t},\n\t\t\tstop: function( gotoEnd ) {\n\t\t\t\tvar index = 0,\n\t\t\t\t\t// if we are going to the end, we want to run all the tweens\n\t\t\t\t\t// otherwise we skip this part\n\t\t\t\t\tlength = gotoEnd ? animation.tweens.length : 0;\n\t\t\t\tif ( stopped ) {\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t\tstopped = true;\n\t\t\t\tfor ( ; index < length ; index++ ) {\n\t\t\t\t\tanimation.tweens[ index ].run( 1 );\n\t\t\t\t}\n\n\t\t\t\t// resolve when we played the last frame\n\t\t\t\t// otherwise, reject\n\t\t\t\tif ( gotoEnd ) {\n\t\t\t\t\tdeferred.resolveWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t} else {\n\t\t\t\t\tdeferred.rejectWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t}\n\t\t}),\n\t\tprops = animation.props;\n\n\tpropFilter( props, animation.opts.specialEasing );\n\n\tfor ( ; index < length ; index++ ) {\n\t\tresult = animationPrefilters[ index ].call( animation, elem, props, animation.opts );\n\t\tif ( result ) {\n\t\t\treturn result;\n\t\t}\n\t}\n\n\tjQuery.map( props, createTween, animation );\n\n\tif ( jQuery.isFunction( animation.opts.start ) ) {\n\t\tanimation.opts.start.call( elem, animation );\n\t}\n\n\tjQuery.fx.timer(\n\t\tjQuery.extend( tick, {\n\t\t\telem: elem,\n\t\t\tanim: animation,\n\t\t\tqueue: animation.opts.queue\n\t\t})\n\t);\n\n\t// attach callbacks from options\n\treturn animation.progress( animation.opts.progress )\n\t\t.done( animation.opts.done, animation.opts.complete )\n\t\t.fail( animation.opts.fail )\n\t\t.always( animation.opts.always );\n}\n\nfunction propFilter( props, specialEasing ) {\n\tvar index, name, easing, value, hooks;\n\n\t// camelCase, specialEasing and expand cssHook pass\n\tfor ( index in props ) {\n\t\tname = jQuery.camelCase( index );\n\t\teasing = specialEasing[ name ];\n\t\tvalue = props[ index ];\n\t\tif ( jQuery.isArray( value ) ) {\n\t\t\teasing = value[ 1 ];\n\t\t\tvalue = props[ index ] = value[ 0 ];\n\t\t}\n\n\t\tif ( index !== name ) {\n\t\t\tprops[ name ] = value;\n\t\t\tdelete props[ index ];\n\t\t}\n\n\t\thooks = jQuery.cssHooks[ name ];\n\t\tif ( hooks && \"expand\" in hooks ) {\n\t\t\tvalue = hooks.expand( value );\n\t\t\tdelete props[ name ];\n\n\t\t\t// not quite $.extend, this wont overwrite keys already present.\n\t\t\t// also - reusing 'index' from above because we have the correct \"name\"\n\t\t\tfor ( index in value ) {\n\t\t\t\tif ( !( index in props ) ) {\n\t\t\t\t\tprops[ index ] = value[ index ];\n\t\t\t\t\tspecialEasing[ index ] = easing;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tspecialEasing[ name ] = easing;\n\t\t}\n\t}\n}\n\njQuery.Animation = jQuery.extend( Animation, {\n\n\ttweener: function( props, callback ) {\n\t\tif ( jQuery.isFunction( props ) ) {\n\t\t\tcallback = props;\n\t\t\tprops = [ \"*\" ];\n\t\t} else {\n\t\t\tprops = props.split(\" \");\n\t\t}\n\n\t\tvar prop,\n\t\t\tindex = 0,\n\t\t\tlength = props.length;\n\n\t\tfor ( ; index < length ; index++ ) {\n\t\t\tprop = props[ index ];\n\t\t\ttweeners[ prop ] = tweeners[ prop ] || [];\n\t\t\ttweeners[ prop ].unshift( callback );\n\t\t}\n\t},\n\n\tprefilter: function( callback, prepend ) {\n\t\tif ( prepend ) {\n\t\t\tanimationPrefilters.unshift( callback );\n\t\t} else {\n\t\t\tanimationPrefilters.push( callback );\n\t\t}\n\t}\n});\n\nfunction defaultPrefilter( elem, props, opts ) {\n\t/* jshint validthis: true */\n\tvar prop, value, toggle, tween, hooks, oldfire,\n\t\tanim = this,\n\t\torig = {},\n\t\tstyle = elem.style,\n\t\thidden = elem.nodeType && isHidden( elem ),\n\t\tdataShow = jQuery._data( elem, \"fxshow\" );\n\n\t// handle queue: false promises\n\tif ( !opts.queue ) {\n\t\thooks = jQuery._queueHooks( elem, \"fx\" );\n\t\tif ( hooks.unqueued == null ) {\n\t\t\thooks.unqueued = 0;\n\t\t\toldfire = hooks.empty.fire;\n\t\t\thooks.empty.fire = function() {\n\t\t\t\tif ( !hooks.unqueued ) {\n\t\t\t\t\toldfire();\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\thooks.unqueued++;\n\n\t\tanim.always(function() {\n\t\t\t// doing this makes sure that the complete handler will be called\n\t\t\t// before this completes\n\t\t\tanim.always(function() {\n\t\t\t\thooks.unqueued--;\n\t\t\t\tif ( !jQuery.queue( elem, \"fx\" ).length ) {\n\t\t\t\t\thooks.empty.fire();\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t}\n\n\t// height/width overflow pass\n\tif ( elem.nodeType === 1 && ( \"height\" in props || \"width\" in props ) ) {\n\t\t// Make sure that nothing sneaks out\n\t\t// Record all 3 overflow attributes because IE does not\n\t\t// change the overflow attribute when overflowX and\n\t\t// overflowY are set to the same value\n\t\topts.overflow = [ style.overflow, style.overflowX, style.overflowY ];\n\n\t\t// Set display property to inline-block for height/width\n\t\t// animations on inline elements that are having width/height animated\n\t\tif ( jQuery.css( elem, \"display\" ) === \"inline\" &&\n\t\t\t\tjQuery.css( elem, \"float\" ) === \"none\" ) {\n\n\t\t\t// inline-level elements accept inline-block;\n\t\t\t// block-level elements need to be inline with layout\n\t\t\tif ( !jQuery.support.inlineBlockNeedsLayout || css_defaultDisplay( elem.nodeName ) === \"inline\" ) {\n\t\t\t\tstyle.display = \"inline-block\";\n\n\t\t\t} else {\n\t\t\t\tstyle.zoom = 1;\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( opts.overflow ) {\n\t\tstyle.overflow = \"hidden\";\n\t\tif ( !jQuery.support.shrinkWrapBlocks ) {\n\t\t\tanim.always(function() {\n\t\t\t\tstyle.overflow = opts.overflow[ 0 ];\n\t\t\t\tstyle.overflowX = opts.overflow[ 1 ];\n\t\t\t\tstyle.overflowY = opts.overflow[ 2 ];\n\t\t\t});\n\t\t}\n\t}\n\n\n\t// show/hide pass\n\tfor ( prop in props ) {\n\t\tvalue = props[ prop ];\n\t\tif ( rfxtypes.exec( value ) ) {\n\t\t\tdelete props[ prop ];\n\t\t\ttoggle = toggle || value === \"toggle\";\n\t\t\tif ( value === ( hidden ? \"hide\" : \"show\" ) ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\torig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );\n\t\t}\n\t}\n\n\tif ( !jQuery.isEmptyObject( orig ) ) {\n\t\tif ( dataShow ) {\n\t\t\tif ( \"hidden\" in dataShow ) {\n\t\t\t\thidden = dataShow.hidden;\n\t\t\t}\n\t\t} else {\n\t\t\tdataShow = jQuery._data( elem, \"fxshow\", {} );\n\t\t}\n\n\t\t// store state if its toggle - enables .stop().toggle() to \"reverse\"\n\t\tif ( toggle ) {\n\t\t\tdataShow.hidden = !hidden;\n\t\t}\n\t\tif ( hidden ) {\n\t\t\tjQuery( elem ).show();\n\t\t} else {\n\t\t\tanim.done(function() {\n\t\t\t\tjQuery( elem ).hide();\n\t\t\t});\n\t\t}\n\t\tanim.done(function() {\n\t\t\tvar prop;\n\t\t\tjQuery._removeData( elem, \"fxshow\" );\n\t\t\tfor ( prop in orig ) {\n\t\t\t\tjQuery.style( elem, prop, orig[ prop ] );\n\t\t\t}\n\t\t});\n\t\tfor ( prop in orig ) {\n\t\t\ttween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );\n\n\t\t\tif ( !( prop in dataShow ) ) {\n\t\t\t\tdataShow[ prop ] = tween.start;\n\t\t\t\tif ( hidden ) {\n\t\t\t\t\ttween.end = tween.start;\n\t\t\t\t\ttween.start = prop === \"width\" || prop === \"height\" ? 1 : 0;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction Tween( elem, options, prop, end, easing ) {\n\treturn new Tween.prototype.init( elem, options, prop, end, easing );\n}\njQuery.Tween = Tween;\n\nTween.prototype = {\n\tconstructor: Tween,\n\tinit: function( elem, options, prop, end, easing, unit ) {\n\t\tthis.elem = elem;\n\t\tthis.prop = prop;\n\t\tthis.easing = easing || \"swing\";\n\t\tthis.options = options;\n\t\tthis.start = this.now = this.cur();\n\t\tthis.end = end;\n\t\tthis.unit = unit || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" );\n\t},\n\tcur: function() {\n\t\tvar hooks = Tween.propHooks[ this.prop ];\n\n\t\treturn hooks && hooks.get ?\n\t\t\thooks.get( this ) :\n\t\t\tTween.propHooks._default.get( this );\n\t},\n\trun: function( percent ) {\n\t\tvar eased,\n\t\t\thooks = Tween.propHooks[ this.prop ];\n\n\t\tif ( this.options.duration ) {\n\t\t\tthis.pos = eased = jQuery.easing[ this.easing ](\n\t\t\t\tpercent, this.options.duration * percent, 0, 1, this.options.duration\n\t\t\t);\n\t\t} else {\n\t\t\tthis.pos = eased = percent;\n\t\t}\n\t\tthis.now = ( this.end - this.start ) * eased + this.start;\n\n\t\tif ( this.options.step ) {\n\t\t\tthis.options.step.call( this.elem, this.now, this );\n\t\t}\n\n\t\tif ( hooks && hooks.set ) {\n\t\t\thooks.set( this );\n\t\t} else {\n\t\t\tTween.propHooks._default.set( this );\n\t\t}\n\t\treturn this;\n\t}\n};\n\nTween.prototype.init.prototype = Tween.prototype;\n\nTween.propHooks = {\n\t_default: {\n\t\tget: function( tween ) {\n\t\t\tvar result;\n\n\t\t\tif ( tween.elem[ tween.prop ] != null &&\n\t\t\t\t(!tween.elem.style || tween.elem.style[ tween.prop ] == null) ) {\n\t\t\t\treturn tween.elem[ tween.prop ];\n\t\t\t}\n\n\t\t\t// passing an empty string as a 3rd parameter to .css will automatically\n\t\t\t// attempt a parseFloat and fallback to a string if the parse fails\n\t\t\t// so, simple values such as \"10px\" are parsed to Float.\n\t\t\t// complex values such as \"rotate(1rad)\" are returned as is.\n\t\t\tresult = jQuery.css( tween.elem, tween.prop, \"\" );\n\t\t\t// Empty strings, null, undefined and \"auto\" are converted to 0.\n\t\t\treturn !result || result === \"auto\" ? 0 : result;\n\t\t},\n\t\tset: function( tween ) {\n\t\t\t// use step hook for back compat - use cssHook if its there - use .style if its\n\t\t\t// available and use plain properties where available\n\t\t\tif ( jQuery.fx.step[ tween.prop ] ) {\n\t\t\t\tjQuery.fx.step[ tween.prop ]( tween );\n\t\t\t} else if ( tween.elem.style && ( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null || jQuery.cssHooks[ tween.prop ] ) ) {\n\t\t\t\tjQuery.style( tween.elem, tween.prop, tween.now + tween.unit );\n\t\t\t} else {\n\t\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t\t}\n\t\t}\n\t}\n};\n\n// Support: IE <=9\n// Panic based approach to setting things on disconnected nodes\n\nTween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {\n\tset: function( tween ) {\n\t\tif ( tween.elem.nodeType && tween.elem.parentNode ) {\n\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t}\n\t}\n};\n\njQuery.each([ \"toggle\", \"show\", \"hide\" ], function( i, name ) {\n\tvar cssFn = jQuery.fn[ name ];\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn speed == null || typeof speed === \"boolean\" ?\n\t\t\tcssFn.apply( this, arguments ) :\n\t\t\tthis.animate( genFx( name, true ), speed, easing, callback );\n\t};\n});\n\njQuery.fn.extend({\n\tfadeTo: function( speed, to, easing, callback ) {\n\n\t\t// show any hidden elements after setting opacity to 0\n\t\treturn this.filter( isHidden ).css( \"opacity\", 0 ).show()\n\n\t\t\t// animate to the value specified\n\t\t\t.end().animate({ opacity: to }, speed, easing, callback );\n\t},\n\tanimate: function( prop, speed, easing, callback ) {\n\t\tvar empty = jQuery.isEmptyObject( prop ),\n\t\t\toptall = jQuery.speed( speed, easing, callback ),\n\t\t\tdoAnimation = function() {\n\t\t\t\t// Operate on a copy of prop so per-property easing won't be lost\n\t\t\t\tvar anim = Animation( this, jQuery.extend( {}, prop ), optall );\n\n\t\t\t\t// Empty animations, or finishing resolves immediately\n\t\t\t\tif ( empty || jQuery._data( this, \"finish\" ) ) {\n\t\t\t\t\tanim.stop( true );\n\t\t\t\t}\n\t\t\t};\n\t\t\tdoAnimation.finish = doAnimation;\n\n\t\treturn empty || optall.queue === false ?\n\t\t\tthis.each( doAnimation ) :\n\t\t\tthis.queue( optall.queue, doAnimation );\n\t},\n\tstop: function( type, clearQueue, gotoEnd ) {\n\t\tvar stopQueue = function( hooks ) {\n\t\t\tvar stop = hooks.stop;\n\t\t\tdelete hooks.stop;\n\t\t\tstop( gotoEnd );\n\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tgotoEnd = clearQueue;\n\t\t\tclearQueue = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\tif ( clearQueue && type !== false ) {\n\t\t\tthis.queue( type || \"fx\", [] );\n\t\t}\n\n\t\treturn this.each(function() {\n\t\t\tvar dequeue = true,\n\t\t\t\tindex = type != null && type + \"queueHooks\",\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tdata = jQuery._data( this );\n\n\t\t\tif ( index ) {\n\t\t\t\tif ( data[ index ] && data[ index ].stop ) {\n\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( index in data ) {\n\t\t\t\t\tif ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {\n\t\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this && (type == null || timers[ index ].queue === type) ) {\n\t\t\t\t\ttimers[ index ].anim.stop( gotoEnd );\n\t\t\t\t\tdequeue = false;\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// start the next in the queue if the last step wasn't forced\n\t\t\t// timers currently will call their complete callbacks, which will dequeue\n\t\t\t// but only if they were gotoEnd\n\t\t\tif ( dequeue || !gotoEnd ) {\n\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t}\n\t\t});\n\t},\n\tfinish: function( type ) {\n\t\tif ( type !== false ) {\n\t\t\ttype = type || \"fx\";\n\t\t}\n\t\treturn this.each(function() {\n\t\t\tvar index,\n\t\t\t\tdata = jQuery._data( this ),\n\t\t\t\tqueue = data[ type + \"queue\" ],\n\t\t\t\thooks = data[ type + \"queueHooks\" ],\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tlength = queue ? queue.length : 0;\n\n\t\t\t// enable finishing flag on private data\n\t\t\tdata.finish = true;\n\n\t\t\t// empty the queue first\n\t\t\tjQuery.queue( this, type, [] );\n\n\t\t\tif ( hooks && hooks.stop ) {\n\t\t\t\thooks.stop.call( this, true );\n\t\t\t}\n\n\t\t\t// look for any active animations, and finish them\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this && timers[ index ].queue === type ) {\n\t\t\t\t\ttimers[ index ].anim.stop( true );\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// look for any animations in the old queue and finish them\n\t\t\tfor ( index = 0; index < length; index++ ) {\n\t\t\t\tif ( queue[ index ] && queue[ index ].finish ) {\n\t\t\t\t\tqueue[ index ].finish.call( this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// turn off finishing flag\n\t\t\tdelete data.finish;\n\t\t});\n\t}\n});\n\n// Generate parameters to create a standard animation\nfunction genFx( type, includeWidth ) {\n\tvar which,\n\t\tattrs = { height: type },\n\t\ti = 0;\n\n\t// if we include width, step value is 1 to do all cssExpand values,\n\t// if we don't include width, step value is 2 to skip over Left and Right\n\tincludeWidth = includeWidth? 1 : 0;\n\tfor( ; i < 4 ; i += 2 - includeWidth ) {\n\t\twhich = cssExpand[ i ];\n\t\tattrs[ \"margin\" + which ] = attrs[ \"padding\" + which ] = type;\n\t}\n\n\tif ( includeWidth ) {\n\t\tattrs.opacity = attrs.width = type;\n\t}\n\n\treturn attrs;\n}\n\n// Generate shortcuts for custom animations\njQuery.each({\n\tslideDown: genFx(\"show\"),\n\tslideUp: genFx(\"hide\"),\n\tslideToggle: genFx(\"toggle\"),\n\tfadeIn: { opacity: \"show\" },\n\tfadeOut: { opacity: \"hide\" },\n\tfadeToggle: { opacity: \"toggle\" }\n}, function( name, props ) {\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn this.animate( props, speed, easing, callback );\n\t};\n});\n\njQuery.speed = function( speed, easing, fn ) {\n\tvar opt = speed && typeof speed === \"object\" ? jQuery.extend( {}, speed ) : {\n\t\tcomplete: fn || !fn && easing ||\n\t\t\tjQuery.isFunction( speed ) && speed,\n\t\tduration: speed,\n\t\teasing: fn && easing || easing && !jQuery.isFunction( easing ) && easing\n\t};\n\n\topt.duration = jQuery.fx.off ? 0 : typeof opt.duration === \"number\" ? opt.duration :\n\t\topt.duration in jQuery.fx.speeds ? jQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default;\n\n\t// normalize opt.queue - true/undefined/null -> \"fx\"\n\tif ( opt.queue == null || opt.queue === true ) {\n\t\topt.queue = \"fx\";\n\t}\n\n\t// Queueing\n\topt.old = opt.complete;\n\n\topt.complete = function() {\n\t\tif ( jQuery.isFunction( opt.old ) ) {\n\t\t\topt.old.call( this );\n\t\t}\n\n\t\tif ( opt.queue ) {\n\t\t\tjQuery.dequeue( this, opt.queue );\n\t\t}\n\t};\n\n\treturn opt;\n};\n\njQuery.easing = {\n\tlinear: function( p ) {\n\t\treturn p;\n\t},\n\tswing: function( p ) {\n\t\treturn 0.5 - Math.cos( p*Math.PI ) / 2;\n\t}\n};\n\njQuery.timers = [];\njQuery.fx = Tween.prototype.init;\njQuery.fx.tick = function() {\n\tvar timer,\n\t\ttimers = jQuery.timers,\n\t\ti = 0;\n\n\tfxNow = jQuery.now();\n\n\tfor ( ; i < timers.length; i++ ) {\n\t\ttimer = timers[ i ];\n\t\t// Checks the timer has not already been removed\n\t\tif ( !timer() && timers[ i ] === timer ) {\n\t\t\ttimers.splice( i--, 1 );\n\t\t}\n\t}\n\n\tif ( !timers.length ) {\n\t\tjQuery.fx.stop();\n\t}\n\tfxNow = undefined;\n};\n\njQuery.fx.timer = function( timer ) {\n\tif ( timer() && jQuery.timers.push( timer ) ) {\n\t\tjQuery.fx.start();\n\t}\n};\n\njQuery.fx.interval = 13;\n\njQuery.fx.start = function() {\n\tif ( !timerId ) {\n\t\ttimerId = setInterval( jQuery.fx.tick, jQuery.fx.interval );\n\t}\n};\n\njQuery.fx.stop = function() {\n\tclearInterval( timerId );\n\ttimerId = null;\n};\n\njQuery.fx.speeds = {\n\tslow: 600,\n\tfast: 200,\n\t// Default speed\n\t_default: 400\n};\n\n// Back Compat <1.8 extension point\njQuery.fx.step = {};\n\nif ( jQuery.expr && jQuery.expr.filters ) {\n\tjQuery.expr.filters.animated = function( elem ) {\n\t\treturn jQuery.grep(jQuery.timers, function( fn ) {\n\t\t\treturn elem === fn.elem;\n\t\t}).length;\n\t};\n}\njQuery.fn.offset = function( options ) {\n\tif ( arguments.length ) {\n\t\treturn options === undefined ?\n\t\t\tthis :\n\t\t\tthis.each(function( i ) {\n\t\t\t\tjQuery.offset.setOffset( this, options, i );\n\t\t\t});\n\t}\n\n\tvar docElem, win,\n\t\tbox = { top: 0, left: 0 },\n\t\telem = this[ 0 ],\n\t\tdoc = elem && elem.ownerDocument;\n\n\tif ( !doc ) {\n\t\treturn;\n\t}\n\n\tdocElem = doc.documentElement;\n\n\t// Make sure it's not a disconnected DOM node\n\tif ( !jQuery.contains( docElem, elem ) ) {\n\t\treturn box;\n\t}\n\n\t// If we don't have gBCR, just use 0,0 rather than error\n\t// BlackBerry 5, iOS 3 (original iPhone)\n\tif ( typeof elem.getBoundingClientRect !== core_strundefined ) {\n\t\tbox = elem.getBoundingClientRect();\n\t}\n\twin = getWindow( doc );\n\treturn {\n\t\ttop: box.top  + ( win.pageYOffset || docElem.scrollTop )  - ( docElem.clientTop  || 0 ),\n\t\tleft: box.left + ( win.pageXOffset || docElem.scrollLeft ) - ( docElem.clientLeft || 0 )\n\t};\n};\n\njQuery.offset = {\n\n\tsetOffset: function( elem, options, i ) {\n\t\tvar position = jQuery.css( elem, \"position\" );\n\n\t\t// set position first, in-case top/left are set even on static elem\n\t\tif ( position === \"static\" ) {\n\t\t\telem.style.position = \"relative\";\n\t\t}\n\n\t\tvar curElem = jQuery( elem ),\n\t\t\tcurOffset = curElem.offset(),\n\t\t\tcurCSSTop = jQuery.css( elem, \"top\" ),\n\t\t\tcurCSSLeft = jQuery.css( elem, \"left\" ),\n\t\t\tcalculatePosition = ( position === \"absolute\" || position === \"fixed\" ) && jQuery.inArray(\"auto\", [curCSSTop, curCSSLeft]) > -1,\n\t\t\tprops = {}, curPosition = {}, curTop, curLeft;\n\n\t\t// need to be able to calculate position if either top or left is auto and position is either absolute or fixed\n\t\tif ( calculatePosition ) {\n\t\t\tcurPosition = curElem.position();\n\t\t\tcurTop = curPosition.top;\n\t\t\tcurLeft = curPosition.left;\n\t\t} else {\n\t\t\tcurTop = parseFloat( curCSSTop ) || 0;\n\t\t\tcurLeft = parseFloat( curCSSLeft ) || 0;\n\t\t}\n\n\t\tif ( jQuery.isFunction( options ) ) {\n\t\t\toptions = options.call( elem, i, curOffset );\n\t\t}\n\n\t\tif ( options.top != null ) {\n\t\t\tprops.top = ( options.top - curOffset.top ) + curTop;\n\t\t}\n\t\tif ( options.left != null ) {\n\t\t\tprops.left = ( options.left - curOffset.left ) + curLeft;\n\t\t}\n\n\t\tif ( \"using\" in options ) {\n\t\t\toptions.using.call( elem, props );\n\t\t} else {\n\t\t\tcurElem.css( props );\n\t\t}\n\t}\n};\n\n\njQuery.fn.extend({\n\n\tposition: function() {\n\t\tif ( !this[ 0 ] ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar offsetParent, offset,\n\t\t\tparentOffset = { top: 0, left: 0 },\n\t\t\telem = this[ 0 ];\n\n\t\t// fixed elements are offset from window (parentOffset = {top:0, left: 0}, because it is it's only offset parent\n\t\tif ( jQuery.css( elem, \"position\" ) === \"fixed\" ) {\n\t\t\t// we assume that getBoundingClientRect is available when computed position is fixed\n\t\t\toffset = elem.getBoundingClientRect();\n\t\t} else {\n\t\t\t// Get *real* offsetParent\n\t\t\toffsetParent = this.offsetParent();\n\n\t\t\t// Get correct offsets\n\t\t\toffset = this.offset();\n\t\t\tif ( !jQuery.nodeName( offsetParent[ 0 ], \"html\" ) ) {\n\t\t\t\tparentOffset = offsetParent.offset();\n\t\t\t}\n\n\t\t\t// Add offsetParent borders\n\t\t\tparentOffset.top  += jQuery.css( offsetParent[ 0 ], \"borderTopWidth\", true );\n\t\t\tparentOffset.left += jQuery.css( offsetParent[ 0 ], \"borderLeftWidth\", true );\n\t\t}\n\n\t\t// Subtract parent offsets and element margins\n\t\t// note: when an element has margin: auto the offsetLeft and marginLeft\n\t\t// are the same in Safari causing offset.left to incorrectly be 0\n\t\treturn {\n\t\t\ttop:  offset.top  - parentOffset.top - jQuery.css( elem, \"marginTop\", true ),\n\t\t\tleft: offset.left - parentOffset.left - jQuery.css( elem, \"marginLeft\", true)\n\t\t};\n\t},\n\n\toffsetParent: function() {\n\t\treturn this.map(function() {\n\t\t\tvar offsetParent = this.offsetParent || docElem;\n\t\t\twhile ( offsetParent && ( !jQuery.nodeName( offsetParent, \"html\" ) && jQuery.css( offsetParent, \"position\") === \"static\" ) ) {\n\t\t\t\toffsetParent = offsetParent.offsetParent;\n\t\t\t}\n\t\t\treturn offsetParent || docElem;\n\t\t});\n\t}\n});\n\n\n// Create scrollLeft and scrollTop methods\njQuery.each( {scrollLeft: \"pageXOffset\", scrollTop: \"pageYOffset\"}, function( method, prop ) {\n\tvar top = /Y/.test( prop );\n\n\tjQuery.fn[ method ] = function( val ) {\n\t\treturn jQuery.access( this, function( elem, method, val ) {\n\t\t\tvar win = getWindow( elem );\n\n\t\t\tif ( val === undefined ) {\n\t\t\t\treturn win ? (prop in win) ? win[ prop ] :\n\t\t\t\t\twin.document.documentElement[ method ] :\n\t\t\t\t\telem[ method ];\n\t\t\t}\n\n\t\t\tif ( win ) {\n\t\t\t\twin.scrollTo(\n\t\t\t\t\t!top ? val : jQuery( win ).scrollLeft(),\n\t\t\t\t\ttop ? val : jQuery( win ).scrollTop()\n\t\t\t\t);\n\n\t\t\t} else {\n\t\t\t\telem[ method ] = val;\n\t\t\t}\n\t\t}, method, val, arguments.length, null );\n\t};\n});\n\nfunction getWindow( elem ) {\n\treturn jQuery.isWindow( elem ) ?\n\t\telem :\n\t\telem.nodeType === 9 ?\n\t\t\telem.defaultView || elem.parentWindow :\n\t\t\tfalse;\n}\n// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods\njQuery.each( { Height: \"height\", Width: \"width\" }, function( name, type ) {\n\tjQuery.each( { padding: \"inner\" + name, content: type, \"\": \"outer\" + name }, function( defaultExtra, funcName ) {\n\t\t// margin is only for outerHeight, outerWidth\n\t\tjQuery.fn[ funcName ] = function( margin, value ) {\n\t\t\tvar chainable = arguments.length && ( defaultExtra || typeof margin !== \"boolean\" ),\n\t\t\t\textra = defaultExtra || ( margin === true || value === true ? \"margin\" : \"border\" );\n\n\t\t\treturn jQuery.access( this, function( elem, type, value ) {\n\t\t\t\tvar doc;\n\n\t\t\t\tif ( jQuery.isWindow( elem ) ) {\n\t\t\t\t\t// As of 5/8/2012 this will yield incorrect results for Mobile Safari, but there\n\t\t\t\t\t// isn't a whole lot we can do. See pull request at this URL for discussion:\n\t\t\t\t\t// https://github.com/jquery/jquery/pull/764\n\t\t\t\t\treturn elem.document.documentElement[ \"client\" + name ];\n\t\t\t\t}\n\n\t\t\t\t// Get document width or height\n\t\t\t\tif ( elem.nodeType === 9 ) {\n\t\t\t\t\tdoc = elem.documentElement;\n\n\t\t\t\t\t// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height], whichever is greatest\n\t\t\t\t\t// unfortunately, this causes bug #3838 in IE6/8 only, but there is currently no good, small way to fix it.\n\t\t\t\t\treturn Math.max(\n\t\t\t\t\t\telem.body[ \"scroll\" + name ], doc[ \"scroll\" + name ],\n\t\t\t\t\t\telem.body[ \"offset\" + name ], doc[ \"offset\" + name ],\n\t\t\t\t\t\tdoc[ \"client\" + name ]\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn value === undefined ?\n\t\t\t\t\t// Get width or height on the element, requesting but not forcing parseFloat\n\t\t\t\t\tjQuery.css( elem, type, extra ) :\n\n\t\t\t\t\t// Set width or height on the element\n\t\t\t\t\tjQuery.style( elem, type, value, extra );\n\t\t\t}, type, chainable ? margin : undefined, chainable, null );\n\t\t};\n\t});\n});\n// Limit scope pollution from any deprecated API\n// (function() {\n\n// The number of elements contained in the matched element set\njQuery.fn.size = function() {\n\treturn this.length;\n};\n\njQuery.fn.andSelf = jQuery.fn.addBack;\n\n// })();\nif ( typeof module === \"object\" && module && typeof module.exports === \"object\" ) {\n\t// Expose jQuery as module.exports in loaders that implement the Node\n\t// module pattern (including browserify). Do not create the global, since\n\t// the user will be storing it themselves locally, and globals are frowned\n\t// upon in the Node module world.\n\tmodule.exports = jQuery;\n} else {\n\t// Otherwise expose jQuery to the global object as usual\n\twindow.jQuery = window.$ = jQuery;\n\n\t// Register as a named AMD module, since jQuery can be concatenated with other\n\t// files that may use define, but not via a proper concatenation script that\n\t// understands anonymous AMD modules. A named AMD is safest and most robust\n\t// way to register. Lowercase jquery is used because AMD module names are\n\t// derived from file names, and jQuery is normally delivered in a lowercase\n\t// file name. Do this after creating the global so that if an AMD module wants\n\t// to call noConflict to hide this version of jQuery, it will work.\n\tif ( typeof define === \"function\" && define.amd ) {\n\t\tdefine( \"jquery\", [], function () { return jQuery; } );\n\t}\n}\n\n})( window );\n"
  },
  {
    "path": "AlexaSkillsKit.Sample/Scripts/jquery.validate-vsdoc.js",
    "content": "﻿/* NUGET: BEGIN LICENSE TEXT\n *\n * Microsoft grants you the right to use these script files for the sole\n * purpose of either: (i) interacting through your browser with the Microsoft\n * website or online service, subject to the applicable licensing or use\n * terms; or (ii) using the files as included with a Microsoft product subject\n * to that product's license terms. Microsoft reserves all other rights to the\n * files not expressly granted by Microsoft, whether by implication, estoppel\n * or otherwise. Insofar as a script file is dual licensed under GPL,\n * Microsoft neither took the code under GPL nor distributes it thereunder but\n * under the terms set out in this paragraph. All notices and licenses\n * below are for informational purposes only.\n *\n * NUGET: END LICENSE TEXT */\n/*\n* This file has been commented to support Visual Studio Intellisense.\n* You should not use this file at runtime inside the browser--it is only\n* intended to be used only for design-time IntelliSense.  Please use the\n* standard jQuery library for all production use.\n*\n* Comment version: 1.11.1\n*/\n\n/*\n* Note: While Microsoft is not the author of this file, Microsoft is\n* offering you a license subject to the terms of the Microsoft Software\n* License Terms for Microsoft ASP.NET Model View Controller 3.\n* Microsoft reserves all other rights. The notices below are provided\n* for informational purposes only and are not the license terms under\n* which Microsoft distributed this file.\n*\n* jQuery Validation Plugin - v1.11.1 - 2/4/2013\n* https://github.com/jzaefferer/jquery-validation\n* Copyright (c) 2013 Jörn Zaefferer; Licensed MIT\n*\n*/\n\n(function($) {\n\n$.extend($.fn, {\n\t// http://docs.jquery.com/Plugins/Validation/validate\n\tvalidate: function( options ) {\n\t\t/// <summary>\n\t\t/// Validates the selected form. This method sets up event handlers for submit, focus,\n\t\t/// keyup, blur and click to trigger validation of the entire form or individual\n\t\t/// elements. Each one can be disabled, see the onxxx options (onsubmit, onfocusout,\n\t\t/// onkeyup, onclick). focusInvalid focuses elements when submitting a invalid form.\n\t\t/// </summary>\n\t\t/// <param name=\"options\" type=\"Object\">\n\t\t/// A set of key/value pairs that configure the validate. All options are optional.\n\t\t/// </param>\n\n\t\t// if nothing is selected, return nothing; can't chain anyway\n\t\tif (!this.length) {\n\t\t\toptions && options.debug && window.console && console.warn( \"nothing selected, can't validate, returning nothing\" );\n\t\t\treturn;\n\t\t}\n\n\t\t// check if a validator for this form was already created\n\t\tvar validator = $.data(this[0], 'validator');\n\t\tif ( validator ) {\n\t\t\treturn validator;\n\t\t}\n\t\t\n\t\tvalidator = new $.validator( options, this[0] );\n\t\t$.data(this[0], 'validator', validator); \n\t\t\n\t\tif ( validator.settings.onsubmit ) {\n\t\t\n\t\t\t// allow suppresing validation by adding a cancel class to the submit button\n\t\t\tthis.find(\"input, button\").filter(\".cancel\").click(function() {\n\t\t\t\tvalidator.cancelSubmit = true;\n\t\t\t});\n\t\t\t\n\t\t\t// when a submitHandler is used, capture the submitting button\n\t\t\tif (validator.settings.submitHandler) {\n\t\t\t\tthis.find(\"input, button\").filter(\":submit\").click(function() {\n\t\t\t\t\tvalidator.submitButton = this;\n\t\t\t\t});\n\t\t\t}\n\t\t\n\t\t\t// validate the form on submit\n\t\t\tthis.submit( function( event ) {\n\t\t\t\tif ( validator.settings.debug )\n\t\t\t\t\t// prevent form submit to be able to see console output\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\n\t\t\t\tfunction handle() {\n\t\t\t\t\tif ( validator.settings.submitHandler ) {\n\t\t\t\t\t\tif (validator.submitButton) {\n\t\t\t\t\t\t\t// insert a hidden input as a replacement for the missing submit button\n\t\t\t\t\t\t\tvar hidden = $(\"<input type='hidden'/>\").attr(\"name\", validator.submitButton.name).val(validator.submitButton.value).appendTo(validator.currentForm);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tvalidator.settings.submitHandler.call( validator, validator.currentForm );\n\t\t\t\t\t\tif (validator.submitButton) {\n\t\t\t\t\t\t\t// and clean up afterwards; thanks to no-block-scope, hidden can be referenced\n\t\t\t\t\t\t\thidden.remove();\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t// prevent submit for invalid forms or custom submit handlers\n\t\t\t\tif ( validator.cancelSubmit ) {\n\t\t\t\t\tvalidator.cancelSubmit = false;\n\t\t\t\t\treturn handle();\n\t\t\t\t}\n\t\t\t\tif ( validator.form() ) {\n\t\t\t\t\tif ( validator.pendingRequest ) {\n\t\t\t\t\t\tvalidator.formSubmitted = true;\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\treturn handle();\n\t\t\t\t} else {\n\t\t\t\t\tvalidator.focusInvalid();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\t\n\t\treturn validator;\n\t},\n\t// http://docs.jquery.com/Plugins/Validation/valid\n\tvalid: function() {\n\t\t/// <summary>\n\t\t/// Checks if the selected form is valid or if all selected elements are valid.\n\t\t/// validate() needs to be called on the form before checking it using this method.\n\t\t/// </summary>\n\t\t/// <returns type=\"Boolean\" />\n\n        if ( $(this[0]).is('form')) {\n            return this.validate().form();\n        } else {\n            var valid = true;\n            var validator = $(this[0].form).validate();\n            this.each(function() {\n\t\t\t\tvalid &= validator.element(this);\n            });\n            return valid;\n        }\n    },\n\t// attributes: space seperated list of attributes to retrieve and remove\n\tremoveAttrs: function(attributes) {\n\t\t/// <summary>\n\t\t/// Remove the specified attributes from the first matched element and return them.\n\t\t/// </summary>\n\t\t/// <param name=\"attributes\" type=\"String\">\n\t\t/// A space-seperated list of attribute names to remove.\n\t\t/// </param>\n\n\t\tvar result = {},\n\t\t\t$element = this;\n\t\t$.each(attributes.split(/\\s/), function(index, value) {\n\t\t\tresult[value] = $element.attr(value);\n\t\t\t$element.removeAttr(value);\n\t\t});\n\t\treturn result;\n\t},\n\t// http://docs.jquery.com/Plugins/Validation/rules\n\trules: function(command, argument) {\n\t\t/// <summary>\n\t\t/// Return the validations rules for the first selected element.\n\t\t/// </summary>\n\t\t/// <param name=\"command\" type=\"String\">\n\t\t/// Can be either \"add\" or \"remove\".\n\t\t/// </param>\n\t\t/// <param name=\"argument\" type=\"\">\n\t\t/// A list of rules to add or remove.\n\t\t/// </param>\n\n\t\tvar element = this[0];\n\t\t\n\t\tif (command) {\n\t\t\tvar settings = $.data(element.form, 'validator').settings;\n\t\t\tvar staticRules = settings.rules;\n\t\t\tvar existingRules = $.validator.staticRules(element);\n\t\t\tswitch(command) {\n\t\t\tcase \"add\":\n\t\t\t\t$.extend(existingRules, $.validator.normalizeRule(argument));\n\t\t\t\tstaticRules[element.name] = existingRules;\n\t\t\t\tif (argument.messages)\n\t\t\t\t\tsettings.messages[element.name] = $.extend( settings.messages[element.name], argument.messages );\n\t\t\t\tbreak;\n\t\t\tcase \"remove\":\n\t\t\t\tif (!argument) {\n\t\t\t\t\tdelete staticRules[element.name];\n\t\t\t\t\treturn existingRules;\n\t\t\t\t}\n\t\t\t\tvar filtered = {};\n\t\t\t\t$.each(argument.split(/\\s/), function(index, method) {\n\t\t\t\t\tfiltered[method] = existingRules[method];\n\t\t\t\t\tdelete existingRules[method];\n\t\t\t\t});\n\t\t\t\treturn filtered;\n\t\t\t}\n\t\t}\n\t\t\n\t\tvar data = $.validator.normalizeRules(\n\t\t$.extend(\n\t\t\t{},\n\t\t\t$.validator.metadataRules(element),\n\t\t\t$.validator.classRules(element),\n\t\t\t$.validator.attributeRules(element),\n\t\t\t$.validator.staticRules(element)\n\t\t), element);\n\t\t\n\t\t// make sure required is at front\n\t\tif (data.required) {\n\t\t\tvar param = data.required;\n\t\t\tdelete data.required;\n\t\t\tdata = $.extend({required: param}, data);\n\t\t}\n\t\t\n\t\treturn data;\n\t}\n});\n\n// Custom selectors\n$.extend($.expr[\":\"], {\n\t// http://docs.jquery.com/Plugins/Validation/blank\n\tblank: function(a) {return !$.trim(\"\" + a.value);},\n\t// http://docs.jquery.com/Plugins/Validation/filled\n\tfilled: function(a) {return !!$.trim(\"\" + a.value);},\n\t// http://docs.jquery.com/Plugins/Validation/unchecked\n\tunchecked: function(a) {return !a.checked;}\n});\n\n// constructor for validator\n$.validator = function( options, form ) {\n\tthis.settings = $.extend( true, {}, $.validator.defaults, options );\n\tthis.currentForm = form;\n\tthis.init();\n};\n\n$.validator.format = function(source, params) {\n\t/// <summary>\n\t/// Replaces {n} placeholders with arguments.\n\t/// One or more arguments can be passed, in addition to the string template itself, to insert\n\t/// into the string.\n\t/// </summary>\n\t/// <param name=\"source\" type=\"String\">\n\t/// The string to format.\n\t/// </param>\n\t/// <param name=\"params\" type=\"String\">\n\t/// The first argument to insert, or an array of Strings to insert\n\t/// </param>\n\t/// <returns type=\"String\" />\n\n\tif ( arguments.length == 1 ) \n\t\treturn function() {\n\t\t\tvar args = $.makeArray(arguments);\n\t\t\targs.unshift(source);\n\t\t\treturn $.validator.format.apply( this, args );\n\t\t};\n\tif ( arguments.length > 2 && params.constructor != Array  ) {\n\t\tparams = $.makeArray(arguments).slice(1);\n\t}\n\tif ( params.constructor != Array ) {\n\t\tparams = [ params ];\n\t}\n\t$.each(params, function(i, n) {\n\t\tsource = source.replace(new RegExp(\"\\\\{\" + i + \"\\\\}\", \"g\"), n);\n\t});\n\treturn source;\n};\n\n$.extend($.validator, {\n\t\n\tdefaults: {\n\t\tmessages: {},\n\t\tgroups: {},\n\t\trules: {},\n\t\terrorClass: \"error\",\n\t\tvalidClass: \"valid\",\n\t\terrorElement: \"label\",\n\t\tfocusInvalid: true,\n\t\terrorContainer: $( [] ),\n\t\terrorLabelContainer: $( [] ),\n\t\tonsubmit: true,\n\t\tignore: [],\n\t\tignoreTitle: false,\n\t\tonfocusin: function(element) {\n\t\t\tthis.lastActive = element;\n\t\t\t\t\n\t\t\t// hide error label and remove error class on focus if enabled\n\t\t\tif ( this.settings.focusCleanup && !this.blockFocusCleanup ) {\n\t\t\t\tthis.settings.unhighlight && this.settings.unhighlight.call( this, element, this.settings.errorClass, this.settings.validClass );\n\t\t\t\tthis.addWrapper(this.errorsFor(element)).hide();\n\t\t\t}\n\t\t},\n\t\tonfocusout: function(element) {\n\t\t\tif ( !this.checkable(element) && (element.name in this.submitted || !this.optional(element)) ) {\n\t\t\t\tthis.element(element);\n\t\t\t}\n\t\t},\n\t\tonkeyup: function(element) {\n\t\t\tif ( element.name in this.submitted || element == this.lastElement ) {\n\t\t\t\tthis.element(element);\n\t\t\t}\n\t\t},\n\t\tonclick: function(element) {\n\t\t\t// click on selects, radiobuttons and checkboxes\n\t\t\tif ( element.name in this.submitted )\n\t\t\t\tthis.element(element);\n\t\t\t// or option elements, check parent select in that case\n\t\t\telse if (element.parentNode.name in this.submitted)\n\t\t\t\tthis.element(element.parentNode);\n\t\t},\n\t\thighlight: function( element, errorClass, validClass ) {\n\t\t\t$(element).addClass(errorClass).removeClass(validClass);\n\t\t},\n\t\tunhighlight: function( element, errorClass, validClass ) {\n\t\t\t$(element).removeClass(errorClass).addClass(validClass);\n\t\t}\n\t},\n\n\t// http://docs.jquery.com/Plugins/Validation/Validator/setDefaults\n\tsetDefaults: function(settings) {\n\t\t/// <summary>\n\t\t/// Modify default settings for validation.\n\t\t/// Accepts everything that Plugins/Validation/validate accepts.\n\t\t/// </summary>\n\t\t/// <param name=\"settings\" type=\"Options\">\n\t\t/// Options to set as default.\n\t\t/// </param>\n\n\t\t$.extend( $.validator.defaults, settings );\n\t},\n\n\tmessages: {\n\t\trequired: \"This field is required.\",\n\t\tremote: \"Please fix this field.\",\n\t\temail: \"Please enter a valid email address.\",\n\t\turl: \"Please enter a valid URL.\",\n\t\tdate: \"Please enter a valid date.\",\n\t\tdateISO: \"Please enter a valid date (ISO).\",\n\t\tnumber: \"Please enter a valid number.\",\n\t\tdigits: \"Please enter only digits.\",\n\t\tcreditcard: \"Please enter a valid credit card number.\",\n\t\tequalTo: \"Please enter the same value again.\",\n\t\taccept: \"Please enter a value with a valid extension.\",\n\t\tmaxlength: $.validator.format(\"Please enter no more than {0} characters.\"),\n\t\tminlength: $.validator.format(\"Please enter at least {0} characters.\"),\n\t\trangelength: $.validator.format(\"Please enter a value between {0} and {1} characters long.\"),\n\t\trange: $.validator.format(\"Please enter a value between {0} and {1}.\"),\n\t\tmax: $.validator.format(\"Please enter a value less than or equal to {0}.\"),\n\t\tmin: $.validator.format(\"Please enter a value greater than or equal to {0}.\")\n\t},\n\t\n\tautoCreateRanges: false,\n\t\n\tprototype: {\n\t\t\n\t\tinit: function() {\n\t\t\tthis.labelContainer = $(this.settings.errorLabelContainer);\n\t\t\tthis.errorContext = this.labelContainer.length && this.labelContainer || $(this.currentForm);\n\t\t\tthis.containers = $(this.settings.errorContainer).add( this.settings.errorLabelContainer );\n\t\t\tthis.submitted = {};\n\t\t\tthis.valueCache = {};\n\t\t\tthis.pendingRequest = 0;\n\t\t\tthis.pending = {};\n\t\t\tthis.invalid = {};\n\t\t\tthis.reset();\n\t\t\t\n\t\t\tvar groups = (this.groups = {});\n\t\t\t$.each(this.settings.groups, function(key, value) {\n\t\t\t\t$.each(value.split(/\\s/), function(index, name) {\n\t\t\t\t\tgroups[name] = key;\n\t\t\t\t});\n\t\t\t});\n\t\t\tvar rules = this.settings.rules;\n\t\t\t$.each(rules, function(key, value) {\n\t\t\t\trules[key] = $.validator.normalizeRule(value);\n\t\t\t});\n\t\t\t\n\t\t\tfunction delegate(event) {\n\t\t\t\tvar validator = $.data(this[0].form, \"validator\"),\n\t\t\t\t\teventType = \"on\" + event.type.replace(/^validate/, \"\");\n\t\t\t\tvalidator.settings[eventType] && validator.settings[eventType].call(validator, this[0] );\n\t\t\t}\n\t\t\t$(this.currentForm)\n\t\t\t\t.validateDelegate(\":text, :password, :file, select, textarea\", \"focusin focusout keyup\", delegate)\n\t\t\t\t.validateDelegate(\":radio, :checkbox, select, option\", \"click\", delegate);\n\n\t\t\tif (this.settings.invalidHandler)\n\t\t\t\t$(this.currentForm).bind(\"invalid-form.validate\", this.settings.invalidHandler);\n\t\t},\n\n\t\t// http://docs.jquery.com/Plugins/Validation/Validator/form\n\t\tform: function() {\n\t\t\t/// <summary>\n\t\t\t/// Validates the form, returns true if it is valid, false otherwise.\n\t\t\t/// This behaves as a normal submit event, but returns the result.\n\t\t\t/// </summary>\n\t\t\t/// <returns type=\"Boolean\" />\n\n\t\t\tthis.checkForm();\n\t\t\t$.extend(this.submitted, this.errorMap);\n\t\t\tthis.invalid = $.extend({}, this.errorMap);\n\t\t\tif (!this.valid())\n\t\t\t\t$(this.currentForm).triggerHandler(\"invalid-form\", [this]);\n\t\t\tthis.showErrors();\n\t\t\treturn this.valid();\n\t\t},\n\t\t\n\t\tcheckForm: function() {\n\t\t\tthis.prepareForm();\n\t\t\tfor ( var i = 0, elements = (this.currentElements = this.elements()); elements[i]; i++ ) {\n\t\t\t\tthis.check( elements[i] );\n\t\t\t}\n\t\t\treturn this.valid(); \n\t\t},\n\t\t\n\t\t// http://docs.jquery.com/Plugins/Validation/Validator/element\n\t\telement: function( element ) {\n\t\t\t/// <summary>\n\t\t\t/// Validates a single element, returns true if it is valid, false otherwise.\n\t\t\t/// This behaves as validation on blur or keyup, but returns the result.\n\t\t\t/// </summary>\n\t\t\t/// <param name=\"element\" type=\"Selector\">\n\t\t\t/// An element to validate, must be inside the validated form.\n\t\t\t/// </param>\n\t\t\t/// <returns type=\"Boolean\" />\n\n\t\t\telement = this.clean( element );\n\t\t\tthis.lastElement = element;\n\t\t\tthis.prepareElement( element );\n\t\t\tthis.currentElements = $(element);\n\t\t\tvar result = this.check( element );\n\t\t\tif ( result ) {\n\t\t\t\tdelete this.invalid[element.name];\n\t\t\t} else {\n\t\t\t\tthis.invalid[element.name] = true;\n\t\t\t}\n\t\t\tif ( !this.numberOfInvalids() ) {\n\t\t\t\t// Hide error containers on last error\n\t\t\t\tthis.toHide = this.toHide.add( this.containers );\n\t\t\t}\n\t\t\tthis.showErrors();\n\t\t\treturn result;\n\t\t},\n\n\t\t// http://docs.jquery.com/Plugins/Validation/Validator/showErrors\n\t\tshowErrors: function(errors) {\n\t\t\t/// <summary>\n\t\t\t/// Show the specified messages.\n\t\t\t/// Keys have to refer to the names of elements, values are displayed for those elements, using the configured error placement.\n\t\t\t/// </summary>\n\t\t\t/// <param name=\"errors\" type=\"Object\">\n\t\t\t/// One or more key/value pairs of input names and messages.\n\t\t\t/// </param>\n\n\t\t\tif(errors) {\n\t\t\t\t// add items to error list and map\n\t\t\t\t$.extend( this.errorMap, errors );\n\t\t\t\tthis.errorList = [];\n\t\t\t\tfor ( var name in errors ) {\n\t\t\t\t\tthis.errorList.push({\n\t\t\t\t\t\tmessage: errors[name],\n\t\t\t\t\t\telement: this.findByName(name)[0]\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\t// remove items from success list\n\t\t\t\tthis.successList = $.grep( this.successList, function(element) {\n\t\t\t\t\treturn !(element.name in errors);\n\t\t\t\t});\n\t\t\t}\n\t\t\tthis.settings.showErrors\n\t\t\t\t? this.settings.showErrors.call( this, this.errorMap, this.errorList )\n\t\t\t\t: this.defaultShowErrors();\n\t\t},\n\t\t\n\t\t// http://docs.jquery.com/Plugins/Validation/Validator/resetForm\n\t\tresetForm: function() {\n\t\t\t/// <summary>\n\t\t\t/// Resets the controlled form.\n\t\t\t/// Resets input fields to their original value (requires form plugin), removes classes\n\t\t\t/// indicating invalid elements and hides error messages.\n\t\t\t/// </summary>\n\n\t\t\tif ( $.fn.resetForm )\n\t\t\t\t$( this.currentForm ).resetForm();\n\t\t\tthis.submitted = {};\n\t\t\tthis.prepareForm();\n\t\t\tthis.hideErrors();\n\t\t\tthis.elements().removeClass( this.settings.errorClass );\n\t\t},\n\t\t\n\t\tnumberOfInvalids: function() {\n\t\t\t/// <summary>\n\t\t\t/// Returns the number of invalid fields.\n\t\t\t/// This depends on the internal validator state. It covers all fields only after\n\t\t\t/// validating the complete form (on submit or via $(\"form\").valid()). After validating\n\t\t\t/// a single element, only that element is counted. Most useful in combination with the\n\t\t\t/// invalidHandler-option.\n\t\t\t/// </summary>\n\t\t\t/// <returns type=\"Number\" />\n\n\t\t\treturn this.objectLength(this.invalid);\n\t\t},\n\t\t\n\t\tobjectLength: function( obj ) {\n\t\t\tvar count = 0;\n\t\t\tfor ( var i in obj )\n\t\t\t\tcount++;\n\t\t\treturn count;\n\t\t},\n\t\t\n\t\thideErrors: function() {\n\t\t\tthis.addWrapper( this.toHide ).hide();\n\t\t},\n\t\t\n\t\tvalid: function() {\n\t\t\treturn this.size() == 0;\n\t\t},\n\t\t\n\t\tsize: function() {\n\t\t\treturn this.errorList.length;\n\t\t},\n\t\t\n\t\tfocusInvalid: function() {\n\t\t\tif( this.settings.focusInvalid ) {\n\t\t\t\ttry {\n\t\t\t\t\t$(this.findLastActive() || this.errorList.length && this.errorList[0].element || [])\n\t\t\t\t\t.filter(\":visible\")\n\t\t\t\t\t.focus()\n\t\t\t\t\t// manually trigger focusin event; without it, focusin handler isn't called, findLastActive won't have anything to find\n\t\t\t\t\t.trigger(\"focusin\");\n\t\t\t\t} catch(e) {\n\t\t\t\t\t// ignore IE throwing errors when focusing hidden elements\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\n\t\tfindLastActive: function() {\n\t\t\tvar lastActive = this.lastActive;\n\t\t\treturn lastActive && $.grep(this.errorList, function(n) {\n\t\t\t\treturn n.element.name == lastActive.name;\n\t\t\t}).length == 1 && lastActive;\n\t\t},\n\t\t\n\t\telements: function() {\n\t\t\tvar validator = this,\n\t\t\t\trulesCache = {};\n\t\t\t\n\t\t\t// select all valid inputs inside the form (no submit or reset buttons)\n\t\t\t// workaround $Query([]).add until http://dev.jquery.com/ticket/2114 is solved\n\t\t\treturn $([]).add(this.currentForm.elements)\n\t\t\t.filter(\":input\")\n\t\t\t.not(\":submit, :reset, :image, [disabled]\")\n\t\t\t.not( this.settings.ignore )\n\t\t\t.filter(function() {\n\t\t\t\t!this.name && validator.settings.debug && window.console && console.error( \"%o has no name assigned\", this);\n\t\t\t\n\t\t\t\t// select only the first element for each name, and only those with rules specified\n\t\t\t\tif ( this.name in rulesCache || !validator.objectLength($(this).rules()) )\n\t\t\t\t\treturn false;\n\t\t\t\t\n\t\t\t\trulesCache[this.name] = true;\n\t\t\t\treturn true;\n\t\t\t});\n\t\t},\n\t\t\n\t\tclean: function( selector ) {\n\t\t\treturn $( selector )[0];\n\t\t},\n\t\t\n\t\terrors: function() {\n\t\t\treturn $( this.settings.errorElement + \".\" + this.settings.errorClass, this.errorContext );\n\t\t},\n\t\t\n\t\treset: function() {\n\t\t\tthis.successList = [];\n\t\t\tthis.errorList = [];\n\t\t\tthis.errorMap = {};\n\t\t\tthis.toShow = $([]);\n\t\t\tthis.toHide = $([]);\n\t\t\tthis.currentElements = $([]);\n\t\t},\n\t\t\n\t\tprepareForm: function() {\n\t\t\tthis.reset();\n\t\t\tthis.toHide = this.errors().add( this.containers );\n\t\t},\n\t\t\n\t\tprepareElement: function( element ) {\n\t\t\tthis.reset();\n\t\t\tthis.toHide = this.errorsFor(element);\n\t\t},\n\t\n\t\tcheck: function( element ) {\n\t\t\telement = this.clean( element );\n\t\t\t\n\t\t\t// if radio/checkbox, validate first element in group instead\n\t\t\tif (this.checkable(element)) {\n\t\t\t    element = this.findByName(element.name).not(this.settings.ignore)[0];\n\t\t\t}\n\t\t\t\n\t\t\tvar rules = $(element).rules();\n\t\t\tvar dependencyMismatch = false;\n\t\t\tfor (var method in rules) {\n\t\t\t\tvar rule = { method: method, parameters: rules[method] };\n\t\t\t\ttry {\n\t\t\t\t\tvar result = $.validator.methods[method].call( this, element.value.replace(/\\r/g, \"\"), element, rule.parameters );\n\t\t\t\t\t\n\t\t\t\t\t// if a method indicates that the field is optional and therefore valid,\n\t\t\t\t\t// don't mark it as valid when there are no other rules\n\t\t\t\t\tif ( result == \"dependency-mismatch\" ) {\n\t\t\t\t\t\tdependencyMismatch = true;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tdependencyMismatch = false;\n\t\t\t\t\t\n\t\t\t\t\tif ( result == \"pending\" ) {\n\t\t\t\t\t\tthis.toHide = this.toHide.not( this.errorsFor(element) );\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tif( !result ) {\n\t\t\t\t\t\tthis.formatAndAdd( element, rule );\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t} catch(e) {\n\t\t\t\t\tthis.settings.debug && window.console && console.log(\"exception occured when checking element \" + element.id\n\t\t\t\t\t\t + \", check the '\" + rule.method + \"' method\", e);\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (dependencyMismatch)\n\t\t\t\treturn;\n\t\t\tif ( this.objectLength(rules) )\n\t\t\t\tthis.successList.push(element);\n\t\t\treturn true;\n\t\t},\n\t\t\n\t\t// return the custom message for the given element and validation method\n\t\t// specified in the element's \"messages\" metadata\n\t\tcustomMetaMessage: function(element, method) {\n\t\t\tif (!$.metadata)\n\t\t\t\treturn;\n\t\t\t\n\t\t\tvar meta = this.settings.meta\n\t\t\t\t? $(element).metadata()[this.settings.meta]\n\t\t\t\t: $(element).metadata();\n\t\t\t\n\t\t\treturn meta && meta.messages && meta.messages[method];\n\t\t},\n\t\t\n\t\t// return the custom message for the given element name and validation method\n\t\tcustomMessage: function( name, method ) {\n\t\t\tvar m = this.settings.messages[name];\n\t\t\treturn m && (m.constructor == String\n\t\t\t\t? m\n\t\t\t\t: m[method]);\n\t\t},\n\t\t\n\t\t// return the first defined argument, allowing empty strings\n\t\tfindDefined: function() {\n\t\t\tfor(var i = 0; i < arguments.length; i++) {\n\t\t\t\tif (arguments[i] !== undefined)\n\t\t\t\t\treturn arguments[i];\n\t\t\t}\n\t\t\treturn undefined;\n\t\t},\n\t\t\n\t\tdefaultMessage: function( element, method) {\n\t\t\treturn this.findDefined(\n\t\t\t\tthis.customMessage( element.name, method ),\n\t\t\t\tthis.customMetaMessage( element, method ),\n\t\t\t\t// title is never undefined, so handle empty string as undefined\n\t\t\t\t!this.settings.ignoreTitle && element.title || undefined,\n\t\t\t\t$.validator.messages[method],\n\t\t\t\t\"<strong>Warning: No message defined for \" + element.name + \"</strong>\"\n\t\t\t);\n\t\t},\n\t\t\n\t\tformatAndAdd: function( element, rule ) {\n\t\t\tvar message = this.defaultMessage( element, rule.method ),\n\t\t\t\ttheregex = /\\$?\\{(\\d+)\\}/g;\n\t\t\tif ( typeof message == \"function\" ) {\n\t\t\t\tmessage = message.call(this, rule.parameters, element);\n\t\t\t} else if (theregex.test(message)) {\n\t\t\t\tmessage = jQuery.format(message.replace(theregex, '{$1}'), rule.parameters);\n\t\t\t}\t\t\t\n\t\t\tthis.errorList.push({\n\t\t\t\tmessage: message,\n\t\t\t\telement: element\n\t\t\t});\n\t\t\t\n\t\t\tthis.errorMap[element.name] = message;\n\t\t\tthis.submitted[element.name] = message;\n\t\t},\n\t\t\n\t\taddWrapper: function(toToggle) {\n\t\t\tif ( this.settings.wrapper )\n\t\t\t\ttoToggle = toToggle.add( toToggle.parent( this.settings.wrapper ) );\n\t\t\treturn toToggle;\n\t\t},\n\t\t\n\t\tdefaultShowErrors: function() {\n\t\t\tfor ( var i = 0; this.errorList[i]; i++ ) {\n\t\t\t\tvar error = this.errorList[i];\n\t\t\t\tthis.settings.highlight && this.settings.highlight.call( this, error.element, this.settings.errorClass, this.settings.validClass );\n\t\t\t\tthis.showLabel( error.element, error.message );\n\t\t\t}\n\t\t\tif( this.errorList.length ) {\n\t\t\t\tthis.toShow = this.toShow.add( this.containers );\n\t\t\t}\n\t\t\tif (this.settings.success) {\n\t\t\t\tfor ( var i = 0; this.successList[i]; i++ ) {\n\t\t\t\t\tthis.showLabel( this.successList[i] );\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.settings.unhighlight) {\n\t\t\t\tfor ( var i = 0, elements = this.validElements(); elements[i]; i++ ) {\n\t\t\t\t\tthis.settings.unhighlight.call( this, elements[i], this.settings.errorClass, this.settings.validClass );\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.toHide = this.toHide.not( this.toShow );\n\t\t\tthis.hideErrors();\n\t\t\tthis.addWrapper( this.toShow ).show();\n\t\t},\n\t\t\n\t\tvalidElements: function() {\n\t\t\treturn this.currentElements.not(this.invalidElements());\n\t\t},\n\t\t\n\t\tinvalidElements: function() {\n\t\t\treturn $(this.errorList).map(function() {\n\t\t\t\treturn this.element;\n\t\t\t});\n\t\t},\n\t\t\n\t\tshowLabel: function(element, message) {\n\t\t\tvar label = this.errorsFor( element );\n\t\t\tif ( label.length ) {\n\t\t\t\t// refresh error/success class\n\t\t\t\tlabel.removeClass().addClass( this.settings.errorClass );\n\t\t\t\n\t\t\t\t// check if we have a generated label, replace the message then\n\t\t\t\tlabel.attr(\"generated\") && label.html(message);\n\t\t\t} else {\n\t\t\t\t// create label\n\t\t\t\tlabel = $(\"<\" + this.settings.errorElement + \"/>\")\n\t\t\t\t\t.attr({\"for\":  this.idOrName(element), generated: true})\n\t\t\t\t\t.addClass(this.settings.errorClass)\n\t\t\t\t\t.html(message || \"\");\n\t\t\t\tif ( this.settings.wrapper ) {\n\t\t\t\t\t// make sure the element is visible, even in IE\n\t\t\t\t\t// actually showing the wrapped element is handled elsewhere\n\t\t\t\t\tlabel = label.hide().show().wrap(\"<\" + this.settings.wrapper + \"/>\").parent();\n\t\t\t\t}\n\t\t\t\tif ( !this.labelContainer.append(label).length )\n\t\t\t\t\tthis.settings.errorPlacement\n\t\t\t\t\t\t? this.settings.errorPlacement(label, $(element) )\n\t\t\t\t\t\t: label.insertAfter(element);\n\t\t\t}\n\t\t\tif ( !message && this.settings.success ) {\n\t\t\t\tlabel.text(\"\");\n\t\t\t\ttypeof this.settings.success == \"string\"\n\t\t\t\t\t? label.addClass( this.settings.success )\n\t\t\t\t\t: this.settings.success( label );\n\t\t\t}\n\t\t\tthis.toShow = this.toShow.add(label);\n\t\t},\n\t\t\n\t\terrorsFor: function(element) {\n\t\t\tvar name = this.idOrName(element);\n    \t\treturn this.errors().filter(function() {\n\t\t\t\treturn $(this).attr('for') == name;\n\t\t\t});\n\t\t},\n\t\t\n\t\tidOrName: function(element) {\n\t\t\treturn this.groups[element.name] || (this.checkable(element) ? element.name : element.id || element.name);\n\t\t},\n\n\t\tcheckable: function( element ) {\n\t\t\treturn /radio|checkbox/i.test(element.type);\n\t\t},\n\t\t\n\t\tfindByName: function( name ) {\n\t\t\t// select by name and filter by form for performance over form.find(\"[name=...]\")\n\t\t\tvar form = this.currentForm;\n\t\t\treturn $(document.getElementsByName(name)).map(function(index, element) {\n\t\t\t\treturn element.form == form && element.name == name && element  || null;\n\t\t\t});\n\t\t},\n\t\t\n\t\tgetLength: function(value, element) {\n\t\t\tswitch( element.nodeName.toLowerCase() ) {\n\t\t\tcase 'select':\n\t\t\t\treturn $(\"option:selected\", element).length;\n\t\t\tcase 'input':\n\t\t\t\tif( this.checkable( element) )\n\t\t\t\t\treturn this.findByName(element.name).filter(':checked').length;\n\t\t\t}\n\t\t\treturn value.length;\n\t\t},\n\t\n\t\tdepend: function(param, element) {\n\t\t\treturn this.dependTypes[typeof param]\n\t\t\t\t? this.dependTypes[typeof param](param, element)\n\t\t\t\t: true;\n\t\t},\n\t\n\t\tdependTypes: {\n\t\t\t\"boolean\": function(param, element) {\n\t\t\t\treturn param;\n\t\t\t},\n\t\t\t\"string\": function(param, element) {\n\t\t\t\treturn !!$(param, element.form).length;\n\t\t\t},\n\t\t\t\"function\": function(param, element) {\n\t\t\t\treturn param(element);\n\t\t\t}\n\t\t},\n\t\t\n\t\toptional: function(element) {\n\t\t\treturn !$.validator.methods.required.call(this, $.trim(element.value), element) && \"dependency-mismatch\";\n\t\t},\n\t\t\n\t\tstartRequest: function(element) {\n\t\t\tif (!this.pending[element.name]) {\n\t\t\t\tthis.pendingRequest++;\n\t\t\t\tthis.pending[element.name] = true;\n\t\t\t}\n\t\t},\n\t\t\n\t\tstopRequest: function(element, valid) {\n\t\t\tthis.pendingRequest--;\n\t\t\t// sometimes synchronization fails, make sure pendingRequest is never < 0\n\t\t\tif (this.pendingRequest < 0)\n\t\t\t\tthis.pendingRequest = 0;\n\t\t\tdelete this.pending[element.name];\n\t\t\tif ( valid && this.pendingRequest == 0 && this.formSubmitted && this.form() ) {\n\t\t\t\t$(this.currentForm).submit();\n\t\t\t\tthis.formSubmitted = false;\n\t\t\t} else if (!valid && this.pendingRequest == 0 && this.formSubmitted) {\n\t\t\t\t$(this.currentForm).triggerHandler(\"invalid-form\", [this]);\n\t\t\t\tthis.formSubmitted = false;\n\t\t\t}\n\t\t},\n\t\t\n\t\tpreviousValue: function(element) {\n\t\t\treturn $.data(element, \"previousValue\") || $.data(element, \"previousValue\", {\n\t\t\t\told: null,\n\t\t\t\tvalid: true,\n\t\t\t\tmessage: this.defaultMessage( element, \"remote\" )\n\t\t\t});\n\t\t}\n\t\t\n\t},\n\t\n\tclassRuleSettings: {\n\t\trequired: {required: true},\n\t\temail: {email: true},\n\t\turl: {url: true},\n\t\tdate: {date: true},\n\t\tdateISO: {dateISO: true},\n\t\tdateDE: {dateDE: true},\n\t\tnumber: {number: true},\n\t\tnumberDE: {numberDE: true},\n\t\tdigits: {digits: true},\n\t\tcreditcard: {creditcard: true}\n\t},\n\t\n\taddClassRules: function(className, rules) {\n\t\t/// <summary>\n\t\t/// Add a compound class method - useful to refactor common combinations of rules into a single\n\t\t/// class.\n\t\t/// </summary>\n\t\t/// <param name=\"name\" type=\"String\">\n\t\t/// The name of the class rule to add\n\t\t/// </param>\n\t\t/// <param name=\"rules\" type=\"Options\">\n\t\t/// The compound rules\n\t\t/// </param>\n\n\t\tclassName.constructor == String ?\n\t\t\tthis.classRuleSettings[className] = rules :\n\t\t\t$.extend(this.classRuleSettings, className);\n\t},\n\t\n\tclassRules: function(element) {\n\t\tvar rules = {};\n\t\tvar classes = $(element).attr('class');\n\t\tclasses && $.each(classes.split(' '), function() {\n\t\t\tif (this in $.validator.classRuleSettings) {\n\t\t\t\t$.extend(rules, $.validator.classRuleSettings[this]);\n\t\t\t}\n\t\t});\n\t\treturn rules;\n\t},\n\t\n\tattributeRules: function(element) {\n\t\tvar rules = {};\n\t\tvar $element = $(element);\n\n\t\tfor (var method in $.validator.methods) {\n\t\t\tvar value = $element.attr(method);\n\t\t\tif (value) {\n\t\t\t\trules[method] = value;\n\t\t\t}\n\t\t}\n\t\t\n\t\t// maxlength may be returned as -1, 2147483647 (IE) and 524288 (safari) for text inputs\n\t\tif (rules.maxlength && /-1|2147483647|524288/.test(rules.maxlength)) {\n\t\t\tdelete rules.maxlength;\n\t\t}\n\t\t\n\t\treturn rules;\n\t},\n\t\n\tmetadataRules: function(element) {\n\t\tif (!$.metadata) return {};\n\t\t\n\t\tvar meta = $.data(element.form, 'validator').settings.meta;\n\t\treturn meta ?\n\t\t\t$(element).metadata()[meta] :\n\t\t\t$(element).metadata();\n\t},\n\t\n\tstaticRules: function(element) {\n\t\tvar rules = {};\n\t\tvar validator = $.data(element.form, 'validator');\n\t\tif (validator.settings.rules) {\n\t\t\trules = $.validator.normalizeRule(validator.settings.rules[element.name]) || {};\n\t\t}\n\t\treturn rules;\n\t},\n\t\n\tnormalizeRules: function(rules, element) {\n\t\t// handle dependency check\n\t\t$.each(rules, function(prop, val) {\n\t\t\t// ignore rule when param is explicitly false, eg. required:false\n\t\t\tif (val === false) {\n\t\t\t\tdelete rules[prop];\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (val.param || val.depends) {\n\t\t\t\tvar keepRule = true;\n\t\t\t\tswitch (typeof val.depends) {\n\t\t\t\t\tcase \"string\":\n\t\t\t\t\t\tkeepRule = !!$(val.depends, element.form).length;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"function\":\n\t\t\t\t\t\tkeepRule = val.depends.call(element, element);\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (keepRule) {\n\t\t\t\t\trules[prop] = val.param !== undefined ? val.param : true;\n\t\t\t\t} else {\n\t\t\t\t\tdelete rules[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\t\n\t\t// evaluate parameters\n\t\t$.each(rules, function(rule, parameter) {\n\t\t\trules[rule] = $.isFunction(parameter) ? parameter(element) : parameter;\n\t\t});\n\t\t\n\t\t// clean number parameters\n\t\t$.each(['minlength', 'maxlength', 'min', 'max'], function() {\n\t\t\tif (rules[this]) {\n\t\t\t\trules[this] = Number(rules[this]);\n\t\t\t}\n\t\t});\n\t\t$.each(['rangelength', 'range'], function() {\n\t\t\tif (rules[this]) {\n\t\t\t\trules[this] = [Number(rules[this][0]), Number(rules[this][1])];\n\t\t\t}\n\t\t});\n\t\t\n\t\tif ($.validator.autoCreateRanges) {\n\t\t\t// auto-create ranges\n\t\t\tif (rules.min && rules.max) {\n\t\t\t\trules.range = [rules.min, rules.max];\n\t\t\t\tdelete rules.min;\n\t\t\t\tdelete rules.max;\n\t\t\t}\n\t\t\tif (rules.minlength && rules.maxlength) {\n\t\t\t\trules.rangelength = [rules.minlength, rules.maxlength];\n\t\t\t\tdelete rules.minlength;\n\t\t\t\tdelete rules.maxlength;\n\t\t\t}\n\t\t}\n\t\t\n\t\t// To support custom messages in metadata ignore rule methods titled \"messages\"\n\t\tif (rules.messages) {\n\t\t\tdelete rules.messages;\n\t\t}\n\t\t\n\t\treturn rules;\n\t},\n\t\n\t// Converts a simple string to a {string: true} rule, e.g., \"required\" to {required:true}\n\tnormalizeRule: function(data) {\n\t\tif( typeof data == \"string\" ) {\n\t\t\tvar transformed = {};\n\t\t\t$.each(data.split(/\\s/), function() {\n\t\t\t\ttransformed[this] = true;\n\t\t\t});\n\t\t\tdata = transformed;\n\t\t}\n\t\treturn data;\n\t},\n\t\n\t// http://docs.jquery.com/Plugins/Validation/Validator/addMethod\n\taddMethod: function(name, method, message) {\n\t\t/// <summary>\n\t\t/// Add a custom validation method. It must consist of a name (must be a legal javascript \n\t\t/// identifier), a javascript based function and a default string message.\n\t\t/// </summary>\n\t\t/// <param name=\"name\" type=\"String\">\n\t\t/// The name of the method, used to identify and referencing it, must be a valid javascript\n\t\t/// identifier\n\t\t/// </param>\n\t\t/// <param name=\"method\" type=\"Function\">\n\t\t/// The actual method implementation, returning true if an element is valid\n\t\t/// </param>\n\t\t/// <param name=\"message\" type=\"String\" optional=\"true\">\n\t\t/// (Optional) The default message to display for this method. Can be a function created by \n\t\t/// jQuery.validator.format(value). When undefined, an already existing message is used \n\t\t/// (handy for localization), otherwise the field-specific messages have to be defined.\n\t\t/// </param>\n\n\t\t$.validator.methods[name] = method;\n\t\t$.validator.messages[name] = message != undefined ? message : $.validator.messages[name];\n\t\tif (method.length < 3) {\n\t\t\t$.validator.addClassRules(name, $.validator.normalizeRule(name));\n\t\t}\n\t},\n\n\tmethods: {\n\n\t\t// http://docs.jquery.com/Plugins/Validation/Methods/required\n\t\trequired: function(value, element, param) {\n\t\t\t// check if dependency is met\n\t\t\tif ( !this.depend(param, element) )\n\t\t\t\treturn \"dependency-mismatch\";\n\t\t\tswitch( element.nodeName.toLowerCase() ) {\n\t\t\tcase 'select':\n\t\t\t\t// could be an array for select-multiple or a string, both are fine this way\n\t\t\t\tvar val = $(element).val();\n\t\t\t\treturn val && val.length > 0;\n\t\t\tcase 'input':\n\t\t\t\tif ( this.checkable(element) )\n\t\t\t\t\treturn this.getLength(value, element) > 0;\n\t\t\tdefault:\n\t\t\t\treturn $.trim(value).length > 0;\n\t\t\t}\n\t\t},\n\t\t\n\t\t// http://docs.jquery.com/Plugins/Validation/Methods/remote\n\t\tremote: function(value, element, param) {\n\t\t\tif ( this.optional(element) )\n\t\t\t\treturn \"dependency-mismatch\";\n\t\t\t\n\t\t\tvar previous = this.previousValue(element);\n\t\t\tif (!this.settings.messages[element.name] )\n\t\t\t\tthis.settings.messages[element.name] = {};\n\t\t\tprevious.originalMessage = this.settings.messages[element.name].remote;\n\t\t\tthis.settings.messages[element.name].remote = previous.message;\n\t\t\t\n\t\t\tparam = typeof param == \"string\" && {url:param} || param; \n\t\t\t\n\t\t\tif ( this.pending[element.name] ) {\n\t\t\t\treturn \"pending\";\n\t\t\t}\n\t\t\tif ( previous.old === value ) {\n\t\t\t\treturn previous.valid;\n\t\t\t}\n\n\t\t\tprevious.old = value;\n\t\t\tvar validator = this;\n\t\t\tthis.startRequest(element);\n\t\t\tvar data = {};\n\t\t\tdata[element.name] = value;\n\t\t\t$.ajax($.extend(true, {\n\t\t\t\turl: param,\n\t\t\t\tmode: \"abort\",\n\t\t\t\tport: \"validate\" + element.name,\n\t\t\t\tdataType: \"json\",\n\t\t\t\tdata: data,\n\t\t\t\tsuccess: function(response) {\n\t\t\t\t\tvalidator.settings.messages[element.name].remote = previous.originalMessage;\n\t\t\t\t\tvar valid = response === true;\n\t\t\t\t\tif ( valid ) {\n\t\t\t\t\t\tvar submitted = validator.formSubmitted;\n\t\t\t\t\t\tvalidator.prepareElement(element);\n\t\t\t\t\t\tvalidator.formSubmitted = submitted;\n\t\t\t\t\t\tvalidator.successList.push(element);\n\t\t\t\t\t\tvalidator.showErrors();\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvar errors = {};\n\t\t\t\t\t\tvar message = response || validator.defaultMessage(element, \"remote\");\n\t\t\t\t\t\terrors[element.name] = previous.message = $.isFunction(message) ? message(value) : message;\n\t\t\t\t\t\tvalidator.showErrors(errors);\n\t\t\t\t\t}\n\t\t\t\t\tprevious.valid = valid;\n\t\t\t\t\tvalidator.stopRequest(element, valid);\n\t\t\t\t}\n\t\t\t}, param));\n\t\t\treturn \"pending\";\n\t\t},\n\n\t\t// http://docs.jquery.com/Plugins/Validation/Methods/minlength\n\t\tminlength: function(value, element, param) {\n\t\t\treturn this.optional(element) || this.getLength($.trim(value), element) >= param;\n\t\t},\n\t\t\n\t\t// http://docs.jquery.com/Plugins/Validation/Methods/maxlength\n\t\tmaxlength: function(value, element, param) {\n\t\t\treturn this.optional(element) || this.getLength($.trim(value), element) <= param;\n\t\t},\n\t\t\n\t\t// http://docs.jquery.com/Plugins/Validation/Methods/rangelength\n\t\trangelength: function(value, element, param) {\n\t\t\tvar length = this.getLength($.trim(value), element);\n\t\t\treturn this.optional(element) || ( length >= param[0] && length <= param[1] );\n\t\t},\n\t\t\n\t\t// http://docs.jquery.com/Plugins/Validation/Methods/min\n\t\tmin: function( value, element, param ) {\n\t\t\treturn this.optional(element) || value >= param;\n\t\t},\n\t\t\n\t\t// http://docs.jquery.com/Plugins/Validation/Methods/max\n\t\tmax: function( value, element, param ) {\n\t\t\treturn this.optional(element) || value <= param;\n\t\t},\n\t\t\n\t\t// http://docs.jquery.com/Plugins/Validation/Methods/range\n\t\trange: function( value, element, param ) {\n\t\t\treturn this.optional(element) || ( value >= param[0] && value <= param[1] );\n\t\t},\n\t\t\n\t\t// http://docs.jquery.com/Plugins/Validation/Methods/email\n\t\temail: function(value, element) {\n\t\t\t// contributed by Scott Gonzalez: http://projects.scottsplayground.com/email_address_validation/\n\t\t\treturn this.optional(element) || /^((([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+(\\.([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+)*)|((\\x22)((((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(([\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]|\\x21|[\\x23-\\x5b]|[\\x5d-\\x7e]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(\\\\([\\x01-\\x09\\x0b\\x0c\\x0d-\\x7f]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]))))*(((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(\\x22)))@((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.?$/i.test(value);\n\t\t},\n\t\n\t\t// http://docs.jquery.com/Plugins/Validation/Methods/url\n\t\turl: function(value, element) {\n\t\t\t// contributed by Scott Gonzalez: http://projects.scottsplayground.com/iri/\n\t\t\treturn this.optional(element) || /^(https?|ftp):\\/\\/(((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:)*@)?(((\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5]))|((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.?)(:\\d*)?)(\\/((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)+(\\/(([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)*)*)?)?(\\?((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)|[\\uE000-\\uF8FF]|\\/|\\?)*)?(\\#((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)|\\/|\\?)*)?$/i.test(value);\n\t\t},\n        \n\t\t// http://docs.jquery.com/Plugins/Validation/Methods/date\n\t\tdate: function(value, element) {\n\t\t\treturn this.optional(element) || !/Invalid|NaN/.test(new Date(value));\n\t\t},\n\t\n\t\t// http://docs.jquery.com/Plugins/Validation/Methods/dateISO\n\t\tdateISO: function(value, element) {\n\t\t\treturn this.optional(element) || /^\\d{4}[\\/-]\\d{1,2}[\\/-]\\d{1,2}$/.test(value);\n\t\t},\n\t\n\t\t// http://docs.jquery.com/Plugins/Validation/Methods/number\n\t\tnumber: function(value, element) {\n\t\t\treturn this.optional(element) || /^-?(?:\\d+|\\d{1,3}(?:,\\d{3})+)(?:\\.\\d+)?$/.test(value);\n\t\t},\n\t\n\t\t// http://docs.jquery.com/Plugins/Validation/Methods/digits\n\t\tdigits: function(value, element) {\n\t\t\treturn this.optional(element) || /^\\d+$/.test(value);\n\t\t},\n\t\t\n\t\t// http://docs.jquery.com/Plugins/Validation/Methods/creditcard\n\t\t// based on http://en.wikipedia.org/wiki/Luhn\n\t\tcreditcard: function(value, element) {\n\t\t\tif ( this.optional(element) )\n\t\t\t\treturn \"dependency-mismatch\";\n\t\t\t// accept only digits and dashes\n\t\t\tif (/[^0-9-]+/.test(value))\n\t\t\t\treturn false;\n\t\t\tvar nCheck = 0,\n\t\t\t\tnDigit = 0,\n\t\t\t\tbEven = false;\n\n\t\t\tvalue = value.replace(/\\D/g, \"\");\n\n\t\t\tfor (var n = value.length - 1; n >= 0; n--) {\n\t\t\t\tvar cDigit = value.charAt(n);\n\t\t\t\tvar nDigit = parseInt(cDigit, 10);\n\t\t\t\tif (bEven) {\n\t\t\t\t\tif ((nDigit *= 2) > 9)\n\t\t\t\t\t\tnDigit -= 9;\n\t\t\t\t}\n\t\t\t\tnCheck += nDigit;\n\t\t\t\tbEven = !bEven;\n\t\t\t}\n\n\t\t\treturn (nCheck % 10) == 0;\n\t\t},\n\t\t\n\t\t// http://docs.jquery.com/Plugins/Validation/Methods/accept\n\t\taccept: function(value, element, param) {\n\t\t\tparam = typeof param == \"string\" ? param.replace(/,/g, '|') : \"png|jpe?g|gif\";\n\t\t\treturn this.optional(element) || value.match(new RegExp(\".(\" + param + \")$\", \"i\")); \n\t\t},\n\t\t\n\t\t// http://docs.jquery.com/Plugins/Validation/Methods/equalTo\n\t\tequalTo: function(value, element, param) {\n\t\t\t// bind to the blur event of the target in order to revalidate whenever the target field is updated\n\t\t\t// TODO find a way to bind the event just once, avoiding the unbind-rebind overhead\n\t\t\tvar target = $(param).unbind(\".validate-equalTo\").bind(\"blur.validate-equalTo\", function() {\n\t\t\t\t$(element).valid();\n\t\t\t});\n\t\t\treturn value == target.val();\n\t\t}\n\t\t\n\t}\n\t\n});\n\n// deprecated, use $.validator.format instead\n$.format = $.validator.format;\n\n})(jQuery);\n\n// ajax mode: abort\n// usage: $.ajax({ mode: \"abort\"[, port: \"uniqueport\"]});\n// if mode:\"abort\" is used, the previous request on that port (port can be undefined) is aborted via XMLHttpRequest.abort() \n;(function($) {\n\tvar pendingRequests = {};\n\t\t// Use a prefilter if available (1.5+)\n\tif ( $.ajaxPrefilter ) {\n\t\t$.ajaxPrefilter(function(settings, _, xhr) {\n\t\t    var port = settings.port;\n\t\t    if (settings.mode == \"abort\") {\n\t\t\t    if ( pendingRequests[port] ) {\n\t\t\t\t    pendingRequests[port].abort();\n\t\t\t    }\t\t\t\tpendingRequests[port] = xhr;\n\t\t    }\n\t    });\n\t} else {\n\t\t// Proxy ajax\n\t\tvar ajax = $.ajax;\n\t\t$.ajax = function(settings) {\n\t\t\tvar mode = ( \"mode\" in settings ? settings : $.ajaxSettings ).mode,\n\t\t\t\tport = ( \"port\" in settings ? settings : $.ajaxSettings ).port;\n\t\t\tif (mode == \"abort\") {\n\t\t\t\tif ( pendingRequests[port] ) {\n\t\t\t\t\tpendingRequests[port].abort();\n\t\t\t\t}\n\n\t\t\t    return (pendingRequests[port] = ajax.apply(this, arguments));\n\t\t    }\n\t\t    return ajax.apply(this, arguments);\n\t    };\n    }\n})(jQuery);\n\n// provides cross-browser focusin and focusout events\n// IE has native support, in other browsers, use event caputuring (neither bubbles)\n\n// provides delegate(type: String, delegate: Selector, handler: Callback) plugin for easier event delegation\n// handler is only called when $(event.target).is(delegate), in the scope of the jquery-object for event.target \n;(function($) {\n\t// only implement if not provided by jQuery core (since 1.4)\n\t// TODO verify if jQuery 1.4's implementation is compatible with older jQuery special-event APIs\n\tif (!jQuery.event.special.focusin && !jQuery.event.special.focusout && document.addEventListener) {\n\t\t$.each({\n\t\t\tfocus: 'focusin',\n\t\t\tblur: 'focusout'\t\n\t\t}, function( original, fix ){\n\t\t\t$.event.special[fix] = {\n\t\t\t\tsetup:function() {\n\t\t\t\t\tthis.addEventListener( original, handler, true );\n\t\t\t\t},\n\t\t\t\tteardown:function() {\n\t\t\t\t\tthis.removeEventListener( original, handler, true );\n\t\t\t\t},\n\t\t\t\thandler: function(e) {\n\t\t\t\t\targuments[0] = $.event.fix(e);\n\t\t\t\t\targuments[0].type = fix;\n\t\t\t\t\treturn $.event.handle.apply(this, arguments);\n\t\t\t\t}\n\t\t\t};\n\t\t\tfunction handler(e) {\n\t\t\t\te = $.event.fix(e);\n\t\t\t\te.type = fix;\n\t\t\t\treturn $.event.handle.call(this, e);\n\t\t\t}\n\t\t});\n\t};\n\t$.extend($.fn, {\n\t\tvalidateDelegate: function(delegate, type, handler) {\n\t\t\treturn this.bind(type, function(event) {\n\t\t\t\tvar target = $(event.target);\n\t\t\t\tif (target.is(delegate)) {\n\t\t\t\t\treturn handler.apply(target, arguments);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n})(jQuery);\n"
  },
  {
    "path": "AlexaSkillsKit.Sample/Scripts/jquery.validate.js",
    "content": "﻿/* NUGET: BEGIN LICENSE TEXT\n *\n * Microsoft grants you the right to use these script files for the sole\n * purpose of either: (i) interacting through your browser with the Microsoft\n * website or online service, subject to the applicable licensing or use\n * terms; or (ii) using the files as included with a Microsoft product subject\n * to that product's license terms. Microsoft reserves all other rights to the\n * files not expressly granted by Microsoft, whether by implication, estoppel\n * or otherwise. Insofar as a script file is dual licensed under GPL,\n * Microsoft neither took the code under GPL nor distributes it thereunder but\n * under the terms set out in this paragraph. All notices and licenses\n * below are for informational purposes only.\n *\n * NUGET: END LICENSE TEXT */\n/*!\n * jQuery Validation Plugin 1.11.1\n *\n * http://bassistance.de/jquery-plugins/jquery-plugin-validation/\n * http://docs.jquery.com/Plugins/Validation\n *\n * Copyright 2013 Jörn Zaefferer\n * Released under the MIT license:\n *   http://www.opensource.org/licenses/mit-license.php\n */\n\n(function($) {\n\n$.extend($.fn, {\n\t// http://docs.jquery.com/Plugins/Validation/validate\n\tvalidate: function( options ) {\n\n\t\t// if nothing is selected, return nothing; can't chain anyway\n\t\tif ( !this.length ) {\n\t\t\tif ( options && options.debug && window.console ) {\n\t\t\t\tconsole.warn( \"Nothing selected, can't validate, returning nothing.\" );\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\t// check if a validator for this form was already created\n\t\tvar validator = $.data( this[0], \"validator\" );\n\t\tif ( validator ) {\n\t\t\treturn validator;\n\t\t}\n\n\t\t// Add novalidate tag if HTML5.\n\t\tthis.attr( \"novalidate\", \"novalidate\" );\n\n\t\tvalidator = new $.validator( options, this[0] );\n\t\t$.data( this[0], \"validator\", validator );\n\n\t\tif ( validator.settings.onsubmit ) {\n\n\t\t\tthis.validateDelegate( \":submit\", \"click\", function( event ) {\n\t\t\t\tif ( validator.settings.submitHandler ) {\n\t\t\t\t\tvalidator.submitButton = event.target;\n\t\t\t\t}\n\t\t\t\t// allow suppressing validation by adding a cancel class to the submit button\n\t\t\t\tif ( $(event.target).hasClass(\"cancel\") ) {\n\t\t\t\t\tvalidator.cancelSubmit = true;\n\t\t\t\t}\n\n\t\t\t\t// allow suppressing validation by adding the html5 formnovalidate attribute to the submit button\n\t\t\t\tif ( $(event.target).attr(\"formnovalidate\") !== undefined ) {\n\t\t\t\t\tvalidator.cancelSubmit = true;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// validate the form on submit\n\t\t\tthis.submit( function( event ) {\n\t\t\t\tif ( validator.settings.debug ) {\n\t\t\t\t\t// prevent form submit to be able to see console output\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t\tfunction handle() {\n\t\t\t\t\tvar hidden;\n\t\t\t\t\tif ( validator.settings.submitHandler ) {\n\t\t\t\t\t\tif ( validator.submitButton ) {\n\t\t\t\t\t\t\t// insert a hidden input as a replacement for the missing submit button\n\t\t\t\t\t\t\thidden = $(\"<input type='hidden'/>\").attr(\"name\", validator.submitButton.name).val( $(validator.submitButton).val() ).appendTo(validator.currentForm);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tvalidator.settings.submitHandler.call( validator, validator.currentForm, event );\n\t\t\t\t\t\tif ( validator.submitButton ) {\n\t\t\t\t\t\t\t// and clean up afterwards; thanks to no-block-scope, hidden can be referenced\n\t\t\t\t\t\t\thidden.remove();\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\t// prevent submit for invalid forms or custom submit handlers\n\t\t\t\tif ( validator.cancelSubmit ) {\n\t\t\t\t\tvalidator.cancelSubmit = false;\n\t\t\t\t\treturn handle();\n\t\t\t\t}\n\t\t\t\tif ( validator.form() ) {\n\t\t\t\t\tif ( validator.pendingRequest ) {\n\t\t\t\t\t\tvalidator.formSubmitted = true;\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\treturn handle();\n\t\t\t\t} else {\n\t\t\t\t\tvalidator.focusInvalid();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\treturn validator;\n\t},\n\t// http://docs.jquery.com/Plugins/Validation/valid\n\tvalid: function() {\n\t\tif ( $(this[0]).is(\"form\")) {\n\t\t\treturn this.validate().form();\n\t\t} else {\n\t\t\tvar valid = true;\n\t\t\tvar validator = $(this[0].form).validate();\n\t\t\tthis.each(function() {\n\t\t\t\tvalid = valid && validator.element(this);\n\t\t\t});\n\t\t\treturn valid;\n\t\t}\n\t},\n\t// attributes: space seperated list of attributes to retrieve and remove\n\tremoveAttrs: function( attributes ) {\n\t\tvar result = {},\n\t\t\t$element = this;\n\t\t$.each(attributes.split(/\\s/), function( index, value ) {\n\t\t\tresult[value] = $element.attr(value);\n\t\t\t$element.removeAttr(value);\n\t\t});\n\t\treturn result;\n\t},\n\t// http://docs.jquery.com/Plugins/Validation/rules\n\trules: function( command, argument ) {\n\t\tvar element = this[0];\n\n\t\tif ( command ) {\n\t\t\tvar settings = $.data(element.form, \"validator\").settings;\n\t\t\tvar staticRules = settings.rules;\n\t\t\tvar existingRules = $.validator.staticRules(element);\n\t\t\tswitch(command) {\n\t\t\tcase \"add\":\n\t\t\t\t$.extend(existingRules, $.validator.normalizeRule(argument));\n\t\t\t\t// remove messages from rules, but allow them to be set separetely\n\t\t\t\tdelete existingRules.messages;\n\t\t\t\tstaticRules[element.name] = existingRules;\n\t\t\t\tif ( argument.messages ) {\n\t\t\t\t\tsettings.messages[element.name] = $.extend( settings.messages[element.name], argument.messages );\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase \"remove\":\n\t\t\t\tif ( !argument ) {\n\t\t\t\t\tdelete staticRules[element.name];\n\t\t\t\t\treturn existingRules;\n\t\t\t\t}\n\t\t\t\tvar filtered = {};\n\t\t\t\t$.each(argument.split(/\\s/), function( index, method ) {\n\t\t\t\t\tfiltered[method] = existingRules[method];\n\t\t\t\t\tdelete existingRules[method];\n\t\t\t\t});\n\t\t\t\treturn filtered;\n\t\t\t}\n\t\t}\n\n\t\tvar data = $.validator.normalizeRules(\n\t\t$.extend(\n\t\t\t{},\n\t\t\t$.validator.classRules(element),\n\t\t\t$.validator.attributeRules(element),\n\t\t\t$.validator.dataRules(element),\n\t\t\t$.validator.staticRules(element)\n\t\t), element);\n\n\t\t// make sure required is at front\n\t\tif ( data.required ) {\n\t\t\tvar param = data.required;\n\t\t\tdelete data.required;\n\t\t\tdata = $.extend({required: param}, data);\n\t\t}\n\n\t\treturn data;\n\t}\n});\n\n// Custom selectors\n$.extend($.expr[\":\"], {\n\t// http://docs.jquery.com/Plugins/Validation/blank\n\tblank: function( a ) { return !$.trim(\"\" + $(a).val()); },\n\t// http://docs.jquery.com/Plugins/Validation/filled\n\tfilled: function( a ) { return !!$.trim(\"\" + $(a).val()); },\n\t// http://docs.jquery.com/Plugins/Validation/unchecked\n\tunchecked: function( a ) { return !$(a).prop(\"checked\"); }\n});\n\n// constructor for validator\n$.validator = function( options, form ) {\n\tthis.settings = $.extend( true, {}, $.validator.defaults, options );\n\tthis.currentForm = form;\n\tthis.init();\n};\n\n$.validator.format = function( source, params ) {\n\tif ( arguments.length === 1 ) {\n\t\treturn function() {\n\t\t\tvar args = $.makeArray(arguments);\n\t\t\targs.unshift(source);\n\t\t\treturn $.validator.format.apply( this, args );\n\t\t};\n\t}\n\tif ( arguments.length > 2 && params.constructor !== Array  ) {\n\t\tparams = $.makeArray(arguments).slice(1);\n\t}\n\tif ( params.constructor !== Array ) {\n\t\tparams = [ params ];\n\t}\n\t$.each(params, function( i, n ) {\n\t\tsource = source.replace( new RegExp(\"\\\\{\" + i + \"\\\\}\", \"g\"), function() {\n\t\t\treturn n;\n\t\t});\n\t});\n\treturn source;\n};\n\n$.extend($.validator, {\n\n\tdefaults: {\n\t\tmessages: {},\n\t\tgroups: {},\n\t\trules: {},\n\t\terrorClass: \"error\",\n\t\tvalidClass: \"valid\",\n\t\terrorElement: \"label\",\n\t\tfocusInvalid: true,\n\t\terrorContainer: $([]),\n\t\terrorLabelContainer: $([]),\n\t\tonsubmit: true,\n\t\tignore: \":hidden\",\n\t\tignoreTitle: false,\n\t\tonfocusin: function( element, event ) {\n\t\t\tthis.lastActive = element;\n\n\t\t\t// hide error label and remove error class on focus if enabled\n\t\t\tif ( this.settings.focusCleanup && !this.blockFocusCleanup ) {\n\t\t\t\tif ( this.settings.unhighlight ) {\n\t\t\t\t\tthis.settings.unhighlight.call( this, element, this.settings.errorClass, this.settings.validClass );\n\t\t\t\t}\n\t\t\t\tthis.addWrapper(this.errorsFor(element)).hide();\n\t\t\t}\n\t\t},\n\t\tonfocusout: function( element, event ) {\n\t\t\tif ( !this.checkable(element) && (element.name in this.submitted || !this.optional(element)) ) {\n\t\t\t\tthis.element(element);\n\t\t\t}\n\t\t},\n\t\tonkeyup: function( element, event ) {\n\t\t\tif ( event.which === 9 && this.elementValue(element) === \"\" ) {\n\t\t\t\treturn;\n\t\t\t} else if ( element.name in this.submitted || element === this.lastElement ) {\n\t\t\t\tthis.element(element);\n\t\t\t}\n\t\t},\n\t\tonclick: function( element, event ) {\n\t\t\t// click on selects, radiobuttons and checkboxes\n\t\t\tif ( element.name in this.submitted ) {\n\t\t\t\tthis.element(element);\n\t\t\t}\n\t\t\t// or option elements, check parent select in that case\n\t\t\telse if ( element.parentNode.name in this.submitted ) {\n\t\t\t\tthis.element(element.parentNode);\n\t\t\t}\n\t\t},\n\t\thighlight: function( element, errorClass, validClass ) {\n\t\t\tif ( element.type === \"radio\" ) {\n\t\t\t\tthis.findByName(element.name).addClass(errorClass).removeClass(validClass);\n\t\t\t} else {\n\t\t\t\t$(element).addClass(errorClass).removeClass(validClass);\n\t\t\t}\n\t\t},\n\t\tunhighlight: function( element, errorClass, validClass ) {\n\t\t\tif ( element.type === \"radio\" ) {\n\t\t\t\tthis.findByName(element.name).removeClass(errorClass).addClass(validClass);\n\t\t\t} else {\n\t\t\t\t$(element).removeClass(errorClass).addClass(validClass);\n\t\t\t}\n\t\t}\n\t},\n\n\t// http://docs.jquery.com/Plugins/Validation/Validator/setDefaults\n\tsetDefaults: function( settings ) {\n\t\t$.extend( $.validator.defaults, settings );\n\t},\n\n\tmessages: {\n\t\trequired: \"This field is required.\",\n\t\tremote: \"Please fix this field.\",\n\t\temail: \"Please enter a valid email address.\",\n\t\turl: \"Please enter a valid URL.\",\n\t\tdate: \"Please enter a valid date.\",\n\t\tdateISO: \"Please enter a valid date (ISO).\",\n\t\tnumber: \"Please enter a valid number.\",\n\t\tdigits: \"Please enter only digits.\",\n\t\tcreditcard: \"Please enter a valid credit card number.\",\n\t\tequalTo: \"Please enter the same value again.\",\n\t\tmaxlength: $.validator.format(\"Please enter no more than {0} characters.\"),\n\t\tminlength: $.validator.format(\"Please enter at least {0} characters.\"),\n\t\trangelength: $.validator.format(\"Please enter a value between {0} and {1} characters long.\"),\n\t\trange: $.validator.format(\"Please enter a value between {0} and {1}.\"),\n\t\tmax: $.validator.format(\"Please enter a value less than or equal to {0}.\"),\n\t\tmin: $.validator.format(\"Please enter a value greater than or equal to {0}.\")\n\t},\n\n\tautoCreateRanges: false,\n\n\tprototype: {\n\n\t\tinit: function() {\n\t\t\tthis.labelContainer = $(this.settings.errorLabelContainer);\n\t\t\tthis.errorContext = this.labelContainer.length && this.labelContainer || $(this.currentForm);\n\t\t\tthis.containers = $(this.settings.errorContainer).add( this.settings.errorLabelContainer );\n\t\t\tthis.submitted = {};\n\t\t\tthis.valueCache = {};\n\t\t\tthis.pendingRequest = 0;\n\t\t\tthis.pending = {};\n\t\t\tthis.invalid = {};\n\t\t\tthis.reset();\n\n\t\t\tvar groups = (this.groups = {});\n\t\t\t$.each(this.settings.groups, function( key, value ) {\n\t\t\t\tif ( typeof value === \"string\" ) {\n\t\t\t\t\tvalue = value.split(/\\s/);\n\t\t\t\t}\n\t\t\t\t$.each(value, function( index, name ) {\n\t\t\t\t\tgroups[name] = key;\n\t\t\t\t});\n\t\t\t});\n\t\t\tvar rules = this.settings.rules;\n\t\t\t$.each(rules, function( key, value ) {\n\t\t\t\trules[key] = $.validator.normalizeRule(value);\n\t\t\t});\n\n\t\t\tfunction delegate(event) {\n\t\t\t\tvar validator = $.data(this[0].form, \"validator\"),\n\t\t\t\t\teventType = \"on\" + event.type.replace(/^validate/, \"\");\n\t\t\t\tif ( validator.settings[eventType] ) {\n\t\t\t\t\tvalidator.settings[eventType].call(validator, this[0], event);\n\t\t\t\t}\n\t\t\t}\n\t\t\t$(this.currentForm)\n\t\t\t\t.validateDelegate(\":text, [type='password'], [type='file'], select, textarea, \" +\n\t\t\t\t\t\"[type='number'], [type='search'] ,[type='tel'], [type='url'], \" +\n\t\t\t\t\t\"[type='email'], [type='datetime'], [type='date'], [type='month'], \" +\n\t\t\t\t\t\"[type='week'], [type='time'], [type='datetime-local'], \" +\n\t\t\t\t\t\"[type='range'], [type='color'] \",\n\t\t\t\t\t\"focusin focusout keyup\", delegate)\n\t\t\t\t.validateDelegate(\"[type='radio'], [type='checkbox'], select, option\", \"click\", delegate);\n\n\t\t\tif ( this.settings.invalidHandler ) {\n\t\t\t\t$(this.currentForm).bind(\"invalid-form.validate\", this.settings.invalidHandler);\n\t\t\t}\n\t\t},\n\n\t\t// http://docs.jquery.com/Plugins/Validation/Validator/form\n\t\tform: function() {\n\t\t\tthis.checkForm();\n\t\t\t$.extend(this.submitted, this.errorMap);\n\t\t\tthis.invalid = $.extend({}, this.errorMap);\n\t\t\tif ( !this.valid() ) {\n\t\t\t\t$(this.currentForm).triggerHandler(\"invalid-form\", [this]);\n\t\t\t}\n\t\t\tthis.showErrors();\n\t\t\treturn this.valid();\n\t\t},\n\n\t\tcheckForm: function() {\n\t\t\tthis.prepareForm();\n\t\t\tfor ( var i = 0, elements = (this.currentElements = this.elements()); elements[i]; i++ ) {\n\t\t\t\tthis.check( elements[i] );\n\t\t\t}\n\t\t\treturn this.valid();\n\t\t},\n\n\t\t// http://docs.jquery.com/Plugins/Validation/Validator/element\n\t\telement: function( element ) {\n\t\t\telement = this.validationTargetFor( this.clean( element ) );\n\t\t\tthis.lastElement = element;\n\t\t\tthis.prepareElement( element );\n\t\t\tthis.currentElements = $(element);\n\t\t\tvar result = this.check( element ) !== false;\n\t\t\tif ( result ) {\n\t\t\t\tdelete this.invalid[element.name];\n\t\t\t} else {\n\t\t\t\tthis.invalid[element.name] = true;\n\t\t\t}\n\t\t\tif ( !this.numberOfInvalids() ) {\n\t\t\t\t// Hide error containers on last error\n\t\t\t\tthis.toHide = this.toHide.add( this.containers );\n\t\t\t}\n\t\t\tthis.showErrors();\n\t\t\treturn result;\n\t\t},\n\n\t\t// http://docs.jquery.com/Plugins/Validation/Validator/showErrors\n\t\tshowErrors: function( errors ) {\n\t\t\tif ( errors ) {\n\t\t\t\t// add items to error list and map\n\t\t\t\t$.extend( this.errorMap, errors );\n\t\t\t\tthis.errorList = [];\n\t\t\t\tfor ( var name in errors ) {\n\t\t\t\t\tthis.errorList.push({\n\t\t\t\t\t\tmessage: errors[name],\n\t\t\t\t\t\telement: this.findByName(name)[0]\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\t// remove items from success list\n\t\t\t\tthis.successList = $.grep( this.successList, function( element ) {\n\t\t\t\t\treturn !(element.name in errors);\n\t\t\t\t});\n\t\t\t}\n\t\t\tif ( this.settings.showErrors ) {\n\t\t\t\tthis.settings.showErrors.call( this, this.errorMap, this.errorList );\n\t\t\t} else {\n\t\t\t\tthis.defaultShowErrors();\n\t\t\t}\n\t\t},\n\n\t\t// http://docs.jquery.com/Plugins/Validation/Validator/resetForm\n\t\tresetForm: function() {\n\t\t\tif ( $.fn.resetForm ) {\n\t\t\t\t$(this.currentForm).resetForm();\n\t\t\t}\n\t\t\tthis.submitted = {};\n\t\t\tthis.lastElement = null;\n\t\t\tthis.prepareForm();\n\t\t\tthis.hideErrors();\n\t\t\tthis.elements().removeClass( this.settings.errorClass ).removeData( \"previousValue\" );\n\t\t},\n\n\t\tnumberOfInvalids: function() {\n\t\t\treturn this.objectLength(this.invalid);\n\t\t},\n\n\t\tobjectLength: function( obj ) {\n\t\t\tvar count = 0;\n\t\t\tfor ( var i in obj ) {\n\t\t\t\tcount++;\n\t\t\t}\n\t\t\treturn count;\n\t\t},\n\n\t\thideErrors: function() {\n\t\t\tthis.addWrapper( this.toHide ).hide();\n\t\t},\n\n\t\tvalid: function() {\n\t\t\treturn this.size() === 0;\n\t\t},\n\n\t\tsize: function() {\n\t\t\treturn this.errorList.length;\n\t\t},\n\n\t\tfocusInvalid: function() {\n\t\t\tif ( this.settings.focusInvalid ) {\n\t\t\t\ttry {\n\t\t\t\t\t$(this.findLastActive() || this.errorList.length && this.errorList[0].element || [])\n\t\t\t\t\t.filter(\":visible\")\n\t\t\t\t\t.focus()\n\t\t\t\t\t// manually trigger focusin event; without it, focusin handler isn't called, findLastActive won't have anything to find\n\t\t\t\t\t.trigger(\"focusin\");\n\t\t\t\t} catch(e) {\n\t\t\t\t\t// ignore IE throwing errors when focusing hidden elements\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tfindLastActive: function() {\n\t\t\tvar lastActive = this.lastActive;\n\t\t\treturn lastActive && $.grep(this.errorList, function( n ) {\n\t\t\t\treturn n.element.name === lastActive.name;\n\t\t\t}).length === 1 && lastActive;\n\t\t},\n\n\t\telements: function() {\n\t\t\tvar validator = this,\n\t\t\t\trulesCache = {};\n\n\t\t\t// select all valid inputs inside the form (no submit or reset buttons)\n\t\t\treturn $(this.currentForm)\n\t\t\t.find(\"input, select, textarea\")\n\t\t\t.not(\":submit, :reset, :image, [disabled]\")\n\t\t\t.not( this.settings.ignore )\n\t\t\t.filter(function() {\n\t\t\t\tif ( !this.name && validator.settings.debug && window.console ) {\n\t\t\t\t\tconsole.error( \"%o has no name assigned\", this);\n\t\t\t\t}\n\n\t\t\t\t// select only the first element for each name, and only those with rules specified\n\t\t\t\tif ( this.name in rulesCache || !validator.objectLength($(this).rules()) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\trulesCache[this.name] = true;\n\t\t\t\treturn true;\n\t\t\t});\n\t\t},\n\n\t\tclean: function( selector ) {\n\t\t\treturn $(selector)[0];\n\t\t},\n\n\t\terrors: function() {\n\t\t\tvar errorClass = this.settings.errorClass.replace(\" \", \".\");\n\t\t\treturn $(this.settings.errorElement + \".\" + errorClass, this.errorContext);\n\t\t},\n\n\t\treset: function() {\n\t\t\tthis.successList = [];\n\t\t\tthis.errorList = [];\n\t\t\tthis.errorMap = {};\n\t\t\tthis.toShow = $([]);\n\t\t\tthis.toHide = $([]);\n\t\t\tthis.currentElements = $([]);\n\t\t},\n\n\t\tprepareForm: function() {\n\t\t\tthis.reset();\n\t\t\tthis.toHide = this.errors().add( this.containers );\n\t\t},\n\n\t\tprepareElement: function( element ) {\n\t\t\tthis.reset();\n\t\t\tthis.toHide = this.errorsFor(element);\n\t\t},\n\n\t\telementValue: function( element ) {\n\t\t\tvar type = $(element).attr(\"type\"),\n\t\t\t\tval = $(element).val();\n\n\t\t\tif ( type === \"radio\" || type === \"checkbox\" ) {\n\t\t\t\treturn $(\"input[name='\" + $(element).attr(\"name\") + \"']:checked\").val();\n\t\t\t}\n\n\t\t\tif ( typeof val === \"string\" ) {\n\t\t\t\treturn val.replace(/\\r/g, \"\");\n\t\t\t}\n\t\t\treturn val;\n\t\t},\n\n\t\tcheck: function( element ) {\n\t\t\telement = this.validationTargetFor( this.clean( element ) );\n\n\t\t\tvar rules = $(element).rules();\n\t\t\tvar dependencyMismatch = false;\n\t\t\tvar val = this.elementValue(element);\n\t\t\tvar result;\n\n\t\t\tfor (var method in rules ) {\n\t\t\t\tvar rule = { method: method, parameters: rules[method] };\n\t\t\t\ttry {\n\n\t\t\t\t\tresult = $.validator.methods[method].call( this, val, element, rule.parameters );\n\n\t\t\t\t\t// if a method indicates that the field is optional and therefore valid,\n\t\t\t\t\t// don't mark it as valid when there are no other rules\n\t\t\t\t\tif ( result === \"dependency-mismatch\" ) {\n\t\t\t\t\t\tdependencyMismatch = true;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tdependencyMismatch = false;\n\n\t\t\t\t\tif ( result === \"pending\" ) {\n\t\t\t\t\t\tthis.toHide = this.toHide.not( this.errorsFor(element) );\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( !result ) {\n\t\t\t\t\t\tthis.formatAndAdd( element, rule );\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t} catch(e) {\n\t\t\t\t\tif ( this.settings.debug && window.console ) {\n\t\t\t\t\t\tconsole.log( \"Exception occurred when checking element \" + element.id + \", check the '\" + rule.method + \"' method.\", e );\n\t\t\t\t\t}\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( dependencyMismatch ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif ( this.objectLength(rules) ) {\n\t\t\t\tthis.successList.push(element);\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\t// return the custom message for the given element and validation method\n\t\t// specified in the element's HTML5 data attribute\n\t\tcustomDataMessage: function( element, method ) {\n\t\t\treturn $(element).data(\"msg-\" + method.toLowerCase()) || (element.attributes && $(element).attr(\"data-msg-\" + method.toLowerCase()));\n\t\t},\n\n\t\t// return the custom message for the given element name and validation method\n\t\tcustomMessage: function( name, method ) {\n\t\t\tvar m = this.settings.messages[name];\n\t\t\treturn m && (m.constructor === String ? m : m[method]);\n\t\t},\n\n\t\t// return the first defined argument, allowing empty strings\n\t\tfindDefined: function() {\n\t\t\tfor(var i = 0; i < arguments.length; i++) {\n\t\t\t\tif ( arguments[i] !== undefined ) {\n\t\t\t\t\treturn arguments[i];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn undefined;\n\t\t},\n\n\t\tdefaultMessage: function( element, method ) {\n\t\t\treturn this.findDefined(\n\t\t\t\tthis.customMessage( element.name, method ),\n\t\t\t\tthis.customDataMessage( element, method ),\n\t\t\t\t// title is never undefined, so handle empty string as undefined\n\t\t\t\t!this.settings.ignoreTitle && element.title || undefined,\n\t\t\t\t$.validator.messages[method],\n\t\t\t\t\"<strong>Warning: No message defined for \" + element.name + \"</strong>\"\n\t\t\t);\n\t\t},\n\n\t\tformatAndAdd: function( element, rule ) {\n\t\t\tvar message = this.defaultMessage( element, rule.method ),\n\t\t\t\ttheregex = /\\$?\\{(\\d+)\\}/g;\n\t\t\tif ( typeof message === \"function\" ) {\n\t\t\t\tmessage = message.call(this, rule.parameters, element);\n\t\t\t} else if (theregex.test(message)) {\n\t\t\t\tmessage = $.validator.format(message.replace(theregex, \"{$1}\"), rule.parameters);\n\t\t\t}\n\t\t\tthis.errorList.push({\n\t\t\t\tmessage: message,\n\t\t\t\telement: element\n\t\t\t});\n\n\t\t\tthis.errorMap[element.name] = message;\n\t\t\tthis.submitted[element.name] = message;\n\t\t},\n\n\t\taddWrapper: function( toToggle ) {\n\t\t\tif ( this.settings.wrapper ) {\n\t\t\t\ttoToggle = toToggle.add( toToggle.parent( this.settings.wrapper ) );\n\t\t\t}\n\t\t\treturn toToggle;\n\t\t},\n\n\t\tdefaultShowErrors: function() {\n\t\t\tvar i, elements;\n\t\t\tfor ( i = 0; this.errorList[i]; i++ ) {\n\t\t\t\tvar error = this.errorList[i];\n\t\t\t\tif ( this.settings.highlight ) {\n\t\t\t\t\tthis.settings.highlight.call( this, error.element, this.settings.errorClass, this.settings.validClass );\n\t\t\t\t}\n\t\t\t\tthis.showLabel( error.element, error.message );\n\t\t\t}\n\t\t\tif ( this.errorList.length ) {\n\t\t\t\tthis.toShow = this.toShow.add( this.containers );\n\t\t\t}\n\t\t\tif ( this.settings.success ) {\n\t\t\t\tfor ( i = 0; this.successList[i]; i++ ) {\n\t\t\t\t\tthis.showLabel( this.successList[i] );\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( this.settings.unhighlight ) {\n\t\t\t\tfor ( i = 0, elements = this.validElements(); elements[i]; i++ ) {\n\t\t\t\t\tthis.settings.unhighlight.call( this, elements[i], this.settings.errorClass, this.settings.validClass );\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.toHide = this.toHide.not( this.toShow );\n\t\t\tthis.hideErrors();\n\t\t\tthis.addWrapper( this.toShow ).show();\n\t\t},\n\n\t\tvalidElements: function() {\n\t\t\treturn this.currentElements.not(this.invalidElements());\n\t\t},\n\n\t\tinvalidElements: function() {\n\t\t\treturn $(this.errorList).map(function() {\n\t\t\t\treturn this.element;\n\t\t\t});\n\t\t},\n\n\t\tshowLabel: function( element, message ) {\n\t\t\tvar label = this.errorsFor( element );\n\t\t\tif ( label.length ) {\n\t\t\t\t// refresh error/success class\n\t\t\t\tlabel.removeClass( this.settings.validClass ).addClass( this.settings.errorClass );\n\t\t\t\t// replace message on existing label\n\t\t\t\tlabel.html(message);\n\t\t\t} else {\n\t\t\t\t// create label\n\t\t\t\tlabel = $(\"<\" + this.settings.errorElement + \">\")\n\t\t\t\t\t.attr(\"for\", this.idOrName(element))\n\t\t\t\t\t.addClass(this.settings.errorClass)\n\t\t\t\t\t.html(message || \"\");\n\t\t\t\tif ( this.settings.wrapper ) {\n\t\t\t\t\t// make sure the element is visible, even in IE\n\t\t\t\t\t// actually showing the wrapped element is handled elsewhere\n\t\t\t\t\tlabel = label.hide().show().wrap(\"<\" + this.settings.wrapper + \"/>\").parent();\n\t\t\t\t}\n\t\t\t\tif ( !this.labelContainer.append(label).length ) {\n\t\t\t\t\tif ( this.settings.errorPlacement ) {\n\t\t\t\t\t\tthis.settings.errorPlacement(label, $(element) );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlabel.insertAfter(element);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( !message && this.settings.success ) {\n\t\t\t\tlabel.text(\"\");\n\t\t\t\tif ( typeof this.settings.success === \"string\" ) {\n\t\t\t\t\tlabel.addClass( this.settings.success );\n\t\t\t\t} else {\n\t\t\t\t\tthis.settings.success( label, element );\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.toShow = this.toShow.add(label);\n\t\t},\n\n\t\terrorsFor: function( element ) {\n\t\t\tvar name = this.idOrName(element);\n\t\t\treturn this.errors().filter(function() {\n\t\t\t\treturn $(this).attr(\"for\") === name;\n\t\t\t});\n\t\t},\n\n\t\tidOrName: function( element ) {\n\t\t\treturn this.groups[element.name] || (this.checkable(element) ? element.name : element.id || element.name);\n\t\t},\n\n\t\tvalidationTargetFor: function( element ) {\n\t\t\t// if radio/checkbox, validate first element in group instead\n\t\t\tif ( this.checkable(element) ) {\n\t\t\t\telement = this.findByName( element.name ).not(this.settings.ignore)[0];\n\t\t\t}\n\t\t\treturn element;\n\t\t},\n\n\t\tcheckable: function( element ) {\n\t\t\treturn (/radio|checkbox/i).test(element.type);\n\t\t},\n\n\t\tfindByName: function( name ) {\n\t\t\treturn $(this.currentForm).find(\"[name='\" + name + \"']\");\n\t\t},\n\n\t\tgetLength: function( value, element ) {\n\t\t\tswitch( element.nodeName.toLowerCase() ) {\n\t\t\tcase \"select\":\n\t\t\t\treturn $(\"option:selected\", element).length;\n\t\t\tcase \"input\":\n\t\t\t\tif ( this.checkable( element) ) {\n\t\t\t\t\treturn this.findByName(element.name).filter(\":checked\").length;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn value.length;\n\t\t},\n\n\t\tdepend: function( param, element ) {\n\t\t\treturn this.dependTypes[typeof param] ? this.dependTypes[typeof param](param, element) : true;\n\t\t},\n\n\t\tdependTypes: {\n\t\t\t\"boolean\": function( param, element ) {\n\t\t\t\treturn param;\n\t\t\t},\n\t\t\t\"string\": function( param, element ) {\n\t\t\t\treturn !!$(param, element.form).length;\n\t\t\t},\n\t\t\t\"function\": function( param, element ) {\n\t\t\t\treturn param(element);\n\t\t\t}\n\t\t},\n\n\t\toptional: function( element ) {\n\t\t\tvar val = this.elementValue(element);\n\t\t\treturn !$.validator.methods.required.call(this, val, element) && \"dependency-mismatch\";\n\t\t},\n\n\t\tstartRequest: function( element ) {\n\t\t\tif ( !this.pending[element.name] ) {\n\t\t\t\tthis.pendingRequest++;\n\t\t\t\tthis.pending[element.name] = true;\n\t\t\t}\n\t\t},\n\n\t\tstopRequest: function( element, valid ) {\n\t\t\tthis.pendingRequest--;\n\t\t\t// sometimes synchronization fails, make sure pendingRequest is never < 0\n\t\t\tif ( this.pendingRequest < 0 ) {\n\t\t\t\tthis.pendingRequest = 0;\n\t\t\t}\n\t\t\tdelete this.pending[element.name];\n\t\t\tif ( valid && this.pendingRequest === 0 && this.formSubmitted && this.form() ) {\n\t\t\t\t$(this.currentForm).submit();\n\t\t\t\tthis.formSubmitted = false;\n\t\t\t} else if (!valid && this.pendingRequest === 0 && this.formSubmitted) {\n\t\t\t\t$(this.currentForm).triggerHandler(\"invalid-form\", [this]);\n\t\t\t\tthis.formSubmitted = false;\n\t\t\t}\n\t\t},\n\n\t\tpreviousValue: function( element ) {\n\t\t\treturn $.data(element, \"previousValue\") || $.data(element, \"previousValue\", {\n\t\t\t\told: null,\n\t\t\t\tvalid: true,\n\t\t\t\tmessage: this.defaultMessage( element, \"remote\" )\n\t\t\t});\n\t\t}\n\n\t},\n\n\tclassRuleSettings: {\n\t\trequired: {required: true},\n\t\temail: {email: true},\n\t\turl: {url: true},\n\t\tdate: {date: true},\n\t\tdateISO: {dateISO: true},\n\t\tnumber: {number: true},\n\t\tdigits: {digits: true},\n\t\tcreditcard: {creditcard: true}\n\t},\n\n\taddClassRules: function( className, rules ) {\n\t\tif ( className.constructor === String ) {\n\t\t\tthis.classRuleSettings[className] = rules;\n\t\t} else {\n\t\t\t$.extend(this.classRuleSettings, className);\n\t\t}\n\t},\n\n\tclassRules: function( element ) {\n\t\tvar rules = {};\n\t\tvar classes = $(element).attr(\"class\");\n\t\tif ( classes ) {\n\t\t\t$.each(classes.split(\" \"), function() {\n\t\t\t\tif ( this in $.validator.classRuleSettings ) {\n\t\t\t\t\t$.extend(rules, $.validator.classRuleSettings[this]);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\treturn rules;\n\t},\n\n\tattributeRules: function( element ) {\n\t\tvar rules = {};\n\t\tvar $element = $(element);\n\t\tvar type = $element[0].getAttribute(\"type\");\n\n\t\tfor (var method in $.validator.methods) {\n\t\t\tvar value;\n\n\t\t\t// support for <input required> in both html5 and older browsers\n\t\t\tif ( method === \"required\" ) {\n\t\t\t\tvalue = $element.get(0).getAttribute(method);\n\t\t\t\t// Some browsers return an empty string for the required attribute\n\t\t\t\t// and non-HTML5 browsers might have required=\"\" markup\n\t\t\t\tif ( value === \"\" ) {\n\t\t\t\t\tvalue = true;\n\t\t\t\t}\n\t\t\t\t// force non-HTML5 browsers to return bool\n\t\t\t\tvalue = !!value;\n\t\t\t} else {\n\t\t\t\tvalue = $element.attr(method);\n\t\t\t}\n\n\t\t\t// convert the value to a number for number inputs, and for text for backwards compability\n\t\t\t// allows type=\"date\" and others to be compared as strings\n\t\t\tif ( /min|max/.test( method ) && ( type === null || /number|range|text/.test( type ) ) ) {\n\t\t\t\tvalue = Number(value);\n\t\t\t}\n\n\t\t\tif ( value ) {\n\t\t\t\trules[method] = value;\n\t\t\t} else if ( type === method && type !== 'range' ) {\n\t\t\t\t// exception: the jquery validate 'range' method\n\t\t\t\t// does not test for the html5 'range' type\n\t\t\t\trules[method] = true;\n\t\t\t}\n\t\t}\n\n\t\t// maxlength may be returned as -1, 2147483647 (IE) and 524288 (safari) for text inputs\n\t\tif ( rules.maxlength && /-1|2147483647|524288/.test(rules.maxlength) ) {\n\t\t\tdelete rules.maxlength;\n\t\t}\n\n\t\treturn rules;\n\t},\n\n\tdataRules: function( element ) {\n\t\tvar method, value,\n\t\t\trules = {}, $element = $(element);\n\t\tfor (method in $.validator.methods) {\n\t\t\tvalue = $element.data(\"rule-\" + method.toLowerCase());\n\t\t\tif ( value !== undefined ) {\n\t\t\t\trules[method] = value;\n\t\t\t}\n\t\t}\n\t\treturn rules;\n\t},\n\n\tstaticRules: function( element ) {\n\t\tvar rules = {};\n\t\tvar validator = $.data(element.form, \"validator\");\n\t\tif ( validator.settings.rules ) {\n\t\t\trules = $.validator.normalizeRule(validator.settings.rules[element.name]) || {};\n\t\t}\n\t\treturn rules;\n\t},\n\n\tnormalizeRules: function( rules, element ) {\n\t\t// handle dependency check\n\t\t$.each(rules, function( prop, val ) {\n\t\t\t// ignore rule when param is explicitly false, eg. required:false\n\t\t\tif ( val === false ) {\n\t\t\t\tdelete rules[prop];\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif ( val.param || val.depends ) {\n\t\t\t\tvar keepRule = true;\n\t\t\t\tswitch (typeof val.depends) {\n\t\t\t\tcase \"string\":\n\t\t\t\t\tkeepRule = !!$(val.depends, element.form).length;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"function\":\n\t\t\t\t\tkeepRule = val.depends.call(element, element);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif ( keepRule ) {\n\t\t\t\t\trules[prop] = val.param !== undefined ? val.param : true;\n\t\t\t\t} else {\n\t\t\t\t\tdelete rules[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\t// evaluate parameters\n\t\t$.each(rules, function( rule, parameter ) {\n\t\t\trules[rule] = $.isFunction(parameter) ? parameter(element) : parameter;\n\t\t});\n\n\t\t// clean number parameters\n\t\t$.each(['minlength', 'maxlength'], function() {\n\t\t\tif ( rules[this] ) {\n\t\t\t\trules[this] = Number(rules[this]);\n\t\t\t}\n\t\t});\n\t\t$.each(['rangelength', 'range'], function() {\n\t\t\tvar parts;\n\t\t\tif ( rules[this] ) {\n\t\t\t\tif ( $.isArray(rules[this]) ) {\n\t\t\t\t\trules[this] = [Number(rules[this][0]), Number(rules[this][1])];\n\t\t\t\t} else if ( typeof rules[this] === \"string\" ) {\n\t\t\t\t\tparts = rules[this].split(/[\\s,]+/);\n\t\t\t\t\trules[this] = [Number(parts[0]), Number(parts[1])];\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tif ( $.validator.autoCreateRanges ) {\n\t\t\t// auto-create ranges\n\t\t\tif ( rules.min && rules.max ) {\n\t\t\t\trules.range = [rules.min, rules.max];\n\t\t\t\tdelete rules.min;\n\t\t\t\tdelete rules.max;\n\t\t\t}\n\t\t\tif ( rules.minlength && rules.maxlength ) {\n\t\t\t\trules.rangelength = [rules.minlength, rules.maxlength];\n\t\t\t\tdelete rules.minlength;\n\t\t\t\tdelete rules.maxlength;\n\t\t\t}\n\t\t}\n\n\t\treturn rules;\n\t},\n\n\t// Converts a simple string to a {string: true} rule, e.g., \"required\" to {required:true}\n\tnormalizeRule: function( data ) {\n\t\tif ( typeof data === \"string\" ) {\n\t\t\tvar transformed = {};\n\t\t\t$.each(data.split(/\\s/), function() {\n\t\t\t\ttransformed[this] = true;\n\t\t\t});\n\t\t\tdata = transformed;\n\t\t}\n\t\treturn data;\n\t},\n\n\t// http://docs.jquery.com/Plugins/Validation/Validator/addMethod\n\taddMethod: function( name, method, message ) {\n\t\t$.validator.methods[name] = method;\n\t\t$.validator.messages[name] = message !== undefined ? message : $.validator.messages[name];\n\t\tif ( method.length < 3 ) {\n\t\t\t$.validator.addClassRules(name, $.validator.normalizeRule(name));\n\t\t}\n\t},\n\n\tmethods: {\n\n\t\t// http://docs.jquery.com/Plugins/Validation/Methods/required\n\t\trequired: function( value, element, param ) {\n\t\t\t// check if dependency is met\n\t\t\tif ( !this.depend(param, element) ) {\n\t\t\t\treturn \"dependency-mismatch\";\n\t\t\t}\n\t\t\tif ( element.nodeName.toLowerCase() === \"select\" ) {\n\t\t\t\t// could be an array for select-multiple or a string, both are fine this way\n\t\t\t\tvar val = $(element).val();\n\t\t\t\treturn val && val.length > 0;\n\t\t\t}\n\t\t\tif ( this.checkable(element) ) {\n\t\t\t\treturn this.getLength(value, element) > 0;\n\t\t\t}\n\t\t\treturn $.trim(value).length > 0;\n\t\t},\n\n\t\t// http://docs.jquery.com/Plugins/Validation/Methods/email\n\t\temail: function( value, element ) {\n\t\t\t// contributed by Scott Gonzalez: http://projects.scottsplayground.com/email_address_validation/\n\t\t\treturn this.optional(element) || /^((([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+(\\.([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+)*)|((\\x22)((((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(([\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]|\\x21|[\\x23-\\x5b]|[\\x5d-\\x7e]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(\\\\([\\x01-\\x09\\x0b\\x0c\\x0d-\\x7f]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]))))*(((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(\\x22)))@((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))$/i.test(value);\n\t\t},\n\n\t\t// http://docs.jquery.com/Plugins/Validation/Methods/url\n\t\turl: function( value, element ) {\n\t\t\t// contributed by Scott Gonzalez: http://projects.scottsplayground.com/iri/\n\t\t\treturn this.optional(element) || /^(https?|s?ftp):\\/\\/(((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:)*@)?(((\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5]))|((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.?)(:\\d*)?)(\\/((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)+(\\/(([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)*)*)?)?(\\?((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)|[\\uE000-\\uF8FF]|\\/|\\?)*)?(#((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)|\\/|\\?)*)?$/i.test(value);\n\t\t},\n\n\t\t// http://docs.jquery.com/Plugins/Validation/Methods/date\n\t\tdate: function( value, element ) {\n\t\t\treturn this.optional(element) || !/Invalid|NaN/.test(new Date(value).toString());\n\t\t},\n\n\t\t// http://docs.jquery.com/Plugins/Validation/Methods/dateISO\n\t\tdateISO: function( value, element ) {\n\t\t\treturn this.optional(element) || /^\\d{4}[\\/\\-]\\d{1,2}[\\/\\-]\\d{1,2}$/.test(value);\n\t\t},\n\n\t\t// http://docs.jquery.com/Plugins/Validation/Methods/number\n\t\tnumber: function( value, element ) {\n\t\t\treturn this.optional(element) || /^-?(?:\\d+|\\d{1,3}(?:,\\d{3})+)?(?:\\.\\d+)?$/.test(value);\n\t\t},\n\n\t\t// http://docs.jquery.com/Plugins/Validation/Methods/digits\n\t\tdigits: function( value, element ) {\n\t\t\treturn this.optional(element) || /^\\d+$/.test(value);\n\t\t},\n\n\t\t// http://docs.jquery.com/Plugins/Validation/Methods/creditcard\n\t\t// based on http://en.wikipedia.org/wiki/Luhn\n\t\tcreditcard: function( value, element ) {\n\t\t\tif ( this.optional(element) ) {\n\t\t\t\treturn \"dependency-mismatch\";\n\t\t\t}\n\t\t\t// accept only spaces, digits and dashes\n\t\t\tif ( /[^0-9 \\-]+/.test(value) ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar nCheck = 0,\n\t\t\t\tnDigit = 0,\n\t\t\t\tbEven = false;\n\n\t\t\tvalue = value.replace(/\\D/g, \"\");\n\n\t\t\tfor (var n = value.length - 1; n >= 0; n--) {\n\t\t\t\tvar cDigit = value.charAt(n);\n\t\t\t\tnDigit = parseInt(cDigit, 10);\n\t\t\t\tif ( bEven ) {\n\t\t\t\t\tif ( (nDigit *= 2) > 9 ) {\n\t\t\t\t\t\tnDigit -= 9;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tnCheck += nDigit;\n\t\t\t\tbEven = !bEven;\n\t\t\t}\n\n\t\t\treturn (nCheck % 10) === 0;\n\t\t},\n\n\t\t// http://docs.jquery.com/Plugins/Validation/Methods/minlength\n\t\tminlength: function( value, element, param ) {\n\t\t\tvar length = $.isArray( value ) ? value.length : this.getLength($.trim(value), element);\n\t\t\treturn this.optional(element) || length >= param;\n\t\t},\n\n\t\t// http://docs.jquery.com/Plugins/Validation/Methods/maxlength\n\t\tmaxlength: function( value, element, param ) {\n\t\t\tvar length = $.isArray( value ) ? value.length : this.getLength($.trim(value), element);\n\t\t\treturn this.optional(element) || length <= param;\n\t\t},\n\n\t\t// http://docs.jquery.com/Plugins/Validation/Methods/rangelength\n\t\trangelength: function( value, element, param ) {\n\t\t\tvar length = $.isArray( value ) ? value.length : this.getLength($.trim(value), element);\n\t\t\treturn this.optional(element) || ( length >= param[0] && length <= param[1] );\n\t\t},\n\n\t\t// http://docs.jquery.com/Plugins/Validation/Methods/min\n\t\tmin: function( value, element, param ) {\n\t\t\treturn this.optional(element) || value >= param;\n\t\t},\n\n\t\t// http://docs.jquery.com/Plugins/Validation/Methods/max\n\t\tmax: function( value, element, param ) {\n\t\t\treturn this.optional(element) || value <= param;\n\t\t},\n\n\t\t// http://docs.jquery.com/Plugins/Validation/Methods/range\n\t\trange: function( value, element, param ) {\n\t\t\treturn this.optional(element) || ( value >= param[0] && value <= param[1] );\n\t\t},\n\n\t\t// http://docs.jquery.com/Plugins/Validation/Methods/equalTo\n\t\tequalTo: function( value, element, param ) {\n\t\t\t// bind to the blur event of the target in order to revalidate whenever the target field is updated\n\t\t\t// TODO find a way to bind the event just once, avoiding the unbind-rebind overhead\n\t\t\tvar target = $(param);\n\t\t\tif ( this.settings.onfocusout ) {\n\t\t\t\ttarget.unbind(\".validate-equalTo\").bind(\"blur.validate-equalTo\", function() {\n\t\t\t\t\t$(element).valid();\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn value === target.val();\n\t\t},\n\n\t\t// http://docs.jquery.com/Plugins/Validation/Methods/remote\n\t\tremote: function( value, element, param ) {\n\t\t\tif ( this.optional(element) ) {\n\t\t\t\treturn \"dependency-mismatch\";\n\t\t\t}\n\n\t\t\tvar previous = this.previousValue(element);\n\t\t\tif (!this.settings.messages[element.name] ) {\n\t\t\t\tthis.settings.messages[element.name] = {};\n\t\t\t}\n\t\t\tprevious.originalMessage = this.settings.messages[element.name].remote;\n\t\t\tthis.settings.messages[element.name].remote = previous.message;\n\n\t\t\tparam = typeof param === \"string\" && {url:param} || param;\n\n\t\t\tif ( previous.old === value ) {\n\t\t\t\treturn previous.valid;\n\t\t\t}\n\n\t\t\tprevious.old = value;\n\t\t\tvar validator = this;\n\t\t\tthis.startRequest(element);\n\t\t\tvar data = {};\n\t\t\tdata[element.name] = value;\n\t\t\t$.ajax($.extend(true, {\n\t\t\t\turl: param,\n\t\t\t\tmode: \"abort\",\n\t\t\t\tport: \"validate\" + element.name,\n\t\t\t\tdataType: \"json\",\n\t\t\t\tdata: data,\n\t\t\t\tsuccess: function( response ) {\n\t\t\t\t\tvalidator.settings.messages[element.name].remote = previous.originalMessage;\n\t\t\t\t\tvar valid = response === true || response === \"true\";\n\t\t\t\t\tif ( valid ) {\n\t\t\t\t\t\tvar submitted = validator.formSubmitted;\n\t\t\t\t\t\tvalidator.prepareElement(element);\n\t\t\t\t\t\tvalidator.formSubmitted = submitted;\n\t\t\t\t\t\tvalidator.successList.push(element);\n\t\t\t\t\t\tdelete validator.invalid[element.name];\n\t\t\t\t\t\tvalidator.showErrors();\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvar errors = {};\n\t\t\t\t\t\tvar message = response || validator.defaultMessage( element, \"remote\" );\n\t\t\t\t\t\terrors[element.name] = previous.message = $.isFunction(message) ? message(value) : message;\n\t\t\t\t\t\tvalidator.invalid[element.name] = true;\n\t\t\t\t\t\tvalidator.showErrors(errors);\n\t\t\t\t\t}\n\t\t\t\t\tprevious.valid = valid;\n\t\t\t\t\tvalidator.stopRequest(element, valid);\n\t\t\t\t}\n\t\t\t}, param));\n\t\t\treturn \"pending\";\n\t\t}\n\n\t}\n\n});\n\n// deprecated, use $.validator.format instead\n$.format = $.validator.format;\n\n}(jQuery));\n\n// ajax mode: abort\n// usage: $.ajax({ mode: \"abort\"[, port: \"uniqueport\"]});\n// if mode:\"abort\" is used, the previous request on that port (port can be undefined) is aborted via XMLHttpRequest.abort()\n(function($) {\n\tvar pendingRequests = {};\n\t// Use a prefilter if available (1.5+)\n\tif ( $.ajaxPrefilter ) {\n\t\t$.ajaxPrefilter(function( settings, _, xhr ) {\n\t\t\tvar port = settings.port;\n\t\t\tif ( settings.mode === \"abort\" ) {\n\t\t\t\tif ( pendingRequests[port] ) {\n\t\t\t\t\tpendingRequests[port].abort();\n\t\t\t\t}\n\t\t\t\tpendingRequests[port] = xhr;\n\t\t\t}\n\t\t});\n\t} else {\n\t\t// Proxy ajax\n\t\tvar ajax = $.ajax;\n\t\t$.ajax = function( settings ) {\n\t\t\tvar mode = ( \"mode\" in settings ? settings : $.ajaxSettings ).mode,\n\t\t\t\tport = ( \"port\" in settings ? settings : $.ajaxSettings ).port;\n\t\t\tif ( mode === \"abort\" ) {\n\t\t\t\tif ( pendingRequests[port] ) {\n\t\t\t\t\tpendingRequests[port].abort();\n\t\t\t\t}\n\t\t\t\tpendingRequests[port] = ajax.apply(this, arguments);\n\t\t\t\treturn pendingRequests[port];\n\t\t\t}\n\t\t\treturn ajax.apply(this, arguments);\n\t\t};\n\t}\n}(jQuery));\n\n// provides delegate(type: String, delegate: Selector, handler: Callback) plugin for easier event delegation\n// handler is only called when $(event.target).is(delegate), in the scope of the jquery-object for event.target\n(function($) {\n\t$.extend($.fn, {\n\t\tvalidateDelegate: function( delegate, type, handler ) {\n\t\t\treturn this.bind(type, function( event ) {\n\t\t\t\tvar target = $(event.target);\n\t\t\t\tif ( target.is(delegate) ) {\n\t\t\t\t\treturn handler.apply(target, arguments);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n}(jQuery));\n"
  },
  {
    "path": "AlexaSkillsKit.Sample/Scripts/jquery.validate.unobtrusive.js",
    "content": "/* NUGET: BEGIN LICENSE TEXT\n *\n * Microsoft grants you the right to use these script files for the sole\n * purpose of either: (i) interacting through your browser with the Microsoft\n * website or online service, subject to the applicable licensing or use\n * terms; or (ii) using the files as included with a Microsoft product subject\n * to that product's license terms. Microsoft reserves all other rights to the\n * files not expressly granted by Microsoft, whether by implication, estoppel\n * or otherwise. Insofar as a script file is dual licensed under GPL,\n * Microsoft neither took the code under GPL nor distributes it thereunder but\n * under the terms set out in this paragraph. All notices and licenses\n * below are for informational purposes only.\n *\n * NUGET: END LICENSE TEXT */\n/*!\n** Unobtrusive validation support library for jQuery and jQuery Validate\n** Copyright (C) Microsoft Corporation. All rights reserved.\n*/\n\n/*jslint white: true, browser: true, onevar: true, undef: true, nomen: true, eqeqeq: true, plusplus: true, bitwise: true, regexp: true, newcap: true, immed: true, strict: false */\n/*global document: false, jQuery: false */\n\n(function ($) {\n    var $jQval = $.validator,\n        adapters,\n        data_validation = \"unobtrusiveValidation\";\n\n    function setValidationValues(options, ruleName, value) {\n        options.rules[ruleName] = value;\n        if (options.message) {\n            options.messages[ruleName] = options.message;\n        }\n    }\n\n    function splitAndTrim(value) {\n        return value.replace(/^\\s+|\\s+$/g, \"\").split(/\\s*,\\s*/g);\n    }\n\n    function escapeAttributeValue(value) {\n        // As mentioned on http://api.jquery.com/category/selectors/\n        return value.replace(/([!\"#$%&'()*+,./:;<=>?@\\[\\\\\\]^`{|}~])/g, \"\\\\$1\");\n    }\n\n    function getModelPrefix(fieldName) {\n        return fieldName.substr(0, fieldName.lastIndexOf(\".\") + 1);\n    }\n\n    function appendModelPrefix(value, prefix) {\n        if (value.indexOf(\"*.\") === 0) {\n            value = value.replace(\"*.\", prefix);\n        }\n        return value;\n    }\n\n    function onError(error, inputElement) {  // 'this' is the form element\n        var container = $(this).find(\"[data-valmsg-for='\" + escapeAttributeValue(inputElement[0].name) + \"']\"),\n            replaceAttrValue = container.attr(\"data-valmsg-replace\"),\n            replace = replaceAttrValue ? $.parseJSON(replaceAttrValue) !== false : null;\n\n        container.removeClass(\"field-validation-valid\").addClass(\"field-validation-error\");\n        error.data(\"unobtrusiveContainer\", container);\n\n        if (replace) {\n            container.empty();\n            error.removeClass(\"input-validation-error\").appendTo(container);\n        }\n        else {\n            error.hide();\n        }\n    }\n\n    function onErrors(event, validator) {  // 'this' is the form element\n        var container = $(this).find(\"[data-valmsg-summary=true]\"),\n            list = container.find(\"ul\");\n\n        if (list && list.length && validator.errorList.length) {\n            list.empty();\n            container.addClass(\"validation-summary-errors\").removeClass(\"validation-summary-valid\");\n\n            $.each(validator.errorList, function () {\n                $(\"<li />\").html(this.message).appendTo(list);\n            });\n        }\n    }\n\n    function onSuccess(error) {  // 'this' is the form element\n        var container = error.data(\"unobtrusiveContainer\"),\n            replaceAttrValue = container.attr(\"data-valmsg-replace\"),\n            replace = replaceAttrValue ? $.parseJSON(replaceAttrValue) : null;\n\n        if (container) {\n            container.addClass(\"field-validation-valid\").removeClass(\"field-validation-error\");\n            error.removeData(\"unobtrusiveContainer\");\n\n            if (replace) {\n                container.empty();\n            }\n        }\n    }\n\n    function onReset(event) {  // 'this' is the form element\n        var $form = $(this);\n        $form.data(\"validator\").resetForm();\n        $form.find(\".validation-summary-errors\")\n            .addClass(\"validation-summary-valid\")\n            .removeClass(\"validation-summary-errors\");\n        $form.find(\".field-validation-error\")\n            .addClass(\"field-validation-valid\")\n            .removeClass(\"field-validation-error\")\n            .removeData(\"unobtrusiveContainer\")\n            .find(\">*\")  // If we were using valmsg-replace, get the underlying error\n                .removeData(\"unobtrusiveContainer\");\n    }\n\n    function validationInfo(form) {\n        var $form = $(form),\n            result = $form.data(data_validation),\n            onResetProxy = $.proxy(onReset, form),\n            defaultOptions = $jQval.unobtrusive.options || {},\n            execInContext = function (name, args) {\n                var func = defaultOptions[name];\n                func && $.isFunction(func) && func.apply(form, args);\n            }\n\n        if (!result) {\n            result = {\n                options: {  // options structure passed to jQuery Validate's validate() method\n                    errorClass: defaultOptions.errorClass || \"input-validation-error\",\n                    errorElement: defaultOptions.errorElement || \"span\",\n                    errorPlacement: function () {\n                        onError.apply(form, arguments);\n                        execInContext(\"errorPlacement\", arguments);\n                    },\n                    invalidHandler: function () {\n                        onErrors.apply(form, arguments);\n                        execInContext(\"invalidHandler\", arguments);\n                    },\n                    messages: {},\n                    rules: {},\n                    success: function () {\n                        onSuccess.apply(form, arguments);\n                        execInContext(\"success\", arguments);\n                    }\n                },\n                attachValidation: function () {\n                    $form\n                        .off(\"reset.\" + data_validation, onResetProxy)\n                        .on(\"reset.\" + data_validation, onResetProxy)\n                        .validate(this.options);\n                },\n                validate: function () {  // a validation function that is called by unobtrusive Ajax\n                    $form.validate();\n                    return $form.valid();\n                }\n            };\n            $form.data(data_validation, result);\n        }\n\n        return result;\n    }\n\n    $jQval.unobtrusive = {\n        adapters: [],\n\n        parseElement: function (element, skipAttach) {\n            /// <summary>\n            /// Parses a single HTML element for unobtrusive validation attributes.\n            /// </summary>\n            /// <param name=\"element\" domElement=\"true\">The HTML element to be parsed.</param>\n            /// <param name=\"skipAttach\" type=\"Boolean\">[Optional] true to skip attaching the\n            /// validation to the form. If parsing just this single element, you should specify true.\n            /// If parsing several elements, you should specify false, and manually attach the validation\n            /// to the form when you are finished. The default is false.</param>\n            var $element = $(element),\n                form = $element.parents(\"form\")[0],\n                valInfo, rules, messages;\n\n            if (!form) {  // Cannot do client-side validation without a form\n                return;\n            }\n\n            valInfo = validationInfo(form);\n            valInfo.options.rules[element.name] = rules = {};\n            valInfo.options.messages[element.name] = messages = {};\n\n            $.each(this.adapters, function () {\n                var prefix = \"data-val-\" + this.name,\n                    message = $element.attr(prefix),\n                    paramValues = {};\n\n                if (message !== undefined) {  // Compare against undefined, because an empty message is legal (and falsy)\n                    prefix += \"-\";\n\n                    $.each(this.params, function () {\n                        paramValues[this] = $element.attr(prefix + this);\n                    });\n\n                    this.adapt({\n                        element: element,\n                        form: form,\n                        message: message,\n                        params: paramValues,\n                        rules: rules,\n                        messages: messages\n                    });\n                }\n            });\n\n            $.extend(rules, { \"__dummy__\": true });\n\n            if (!skipAttach) {\n                valInfo.attachValidation();\n            }\n        },\n\n        parse: function (selector) {\n            /// <summary>\n            /// Parses all the HTML elements in the specified selector. It looks for input elements decorated\n            /// with the [data-val=true] attribute value and enables validation according to the data-val-*\n            /// attribute values.\n            /// </summary>\n            /// <param name=\"selector\" type=\"String\">Any valid jQuery selector.</param>\n\n            // $forms includes all forms in selector's DOM hierarchy (parent, children and self) that have at least one\n            // element with data-val=true\n            var $selector = $(selector),\n                $forms = $selector.parents()\n                                  .addBack()\n                                  .filter(\"form\")\n                                  .add($selector.find(\"form\"))\n                                  .has(\"[data-val=true]\");\n\n            $selector.find(\"[data-val=true]\").each(function () {\n                $jQval.unobtrusive.parseElement(this, true);\n            });\n\n            $forms.each(function () {\n                var info = validationInfo(this);\n                if (info) {\n                    info.attachValidation();\n                }\n            });\n        }\n    };\n\n    adapters = $jQval.unobtrusive.adapters;\n\n    adapters.add = function (adapterName, params, fn) {\n        /// <summary>Adds a new adapter to convert unobtrusive HTML into a jQuery Validate validation.</summary>\n        /// <param name=\"adapterName\" type=\"String\">The name of the adapter to be added. This matches the name used\n        /// in the data-val-nnnn HTML attribute (where nnnn is the adapter name).</param>\n        /// <param name=\"params\" type=\"Array\" optional=\"true\">[Optional] An array of parameter names (strings) that will\n        /// be extracted from the data-val-nnnn-mmmm HTML attributes (where nnnn is the adapter name, and\n        /// mmmm is the parameter name).</param>\n        /// <param name=\"fn\" type=\"Function\">The function to call, which adapts the values from the HTML\n        /// attributes into jQuery Validate rules and/or messages.</param>\n        /// <returns type=\"jQuery.validator.unobtrusive.adapters\" />\n        if (!fn) {  // Called with no params, just a function\n            fn = params;\n            params = [];\n        }\n        this.push({ name: adapterName, params: params, adapt: fn });\n        return this;\n    };\n\n    adapters.addBool = function (adapterName, ruleName) {\n        /// <summary>Adds a new adapter to convert unobtrusive HTML into a jQuery Validate validation, where\n        /// the jQuery Validate validation rule has no parameter values.</summary>\n        /// <param name=\"adapterName\" type=\"String\">The name of the adapter to be added. This matches the name used\n        /// in the data-val-nnnn HTML attribute (where nnnn is the adapter name).</param>\n        /// <param name=\"ruleName\" type=\"String\" optional=\"true\">[Optional] The name of the jQuery Validate rule. If not provided, the value\n        /// of adapterName will be used instead.</param>\n        /// <returns type=\"jQuery.validator.unobtrusive.adapters\" />\n        return this.add(adapterName, function (options) {\n            setValidationValues(options, ruleName || adapterName, true);\n        });\n    };\n\n    adapters.addMinMax = function (adapterName, minRuleName, maxRuleName, minMaxRuleName, minAttribute, maxAttribute) {\n        /// <summary>Adds a new adapter to convert unobtrusive HTML into a jQuery Validate validation, where\n        /// the jQuery Validate validation has three potential rules (one for min-only, one for max-only, and\n        /// one for min-and-max). The HTML parameters are expected to be named -min and -max.</summary>\n        /// <param name=\"adapterName\" type=\"String\">The name of the adapter to be added. This matches the name used\n        /// in the data-val-nnnn HTML attribute (where nnnn is the adapter name).</param>\n        /// <param name=\"minRuleName\" type=\"String\">The name of the jQuery Validate rule to be used when you only\n        /// have a minimum value.</param>\n        /// <param name=\"maxRuleName\" type=\"String\">The name of the jQuery Validate rule to be used when you only\n        /// have a maximum value.</param>\n        /// <param name=\"minMaxRuleName\" type=\"String\">The name of the jQuery Validate rule to be used when you\n        /// have both a minimum and maximum value.</param>\n        /// <param name=\"minAttribute\" type=\"String\" optional=\"true\">[Optional] The name of the HTML attribute that\n        /// contains the minimum value. The default is \"min\".</param>\n        /// <param name=\"maxAttribute\" type=\"String\" optional=\"true\">[Optional] The name of the HTML attribute that\n        /// contains the maximum value. The default is \"max\".</param>\n        /// <returns type=\"jQuery.validator.unobtrusive.adapters\" />\n        return this.add(adapterName, [minAttribute || \"min\", maxAttribute || \"max\"], function (options) {\n            var min = options.params.min,\n                max = options.params.max;\n\n            if (min && max) {\n                setValidationValues(options, minMaxRuleName, [min, max]);\n            }\n            else if (min) {\n                setValidationValues(options, minRuleName, min);\n            }\n            else if (max) {\n                setValidationValues(options, maxRuleName, max);\n            }\n        });\n    };\n\n    adapters.addSingleVal = function (adapterName, attribute, ruleName) {\n        /// <summary>Adds a new adapter to convert unobtrusive HTML into a jQuery Validate validation, where\n        /// the jQuery Validate validation rule has a single value.</summary>\n        /// <param name=\"adapterName\" type=\"String\">The name of the adapter to be added. This matches the name used\n        /// in the data-val-nnnn HTML attribute(where nnnn is the adapter name).</param>\n        /// <param name=\"attribute\" type=\"String\">[Optional] The name of the HTML attribute that contains the value.\n        /// The default is \"val\".</param>\n        /// <param name=\"ruleName\" type=\"String\" optional=\"true\">[Optional] The name of the jQuery Validate rule. If not provided, the value\n        /// of adapterName will be used instead.</param>\n        /// <returns type=\"jQuery.validator.unobtrusive.adapters\" />\n        return this.add(adapterName, [attribute || \"val\"], function (options) {\n            setValidationValues(options, ruleName || adapterName, options.params[attribute]);\n        });\n    };\n\n    $jQval.addMethod(\"__dummy__\", function (value, element, params) {\n        return true;\n    });\n\n    $jQval.addMethod(\"regex\", function (value, element, params) {\n        var match;\n        if (this.optional(element)) {\n            return true;\n        }\n\n        match = new RegExp(params).exec(value);\n        return (match && (match.index === 0) && (match[0].length === value.length));\n    });\n\n    $jQval.addMethod(\"nonalphamin\", function (value, element, nonalphamin) {\n        var match;\n        if (nonalphamin) {\n            match = value.match(/\\W/g);\n            match = match && match.length >= nonalphamin;\n        }\n        return match;\n    });\n\n    if ($jQval.methods.extension) {\n        adapters.addSingleVal(\"accept\", \"mimtype\");\n        adapters.addSingleVal(\"extension\", \"extension\");\n    } else {\n        // for backward compatibility, when the 'extension' validation method does not exist, such as with versions\n        // of JQuery Validation plugin prior to 1.10, we should use the 'accept' method for\n        // validating the extension, and ignore mime-type validations as they are not supported.\n        adapters.addSingleVal(\"extension\", \"extension\", \"accept\");\n    }\n\n    adapters.addSingleVal(\"regex\", \"pattern\");\n    adapters.addBool(\"creditcard\").addBool(\"date\").addBool(\"digits\").addBool(\"email\").addBool(\"number\").addBool(\"url\");\n    adapters.addMinMax(\"length\", \"minlength\", \"maxlength\", \"rangelength\").addMinMax(\"range\", \"min\", \"max\", \"range\");\n    adapters.addMinMax(\"minlength\", \"minlength\").addMinMax(\"maxlength\", \"minlength\", \"maxlength\");\n    adapters.add(\"equalto\", [\"other\"], function (options) {\n        var prefix = getModelPrefix(options.element.name),\n            other = options.params.other,\n            fullOtherName = appendModelPrefix(other, prefix),\n            element = $(options.form).find(\":input\").filter(\"[name='\" + escapeAttributeValue(fullOtherName) + \"']\")[0];\n\n        setValidationValues(options, \"equalTo\", element);\n    });\n    adapters.add(\"required\", function (options) {\n        // jQuery Validate equates \"required\" with \"mandatory\" for checkbox elements\n        if (options.element.tagName.toUpperCase() !== \"INPUT\" || options.element.type.toUpperCase() !== \"CHECKBOX\") {\n            setValidationValues(options, \"required\", true);\n        }\n    });\n    adapters.add(\"remote\", [\"url\", \"type\", \"additionalfields\"], function (options) {\n        var value = {\n            url: options.params.url,\n            type: options.params.type || \"GET\",\n            data: {}\n        },\n            prefix = getModelPrefix(options.element.name);\n\n        $.each(splitAndTrim(options.params.additionalfields || options.element.name), function (i, fieldName) {\n            var paramName = appendModelPrefix(fieldName, prefix);\n            value.data[paramName] = function () {\n                return $(options.form).find(\":input\").filter(\"[name='\" + escapeAttributeValue(paramName) + \"']\").val();\n            };\n        });\n\n        setValidationValues(options, \"remote\", value);\n    });\n    adapters.add(\"password\", [\"min\", \"nonalphamin\", \"regex\"], function (options) {\n        if (options.params.min) {\n            setValidationValues(options, \"minlength\", options.params.min);\n        }\n        if (options.params.nonalphamin) {\n            setValidationValues(options, \"nonalphamin\", options.params.nonalphamin);\n        }\n        if (options.params.regex) {\n            setValidationValues(options, \"regex\", options.params.regex);\n        }\n    });\n\n    $(function () {\n        $jQval.unobtrusive.parse(document);\n    });\n}(jQuery));"
  },
  {
    "path": "AlexaSkillsKit.Sample/Scripts/modernizr-2.6.2.js",
    "content": "/* NUGET: BEGIN LICENSE TEXT\n *\n * Microsoft grants you the right to use these script files for the sole\n * purpose of either: (i) interacting through your browser with the Microsoft\n * website or online service, subject to the applicable licensing or use\n * terms; or (ii) using the files as included with a Microsoft product subject\n * to that product's license terms. Microsoft reserves all other rights to the\n * files not expressly granted by Microsoft, whether by implication, estoppel\n * or otherwise. Insofar as a script file is dual licensed under GPL,\n * Microsoft neither took the code under GPL nor distributes it thereunder but\n * under the terms set out in this paragraph. All notices and licenses\n * below are for informational purposes only.\n *\n * Copyright (c) Faruk Ates, Paul Irish, Alex Sexton; http://www.modernizr.com/license/\n *\n * Includes matchMedia polyfill; Copyright (c) 2010 Filament Group, Inc; http://opensource.org/licenses/MIT\n *\n * Includes material adapted from ES5-shim https://github.com/kriskowal/es5-shim/blob/master/es5-shim.js; Copyright 2009-2012 by contributors; http://opensource.org/licenses/MIT\n *\n * Includes material from css-support; Copyright (c) 2005-2012 Diego Perini; https://github.com/dperini/css-support/blob/master/LICENSE\n *\n * NUGET: END LICENSE TEXT */\n\n/*!\n * Modernizr v2.6.2\n * www.modernizr.com\n *\n * Copyright (c) Faruk Ates, Paul Irish, Alex Sexton\n * Available under the BSD and MIT licenses: www.modernizr.com/license/\n */\n\n/*\n * Modernizr tests which native CSS3 and HTML5 features are available in\n * the current UA and makes the results available to you in two ways:\n * as properties on a global Modernizr object, and as classes on the\n * <html> element. This information allows you to progressively enhance\n * your pages with a granular level of control over the experience.\n *\n * Modernizr has an optional (not included) conditional resource loader\n * called Modernizr.load(), based on Yepnope.js (yepnopejs.com).\n * To get a build that includes Modernizr.load(), as well as choosing\n * which tests to include, go to www.modernizr.com/download/\n *\n * Authors        Faruk Ates, Paul Irish, Alex Sexton\n * Contributors   Ryan Seddon, Ben Alman\n */\n\nwindow.Modernizr = (function( window, document, undefined ) {\n\n    var version = '2.6.2',\n\n    Modernizr = {},\n\n    /*>>cssclasses*/\n    // option for enabling the HTML classes to be added\n    enableClasses = true,\n    /*>>cssclasses*/\n\n    docElement = document.documentElement,\n\n    /**\n     * Create our \"modernizr\" element that we do most feature tests on.\n     */\n    mod = 'modernizr',\n    modElem = document.createElement(mod),\n    mStyle = modElem.style,\n\n    /**\n     * Create the input element for various Web Forms feature tests.\n     */\n    inputElem /*>>inputelem*/ = document.createElement('input') /*>>inputelem*/ ,\n\n    /*>>smile*/\n    smile = ':)',\n    /*>>smile*/\n\n    toString = {}.toString,\n\n    // TODO :: make the prefixes more granular\n    /*>>prefixes*/\n    // List of property values to set for css tests. See ticket #21\n    prefixes = ' -webkit- -moz- -o- -ms- '.split(' '),\n    /*>>prefixes*/\n\n    /*>>domprefixes*/\n    // Following spec is to expose vendor-specific style properties as:\n    //   elem.style.WebkitBorderRadius\n    // and the following would be incorrect:\n    //   elem.style.webkitBorderRadius\n\n    // Webkit ghosts their properties in lowercase but Opera & Moz do not.\n    // Microsoft uses a lowercase `ms` instead of the correct `Ms` in IE8+\n    //   erik.eae.net/archives/2008/03/10/21.48.10/\n\n    // More here: github.com/Modernizr/Modernizr/issues/issue/21\n    omPrefixes = 'Webkit Moz O ms',\n\n    cssomPrefixes = omPrefixes.split(' '),\n\n    domPrefixes = omPrefixes.toLowerCase().split(' '),\n    /*>>domprefixes*/\n\n    /*>>ns*/\n    ns = {'svg': 'http://www.w3.org/2000/svg'},\n    /*>>ns*/\n\n    tests = {},\n    inputs = {},\n    attrs = {},\n\n    classes = [],\n\n    slice = classes.slice,\n\n    featureName, // used in testing loop\n\n\n    /*>>teststyles*/\n    // Inject element with style element and some CSS rules\n    injectElementWithStyles = function( rule, callback, nodes, testnames ) {\n\n      var style, ret, node, docOverflow,\n          div = document.createElement('div'),\n          // After page load injecting a fake body doesn't work so check if body exists\n          body = document.body,\n          // IE6 and 7 won't return offsetWidth or offsetHeight unless it's in the body element, so we fake it.\n          fakeBody = body || document.createElement('body');\n\n      if ( parseInt(nodes, 10) ) {\n          // In order not to give false positives we create a node for each test\n          // This also allows the method to scale for unspecified uses\n          while ( nodes-- ) {\n              node = document.createElement('div');\n              node.id = testnames ? testnames[nodes] : mod + (nodes + 1);\n              div.appendChild(node);\n          }\n      }\n\n      // <style> elements in IE6-9 are considered 'NoScope' elements and therefore will be removed\n      // when injected with innerHTML. To get around this you need to prepend the 'NoScope' element\n      // with a 'scoped' element, in our case the soft-hyphen entity as it won't mess with our measurements.\n      // msdn.microsoft.com/en-us/library/ms533897%28VS.85%29.aspx\n      // Documents served as xml will throw if using &shy; so use xml friendly encoded version. See issue #277\n      style = ['&#173;','<style id=\"s', mod, '\">', rule, '</style>'].join('');\n      div.id = mod;\n      // IE6 will false positive on some tests due to the style element inside the test div somehow interfering offsetHeight, so insert it into body or fakebody.\n      // Opera will act all quirky when injecting elements in documentElement when page is served as xml, needs fakebody too. #270\n      (body ? div : fakeBody).innerHTML += style;\n      fakeBody.appendChild(div);\n      if ( !body ) {\n          //avoid crashing IE8, if background image is used\n          fakeBody.style.background = '';\n          //Safari 5.13/5.1.4 OSX stops loading if ::-webkit-scrollbar is used and scrollbars are visible\n          fakeBody.style.overflow = 'hidden';\n          docOverflow = docElement.style.overflow;\n          docElement.style.overflow = 'hidden';\n          docElement.appendChild(fakeBody);\n      }\n\n      ret = callback(div, rule);\n      // If this is done after page load we don't want to remove the body so check if body exists\n      if ( !body ) {\n          fakeBody.parentNode.removeChild(fakeBody);\n          docElement.style.overflow = docOverflow;\n      } else {\n          div.parentNode.removeChild(div);\n      }\n\n      return !!ret;\n\n    },\n    /*>>teststyles*/\n\n    /*>>mq*/\n    // adapted from matchMedia polyfill\n    // by Scott Jehl and Paul Irish\n    // gist.github.com/786768\n    testMediaQuery = function( mq ) {\n\n      var matchMedia = window.matchMedia || window.msMatchMedia;\n      if ( matchMedia ) {\n        return matchMedia(mq).matches;\n      }\n\n      var bool;\n\n      injectElementWithStyles('@media ' + mq + ' { #' + mod + ' { position: absolute; } }', function( node ) {\n        bool = (window.getComputedStyle ?\n                  getComputedStyle(node, null) :\n                  node.currentStyle)['position'] == 'absolute';\n      });\n\n      return bool;\n\n     },\n     /*>>mq*/\n\n\n    /*>>hasevent*/\n    //\n    // isEventSupported determines if a given element supports the given event\n    // kangax.github.com/iseventsupported/\n    //\n    // The following results are known incorrects:\n    //   Modernizr.hasEvent(\"webkitTransitionEnd\", elem) // false negative\n    //   Modernizr.hasEvent(\"textInput\") // in Webkit. github.com/Modernizr/Modernizr/issues/333\n    //   ...\n    isEventSupported = (function() {\n\n      var TAGNAMES = {\n        'select': 'input', 'change': 'input',\n        'submit': 'form', 'reset': 'form',\n        'error': 'img', 'load': 'img', 'abort': 'img'\n      };\n\n      function isEventSupported( eventName, element ) {\n\n        element = element || document.createElement(TAGNAMES[eventName] || 'div');\n        eventName = 'on' + eventName;\n\n        // When using `setAttribute`, IE skips \"unload\", WebKit skips \"unload\" and \"resize\", whereas `in` \"catches\" those\n        var isSupported = eventName in element;\n\n        if ( !isSupported ) {\n          // If it has no `setAttribute` (i.e. doesn't implement Node interface), try generic element\n          if ( !element.setAttribute ) {\n            element = document.createElement('div');\n          }\n          if ( element.setAttribute && element.removeAttribute ) {\n            element.setAttribute(eventName, '');\n            isSupported = is(element[eventName], 'function');\n\n            // If property was created, \"remove it\" (by setting value to `undefined`)\n            if ( !is(element[eventName], 'undefined') ) {\n              element[eventName] = undefined;\n            }\n            element.removeAttribute(eventName);\n          }\n        }\n\n        element = null;\n        return isSupported;\n      }\n      return isEventSupported;\n    })(),\n    /*>>hasevent*/\n\n    // TODO :: Add flag for hasownprop ? didn't last time\n\n    // hasOwnProperty shim by kangax needed for Safari 2.0 support\n    _hasOwnProperty = ({}).hasOwnProperty, hasOwnProp;\n\n    if ( !is(_hasOwnProperty, 'undefined') && !is(_hasOwnProperty.call, 'undefined') ) {\n      hasOwnProp = function (object, property) {\n        return _hasOwnProperty.call(object, property);\n      };\n    }\n    else {\n      hasOwnProp = function (object, property) { /* yes, this can give false positives/negatives, but most of the time we don't care about those */\n        return ((property in object) && is(object.constructor.prototype[property], 'undefined'));\n      };\n    }\n\n    // Adapted from ES5-shim https://github.com/kriskowal/es5-shim/blob/master/es5-shim.js\n    // es5.github.com/#x15.3.4.5\n\n    if (!Function.prototype.bind) {\n      Function.prototype.bind = function bind(that) {\n\n        var target = this;\n\n        if (typeof target != \"function\") {\n            throw new TypeError();\n        }\n\n        var args = slice.call(arguments, 1),\n            bound = function () {\n\n            if (this instanceof bound) {\n\n              var F = function(){};\n              F.prototype = target.prototype;\n              var self = new F();\n\n              var result = target.apply(\n                  self,\n                  args.concat(slice.call(arguments))\n              );\n              if (Object(result) === result) {\n                  return result;\n              }\n              return self;\n\n            } else {\n\n              return target.apply(\n                  that,\n                  args.concat(slice.call(arguments))\n              );\n\n            }\n\n        };\n\n        return bound;\n      };\n    }\n\n    /**\n     * setCss applies given styles to the Modernizr DOM node.\n     */\n    function setCss( str ) {\n        mStyle.cssText = str;\n    }\n\n    /**\n     * setCssAll extrapolates all vendor-specific css strings.\n     */\n    function setCssAll( str1, str2 ) {\n        return setCss(prefixes.join(str1 + ';') + ( str2 || '' ));\n    }\n\n    /**\n     * is returns a boolean for if typeof obj is exactly type.\n     */\n    function is( obj, type ) {\n        return typeof obj === type;\n    }\n\n    /**\n     * contains returns a boolean for if substr is found within str.\n     */\n    function contains( str, substr ) {\n        return !!~('' + str).indexOf(substr);\n    }\n\n    /*>>testprop*/\n\n    // testProps is a generic CSS / DOM property test.\n\n    // In testing support for a given CSS property, it's legit to test:\n    //    `elem.style[styleName] !== undefined`\n    // If the property is supported it will return an empty string,\n    // if unsupported it will return undefined.\n\n    // We'll take advantage of this quick test and skip setting a style\n    // on our modernizr element, but instead just testing undefined vs\n    // empty string.\n\n    // Because the testing of the CSS property names (with \"-\", as\n    // opposed to the camelCase DOM properties) is non-portable and\n    // non-standard but works in WebKit and IE (but not Gecko or Opera),\n    // we explicitly reject properties with dashes so that authors\n    // developing in WebKit or IE first don't end up with\n    // browser-specific content by accident.\n\n    function testProps( props, prefixed ) {\n        for ( var i in props ) {\n            var prop = props[i];\n            if ( !contains(prop, \"-\") && mStyle[prop] !== undefined ) {\n                return prefixed == 'pfx' ? prop : true;\n            }\n        }\n        return false;\n    }\n    /*>>testprop*/\n\n    // TODO :: add testDOMProps\n    /**\n     * testDOMProps is a generic DOM property test; if a browser supports\n     *   a certain property, it won't return undefined for it.\n     */\n    function testDOMProps( props, obj, elem ) {\n        for ( var i in props ) {\n            var item = obj[props[i]];\n            if ( item !== undefined) {\n\n                // return the property name as a string\n                if (elem === false) return props[i];\n\n                // let's bind a function\n                if (is(item, 'function')){\n                  // default to autobind unless override\n                  return item.bind(elem || obj);\n                }\n\n                // return the unbound function or obj or value\n                return item;\n            }\n        }\n        return false;\n    }\n\n    /*>>testallprops*/\n    /**\n     * testPropsAll tests a list of DOM properties we want to check against.\n     *   We specify literally ALL possible (known and/or likely) properties on\n     *   the element including the non-vendor prefixed one, for forward-\n     *   compatibility.\n     */\n    function testPropsAll( prop, prefixed, elem ) {\n\n        var ucProp  = prop.charAt(0).toUpperCase() + prop.slice(1),\n            props   = (prop + ' ' + cssomPrefixes.join(ucProp + ' ') + ucProp).split(' ');\n\n        // did they call .prefixed('boxSizing') or are we just testing a prop?\n        if(is(prefixed, \"string\") || is(prefixed, \"undefined\")) {\n          return testProps(props, prefixed);\n\n        // otherwise, they called .prefixed('requestAnimationFrame', window[, elem])\n        } else {\n          props = (prop + ' ' + (domPrefixes).join(ucProp + ' ') + ucProp).split(' ');\n          return testDOMProps(props, prefixed, elem);\n        }\n    }\n    /*>>testallprops*/\n\n\n    /**\n     * Tests\n     * -----\n     */\n\n    // The *new* flexbox\n    // dev.w3.org/csswg/css3-flexbox\n\n    tests['flexbox'] = function() {\n      return testPropsAll('flexWrap');\n    };\n\n    // The *old* flexbox\n    // www.w3.org/TR/2009/WD-css3-flexbox-20090723/\n\n    tests['flexboxlegacy'] = function() {\n        return testPropsAll('boxDirection');\n    };\n\n    // On the S60 and BB Storm, getContext exists, but always returns undefined\n    // so we actually have to call getContext() to verify\n    // github.com/Modernizr/Modernizr/issues/issue/97/\n\n    tests['canvas'] = function() {\n        var elem = document.createElement('canvas');\n        return !!(elem.getContext && elem.getContext('2d'));\n    };\n\n    tests['canvastext'] = function() {\n        return !!(Modernizr['canvas'] && is(document.createElement('canvas').getContext('2d').fillText, 'function'));\n    };\n\n    // webk.it/70117 is tracking a legit WebGL feature detect proposal\n\n    // We do a soft detect which may false positive in order to avoid\n    // an expensive context creation: bugzil.la/732441\n\n    tests['webgl'] = function() {\n        return !!window.WebGLRenderingContext;\n    };\n\n    /*\n     * The Modernizr.touch test only indicates if the browser supports\n     *    touch events, which does not necessarily reflect a touchscreen\n     *    device, as evidenced by tablets running Windows 7 or, alas,\n     *    the Palm Pre / WebOS (touch) phones.\n     *\n     * Additionally, Chrome (desktop) used to lie about its support on this,\n     *    but that has since been rectified: crbug.com/36415\n     *\n     * We also test for Firefox 4 Multitouch Support.\n     *\n     * For more info, see: modernizr.github.com/Modernizr/touch.html\n     */\n\n    tests['touch'] = function() {\n        var bool;\n\n        if(('ontouchstart' in window) || window.DocumentTouch && document instanceof DocumentTouch) {\n          bool = true;\n        } else {\n          injectElementWithStyles(['@media (',prefixes.join('touch-enabled),('),mod,')','{#modernizr{top:9px;position:absolute}}'].join(''), function( node ) {\n            bool = node.offsetTop === 9;\n          });\n        }\n\n        return bool;\n    };\n\n\n    // geolocation is often considered a trivial feature detect...\n    // Turns out, it's quite tricky to get right:\n    //\n    // Using !!navigator.geolocation does two things we don't want. It:\n    //   1. Leaks memory in IE9: github.com/Modernizr/Modernizr/issues/513\n    //   2. Disables page caching in WebKit: webk.it/43956\n    //\n    // Meanwhile, in Firefox < 8, an about:config setting could expose\n    // a false positive that would throw an exception: bugzil.la/688158\n\n    tests['geolocation'] = function() {\n        return 'geolocation' in navigator;\n    };\n\n\n    tests['postmessage'] = function() {\n      return !!window.postMessage;\n    };\n\n\n    // Chrome incognito mode used to throw an exception when using openDatabase\n    // It doesn't anymore.\n    tests['websqldatabase'] = function() {\n      return !!window.openDatabase;\n    };\n\n    // Vendors had inconsistent prefixing with the experimental Indexed DB:\n    // - Webkit's implementation is accessible through webkitIndexedDB\n    // - Firefox shipped moz_indexedDB before FF4b9, but since then has been mozIndexedDB\n    // For speed, we don't test the legacy (and beta-only) indexedDB\n    tests['indexedDB'] = function() {\n      return !!testPropsAll(\"indexedDB\", window);\n    };\n\n    // documentMode logic from YUI to filter out IE8 Compat Mode\n    //   which false positives.\n    tests['hashchange'] = function() {\n      return isEventSupported('hashchange', window) && (document.documentMode === undefined || document.documentMode > 7);\n    };\n\n    // Per 1.6:\n    // This used to be Modernizr.historymanagement but the longer\n    // name has been deprecated in favor of a shorter and property-matching one.\n    // The old API is still available in 1.6, but as of 2.0 will throw a warning,\n    // and in the first release thereafter disappear entirely.\n    tests['history'] = function() {\n      return !!(window.history && history.pushState);\n    };\n\n    tests['draganddrop'] = function() {\n        var div = document.createElement('div');\n        return ('draggable' in div) || ('ondragstart' in div && 'ondrop' in div);\n    };\n\n    // FF3.6 was EOL'ed on 4/24/12, but the ESR version of FF10\n    // will be supported until FF19 (2/12/13), at which time, ESR becomes FF17.\n    // FF10 still uses prefixes, so check for it until then.\n    // for more ESR info, see: mozilla.org/en-US/firefox/organizations/faq/\n    tests['websockets'] = function() {\n        return 'WebSocket' in window || 'MozWebSocket' in window;\n    };\n\n\n    // css-tricks.com/rgba-browser-support/\n    tests['rgba'] = function() {\n        // Set an rgba() color and check the returned value\n\n        setCss('background-color:rgba(150,255,150,.5)');\n\n        return contains(mStyle.backgroundColor, 'rgba');\n    };\n\n    tests['hsla'] = function() {\n        // Same as rgba(), in fact, browsers re-map hsla() to rgba() internally,\n        //   except IE9 who retains it as hsla\n\n        setCss('background-color:hsla(120,40%,100%,.5)');\n\n        return contains(mStyle.backgroundColor, 'rgba') || contains(mStyle.backgroundColor, 'hsla');\n    };\n\n    tests['multiplebgs'] = function() {\n        // Setting multiple images AND a color on the background shorthand property\n        //  and then querying the style.background property value for the number of\n        //  occurrences of \"url(\" is a reliable method for detecting ACTUAL support for this!\n\n        setCss('background:url(https://),url(https://),red url(https://)');\n\n        // If the UA supports multiple backgrounds, there should be three occurrences\n        //   of the string \"url(\" in the return value for elemStyle.background\n\n        return (/(url\\s*\\(.*?){3}/).test(mStyle.background);\n    };\n\n\n\n    // this will false positive in Opera Mini\n    //   github.com/Modernizr/Modernizr/issues/396\n\n    tests['backgroundsize'] = function() {\n        return testPropsAll('backgroundSize');\n    };\n\n    tests['borderimage'] = function() {\n        return testPropsAll('borderImage');\n    };\n\n\n    // Super comprehensive table about all the unique implementations of\n    // border-radius: muddledramblings.com/table-of-css3-border-radius-compliance\n\n    tests['borderradius'] = function() {\n        return testPropsAll('borderRadius');\n    };\n\n    // WebOS unfortunately false positives on this test.\n    tests['boxshadow'] = function() {\n        return testPropsAll('boxShadow');\n    };\n\n    // FF3.0 will false positive on this test\n    tests['textshadow'] = function() {\n        return document.createElement('div').style.textShadow === '';\n    };\n\n\n    tests['opacity'] = function() {\n        // Browsers that actually have CSS Opacity implemented have done so\n        //  according to spec, which means their return values are within the\n        //  range of [0.0,1.0] - including the leading zero.\n\n        setCssAll('opacity:.55');\n\n        // The non-literal . in this regex is intentional:\n        //   German Chrome returns this value as 0,55\n        // github.com/Modernizr/Modernizr/issues/#issue/59/comment/516632\n        return (/^0.55$/).test(mStyle.opacity);\n    };\n\n\n    // Note, Android < 4 will pass this test, but can only animate\n    //   a single property at a time\n    //   daneden.me/2011/12/putting-up-with-androids-bullshit/\n    tests['cssanimations'] = function() {\n        return testPropsAll('animationName');\n    };\n\n\n    tests['csscolumns'] = function() {\n        return testPropsAll('columnCount');\n    };\n\n\n    tests['cssgradients'] = function() {\n        /**\n         * For CSS Gradients syntax, please see:\n         * webkit.org/blog/175/introducing-css-gradients/\n         * developer.mozilla.org/en/CSS/-moz-linear-gradient\n         * developer.mozilla.org/en/CSS/-moz-radial-gradient\n         * dev.w3.org/csswg/css3-images/#gradients-\n         */\n\n        var str1 = 'background-image:',\n            str2 = 'gradient(linear,left top,right bottom,from(#9f9),to(white));',\n            str3 = 'linear-gradient(left top,#9f9, white);';\n\n        setCss(\n             // legacy webkit syntax (FIXME: remove when syntax not in use anymore)\n              (str1 + '-webkit- '.split(' ').join(str2 + str1) +\n             // standard syntax             // trailing 'background-image:'\n              prefixes.join(str3 + str1)).slice(0, -str1.length)\n        );\n\n        return contains(mStyle.backgroundImage, 'gradient');\n    };\n\n\n    tests['cssreflections'] = function() {\n        return testPropsAll('boxReflect');\n    };\n\n\n    tests['csstransforms'] = function() {\n        return !!testPropsAll('transform');\n    };\n\n\n    tests['csstransforms3d'] = function() {\n\n        var ret = !!testPropsAll('perspective');\n\n        // Webkit's 3D transforms are passed off to the browser's own graphics renderer.\n        //   It works fine in Safari on Leopard and Snow Leopard, but not in Chrome in\n        //   some conditions. As a result, Webkit typically recognizes the syntax but\n        //   will sometimes throw a false positive, thus we must do a more thorough check:\n        if ( ret && 'webkitPerspective' in docElement.style ) {\n\n          // Webkit allows this media query to succeed only if the feature is enabled.\n          // `@media (transform-3d),(-webkit-transform-3d){ ... }`\n          injectElementWithStyles('@media (transform-3d),(-webkit-transform-3d){#modernizr{left:9px;position:absolute;height:3px;}}', function( node, rule ) {\n            ret = node.offsetLeft === 9 && node.offsetHeight === 3;\n          });\n        }\n        return ret;\n    };\n\n\n    tests['csstransitions'] = function() {\n        return testPropsAll('transition');\n    };\n\n\n    /*>>fontface*/\n    // @font-face detection routine by Diego Perini\n    // javascript.nwbox.com/CSSSupport/\n\n    // false positives:\n    //   WebOS github.com/Modernizr/Modernizr/issues/342\n    //   WP7   github.com/Modernizr/Modernizr/issues/538\n    tests['fontface'] = function() {\n        var bool;\n\n        injectElementWithStyles('@font-face {font-family:\"font\";src:url(\"https://\")}', function( node, rule ) {\n          var style = document.getElementById('smodernizr'),\n              sheet = style.sheet || style.styleSheet,\n              cssText = sheet ? (sheet.cssRules && sheet.cssRules[0] ? sheet.cssRules[0].cssText : sheet.cssText || '') : '';\n\n          bool = /src/i.test(cssText) && cssText.indexOf(rule.split(' ')[0]) === 0;\n        });\n\n        return bool;\n    };\n    /*>>fontface*/\n\n    // CSS generated content detection\n    tests['generatedcontent'] = function() {\n        var bool;\n\n        injectElementWithStyles(['#',mod,'{font:0/0 a}#',mod,':after{content:\"',smile,'\";visibility:hidden;font:3px/1 a}'].join(''), function( node ) {\n          bool = node.offsetHeight >= 3;\n        });\n\n        return bool;\n    };\n\n\n\n    // These tests evaluate support of the video/audio elements, as well as\n    // testing what types of content they support.\n    //\n    // We're using the Boolean constructor here, so that we can extend the value\n    // e.g.  Modernizr.video     // true\n    //       Modernizr.video.ogg // 'probably'\n    //\n    // Codec values from : github.com/NielsLeenheer/html5test/blob/9106a8/index.html#L845\n    //                     thx to NielsLeenheer and zcorpan\n\n    // Note: in some older browsers, \"no\" was a return value instead of empty string.\n    //   It was live in FF3.5.0 and 3.5.1, but fixed in 3.5.2\n    //   It was also live in Safari 4.0.0 - 4.0.4, but fixed in 4.0.5\n\n    tests['video'] = function() {\n        var elem = document.createElement('video'),\n            bool = false;\n\n        // IE9 Running on Windows Server SKU can cause an exception to be thrown, bug #224\n        try {\n            if ( bool = !!elem.canPlayType ) {\n                bool      = new Boolean(bool);\n                bool.ogg  = elem.canPlayType('video/ogg; codecs=\"theora\"')      .replace(/^no$/,'');\n\n                // Without QuickTime, this value will be `undefined`. github.com/Modernizr/Modernizr/issues/546\n                bool.h264 = elem.canPlayType('video/mp4; codecs=\"avc1.42E01E\"') .replace(/^no$/,'');\n\n                bool.webm = elem.canPlayType('video/webm; codecs=\"vp8, vorbis\"').replace(/^no$/,'');\n            }\n\n        } catch(e) { }\n\n        return bool;\n    };\n\n    tests['audio'] = function() {\n        var elem = document.createElement('audio'),\n            bool = false;\n\n        try {\n            if ( bool = !!elem.canPlayType ) {\n                bool      = new Boolean(bool);\n                bool.ogg  = elem.canPlayType('audio/ogg; codecs=\"vorbis\"').replace(/^no$/,'');\n                bool.mp3  = elem.canPlayType('audio/mpeg;')               .replace(/^no$/,'');\n\n                // Mimetypes accepted:\n                //   developer.mozilla.org/En/Media_formats_supported_by_the_audio_and_video_elements\n                //   bit.ly/iphoneoscodecs\n                bool.wav  = elem.canPlayType('audio/wav; codecs=\"1\"')     .replace(/^no$/,'');\n                bool.m4a  = ( elem.canPlayType('audio/x-m4a;')            ||\n                              elem.canPlayType('audio/aac;'))             .replace(/^no$/,'');\n            }\n        } catch(e) { }\n\n        return bool;\n    };\n\n\n    // In FF4, if disabled, window.localStorage should === null.\n\n    // Normally, we could not test that directly and need to do a\n    //   `('localStorage' in window) && ` test first because otherwise Firefox will\n    //   throw bugzil.la/365772 if cookies are disabled\n\n    // Also in iOS5 Private Browsing mode, attempting to use localStorage.setItem\n    // will throw the exception:\n    //   QUOTA_EXCEEDED_ERRROR DOM Exception 22.\n    // Peculiarly, getItem and removeItem calls do not throw.\n\n    // Because we are forced to try/catch this, we'll go aggressive.\n\n    // Just FWIW: IE8 Compat mode supports these features completely:\n    //   www.quirksmode.org/dom/html5.html\n    // But IE8 doesn't support either with local files\n\n    tests['localstorage'] = function() {\n        try {\n            localStorage.setItem(mod, mod);\n            localStorage.removeItem(mod);\n            return true;\n        } catch(e) {\n            return false;\n        }\n    };\n\n    tests['sessionstorage'] = function() {\n        try {\n            sessionStorage.setItem(mod, mod);\n            sessionStorage.removeItem(mod);\n            return true;\n        } catch(e) {\n            return false;\n        }\n    };\n\n\n    tests['webworkers'] = function() {\n        return !!window.Worker;\n    };\n\n\n    tests['applicationcache'] = function() {\n        return !!window.applicationCache;\n    };\n\n\n    // Thanks to Erik Dahlstrom\n    tests['svg'] = function() {\n        return !!document.createElementNS && !!document.createElementNS(ns.svg, 'svg').createSVGRect;\n    };\n\n    // specifically for SVG inline in HTML, not within XHTML\n    // test page: paulirish.com/demo/inline-svg\n    tests['inlinesvg'] = function() {\n      var div = document.createElement('div');\n      div.innerHTML = '<svg/>';\n      return (div.firstChild && div.firstChild.namespaceURI) == ns.svg;\n    };\n\n    // SVG SMIL animation\n    tests['smil'] = function() {\n        return !!document.createElementNS && /SVGAnimate/.test(toString.call(document.createElementNS(ns.svg, 'animate')));\n    };\n\n    // This test is only for clip paths in SVG proper, not clip paths on HTML content\n    // demo: srufaculty.sru.edu/david.dailey/svg/newstuff/clipPath4.svg\n\n    // However read the comments to dig into applying SVG clippaths to HTML content here:\n    //   github.com/Modernizr/Modernizr/issues/213#issuecomment-1149491\n    tests['svgclippaths'] = function() {\n        return !!document.createElementNS && /SVGClipPath/.test(toString.call(document.createElementNS(ns.svg, 'clipPath')));\n    };\n\n    /*>>webforms*/\n    // input features and input types go directly onto the ret object, bypassing the tests loop.\n    // Hold this guy to execute in a moment.\n    function webforms() {\n        /*>>input*/\n        // Run through HTML5's new input attributes to see if the UA understands any.\n        // We're using f which is the <input> element created early on\n        // Mike Taylr has created a comprehensive resource for testing these attributes\n        //   when applied to all input types:\n        //   miketaylr.com/code/input-type-attr.html\n        // spec: www.whatwg.org/specs/web-apps/current-work/multipage/the-input-element.html#input-type-attr-summary\n\n        // Only input placeholder is tested while textarea's placeholder is not.\n        // Currently Safari 4 and Opera 11 have support only for the input placeholder\n        // Both tests are available in feature-detects/forms-placeholder.js\n        Modernizr['input'] = (function( props ) {\n            for ( var i = 0, len = props.length; i < len; i++ ) {\n                attrs[ props[i] ] = !!(props[i] in inputElem);\n            }\n            if (attrs.list){\n              // safari false positive's on datalist: webk.it/74252\n              // see also github.com/Modernizr/Modernizr/issues/146\n              attrs.list = !!(document.createElement('datalist') && window.HTMLDataListElement);\n            }\n            return attrs;\n        })('autocomplete autofocus list placeholder max min multiple pattern required step'.split(' '));\n        /*>>input*/\n\n        /*>>inputtypes*/\n        // Run through HTML5's new input types to see if the UA understands any.\n        //   This is put behind the tests runloop because it doesn't return a\n        //   true/false like all the other tests; instead, it returns an object\n        //   containing each input type with its corresponding true/false value\n\n        // Big thanks to @miketaylr for the html5 forms expertise. miketaylr.com/\n        Modernizr['inputtypes'] = (function(props) {\n\n            for ( var i = 0, bool, inputElemType, defaultView, len = props.length; i < len; i++ ) {\n\n                inputElem.setAttribute('type', inputElemType = props[i]);\n                bool = inputElem.type !== 'text';\n\n                // We first check to see if the type we give it sticks..\n                // If the type does, we feed it a textual value, which shouldn't be valid.\n                // If the value doesn't stick, we know there's input sanitization which infers a custom UI\n                if ( bool ) {\n\n                    inputElem.value         = smile;\n                    inputElem.style.cssText = 'position:absolute;visibility:hidden;';\n\n                    if ( /^range$/.test(inputElemType) && inputElem.style.WebkitAppearance !== undefined ) {\n\n                      docElement.appendChild(inputElem);\n                      defaultView = document.defaultView;\n\n                      // Safari 2-4 allows the smiley as a value, despite making a slider\n                      bool =  defaultView.getComputedStyle &&\n                              defaultView.getComputedStyle(inputElem, null).WebkitAppearance !== 'textfield' &&\n                              // Mobile android web browser has false positive, so must\n                              // check the height to see if the widget is actually there.\n                              (inputElem.offsetHeight !== 0);\n\n                      docElement.removeChild(inputElem);\n\n                    } else if ( /^(search|tel)$/.test(inputElemType) ){\n                      // Spec doesn't define any special parsing or detectable UI\n                      //   behaviors so we pass these through as true\n\n                      // Interestingly, opera fails the earlier test, so it doesn't\n                      //  even make it here.\n\n                    } else if ( /^(url|email)$/.test(inputElemType) ) {\n                      // Real url and email support comes with prebaked validation.\n                      bool = inputElem.checkValidity && inputElem.checkValidity() === false;\n\n                    } else {\n                      // If the upgraded input compontent rejects the :) text, we got a winner\n                      bool = inputElem.value != smile;\n                    }\n                }\n\n                inputs[ props[i] ] = !!bool;\n            }\n            return inputs;\n        })('search tel url email datetime date month week time datetime-local number range color'.split(' '));\n        /*>>inputtypes*/\n    }\n    /*>>webforms*/\n\n\n    // End of test definitions\n    // -----------------------\n\n\n\n    // Run through all tests and detect their support in the current UA.\n    // todo: hypothetically we could be doing an array of tests and use a basic loop here.\n    for ( var feature in tests ) {\n        if ( hasOwnProp(tests, feature) ) {\n            // run the test, throw the return value into the Modernizr,\n            //   then based on that boolean, define an appropriate className\n            //   and push it into an array of classes we'll join later.\n            featureName  = feature.toLowerCase();\n            Modernizr[featureName] = tests[feature]();\n\n            classes.push((Modernizr[featureName] ? '' : 'no-') + featureName);\n        }\n    }\n\n    /*>>webforms*/\n    // input tests need to run.\n    Modernizr.input || webforms();\n    /*>>webforms*/\n\n\n    /**\n     * addTest allows the user to define their own feature tests\n     * the result will be added onto the Modernizr object,\n     * as well as an appropriate className set on the html element\n     *\n     * @param feature - String naming the feature\n     * @param test - Function returning true if feature is supported, false if not\n     */\n     Modernizr.addTest = function ( feature, test ) {\n       if ( typeof feature == 'object' ) {\n         for ( var key in feature ) {\n           if ( hasOwnProp( feature, key ) ) {\n             Modernizr.addTest( key, feature[ key ] );\n           }\n         }\n       } else {\n\n         feature = feature.toLowerCase();\n\n         if ( Modernizr[feature] !== undefined ) {\n           // we're going to quit if you're trying to overwrite an existing test\n           // if we were to allow it, we'd do this:\n           //   var re = new RegExp(\"\\\\b(no-)?\" + feature + \"\\\\b\");\n           //   docElement.className = docElement.className.replace( re, '' );\n           // but, no rly, stuff 'em.\n           return Modernizr;\n         }\n\n         test = typeof test == 'function' ? test() : test;\n\n         if (typeof enableClasses !== \"undefined\" && enableClasses) {\n           docElement.className += ' ' + (test ? '' : 'no-') + feature;\n         }\n         Modernizr[feature] = test;\n\n       }\n\n       return Modernizr; // allow chaining.\n     };\n\n\n    // Reset modElem.cssText to nothing to reduce memory footprint.\n    setCss('');\n    modElem = inputElem = null;\n\n    /*>>shiv*/\n    /*! HTML5 Shiv v3.6.1 | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed */\n    ;(function(window, document) {\n    /*jshint evil:true */\n      /** Preset options */\n      var options = window.html5 || {};\n\n      /** Used to skip problem elements */\n      var reSkip = /^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i;\n\n      /** Not all elements can be cloned in IE **/\n      var saveClones = /^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i;\n\n      /** Detect whether the browser supports default html5 styles */\n      var supportsHtml5Styles;\n\n      /** Name of the expando, to work with multiple documents or to re-shiv one document */\n      var expando = '_html5shiv';\n\n      /** The id for the the documents expando */\n      var expanID = 0;\n\n      /** Cached data for each document */\n      var expandoData = {};\n\n      /** Detect whether the browser supports unknown elements */\n      var supportsUnknownElements;\n\n      (function() {\n        try {\n            var a = document.createElement('a');\n            a.innerHTML = '<xyz></xyz>';\n            //if the hidden property is implemented we can assume, that the browser supports basic HTML5 Styles\n            supportsHtml5Styles = ('hidden' in a);\n\n            supportsUnknownElements = a.childNodes.length == 1 || (function() {\n              // assign a false positive if unable to shiv\n              (document.createElement)('a');\n              var frag = document.createDocumentFragment();\n              return (\n                typeof frag.cloneNode == 'undefined' ||\n                typeof frag.createDocumentFragment == 'undefined' ||\n                typeof frag.createElement == 'undefined'\n              );\n            }());\n        } catch(e) {\n          supportsHtml5Styles = true;\n          supportsUnknownElements = true;\n        }\n\n      }());\n\n      /*--------------------------------------------------------------------------*/\n\n      /**\n       * Creates a style sheet with the given CSS text and adds it to the document.\n       * @private\n       * @param {Document} ownerDocument The document.\n       * @param {String} cssText The CSS text.\n       * @returns {StyleSheet} The style element.\n       */\n      function addStyleSheet(ownerDocument, cssText) {\n        var p = ownerDocument.createElement('p'),\n            parent = ownerDocument.getElementsByTagName('head')[0] || ownerDocument.documentElement;\n\n        p.innerHTML = 'x<style>' + cssText + '</style>';\n        return parent.insertBefore(p.lastChild, parent.firstChild);\n      }\n\n      /**\n       * Returns the value of `html5.elements` as an array.\n       * @private\n       * @returns {Array} An array of shived element node names.\n       */\n      function getElements() {\n        var elements = html5.elements;\n        return typeof elements == 'string' ? elements.split(' ') : elements;\n      }\n\n        /**\n       * Returns the data associated to the given document\n       * @private\n       * @param {Document} ownerDocument The document.\n       * @returns {Object} An object of data.\n       */\n      function getExpandoData(ownerDocument) {\n        var data = expandoData[ownerDocument[expando]];\n        if (!data) {\n            data = {};\n            expanID++;\n            ownerDocument[expando] = expanID;\n            expandoData[expanID] = data;\n        }\n        return data;\n      }\n\n      /**\n       * returns a shived element for the given nodeName and document\n       * @memberOf html5\n       * @param {String} nodeName name of the element\n       * @param {Document} ownerDocument The context document.\n       * @returns {Object} The shived element.\n       */\n      function createElement(nodeName, ownerDocument, data){\n        if (!ownerDocument) {\n            ownerDocument = document;\n        }\n        if(supportsUnknownElements){\n            return ownerDocument.createElement(nodeName);\n        }\n        if (!data) {\n            data = getExpandoData(ownerDocument);\n        }\n        var node;\n\n        if (data.cache[nodeName]) {\n            node = data.cache[nodeName].cloneNode();\n        } else if (saveClones.test(nodeName)) {\n            node = (data.cache[nodeName] = data.createElem(nodeName)).cloneNode();\n        } else {\n            node = data.createElem(nodeName);\n        }\n\n        // Avoid adding some elements to fragments in IE < 9 because\n        // * Attributes like `name` or `type` cannot be set/changed once an element\n        //   is inserted into a document/fragment\n        // * Link elements with `src` attributes that are inaccessible, as with\n        //   a 403 response, will cause the tab/window to crash\n        // * Script elements appended to fragments will execute when their `src`\n        //   or `text` property is set\n        return node.canHaveChildren && !reSkip.test(nodeName) ? data.frag.appendChild(node) : node;\n      }\n\n      /**\n       * returns a shived DocumentFragment for the given document\n       * @memberOf html5\n       * @param {Document} ownerDocument The context document.\n       * @returns {Object} The shived DocumentFragment.\n       */\n      function createDocumentFragment(ownerDocument, data){\n        if (!ownerDocument) {\n            ownerDocument = document;\n        }\n        if(supportsUnknownElements){\n            return ownerDocument.createDocumentFragment();\n        }\n        data = data || getExpandoData(ownerDocument);\n        var clone = data.frag.cloneNode(),\n            i = 0,\n            elems = getElements(),\n            l = elems.length;\n        for(;i<l;i++){\n            clone.createElement(elems[i]);\n        }\n        return clone;\n      }\n\n      /**\n       * Shivs the `createElement` and `createDocumentFragment` methods of the document.\n       * @private\n       * @param {Document|DocumentFragment} ownerDocument The document.\n       * @param {Object} data of the document.\n       */\n      function shivMethods(ownerDocument, data) {\n        if (!data.cache) {\n            data.cache = {};\n            data.createElem = ownerDocument.createElement;\n            data.createFrag = ownerDocument.createDocumentFragment;\n            data.frag = data.createFrag();\n        }\n\n\n        ownerDocument.createElement = function(nodeName) {\n          //abort shiv\n          if (!html5.shivMethods) {\n              return data.createElem(nodeName);\n          }\n          return createElement(nodeName, ownerDocument, data);\n        };\n\n        ownerDocument.createDocumentFragment = Function('h,f', 'return function(){' +\n          'var n=f.cloneNode(),c=n.createElement;' +\n          'h.shivMethods&&(' +\n            // unroll the `createElement` calls\n            getElements().join().replace(/\\w+/g, function(nodeName) {\n              data.createElem(nodeName);\n              data.frag.createElement(nodeName);\n              return 'c(\"' + nodeName + '\")';\n            }) +\n          ');return n}'\n        )(html5, data.frag);\n      }\n\n      /*--------------------------------------------------------------------------*/\n\n      /**\n       * Shivs the given document.\n       * @memberOf html5\n       * @param {Document} ownerDocument The document to shiv.\n       * @returns {Document} The shived document.\n       */\n      function shivDocument(ownerDocument) {\n        if (!ownerDocument) {\n            ownerDocument = document;\n        }\n        var data = getExpandoData(ownerDocument);\n\n        if (html5.shivCSS && !supportsHtml5Styles && !data.hasCSS) {\n          data.hasCSS = !!addStyleSheet(ownerDocument,\n            // corrects block display not defined in IE6/7/8/9\n            'article,aside,figcaption,figure,footer,header,hgroup,nav,section{display:block}' +\n            // adds styling not present in IE6/7/8/9\n            'mark{background:#FF0;color:#000}'\n          );\n        }\n        if (!supportsUnknownElements) {\n          shivMethods(ownerDocument, data);\n        }\n        return ownerDocument;\n      }\n\n      /*--------------------------------------------------------------------------*/\n\n      /**\n       * The `html5` object is exposed so that more elements can be shived and\n       * existing shiving can be detected on iframes.\n       * @type Object\n       * @example\n       *\n       * // options can be changed before the script is included\n       * html5 = { 'elements': 'mark section', 'shivCSS': false, 'shivMethods': false };\n       */\n      var html5 = {\n\n        /**\n         * An array or space separated string of node names of the elements to shiv.\n         * @memberOf html5\n         * @type Array|String\n         */\n        'elements': options.elements || 'abbr article aside audio bdi canvas data datalist details figcaption figure footer header hgroup mark meter nav output progress section summary time video',\n\n        /**\n         * A flag to indicate that the HTML5 style sheet should be inserted.\n         * @memberOf html5\n         * @type Boolean\n         */\n        'shivCSS': (options.shivCSS !== false),\n\n        /**\n         * Is equal to true if a browser supports creating unknown/HTML5 elements\n         * @memberOf html5\n         * @type boolean\n         */\n        'supportsUnknownElements': supportsUnknownElements,\n\n        /**\n         * A flag to indicate that the document's `createElement` and `createDocumentFragment`\n         * methods should be overwritten.\n         * @memberOf html5\n         * @type Boolean\n         */\n        'shivMethods': (options.shivMethods !== false),\n\n        /**\n         * A string to describe the type of `html5` object (\"default\" or \"default print\").\n         * @memberOf html5\n         * @type String\n         */\n        'type': 'default',\n\n        // shivs the document according to the specified `html5` object options\n        'shivDocument': shivDocument,\n\n        //creates a shived element\n        createElement: createElement,\n\n        //creates a shived documentFragment\n        createDocumentFragment: createDocumentFragment\n      };\n\n      /*--------------------------------------------------------------------------*/\n\n      // expose html5\n      window.html5 = html5;\n\n      // shiv the document\n      shivDocument(document);\n\n    }(this, document));\n    /*>>shiv*/\n\n    // Assign private properties to the return object with prefix\n    Modernizr._version      = version;\n\n    // expose these for the plugin API. Look in the source for how to join() them against your input\n    /*>>prefixes*/\n    Modernizr._prefixes     = prefixes;\n    /*>>prefixes*/\n    /*>>domprefixes*/\n    Modernizr._domPrefixes  = domPrefixes;\n    Modernizr._cssomPrefixes  = cssomPrefixes;\n    /*>>domprefixes*/\n\n    /*>>mq*/\n    // Modernizr.mq tests a given media query, live against the current state of the window\n    // A few important notes:\n    //   * If a browser does not support media queries at all (eg. oldIE) the mq() will always return false\n    //   * A max-width or orientation query will be evaluated against the current state, which may change later.\n    //   * You must specify values. Eg. If you are testing support for the min-width media query use:\n    //       Modernizr.mq('(min-width:0)')\n    // usage:\n    // Modernizr.mq('only screen and (max-width:768)')\n    Modernizr.mq            = testMediaQuery;\n    /*>>mq*/\n\n    /*>>hasevent*/\n    // Modernizr.hasEvent() detects support for a given event, with an optional element to test on\n    // Modernizr.hasEvent('gesturestart', elem)\n    Modernizr.hasEvent      = isEventSupported;\n    /*>>hasevent*/\n\n    /*>>testprop*/\n    // Modernizr.testProp() investigates whether a given style property is recognized\n    // Note that the property names must be provided in the camelCase variant.\n    // Modernizr.testProp('pointerEvents')\n    Modernizr.testProp      = function(prop){\n        return testProps([prop]);\n    };\n    /*>>testprop*/\n\n    /*>>testallprops*/\n    // Modernizr.testAllProps() investigates whether a given style property,\n    //   or any of its vendor-prefixed variants, is recognized\n    // Note that the property names must be provided in the camelCase variant.\n    // Modernizr.testAllProps('boxSizing')\n    Modernizr.testAllProps  = testPropsAll;\n    /*>>testallprops*/\n\n\n    /*>>teststyles*/\n    // Modernizr.testStyles() allows you to add custom styles to the document and test an element afterwards\n    // Modernizr.testStyles('#modernizr { position:absolute }', function(elem, rule){ ... })\n    Modernizr.testStyles    = injectElementWithStyles;\n    /*>>teststyles*/\n\n\n    /*>>prefixed*/\n    // Modernizr.prefixed() returns the prefixed or nonprefixed property name variant of your input\n    // Modernizr.prefixed('boxSizing') // 'MozBoxSizing'\n\n    // Properties must be passed as dom-style camelcase, rather than `box-sizing` hypentated style.\n    // Return values will also be the camelCase variant, if you need to translate that to hypenated style use:\n    //\n    //     str.replace(/([A-Z])/g, function(str,m1){ return '-' + m1.toLowerCase(); }).replace(/^ms-/,'-ms-');\n\n    // If you're trying to ascertain which transition end event to bind to, you might do something like...\n    //\n    //     var transEndEventNames = {\n    //       'WebkitTransition' : 'webkitTransitionEnd',\n    //       'MozTransition'    : 'transitionend',\n    //       'OTransition'      : 'oTransitionEnd',\n    //       'msTransition'     : 'MSTransitionEnd',\n    //       'transition'       : 'transitionend'\n    //     },\n    //     transEndEventName = transEndEventNames[ Modernizr.prefixed('transition') ];\n\n    Modernizr.prefixed      = function(prop, obj, elem){\n      if(!obj) {\n        return testPropsAll(prop, 'pfx');\n      } else {\n        // Testing DOM property e.g. Modernizr.prefixed('requestAnimationFrame', window) // 'mozRequestAnimationFrame'\n        return testPropsAll(prop, obj, elem);\n      }\n    };\n    /*>>prefixed*/\n\n\n    /*>>cssclasses*/\n    // Remove \"no-js\" class from <html> element, if it exists:\n    docElement.className = docElement.className.replace(/(^|\\s)no-js(\\s|$)/, '$1$2') +\n\n                            // Add the new classes to the <html> element.\n                            (enableClasses ? ' js ' + classes.join(' ') : '');\n    /*>>cssclasses*/\n\n    return Modernizr;\n\n})(this, this.document);\n"
  },
  {
    "path": "AlexaSkillsKit.Sample/Scripts/respond.js",
    "content": "/* NUGET: BEGIN LICENSE TEXT\n *\n * Microsoft grants you the right to use these script files for the sole\n * purpose of either: (i) interacting through your browser with the Microsoft\n * website or online service, subject to the applicable licensing or use\n * terms; or (ii) using the files as included with a Microsoft product subject\n * to that product's license terms. Microsoft reserves all other rights to the\n * files not expressly granted by Microsoft, whether by implication, estoppel\n * or otherwise. Insofar as a script file is dual licensed under GPL,\n * Microsoft neither took the code under GPL nor distributes it thereunder but\n * under the terms set out in this paragraph. All notices and licenses\n * below are for informational purposes only.\n *\n * NUGET: END LICENSE TEXT */\n/*! matchMedia() polyfill - Test a CSS media type/query in JS. Authors & copyright (c) 2012: Scott Jehl, Paul Irish, Nicholas Zakas. Dual MIT/BSD license */\n/*! NOTE: If you're already including a window.matchMedia polyfill via Modernizr or otherwise, you don't need this part */\nwindow.matchMedia = window.matchMedia || (function(doc, undefined){\n  \n  var bool,\n      docElem  = doc.documentElement,\n      refNode  = docElem.firstElementChild || docElem.firstChild,\n      // fakeBody required for <FF4 when executed in <head>\n      fakeBody = doc.createElement('body'),\n      div      = doc.createElement('div');\n  \n  div.id = 'mq-test-1';\n  div.style.cssText = \"position:absolute;top:-100em\";\n  fakeBody.style.background = \"none\";\n  fakeBody.appendChild(div);\n  \n  return function(q){\n    \n    div.innerHTML = '&shy;<style media=\"'+q+'\"> #mq-test-1 { width: 42px; }</style>';\n    \n    docElem.insertBefore(fakeBody, refNode);\n    bool = div.offsetWidth == 42;  \n    docElem.removeChild(fakeBody);\n    \n    return { matches: bool, media: q };\n  };\n  \n})(document);\n\n\n\n\n/*! Respond.js v1.2.0: min/max-width media query polyfill. (c) Scott Jehl. MIT/GPLv2 Lic. j.mp/respondjs  */\n(function( win ){\n\t//exposed namespace\n\twin.respond\t\t= {};\n\t\n\t//define update even in native-mq-supporting browsers, to avoid errors\n\trespond.update\t= function(){};\n\t\n\t//expose media query support flag for external use\n\trespond.mediaQueriesSupported\t= win.matchMedia && win.matchMedia( \"only all\" ).matches;\n\t\n\t//if media queries are supported, exit here\n\tif( respond.mediaQueriesSupported ){ return; }\n\t\n\t//define vars\n\tvar doc \t\t\t= win.document,\n\t\tdocElem \t\t= doc.documentElement,\n\t\tmediastyles\t\t= [],\n\t\trules\t\t\t= [],\n\t\tappendedEls \t= [],\n\t\tparsedSheets \t= {},\n\t\tresizeThrottle\t= 30,\n\t\thead \t\t\t= doc.getElementsByTagName( \"head\" )[0] || docElem,\n\t\tbase\t\t\t= doc.getElementsByTagName( \"base\" )[0],\n\t\tlinks\t\t\t= head.getElementsByTagName( \"link\" ),\n\t\trequestQueue\t= [],\n\t\t\n\t\t//loop stylesheets, send text content to translate\n\t\tripCSS\t\t\t= function(){\n\t\t\tvar sheets \t= links,\n\t\t\t\tsl \t\t= sheets.length,\n\t\t\t\ti\t\t= 0,\n\t\t\t\t//vars for loop:\n\t\t\t\tsheet, href, media, isCSS;\n\n\t\t\tfor( ; i < sl; i++ ){\n\t\t\t\tsheet\t= sheets[ i ],\n\t\t\t\thref\t= sheet.href,\n\t\t\t\tmedia\t= sheet.media,\n\t\t\t\tisCSS\t= sheet.rel && sheet.rel.toLowerCase() === \"stylesheet\";\n\n\t\t\t\t//only links plz and prevent re-parsing\n\t\t\t\tif( !!href && isCSS && !parsedSheets[ href ] ){\n\t\t\t\t\t// selectivizr exposes css through the rawCssText expando\n\t\t\t\t\tif (sheet.styleSheet && sheet.styleSheet.rawCssText) {\n\t\t\t\t\t\ttranslate( sheet.styleSheet.rawCssText, href, media );\n\t\t\t\t\t\tparsedSheets[ href ] = true;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif( (!/^([a-zA-Z:]*\\/\\/)/.test( href ) && !base)\n\t\t\t\t\t\t\t|| href.replace( RegExp.$1, \"\" ).split( \"/\" )[0] === win.location.host ){\n\t\t\t\t\t\t\trequestQueue.push( {\n\t\t\t\t\t\t\t\thref: href,\n\t\t\t\t\t\t\t\tmedia: media\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tmakeRequests();\n\t\t},\n\t\t\n\t\t//recurse through request queue, get css text\n\t\tmakeRequests\t= function(){\n\t\t\tif( requestQueue.length ){\n\t\t\t\tvar thisRequest = requestQueue.shift();\n\t\t\t\t\n\t\t\t\tajax( thisRequest.href, function( styles ){\n\t\t\t\t\ttranslate( styles, thisRequest.href, thisRequest.media );\n\t\t\t\t\tparsedSheets[ thisRequest.href ] = true;\n\t\t\t\t\tmakeRequests();\n\t\t\t\t} );\n\t\t\t}\n\t\t},\n\t\t\n\t\t//find media blocks in css text, convert to style blocks\n\t\ttranslate\t\t\t= function( styles, href, media ){\n\t\t\tvar qs\t\t\t= styles.match(  /@media[^\\{]+\\{([^\\{\\}]*\\{[^\\}\\{]*\\})+/gi ),\n\t\t\t\tql\t\t\t= qs && qs.length || 0,\n\t\t\t\t//try to get CSS path\n\t\t\t\thref\t\t= href.substring( 0, href.lastIndexOf( \"/\" )),\n\t\t\t\trepUrls\t\t= function( css ){\n\t\t\t\t\treturn css.replace( /(url\\()['\"]?([^\\/\\)'\"][^:\\)'\"]+)['\"]?(\\))/g, \"$1\" + href + \"$2$3\" );\n\t\t\t\t},\n\t\t\t\tuseMedia\t= !ql && media,\n\t\t\t\t//vars used in loop\n\t\t\t\ti\t\t\t= 0,\n\t\t\t\tj, fullq, thisq, eachq, eql;\n\n\t\t\t//if path exists, tack on trailing slash\n\t\t\tif( href.length ){ href += \"/\"; }\t\n\t\t\t\t\n\t\t\t//if no internal queries exist, but media attr does, use that\t\n\t\t\t//note: this currently lacks support for situations where a media attr is specified on a link AND\n\t\t\t\t//its associated stylesheet has internal CSS media queries.\n\t\t\t\t//In those cases, the media attribute will currently be ignored.\n\t\t\tif( useMedia ){\n\t\t\t\tql = 1;\n\t\t\t}\n\t\t\t\n\n\t\t\tfor( ; i < ql; i++ ){\n\t\t\t\tj\t= 0;\n\t\t\t\t\n\t\t\t\t//media attr\n\t\t\t\tif( useMedia ){\n\t\t\t\t\tfullq = media;\n\t\t\t\t\trules.push( repUrls( styles ) );\n\t\t\t\t}\n\t\t\t\t//parse for styles\n\t\t\t\telse{\n\t\t\t\t\tfullq\t= qs[ i ].match( /@media *([^\\{]+)\\{([\\S\\s]+?)$/ ) && RegExp.$1;\n\t\t\t\t\trules.push( RegExp.$2 && repUrls( RegExp.$2 ) );\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\teachq\t= fullq.split( \",\" );\n\t\t\t\teql\t\t= eachq.length;\n\t\t\t\t\t\n\t\t\t\tfor( ; j < eql; j++ ){\n\t\t\t\t\tthisq\t= eachq[ j ];\n\t\t\t\t\tmediastyles.push( { \n\t\t\t\t\t\tmedia\t: thisq.split( \"(\" )[ 0 ].match( /(only\\s+)?([a-zA-Z]+)\\s?/ ) && RegExp.$2 || \"all\",\n\t\t\t\t\t\trules\t: rules.length - 1,\n\t\t\t\t\t\thasquery: thisq.indexOf(\"(\") > -1,\n\t\t\t\t\t\tminw\t: thisq.match( /\\(min\\-width:[\\s]*([\\s]*[0-9\\.]+)(px|em)[\\s]*\\)/ ) && parseFloat( RegExp.$1 ) + ( RegExp.$2 || \"\" ), \n\t\t\t\t\t\tmaxw\t: thisq.match( /\\(max\\-width:[\\s]*([\\s]*[0-9\\.]+)(px|em)[\\s]*\\)/ ) && parseFloat( RegExp.$1 ) + ( RegExp.$2 || \"\" )\n\t\t\t\t\t} );\n\t\t\t\t}\t\n\t\t\t}\n\n\t\t\tapplyMedia();\n\t\t},\n        \t\n\t\tlastCall,\n\t\t\n\t\tresizeDefer,\n\t\t\n\t\t// returns the value of 1em in pixels\n\t\tgetEmValue\t\t= function() {\n\t\t\tvar ret,\n\t\t\t\tdiv = doc.createElement('div'),\n\t\t\t\tbody = doc.body,\n\t\t\t\tfakeUsed = false;\n\t\t\t\t\t\t\t\t\t\n\t\t\tdiv.style.cssText = \"position:absolute;font-size:1em;width:1em\";\n\t\t\t\t\t\n\t\t\tif( !body ){\n\t\t\t\tbody = fakeUsed = doc.createElement( \"body\" );\n\t\t\t\tbody.style.background = \"none\";\n\t\t\t}\n\t\t\t\t\t\n\t\t\tbody.appendChild( div );\n\t\t\t\t\t\t\t\t\n\t\t\tdocElem.insertBefore( body, docElem.firstChild );\n\t\t\t\t\t\t\t\t\n\t\t\tret = div.offsetWidth;\n\t\t\t\t\t\t\t\t\n\t\t\tif( fakeUsed ){\n\t\t\t\tdocElem.removeChild( body );\n\t\t\t}\n\t\t\telse {\n\t\t\t\tbody.removeChild( div );\n\t\t\t}\n\t\t\t\n\t\t\t//also update eminpx before returning\n\t\t\tret = eminpx = parseFloat(ret);\n\t\t\t\t\t\t\t\t\n\t\t\treturn ret;\n\t\t},\n\t\t\n\t\t//cached container for 1em value, populated the first time it's needed \n\t\teminpx,\n\t\t\n\t\t//enable/disable styles\n\t\tapplyMedia\t\t\t= function( fromResize ){\n\t\t\tvar name\t\t= \"clientWidth\",\n\t\t\t\tdocElemProp\t= docElem[ name ],\n\t\t\t\tcurrWidth \t= doc.compatMode === \"CSS1Compat\" && docElemProp || doc.body[ name ] || docElemProp,\n\t\t\t\tstyleBlocks\t= {},\n\t\t\t\tlastLink\t= links[ links.length-1 ],\n\t\t\t\tnow \t\t= (new Date()).getTime();\n\n\t\t\t//throttle resize calls\t\n\t\t\tif( fromResize && lastCall && now - lastCall < resizeThrottle ){\n\t\t\t\tclearTimeout( resizeDefer );\n\t\t\t\tresizeDefer = setTimeout( applyMedia, resizeThrottle );\n\t\t\t\treturn;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tlastCall\t= now;\n\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\n\t\t\tfor( var i in mediastyles ){\n\t\t\t\tvar thisstyle = mediastyles[ i ],\n\t\t\t\t\tmin = thisstyle.minw,\n\t\t\t\t\tmax = thisstyle.maxw,\n\t\t\t\t\tminnull = min === null,\n\t\t\t\t\tmaxnull = max === null,\n\t\t\t\t\tem = \"em\";\n\t\t\t\t\n\t\t\t\tif( !!min ){\n\t\t\t\t\tmin = parseFloat( min ) * ( min.indexOf( em ) > -1 ? ( eminpx || getEmValue() ) : 1 );\n\t\t\t\t}\n\t\t\t\tif( !!max ){\n\t\t\t\t\tmax = parseFloat( max ) * ( max.indexOf( em ) > -1 ? ( eminpx || getEmValue() ) : 1 );\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t// if there's no media query at all (the () part), or min or max is not null, and if either is present, they're true\n\t\t\t\tif( !thisstyle.hasquery || ( !minnull || !maxnull ) && ( minnull || currWidth >= min ) && ( maxnull || currWidth <= max ) ){\n\t\t\t\t\t\tif( !styleBlocks[ thisstyle.media ] ){\n\t\t\t\t\t\t\tstyleBlocks[ thisstyle.media ] = [];\n\t\t\t\t\t\t}\n\t\t\t\t\t\tstyleBlocks[ thisstyle.media ].push( rules[ thisstyle.rules ] );\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\t//remove any existing respond style element(s)\n\t\t\tfor( var i in appendedEls ){\n\t\t\t\tif( appendedEls[ i ] && appendedEls[ i ].parentNode === head ){\n\t\t\t\t\thead.removeChild( appendedEls[ i ] );\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\t//inject active styles, grouped by media type\n\t\t\tfor( var i in styleBlocks ){\n\t\t\t\tvar ss\t\t= doc.createElement( \"style\" ),\n\t\t\t\t\tcss\t\t= styleBlocks[ i ].join( \"\\n\" );\n\t\t\t\t\n\t\t\t\tss.type = \"text/css\";\t\n\t\t\t\tss.media\t= i;\n\t\t\t\t\n\t\t\t\t//originally, ss was appended to a documentFragment and sheets were appended in bulk.\n\t\t\t\t//this caused crashes in IE in a number of circumstances, such as when the HTML element had a bg image set, so appending beforehand seems best. Thanks to @dvelyk for the initial research on this one!\n\t\t\t\thead.insertBefore( ss, lastLink.nextSibling );\n\t\t\t\t\n\t\t\t\tif ( ss.styleSheet ){ \n\t\t        \tss.styleSheet.cssText = css;\n\t\t        } \n\t\t        else {\n\t\t\t\t\tss.appendChild( doc.createTextNode( css ) );\n\t\t        }\n\t\t        \n\t\t\t\t//push to appendedEls to track for later removal\n\t\t\t\tappendedEls.push( ss );\n\t\t\t}\n\t\t},\n\t\t//tweaked Ajax functions from Quirksmode\n\t\tajax = function( url, callback ) {\n\t\t\tvar req = xmlHttp();\n\t\t\tif (!req){\n\t\t\t\treturn;\n\t\t\t}\t\n\t\t\treq.open( \"GET\", url, true );\n\t\t\treq.onreadystatechange = function () {\n\t\t\t\tif ( req.readyState != 4 || req.status != 200 && req.status != 304 ){\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tcallback( req.responseText );\n\t\t\t}\n\t\t\tif ( req.readyState == 4 ){\n\t\t\t\treturn;\n\t\t\t}\n\t\t\treq.send( null );\n\t\t},\n\t\t//define ajax obj \n\t\txmlHttp = (function() {\n\t\t\tvar xmlhttpmethod = false;\t\n\t\t\ttry {\n\t\t\t\txmlhttpmethod = new XMLHttpRequest();\n\t\t\t}\n\t\t\tcatch( e ){\n\t\t\t\txmlhttpmethod = new ActiveXObject( \"Microsoft.XMLHTTP\" );\n\t\t\t}\n\t\t\treturn function(){\n\t\t\t\treturn xmlhttpmethod;\n\t\t\t};\n\t\t})();\n\t\n\t//translate CSS\n\tripCSS();\n\t\n\t//expose update for re-running respond later on\n\trespond.update = ripCSS;\n\t\n\t//adjust on resize\n\tfunction callMedia(){\n\t\tapplyMedia( true );\n\t}\n\tif( win.addEventListener ){\n\t\twin.addEventListener( \"resize\", callMedia, false );\n\t}\n\telse if( win.attachEvent ){\n\t\twin.attachEvent( \"onresize\", callMedia );\n\t}\n})(this);\n"
  },
  {
    "path": "AlexaSkillsKit.Sample/Speechlet/AlexaController.cs",
    "content": "﻿// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nusing System.Net.Http;\nusing System.Web.Http;\n\nnamespace Sample.Controllers\n{\n    public class AlexaController : ApiController\n    {\n        [Route(\"alexa/sample-session\")]\n        [HttpPost]\n        public HttpResponseMessage SampleSession() {\n            var speechlet = new SampleSessionSpeechlet();\n            return speechlet.GetResponse(Request);\n        }\n    }\n}\n"
  },
  {
    "path": "AlexaSkillsKit.Sample/Speechlet/SampleSessionIntentSchema.json",
    "content": "{\n  \"intents\": [\n    {\n      \"intent\": \"MyNameIsIntent\",\n      \"slots\": [\n        {\n          \"name\": \"Name\",\n          \"type\": \"LITERAL\"\n        }\n      ]\n    },\n    {\n      \"intent\": \"WhatsMyNameIntent\",\n      \"slots\": []\n    }\n  ]\n}"
  },
  {
    "path": "AlexaSkillsKit.Sample/Speechlet/SampleSessionSpeechlet.cs",
    "content": "﻿// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nusing System;\nusing System.Collections.Generic;\nusing NLog;\nusing AlexaSkillsKit.Speechlet;\nusing AlexaSkillsKit.Slu;\nusing AlexaSkillsKit.UI;\nusing AlexaSkillsKit.Interfaces.Display;\nusing AlexaSkillsKit.Interfaces.VideoApp;\nusing AlexaSkillsKit.Interfaces.Display.Directives;\nusing AlexaSkillsKit.Interfaces.VideoApp.Directives;\n\nnamespace Sample.Controllers\n{\n    public class SampleSessionSpeechlet : SpeechletBase, ISpeechletWithContext\n    {\n        private static Logger Log = LogManager.GetCurrentClassLogger();\n\n        // Note: NAME_KEY being a JSON property key gets camelCased during serialization\n        private const string NAME_KEY = \"name\";\n        private const string NAME_SLOT = \"Name\";\n\n\n        public void OnSessionStarted(SessionStartedRequest request, Session session, Context context) {            \n            Log.Info(\"OnSessionStarted requestId={0}, sessionId={1}\", request.RequestId, session.SessionId);\n        }\n\n\n        public SpeechletResponse OnLaunch(LaunchRequest request, Session session, Context context) {\n            Log.Info(\"OnLaunch requestId={0}, sessionId={1}\", request.RequestId, session.SessionId);\n            return GetWelcomeResponse();\n        }\n\n\n        public SpeechletResponse OnIntent(IntentRequest request, Session session, Context context) {\n            Log.Info(\"OnIntent requestId={0}, sessionId={1}\", request.RequestId, session.SessionId);\n\n            // Get intent from the request object.\n            Intent intent = request.Intent;\n            string intentName = (intent != null) ? intent.Name : null;\n\n            // Note: If the session is started with an intent, no welcome message will be rendered;\n            // rather, the intent specific response will be returned.\n            if (\"MyNameIsIntent\".Equals(intentName)) {\n                return SetNameInSessionAndSayHello(intent, session);\n            } \n            else if (\"WhatsMyNameIntent\".Equals(intentName)) {\n                return GetNameFromSessionAndSayHello(intent, session);\n            } \n            else {\n                throw new SpeechletException(\"Invalid Intent\");\n            }\n        }\n\n\n        public void OnSessionEnded(SessionEndedRequest request, Session session, Context context) {\n            Log.Info(\"OnSessionEnded requestId={0}, sessionId={1}\", request.RequestId, session.SessionId);\n        }\n\n\n        /**\n         * Creates and returns a {@code SpeechletResponse} with a welcome message.\n         * \n         * @return SpeechletResponse spoken and visual welcome message\n         */\n        private SpeechletResponse GetWelcomeResponse() {\n            // Create the welcome message.\n            string speechOutput = \n                \"Welcome to the Alexa AppKit session sample app, please tell me your name by saying, my name is Sam\";\n\n            // Here we are setting shouldEndSession to false to not end the session and\n            // prompt the user for input\n            return BuildSpeechletResponse(\"Welcome\", speechOutput, false);\n        }\n\n\n        /**\n         * Creates a {@code SpeechletResponse} for the intent and stores the extracted name in the\n         * Session.\n         * \n         * @param intent\n         *            intent for the request\n         * @return SpeechletResponse spoken and visual response the given intent\n         */\n        private SpeechletResponse SetNameInSessionAndSayHello(Intent intent, Session session) {\n            // Get the slots from the intent.\n            IDictionary<string, Slot> slots = intent.Slots;\n\n            // Get the name slot from the list slots.\n            Slot nameSlot = slots[NAME_SLOT];\n            string speechOutput = \"\";\n\n            // Check for name and create output to user.\n            if (nameSlot != null) {\n                // Store the user's name in the Session and create response.\n                string name = nameSlot.Value;\n                session.Attributes[NAME_KEY] = name;\n                speechOutput = String.Format(\n                    \"Hello {0}, now I can remember your name, you can ask me your name by saying, whats my name?\", name);\n            } \n            else {\n                // Render an error since we don't know what the users name is.\n                speechOutput = \"I'm not sure what your name is, please try again\";\n            }\n\n            // Here we are setting shouldEndSession to false to not end the session and\n            // prompt the user for input\n            return BuildSpeechletResponse(intent.Name, speechOutput, false);\n        }\n\n\n        /**\n         * Creates a {@code SpeechletResponse} for the intent and get the user's name from the Session.\n         * \n         * @param intent\n         *            intent for the request\n         * @return SpeechletResponse spoken and visual response for the intent\n         */\n        private SpeechletResponse GetNameFromSessionAndSayHello(Intent intent, Session session) {\n            string speechOutput = \"\";\n            bool shouldEndSession = false;\n\n            // Get the user's name from the session.\n            string name = (String)session.Attributes[NAME_KEY];\n\n            // Check to make sure user's name is set in the session.\n            if (!String.IsNullOrEmpty(name)) {\n                speechOutput = String.Format(\"Your name is {0}, goodbye\", name);\n                shouldEndSession = true;\n            } \n            else {\n                // Since the user's name is not set render an error message.\n                speechOutput = \"I'm not sure what your name is, you can say, my name is Sam\";\n            }\n\n            return BuildSpeechletResponse(intent.Name, speechOutput, shouldEndSession);\n        }\n\n\n        /**\n         * Creates and returns the visual and spoken response with shouldEndSession flag\n         * \n         * @param title\n         *            title for the companion application home card\n         * @param output\n         *            output content for speech and companion application home card\n         * @param shouldEndSession\n         *            should the session be closed\n         * @return SpeechletResponse spoken and visual response for the given input\n         */\n        private SpeechletResponse BuildSpeechletResponse(string title, string output, bool shouldEndSession) {\n            // Create the Simple card content.\n            SimpleCard card = new SimpleCard();\n            card.Title = String.Format(\"SessionSpeechlet - {0}\", title);\n            card.Content = String.Format(\"SessionSpeechlet - {0}\", output);\n\n            // Create the plain text output.\n            PlainTextOutputSpeech speech = new PlainTextOutputSpeech();\n            speech.Text = output;\n\n            /* Create a directive for Echo Show (example)\n             * This can be separeted so it can be easier to create\n             * a Show Directive where you can only need to write \n             * the important information\n             */\n            IList<Directive> listDirectiveTest = new List<Directive>();\n            DisplayRenderTemplateDirective directiveTest = new DisplayRenderTemplateDirective();\n            DisplayTemplate templateTest = new DisplayTemplate();\n            DisplayImage backgroundTest = new DisplayImage();\n            DisplayImage imageTest = new DisplayImage();\n\n            IList<DisplayImageSource> backgroundSourcesTest = new List<DisplayImageSource>();\n            IList<DisplayImageSource> imageSourcesTest = new List<DisplayImageSource>();\n\n            DisplayImageSource backgroundSource = new DisplayImageSource();\n            backgroundSource.Url = \"URL for the background image - must be secure (https)\";\n            DisplayImageSource imageSource = new DisplayImageSource();\n            imageSource.Url = \"URL for the main image - must be secure (https)\";\n\n            backgroundSourcesTest.Add(backgroundSource);\n            imageSourcesTest.Add(imageSource);\n\n            backgroundTest.ContentDescription = \"Description for the background image\";\n            backgroundTest.Sources = backgroundSourcesTest;\n\n            imageTest.ContentDescription = \"Description for the main image\";\n            imageTest.Sources = imageSourcesTest;\n\n            TextContent textContentTest = new TextContent();\n            TextField primaryContentTest = new TextField();\n            TextField secondaryContentTest = new TextField();\n            TextField tertiaryContentTest = new TextField();\n\n            primaryContentTest.Text = \"Primary Text (could be formatted)\";\n            primaryContentTest.Type = TextField.TextTypeEnum.RichText;\n\n            secondaryContentTest.Text = \"Secondary Text (could be formatted)\";\n            secondaryContentTest.Type = TextField.TextTypeEnum.RichText;\n\n            tertiaryContentTest.Text = \"Tertiary Text (could be formatted)\";\n            tertiaryContentTest.Type = TextField.TextTypeEnum.RichText;\n\n            textContentTest.PrimaryText = primaryContentTest;\n            textContentTest.SecondaryText = secondaryContentTest;\n            textContentTest.TertiaryText = tertiaryContentTest;\n\n            templateTest.Title = \"Hello, this is a Test\";\n            templateTest.BackButton = DisplayTemplate.ButtonStateEnum.HIDDEN;\n            templateTest.BackgroundImage = backgroundTest;\n            templateTest.Image = imageTest;\n            templateTest.Type = \"BodyTemplate2\";\n            templateTest.Token = \"\";\n            templateTest.TextContent = textContentTest;\n\n            directiveTest.Template = templateTest;\n            listDirectiveTest.Add(directiveTest);\n\n            // Create the speechlet response.\n            SpeechletResponse response = new SpeechletResponse();\n            response.ShouldEndSession = shouldEndSession;\n            response.OutputSpeech = speech;\n            response.Card = card;\n            response.Directives = listDirectiveTest;\n\n            return response;\n        }\n\n\n        /// <summary>\n        /// Creates an echo show video response\n        /// </summary>\n        /// <param name=\"title\">video title</param>\n        /// <param name=\"subtitle\">video subtitle</param>\n        /// <param name=\"url\">url to video (must be https!)</param>\n        /// <remarks>shouldEndSession should be null (not true or false, null) for the video to work!</remarks>\n        /// <returns>Echo Show Video Directive, playing a single video.</returns>\n        private Directive BuildEchoShowVideoAppResponse(string title, string subtitle, string url)\n        {\n            VideoAppLaunchDirective videoDirectiveTest = new VideoAppLaunchDirective();\n\n            var videoItem = new VideoItem\n            {\n                Source = url,\n                Metadata = new VideoItemMetadata\n                {\n                    Title = title,\n                    Subtitle = subtitle\n                }\n            };\n\n            videoDirectiveTest.VideoItem = videoItem;\n\n            return videoDirectiveTest;\n        }\n    }\n}"
  },
  {
    "path": "AlexaSkillsKit.Sample/Speechlet/SampleSessionUtterances.txt",
    "content": "MyNameIsIntent  my name is {john|Name}\nMyNameIsIntent  my name is {sam brown|Name}\nWhatsMyNameIntent whats my name\nWhatsMyNameIntent what is my name\nWhatsMyNameIntent say my name\nWhatsMyNameIntent tell me my name\nWhatsMyNameIntent tell me what my name is"
  },
  {
    "path": "AlexaSkillsKit.Sample/Startup.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing Microsoft.Owin;\nusing Owin;\n\n[assembly: OwinStartup(typeof(Sample.Startup))]\n\nnamespace Sample\n{\n    public partial class Startup\n    {\n        public void Configuration(IAppBuilder app)\n        {\n            ConfigureAuth(app);\n        }\n    }\n}\n"
  },
  {
    "path": "AlexaSkillsKit.Sample/Views/Home/Index.cshtml",
    "content": "﻿<div class=\"jumbotron\">\n    <h1>ASP.NET</h1>\n    <p class=\"lead\">ASP.NET is a free web framework for building great Web sites and Web applications using HTML, CSS, and JavaScript.</p>\n    <p><a href=\"http://asp.net\" class=\"btn btn-primary btn-lg\">Learn more &raquo;</a></p>\n</div>\n<div class=\"row\">\n    <div class=\"col-md-4\">\n        <h2>Getting started</h2>\n        <p>ASP.NET Web API is a framework that makes it easy to build HTTP services that reach\n        a broad range of clients, including browsers and mobile devices. ASP.NET Web API\n        is an ideal platform for building RESTful applications on the .NET Framework.</p>\n        <p><a class=\"btn btn-default\" href=\"http://go.microsoft.com/fwlink/?LinkId=301870\">Learn more &raquo;</a></p>\n    </div>\n    <div class=\"col-md-4\">\n        <h2>Get more libraries</h2>\n        <p>NuGet is a free Visual Studio extension that makes it easy to add, remove, and update libraries and tools in Visual Studio projects.</p>\n        <p><a class=\"btn btn-default\" href=\"http://go.microsoft.com/fwlink/?LinkId=301871\">Learn more &raquo;</a></p>\n    </div>\n    <div class=\"col-md-4\">\n        <h2>Web Hosting</h2>\n        <p>You can easily find a web hosting company that offers the right mix of features and price for your applications.</p>\n        <p><a class=\"btn btn-default\" href=\"http://go.microsoft.com/fwlink/?LinkId=301872\">Learn more &raquo;</a></p>\n    </div>\n</div>\n"
  },
  {
    "path": "AlexaSkillsKit.Sample/Views/Shared/Error.cshtml",
    "content": "﻿@{\n    Layout = null;\n}\n\n<!DOCTYPE html>\n<html>\n<head>\n    <meta name=\"viewport\" content=\"width=device-width\" />\n    <title>Error</title>\n</head>\n<body>\n    <hgroup>\n        <h1>Error.</h1>\n        <h2>An error occurred while processing your request.</h2>\n    </hgroup>\n</body>\n</html>\n"
  },
  {
    "path": "AlexaSkillsKit.Sample/Views/Shared/_Layout.cshtml",
    "content": "﻿<!DOCTYPE html>\n<html>\n<head>\n    <meta charset=\"utf-8\" />\n    <meta name=\"viewport\" content=\"width=device-width\" />\n    <title>@ViewBag.Title</title>\n    @Styles.Render(\"~/Content/css\")\n    @Scripts.Render(\"~/bundles/modernizr\")\n</head>\n<body>\n    <div class=\"navbar navbar-inverse navbar-fixed-top\">\n        <div class=\"container\">\n            <div class=\"navbar-header\">\n                <button type=\"button\" class=\"navbar-toggle\" data-toggle=\"collapse\" data-target=\".navbar-collapse\">\n                    <span class=\"icon-bar\"></span>\n                    <span class=\"icon-bar\"></span>\n                    <span class=\"icon-bar\"></span>\n                </button>\n                @Html.ActionLink(\"Application name\", \"Index\", \"Home\", new { area = \"\" }, new { @class = \"navbar-brand\" })\n            </div>\n            <div class=\"navbar-collapse collapse\">\n                <ul class=\"nav navbar-nav\">\n                    <li>@Html.ActionLink(\"Home\", \"Index\", \"Home\", new { area = \"\" }, null)</li>\n                    <li>@Html.ActionLink(\"API\", \"Index\", \"Help\", new { area = \"\" }, null)</li>\n                </ul>\n            </div>\n        </div>\n    </div>\n    <div class=\"container body-content\">\n        @RenderBody()\n        <hr />\n        <footer>\n            <p>&copy; @DateTime.Now.Year - My ASP.NET Application</p>\n        </footer>\n    </div>\n\n    @Scripts.Render(\"~/bundles/jquery\")\n    @Scripts.Render(\"~/bundles/bootstrap\")\n    @RenderSection(\"scripts\", required: false)\n</body>\n</html>\n"
  },
  {
    "path": "AlexaSkillsKit.Sample/Views/Web.config",
    "content": "﻿<?xml version=\"1.0\"?>\n\n<configuration>\n  <configSections>\n    <sectionGroup name=\"system.web.webPages.razor\" type=\"System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35\">\n      <section name=\"host\" type=\"System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35\" requirePermission=\"false\" />\n      <section name=\"pages\" type=\"System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35\" requirePermission=\"false\" />\n    </sectionGroup>\n  </configSections>\n\n  <system.web.webPages.razor>\n    <host factoryType=\"System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.2.2.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35\" />\n    <pages pageBaseType=\"System.Web.Mvc.WebViewPage\">\n      <namespaces>\n        <add namespace=\"System.Web.Mvc\" />\n        <add namespace=\"System.Web.Mvc.Ajax\" />\n        <add namespace=\"System.Web.Mvc.Html\" />\n        <add namespace=\"System.Web.Optimization\"/>\n        <add namespace=\"System.Web.Routing\" />\n        <add namespace=\"Sample\" />\n      </namespaces>\n    </pages>\n  </system.web.webPages.razor>\n\n  <appSettings>\n    <add key=\"webpages:Enabled\" value=\"false\" />\n  </appSettings>\n\n  <system.webServer>\n    <handlers>\n      <remove name=\"BlockViewHandler\"/>\n      <add name=\"BlockViewHandler\" path=\"*\" verb=\"*\" preCondition=\"integratedMode\" type=\"System.Web.HttpNotFoundHandler\" />\n    </handlers>\n  </system.webServer>\n</configuration>\n"
  },
  {
    "path": "AlexaSkillsKit.Sample/Views/_ViewStart.cshtml",
    "content": "﻿@{\n    Layout = \"~/Views/Shared/_Layout.cshtml\";\n}\n"
  },
  {
    "path": "AlexaSkillsKit.Sample/Web.Debug.config",
    "content": "﻿<?xml version=\"1.0\"?>\n\n<!-- For more information on using Web.config transformation visit http://go.microsoft.com/fwlink/?LinkId=301874 -->\n\n<configuration xmlns:xdt=\"http://schemas.microsoft.com/XML-Document-Transform\">\n  <!--\n    In the example below, the \"SetAttributes\" transform will change the value of\n    \"connectionString\" to use \"ReleaseSQLServer\" only when the \"Match\" locator\n    finds an attribute \"name\" that has a value of \"MyDB\".\n\n    <connectionStrings>\n      <add name=\"MyDB\"\n        connectionString=\"Data Source=ReleaseSQLServer;Initial Catalog=MyReleaseDB;Integrated Security=True\"\n        xdt:Transform=\"SetAttributes\" xdt:Locator=\"Match(name)\"/>\n    </connectionStrings>\n  -->\n  <system.web>\n    <!--\n      In the example below, the \"Replace\" transform will replace the entire\n      <customErrors> section of your Web.config file.\n      Note that because there is only one customErrors section under the\n      <system.web> node, there is no need to use the \"xdt:Locator\" attribute.\n\n      <customErrors defaultRedirect=\"GenericError.htm\"\n        mode=\"RemoteOnly\" xdt:Transform=\"Replace\">\n        <error statusCode=\"500\" redirect=\"InternalError.htm\"/>\n      </customErrors>\n    -->\n  </system.web>\n</configuration>\n"
  },
  {
    "path": "AlexaSkillsKit.Sample/Web.Release.config",
    "content": "﻿<?xml version=\"1.0\"?>\n\n<!-- For more information on using Web.config transformation visit http://go.microsoft.com/fwlink/?LinkId=301874 -->\n\n<configuration xmlns:xdt=\"http://schemas.microsoft.com/XML-Document-Transform\">\n  <!--\n    In the example below, the \"SetAttributes\" transform will change the value of\n    \"connectionString\" to use \"ReleaseSQLServer\" only when the \"Match\" locator\n    finds an attribute \"name\" that has a value of \"MyDB\".\n\n    <connectionStrings>\n      <add name=\"MyDB\"\n        connectionString=\"Data Source=ReleaseSQLServer;Initial Catalog=MyReleaseDB;Integrated Security=True\"\n        xdt:Transform=\"SetAttributes\" xdt:Locator=\"Match(name)\"/>\n    </connectionStrings>\n  -->\n  <system.web>\n    <compilation xdt:Transform=\"RemoveAttributes(debug)\" />\n    <!--\n      In the example below, the \"Replace\" transform will replace the entire\n      <customErrors> section of your Web.config file.\n      Note that because there is only one customErrors section under the\n      <system.web> node, there is no need to use the \"xdt:Locator\" attribute.\n\n      <customErrors defaultRedirect=\"GenericError.htm\"\n        mode=\"RemoteOnly\" xdt:Transform=\"Replace\">\n        <error statusCode=\"500\" redirect=\"InternalError.htm\"/>\n      </customErrors>\n    -->\n  </system.web>\n</configuration>\n"
  },
  {
    "path": "AlexaSkillsKit.Sample/Web.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n  For more information on how to configure your ASP.NET application, please visit\n  http://go.microsoft.com/fwlink/?LinkId=301879\n  -->\n<configuration>\n  <configSections>\n    \n    <section name=\"entityFramework\" type=\"System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" requirePermission=\"false\" />\n  <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 --></configSections>\n  <connectionStrings>\n    <add name=\"DefaultConnection\" connectionString=\"Data Source=(LocalDb)\\v11.0;AttachDbFilename=|DataDirectory|\\aspnet-AlexaAppKit.App-20150515034349.mdf;Initial Catalog=aspnet-AlexaAppKit.App-20150515034349;Integrated Security=True\" providerName=\"System.Data.SqlClient\" />\n  </connectionStrings>\n  <appSettings></appSettings>\n  <system.web>\n    <authentication mode=\"None\" />\n    <compilation debug=\"true\" targetFramework=\"4.5\" />\n    <httpRuntime targetFramework=\"4.5\" />\n  </system.web>\n  <system.webServer>\n    <modules>\n      <remove name=\"FormsAuthentication\" />\n    </modules>\n    \n  <handlers>\n      <remove name=\"ExtensionlessUrlHandler-Integrated-4.0\" />\n      <remove name=\"OPTIONSVerbHandler\" />\n      <remove name=\"TRACEVerbHandler\" />\n      <add name=\"ExtensionlessUrlHandler-Integrated-4.0\" path=\"*.\" verb=\"*\" type=\"System.Web.Handlers.TransferRequestHandler\" preCondition=\"integratedMode,runtimeVersionv4.0\" />\n    </handlers></system.webServer>\n  <runtime>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n\t\t\t<dependentAssembly>\n\t\t\t\t<assemblyIdentity name=\"WebGrease\" publicKeyToken=\"31BF3856AD364E35\" culture=\"neutral\" />\n\t\t\t\t<bindingRedirect oldVersion=\"0.0.0.0-1.6.5135.21930\" newVersion=\"1.6.5135.21930\" />\n\t\t\t</dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"Microsoft.Owin\" publicKeyToken=\"31bf3856ad364e35\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-3.0.1.0\" newVersion=\"3.0.1.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"Microsoft.Owin.Security.OAuth\" publicKeyToken=\"31bf3856ad364e35\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-3.0.1.0\" newVersion=\"3.0.1.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"Microsoft.Owin.Security.Cookies\" publicKeyToken=\"31bf3856ad364e35\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-3.0.1.0\" newVersion=\"3.0.1.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"Microsoft.Owin.Security\" publicKeyToken=\"31bf3856ad364e35\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-3.0.1.0\" newVersion=\"3.0.1.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"Newtonsoft.Json\" culture=\"neutral\" publicKeyToken=\"30ad4fe6b2a6aeed\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-7.0.0.0\" newVersion=\"7.0.0.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Web.Optimization\" publicKeyToken=\"31bf3856ad364e35\" />\n        <bindingRedirect oldVersion=\"1.0.0.0-1.1.0.0\" newVersion=\"1.1.0.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"WebGrease\" publicKeyToken=\"31bf3856ad364e35\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-1.6.5135.21930\" newVersion=\"1.6.5135.21930\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Net.Http.Formatting\" publicKeyToken=\"31bf3856ad364e35\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-5.2.3.0\" newVersion=\"5.2.3.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Web.Helpers\" publicKeyToken=\"31bf3856ad364e35\" />\n        <bindingRedirect oldVersion=\"1.0.0.0-3.0.0.0\" newVersion=\"3.0.0.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Web.WebPages\" publicKeyToken=\"31bf3856ad364e35\" />\n        <bindingRedirect oldVersion=\"1.0.0.0-3.0.0.0\" newVersion=\"3.0.0.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Web.Mvc\" publicKeyToken=\"31bf3856ad364e35\" />\n        <bindingRedirect oldVersion=\"1.0.0.0-5.2.3.0\" newVersion=\"5.2.3.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Web.Http\" publicKeyToken=\"31bf3856ad364e35\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-5.2.3.0\" newVersion=\"5.2.3.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"Antlr3.Runtime\" publicKeyToken=\"eb42632606e9261f\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-3.5.0.2\" newVersion=\"3.5.0.2\" />\n      </dependentAssembly>\n    </assemblyBinding>\n  </runtime>\n  <entityFramework>\n    <defaultConnectionFactory type=\"System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework\">\n      <parameters>\n        <parameter value=\"mssqllocaldb\" />\n      </parameters>\n    </defaultConnectionFactory>\n    <providers>\n      <provider invariantName=\"System.Data.SqlClient\" type=\"System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer\" />\n    </providers>\n  </entityFramework>\n</configuration>\n"
  },
  {
    "path": "AlexaSkillsKit.Sample/packages.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n  <package id=\"Antlr\" version=\"3.5.0.2\" targetFramework=\"net45\" userInstalled=\"true\" />\n  <package id=\"bootstrap\" version=\"3.0.0\" targetFramework=\"net45\" userInstalled=\"true\" />\n  <package id=\"EntityFramework\" version=\"6.1.3\" targetFramework=\"net45\" userInstalled=\"true\" />\n  <package id=\"jQuery\" version=\"1.10.2\" targetFramework=\"net45\" userInstalled=\"true\" />\n  <package id=\"jQuery.Validation\" version=\"1.11.1\" targetFramework=\"net45\" userInstalled=\"true\" />\n  <package id=\"Microsoft.AspNet.Identity.Core\" version=\"2.2.1\" targetFramework=\"net45\" userInstalled=\"true\" />\n  <package id=\"Microsoft.AspNet.Identity.EntityFramework\" version=\"2.2.1\" targetFramework=\"net45\" userInstalled=\"true\" />\n  <package id=\"Microsoft.AspNet.Identity.Owin\" version=\"2.2.1\" targetFramework=\"net45\" userInstalled=\"true\" />\n  <package id=\"Microsoft.AspNet.Mvc\" version=\"5.2.3\" targetFramework=\"net45\" userInstalled=\"true\" />\n  <package id=\"Microsoft.AspNet.Razor\" version=\"3.2.3\" targetFramework=\"net45\" userInstalled=\"true\" />\n  <package id=\"Microsoft.AspNet.Web.Optimization\" version=\"1.1.3\" targetFramework=\"net45\" userInstalled=\"true\" />\n  <package id=\"Microsoft.AspNet.WebApi\" version=\"5.2.3\" targetFramework=\"net45\" userInstalled=\"true\" />\n  <package id=\"Microsoft.AspNet.WebApi.Client\" version=\"5.2.3\" targetFramework=\"net45\" userInstalled=\"true\" />\n  <package id=\"Microsoft.AspNet.WebApi.Core\" version=\"5.2.3\" targetFramework=\"net45\" userInstalled=\"true\" />\n  <package id=\"Microsoft.AspNet.WebApi.HelpPage\" version=\"5.2.3\" targetFramework=\"net45\" userInstalled=\"true\" />\n  <package id=\"Microsoft.AspNet.WebApi.Owin\" version=\"5.2.3\" targetFramework=\"net45\" userInstalled=\"true\" />\n  <package id=\"Microsoft.AspNet.WebApi.WebHost\" version=\"5.2.3\" targetFramework=\"net45\" userInstalled=\"true\" />\n  <package id=\"Microsoft.AspNet.WebPages\" version=\"3.2.3\" targetFramework=\"net45\" userInstalled=\"true\" />\n  <package id=\"Microsoft.jQuery.Unobtrusive.Validation\" version=\"3.2.2\" targetFramework=\"net45\" userInstalled=\"true\" />\n  <package id=\"Microsoft.Owin\" version=\"3.0.1\" targetFramework=\"net45\" userInstalled=\"true\" />\n  <package id=\"Microsoft.Owin.Host.SystemWeb\" version=\"3.0.1\" targetFramework=\"net45\" userInstalled=\"true\" />\n  <package id=\"Microsoft.Owin.Security\" version=\"3.0.1\" targetFramework=\"net45\" userInstalled=\"true\" />\n  <package id=\"Microsoft.Owin.Security.Cookies\" version=\"3.0.1\" targetFramework=\"net45\" userInstalled=\"true\" />\n  <package id=\"Microsoft.Owin.Security.Facebook\" version=\"3.0.1\" targetFramework=\"net45\" userInstalled=\"true\" />\n  <package id=\"Microsoft.Owin.Security.Google\" version=\"3.0.1\" targetFramework=\"net45\" userInstalled=\"true\" />\n  <package id=\"Microsoft.Owin.Security.MicrosoftAccount\" version=\"3.0.1\" targetFramework=\"net45\" userInstalled=\"true\" />\n  <package id=\"Microsoft.Owin.Security.OAuth\" version=\"3.0.1\" targetFramework=\"net45\" userInstalled=\"true\" />\n  <package id=\"Microsoft.Owin.Security.Twitter\" version=\"3.0.1\" targetFramework=\"net45\" userInstalled=\"true\" />\n  <package id=\"Microsoft.Web.Infrastructure\" version=\"1.0.0.0\" targetFramework=\"net45\" userInstalled=\"true\" />\n  <package id=\"Modernizr\" version=\"2.6.2\" targetFramework=\"net45\" userInstalled=\"true\" />\n  <package id=\"Newtonsoft.Json\" version=\"7.0.1\" targetFramework=\"net45\" userInstalled=\"true\" />\n  <package id=\"NLog\" version=\"3.2.1\" targetFramework=\"net45\" userInstalled=\"true\" />\n  <package id=\"NLog.Config\" version=\"3.2.1\" targetFramework=\"net45\" userInstalled=\"true\" />\n  <package id=\"NLog.Schema\" version=\"3.2.1\" targetFramework=\"net45\" userInstalled=\"true\" />\n  <package id=\"Owin\" version=\"1.0\" targetFramework=\"net45\" userInstalled=\"true\" />\n  <package id=\"Respond\" version=\"1.2.0\" targetFramework=\"net45\" userInstalled=\"true\" />\n  <package id=\"WebGrease\" version=\"1.6.0\" targetFramework=\"net45\" userInstalled=\"true\" />\n</packages>"
  },
  {
    "path": "AlexaSkillsKit.Sample.Dialog.AzureFunc/.gitignore",
    "content": "## Ignore Visual Studio temporary files, build results, and\n## files generated by popular Visual Studio add-ons.\n\n# Azure Functions localsettings file\nlocal.settings.json\n\n# User-specific files\n*.suo\n*.user\n*.userosscache\n*.sln.docstates\n\n# User-specific files (MonoDevelop/Xamarin Studio)\n*.userprefs\n\n# Build results\n[Dd]ebug/\n[Dd]ebugPublic/\n[Rr]elease/\n[Rr]eleases/\nx64/\nx86/\nbld/\n[Bb]in/\n[Oo]bj/\n[Ll]og/\n\n# Visual Studio 2015 cache/options directory\n.vs/\n# Uncomment if you have tasks that create the project's static files in wwwroot\n#wwwroot/\n\n# MSTest test Results\n[Tt]est[Rr]esult*/\n[Bb]uild[Ll]og.*\n\n# NUNIT\n*.VisualState.xml\nTestResult.xml\n\n# Build Results of an ATL Project\n[Dd]ebugPS/\n[Rr]eleasePS/\ndlldata.c\n\n# DNX\nproject.lock.json\nproject.fragment.lock.json\nartifacts/\n\n*_i.c\n*_p.c\n*_i.h\n*.ilk\n*.meta\n*.obj\n*.pch\n*.pdb\n*.pgc\n*.pgd\n*.rsp\n*.sbr\n*.tlb\n*.tli\n*.tlh\n*.tmp\n*.tmp_proj\n*.log\n*.vspscc\n*.vssscc\n.builds\n*.pidb\n*.svclog\n*.scc\n\n# Chutzpah Test files\n_Chutzpah*\n\n# Visual C++ cache files\nipch/\n*.aps\n*.ncb\n*.opendb\n*.opensdf\n*.sdf\n*.cachefile\n*.VC.db\n*.VC.VC.opendb\n\n# Visual Studio profiler\n*.psess\n*.vsp\n*.vspx\n*.sap\n\n# TFS 2012 Local Workspace\n$tf/\n\n# Guidance Automation Toolkit\n*.gpState\n\n# ReSharper is a .NET coding add-in\n_ReSharper*/\n*.[Rr]e[Ss]harper\n*.DotSettings.user\n\n# JustCode is a .NET coding add-in\n.JustCode\n\n# TeamCity is a build add-in\n_TeamCity*\n\n# DotCover is a Code Coverage Tool\n*.dotCover\n\n# NCrunch\n_NCrunch_*\n.*crunch*.local.xml\nnCrunchTemp_*\n\n# MightyMoose\n*.mm.*\nAutoTest.Net/\n\n# Web workbench (sass)\n.sass-cache/\n\n# Installshield output folder\n[Ee]xpress/\n\n# DocProject is a documentation generator add-in\nDocProject/buildhelp/\nDocProject/Help/*.HxT\nDocProject/Help/*.HxC\nDocProject/Help/*.hhc\nDocProject/Help/*.hhk\nDocProject/Help/*.hhp\nDocProject/Help/Html2\nDocProject/Help/html\n\n# Click-Once directory\npublish/\n\n# Publish Web Output\n*.[Pp]ublish.xml\n*.azurePubxml\n# TODO: Comment the next line if you want to checkin your web deploy settings\n# but database connection strings (with potential passwords) will be unencrypted\n#*.pubxml\n*.publishproj\n\n# Microsoft Azure Web App publish settings. Comment the next line if you want to\n# checkin your Azure Web App publish settings, but sensitive information contained\n# in these scripts will be unencrypted\nPublishScripts/\n\n# NuGet Packages\n*.nupkg\n# The packages folder can be ignored because of Package Restore\n**/packages/*\n# except build/, which is used as an MSBuild target.\n!**/packages/build/\n# Uncomment if necessary however generally it will be regenerated when needed\n#!**/packages/repositories.config\n# NuGet v3's project.json files produces more ignoreable files\n*.nuget.props\n*.nuget.targets\n\n# Microsoft Azure Build Output\ncsx/\n*.build.csdef\n\n# Microsoft Azure Emulator\necf/\nrcf/\n\n# Windows Store app package directories and files\nAppPackages/\nBundleArtifacts/\nPackage.StoreAssociation.xml\n_pkginfo.txt\n\n# Visual Studio cache files\n# files ending in .cache can be ignored\n*.[Cc]ache\n# but keep track of directories ending in .cache\n!*.[Cc]ache/\n\n# Others\nClientBin/\n~$*\n*~\n*.dbmdl\n*.dbproj.schemaview\n*.jfm\n*.pfx\n*.publishsettings\nnode_modules/\norleans.codegen.cs\n\n# Since there are multiple workflows, uncomment next line to ignore bower_components\n# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)\n#bower_components/\n\n# RIA/Silverlight projects\nGenerated_Code/\n\n# Backup & report files from converting an old project file\n# to a newer Visual Studio version. Backup files are not needed,\n# because we have git ;-)\n_UpgradeReport_Files/\nBackup*/\nUpgradeLog*.XML\nUpgradeLog*.htm\n\n# SQL Server files\n*.mdf\n*.ldf\n\n# Business Intelligence projects\n*.rdl.data\n*.bim.layout\n*.bim_*.settings\n\n# Microsoft Fakes\nFakesAssemblies/\n\n# GhostDoc plugin setting file\n*.GhostDoc.xml\n\n# Node.js Tools for Visual Studio\n.ntvs_analysis.dat\n\n# Visual Studio 6 build log\n*.plg\n\n# Visual Studio 6 workspace options file\n*.opt\n\n# Visual Studio LightSwitch build output\n**/*.HTMLClient/GeneratedArtifacts\n**/*.DesktopClient/GeneratedArtifacts\n**/*.DesktopClient/ModelManifest.xml\n**/*.Server/GeneratedArtifacts\n**/*.Server/ModelManifest.xml\n_Pvt_Extensions\n\n# Paket dependency manager\n.paket/paket.exe\npaket-files/\n\n# FAKE - F# Make\n.fake/\n\n# JetBrains Rider\n.idea/\n*.sln.iml\n\n# CodeRush\n.cr/\n\n# Python Tools for Visual Studio (PTVS)\n__pycache__/\n*.pyc"
  },
  {
    "path": "AlexaSkillsKit.Sample.Dialog.AzureFunc/AlexaHttpTrigger.cs",
    "content": "using Microsoft.Azure.WebJobs;\nusing Microsoft.Azure.WebJobs.Extensions.Http;\nusing Microsoft.Azure.WebJobs.Host;\nusing System.Net.Http;\nusing System.Threading.Tasks;\n\nnamespace AlexaSkillsKit.Sample.Dialog.AzureFunc\n{\n    public static class AlexaHttpTrigger\n    {\n        private static SampleSkillFactory appFactory = new SampleSkillFactory();\n\n        [FunctionName(\"AlexaHttpTrigger\")]\n        public static async Task<HttpResponseMessage> Run([HttpTrigger(AuthorizationLevel.Anonymous, \"post\", Route = null)]HttpRequestMessage req, TraceWriter log)\n        {\n            var logHelper = appFactory.CreateLogHelper(log);\n            await logHelper.Log(\"HTTP trigger function recieved a request.\");\n            await logHelper.Log($\"Request: {await req.Content.ReadAsStringAsync()}\");\n\n            var app = appFactory.CreateSpeechletApp(logHelper);\n            var response = await app.GetResponseAsync(req);\n\n            await logHelper.Log($\"Response: {await response.Content.ReadAsStringAsync()}\");\n            return response;\n        }\n    }\n}"
  },
  {
    "path": "AlexaSkillsKit.Sample.Dialog.AzureFunc/AlexaSkillsKit.Sample.Dialog.AzureFunc.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n  <PropertyGroup>\n    <TargetFramework>net461</TargetFramework>\n    <RootNamespace>AlexaSkillsKit.Sample.Dialog.AzureFunc</RootNamespace>\n  </PropertyGroup>\n  <ItemGroup>    \n    <PackageReference Include=\"AlexaSkillsKit.NET\" Version=\"1.6.0\" />    \n    <PackageReference Include=\"Microsoft.NET.Sdk.Functions\" Version=\"1.0.7\" />    \n    <PackageReference Include=\"Newtonsoft.Json\" Version=\"9.0.1\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Reference Include=\"Microsoft.CSharp\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Update=\"host.json\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </None>\n    <None Update=\"local.settings.json\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n      <CopyToPublishDirectory>Never</CopyToPublishDirectory>\n    </None>\n  </ItemGroup>\n</Project>\n"
  },
  {
    "path": "AlexaSkillsKit.Sample.Dialog.AzureFunc/Handlers/DefaultHandler.cs",
    "content": "﻿using AlexaSkillsKit.Sample.Dialog.AzureFunc.Helpers.Builder;\nusing AlexaSkillsKit.Sample.Dialog.AzureFunc.Helpers.Log;\nusing AlexaSkillsKit.Slu;\nusing AlexaSkillsKit.Speechlet;\nusing System.Threading.Tasks;\n\nnamespace AlexaSkillsKit.Sample.Dialog.AzureFunc.Handlers\n{\n    public class DefaultHandler : IntentHandler\n    {\n        private static readonly string HelpIndexAttribute = \"Index\";\n        private static readonly string[] HelpResponces = new[]\n        {\n            \"Say something\",\n            \"Are you still here?\",\n            \"What can I help you?\",\n            \"WTF?\"\n        };\n\n        public DefaultHandler(ISpeechletResponseBuilder responseBuilder, ILogHelper logHelper)\n            : base(responseBuilder, logHelper)\n        {\n        }\n\n        private static int GetIntAttribute(Session session, string key, int defaultValue = 0)\n        {\n            string value = session.Attributes.TryGetValue(key, out value) ? value : string.Empty;\n            int result = int.TryParse(value, out result) ? result : 0;\n            return result;\n        }\n\n        private static void SetIntAttribute(Session session, string key, int value) {\n            session.Attributes[key] = $\"{value}\";\n        }\n\n        public async override Task<ISpeechletResponseBuilder> HandleIntentAsync(Intent intent, IntentRequest.DialogStateEnum dialogState, Session session)\n        {\n            await logHelper.Log($\"Something unrecognized sayd\");\n            var index = GetIntAttribute(session, HelpIndexAttribute);\n            SetIntAttribute(session, HelpIndexAttribute, (index + 1) / HelpResponces.Length);\n            return responseBuilder.Say(HelpResponces[index]).KeepSession();\n        }\n    }\n}"
  },
  {
    "path": "AlexaSkillsKit.Sample.Dialog.AzureFunc/Handlers/IIntentHandler.cs",
    "content": "﻿using AlexaSkillsKit.Speechlet;\nusing System.Threading.Tasks;\n\nnamespace AlexaSkillsKit.Sample.Dialog.AzureFunc.Handlers\n{\n    public interface IIntentHandler\n    {\n        Task<SpeechletResponse> OnIntentAsync(IntentRequest intentRequest, Session session);\n    }\n}"
  },
  {
    "path": "AlexaSkillsKit.Sample.Dialog.AzureFunc/Handlers/IntentHandler.cs",
    "content": "﻿using AlexaSkillsKit.Sample.Dialog.AzureFunc.Helpers.Builder;\nusing AlexaSkillsKit.Sample.Dialog.AzureFunc.Helpers.Log;\nusing AlexaSkillsKit.Slu;\nusing AlexaSkillsKit.Speechlet;\nusing System.Threading.Tasks;\n\nnamespace AlexaSkillsKit.Sample.Dialog.AzureFunc.Handlers\n{\n    public abstract class IntentHandler : IIntentHandler\n    {\n        protected readonly ISpeechletResponseBuilder responseBuilder;\n        protected readonly ILogHelper logHelper;\n\n        public IntentHandler(ISpeechletResponseBuilder responseBuilder, ILogHelper logHelper)\n        {\n            this.responseBuilder = responseBuilder;\n            this.logHelper = logHelper;\n        }\n\n        public async Task<SpeechletResponse> OnIntentAsync(IntentRequest intentRequest, Session session) {\n            await logHelper.Log($\"User {session.User.Id} in session {session.SessionId}\");\n            return (await HandleIntentAsync(intentRequest.Intent, intentRequest.DialogState, session)).Build();\n        }\n\n        public abstract Task<ISpeechletResponseBuilder> HandleIntentAsync(Intent intent, IntentRequest.DialogStateEnum dialogState, Session session);\n    }\n}"
  },
  {
    "path": "AlexaSkillsKit.Sample.Dialog.AzureFunc/Handlers/SampleIntent1Handler.cs",
    "content": "﻿using AlexaSkillsKit.Sample.Dialog.AzureFunc.Helpers;\nusing AlexaSkillsKit.Sample.Dialog.AzureFunc.Helpers.Builder;\nusing AlexaSkillsKit.Sample.Dialog.AzureFunc.Helpers.Log;\nusing AlexaSkillsKit.Slu;\nusing AlexaSkillsKit.Speechlet;\nusing System.Threading.Tasks;\n\nnamespace AlexaSkillsKit.Sample.Dialog.AzureFunc.Handlers\n{\n    public class SampleIntent1Handler : IntentHandler\n    {\n        public SampleIntent1Handler(ISpeechletResponseBuilder responseBuilder, ILogHelper logHelper)\n            : base(responseBuilder, logHelper)\n        {\n        }\n\n        public async override Task<ISpeechletResponseBuilder> HandleIntentAsync(Intent intent, IntentRequest.DialogStateEnum dialogState, Session session) {\n            var slot = intent.Slots[SlotNames.SampleSlot1];\n            var noValue = string.IsNullOrEmpty(slot.Value);\n            if (noValue && session.IsNew) {\n                await logHelper.Log($\"New request, asking for details\");\n                return responseBuilder\n                    .Say(\"Something in particular?\")\n                    .KeepSession();\n            }\n\n            var confirmed = intent.ConfirmationStatus.ToBool();\n            if (confirmed == null) {\n                await logHelper.Log($\"Request, asking to confirm\");\n                return responseBuilder.DialogConfirmIntent(intent, noValue ? \"You requested anything. Correct?\" : null);\n            }\n\n            var logMessage = (bool)confirmed ? \"User rejected request\" : \"User confirmed request\";\n            await logHelper.Log(logMessage);\n            var speech = (bool)confirmed ?\n                (noValue ?\n                    \"Thanks. We will contact you soon\" :\n                    $\"Thanks. We will contact you soon about {slot.Value}\") :\n                \"What was your request?\";\n            return responseBuilder.Say(speech);\n        }\n    }\n}"
  },
  {
    "path": "AlexaSkillsKit.Sample.Dialog.AzureFunc/Handlers/SampleIntent2Handler.cs",
    "content": "﻿using AlexaSkillsKit.Sample.Dialog.AzureFunc.Helpers;\nusing AlexaSkillsKit.Sample.Dialog.AzureFunc.Helpers.Builder;\nusing AlexaSkillsKit.Sample.Dialog.AzureFunc.Helpers.Log;\nusing AlexaSkillsKit.Slu;\nusing AlexaSkillsKit.Speechlet;\nusing System.Threading.Tasks;\n\nnamespace AlexaSkillsKit.Sample.Dialog.AzureFunc.Handlers\n{\n    public class SampleIntent2Handler : DefaultHandler\n    {\n        public SampleIntent2Handler(ISpeechletResponseBuilder responseBuilder, ILogHelper logHelper)\n            : base(responseBuilder, logHelper)\n        {\n        }\n\n        public async override Task<ISpeechletResponseBuilder> HandleIntentAsync(Intent intent, IntentRequest.DialogStateEnum dialogState, Session session)\n        {\n            var slot = intent.Slots[SlotNames.SampleSlot1];\n            var noValue = string.IsNullOrEmpty(slot.Value);\n            if (!session.IsNew && !noValue)\n            {\n                await logHelper.Log($\"Details: {slot.Value}\");\n                return responseBuilder.Say(\"Thanks. Need something else?\");\n            }\n            return await base.HandleIntentAsync(intent, dialogState, session);\n        }\n    }\n}"
  },
  {
    "path": "AlexaSkillsKit.Sample.Dialog.AzureFunc/Handlers/SampleIntent3Handler.cs",
    "content": "﻿using AlexaSkillsKit.Sample.Dialog.AzureFunc.Helpers;\nusing AlexaSkillsKit.Sample.Dialog.AzureFunc.Helpers.Builder;\nusing AlexaSkillsKit.Sample.Dialog.AzureFunc.Helpers.Log;\nusing AlexaSkillsKit.Slu;\nusing AlexaSkillsKit.Speechlet;\nusing System.Threading.Tasks;\n\nnamespace AlexaSkillsKit.Sample.Dialog.AzureFunc.Handlers\n{\n    public class SampleIntent3Handler : IntentHandler\n    {\n        public SampleIntent3Handler(ISpeechletResponseBuilder responseBuilder, ILogHelper logHelper)\n            : base(responseBuilder, logHelper)\n        {\n        }\n\n        public async override Task<ISpeechletResponseBuilder> HandleIntentAsync(Intent intent, IntentRequest.DialogStateEnum dialogState, Session session)\n        {\n            var slot = intent.Slots[SlotNames.SampleSlot1];\n            var noValue = string.IsNullOrEmpty(slot.Value);\n            if (!noValue)\n            {\n                await logHelper.Log($\"User asked about slot1: {slot.Value}\");\n                return responseBuilder.Say($\"Slot1 is {slot.Value}\");\n            }\n\n            slot = intent.Slots[SlotNames.SampleSlot2];\n            noValue = string.IsNullOrEmpty(slot.Value);\n            if (!noValue)\n            {\n                await logHelper.Log($\"User asked about slot2: {slot.Value}\");\n                return responseBuilder.Say($\"Slot2 is {slot.Value}\");\n            }\n            slot = intent.Slots[SlotNames.SampleSlot3];\n            noValue = string.IsNullOrEmpty(slot.Value);\n            if (!noValue)\n            {\n                await logHelper.Log($\"User asked about slot3: {slot.Value}\");\n                var confirmed = slot.ConfirmationStatus.ToBool();\n                if (confirmed == null) {\n                    await logHelper.Log($\"Slot3, asking to confirm\");\n                    var speech = dialogState != IntentRequest.DialogStateEnum.IN_PROGRESS ? $\"Slot3 {slot.Value}. Correct?\" : null;\n                    return responseBuilder.DialogConfirmSlot(slot.Name, intent, speech);\n                }\n                var action = (bool)confirmed ? \"confirmed\" : \"rejected\";\n                return responseBuilder.Say($\"Slot3 {action} {slot.Value}\");\n            }\n            return responseBuilder.Say(\"Sorry, what do you mean?\").KeepSession();\n        }\n    }\n}"
  },
  {
    "path": "AlexaSkillsKit.Sample.Dialog.AzureFunc/Helpers/Builder/ISpeechletResponseBuilder.cs",
    "content": "﻿using AlexaSkillsKit.Speechlet;\nusing AlexaSkillsKit.UI;\n\nnamespace AlexaSkillsKit.Sample.Dialog.AzureFunc.Helpers.Builder\n{\n    public interface ISpeechletResponseBuilder\n    {\n        SpeechletResponse Build();\n        ISpeechletResponseBuilder KeepSession();\n        ISpeechletResponseBuilder NoSession();\n        ISpeechletResponseBuilder Say(OutputSpeech outputSpeech);\n        ISpeechletResponseBuilder Say(string text);\n        ISpeechletResponseBuilder SaySsml(string ssml);\n        ISpeechletResponseBuilder WithCard(Card card);\n        ISpeechletResponseBuilder WithDirective(Directive directive);\n    }\n}"
  },
  {
    "path": "AlexaSkillsKit.Sample.Dialog.AzureFunc/Helpers/Builder/SpeechletResponseBuilder.cs",
    "content": "﻿using AlexaSkillsKit.Speechlet;\nusing AlexaSkillsKit.UI;\nusing System.Collections.Generic;\n\nnamespace AlexaSkillsKit.Sample.Dialog.AzureFunc.Helpers.Builder\n{\n    public class SpeechletResponseBuilder : ISpeechletResponseBuilder\n    {\n        private SpeechletResponse response = new SpeechletResponse { ShouldEndSession = true };\n        private IList<Directive> directives = new List<Directive>();\n\n        public SpeechletResponse Build() {\n            if (directives.Count > 0) {\n                response.Directives = directives;\n            }\n            return response;\n        }\n\n        public ISpeechletResponseBuilder KeepSession() {\n            response.ShouldEndSession = false;\n            return this;\n        }\n\n        public ISpeechletResponseBuilder NoSession() {\n            response.ShouldEndSession = null;\n            return this;\n        }\n\n        public ISpeechletResponseBuilder Say(OutputSpeech outputSpeech) {\n            response.OutputSpeech = outputSpeech;\n            return this;\n        }\n\n        public ISpeechletResponseBuilder Say(string text) {\n            return Say(new PlainTextOutputSpeech() { Text = text });\n        }\n\n        public ISpeechletResponseBuilder SaySsml(string ssml) {\n            return Say(new SsmlOutputSpeech() { Ssml = ssml });\n        }\n\n        public ISpeechletResponseBuilder WithCard(Card card) {\n            response.Card = card;\n            return this;\n        }\n\n        public ISpeechletResponseBuilder WithDirective(Directive directive) {\n            directives.Add(directive);\n            return this;\n        }\n    }\n}"
  },
  {
    "path": "AlexaSkillsKit.Sample.Dialog.AzureFunc/Helpers/Builder/SpeechletResponseBuilderCardExtentions.cs",
    "content": "﻿using AlexaSkillsKit.UI;\nusing System.Collections.Generic;\n\nnamespace AlexaSkillsKit.Sample.Dialog.AzureFunc.Helpers.Builder\n{\n    public static class SpeechletResponseBuilderCardExtentions\n    {\n        public static ISpeechletResponseBuilder WithSimpleCard(this ISpeechletResponseBuilder builder,\n            string title, string content) {\n            return builder.WithCard(new SimpleCard {\n                Content = content,\n                Title = title\n            });\n        }\n\n        public static ISpeechletResponseBuilder WithStandardCard(this ISpeechletResponseBuilder builder,\n            string title, string text, Image image) {\n            return builder.WithCard(new StandardCard {\n                Text = text,\n                Title = title,\n                Image = image\n            });\n        }\n\n        public static ISpeechletResponseBuilder WithLinkAccountCard(this ISpeechletResponseBuilder builder) {\n            return builder.WithCard(new LinkAccountCard());\n        }\n\n        public static ISpeechletResponseBuilder WithAskForPermissionsConsentCard(this ISpeechletResponseBuilder builder,\n            IEnumerable<string> permissions) {\n            return builder.WithCard(new AskForPermissionsConsentCard {\n                Permissions = permissions\n            });\n        }\n    }\n}"
  },
  {
    "path": "AlexaSkillsKit.Sample.Dialog.AzureFunc/Helpers/Builder/SpeechletResponseBuilderDialogExtentions.cs",
    "content": "﻿using AlexaSkillsKit.Slu;\nusing AlexaSkillsKit.Interfaces.Dialog.Directives;\nusing System;\n\nnamespace AlexaSkillsKit.Sample.Dialog.AzureFunc.Helpers.Builder\n{\n    public static class SpeechletResponseBuilderDialogExtentions\n    {\n        private static ISpeechletResponseBuilder WithDialogDirective<T>(this ISpeechletResponseBuilder builder, Intent updatedIntent,\n            Action<T> initialize = null) where T: DialogDirective, new()\n        {\n            var directive = new T { UpdatedIntent = updatedIntent };\n            initialize?.Invoke(directive);\n            return builder.KeepSession().WithDirective(directive);\n        }\n\n        public static ISpeechletResponseBuilder DialogDelegate(this ISpeechletResponseBuilder builder, Intent updatedIntent = null) {\n            return builder.WithDialogDirective<DialogDelegateDirective>(updatedIntent);\n        }\n\n        public static ISpeechletResponseBuilder DialogElicitSlot(this ISpeechletResponseBuilder builder, string slotName,\n            Intent updatedIntent = null, string speech = null) {\n            return string.IsNullOrEmpty(speech) ?\n                builder.DialogDelegate(updatedIntent) :\n                builder.WithDialogDirective<DialogElicitSlotDirective>(updatedIntent, x => x.SlotToElicit = slotName).Say(speech);\n        }\n\n        public static ISpeechletResponseBuilder DialogConfirmSlot(this ISpeechletResponseBuilder builder, string slotName,\n            Intent updatedIntent = null, string speech = null) {\n            return string.IsNullOrEmpty(speech) ?\n                builder.DialogDelegate(updatedIntent) :\n                builder.WithDialogDirective<DialogConfirmSlotDirective>(updatedIntent, x => x.SlotToConfirm = slotName).Say(speech);\n        }\n\n        public static ISpeechletResponseBuilder DialogConfirmIntent(this ISpeechletResponseBuilder builder,\n            Intent updatedIntent = null, string speech = null) {\n            return string.IsNullOrEmpty(speech) ?\n                builder.DialogDelegate(updatedIntent) :\n                builder.WithDialogDirective<DialogConfirmIntentDirective>(updatedIntent).Say(speech);\n        }\n    }\n}"
  },
  {
    "path": "AlexaSkillsKit.Sample.Dialog.AzureFunc/Helpers/DialogHelper.cs",
    "content": "﻿using AlexaSkillsKit.Slu;\n\nnamespace AlexaSkillsKit.Sample.Dialog.AzureFunc.Helpers\n{\n    public static class DialogHelper\n    {\n        public static bool? ToBool(this ConfirmationStatusEnum confirmationStatus) {\n            switch (confirmationStatus) {\n                case ConfirmationStatusEnum.CONFIRMED:\n                    return true;\n                case ConfirmationStatusEnum.DENIED:\n                    return false;\n            }\n            return null;\n        }\n    }\n}"
  },
  {
    "path": "AlexaSkillsKit.Sample.Dialog.AzureFunc/Helpers/IntentNames.cs",
    "content": "﻿namespace AlexaSkillsKit.Sample.Dialog.AzureFunc.Helpers\n{\n    public static class IntentNames\n    {\n        public const string SampleIntent1 = \"SampleIntent1\";\n        public const string SampleIntent2 = \"SampleIntent2\";\n        public const string SampleIntent3 = \"SampleIntent3\";\n    }\n}"
  },
  {
    "path": "AlexaSkillsKit.Sample.Dialog.AzureFunc/Helpers/SlotNames.cs",
    "content": "﻿namespace AlexaSkillsKit.Sample.Dialog.AzureFunc.Helpers\n{\n    public static class SlotNames\n    {\n        public const string SampleSlot1 = \"SampleSlot1\";\n        public const string SampleSlot2 = \"SampleSlot2\";\n        public const string SampleSlot3 = \"SampleSlot3\";\n    }\n}"
  },
  {
    "path": "AlexaSkillsKit.Sample.Dialog.AzureFunc/Properties/launchSettings.json",
    "content": "{\n    \"profiles\": {\n        \"AlexaSkillsKit.Sample.Dialog.AzureFunc\": {\n            \"commandName\": \"Project\",\n            \"environmentVariables\": {\n                \"ApplicationId\": \"amzn1.ask.skill.NNN\"\n            }\n        }\n    }\n}"
  },
  {
    "path": "AlexaSkillsKit.Sample.Dialog.AzureFunc/SampleSkill.cs",
    "content": "﻿using AlexaSkillsKit.Sample.Dialog.AzureFunc.Handlers;\nusing AlexaSkillsKit.Sample.Dialog.AzureFunc.Helpers.Log;\nusing AlexaSkillsKit.Interfaces.AudioPlayer;\nusing AlexaSkillsKit.Speechlet;\nusing System;\nusing System.Collections.Generic;\nusing System.Threading.Tasks;\n\nnamespace AlexaSkillsKit.Sample.Dialog.AzureFunc\n{\n    public class SampleSkill : SpeechletBase, ISpeechletWithContextAsync, IAudioPlayerSpeechletAsync\n    {\n        private Dictionary<string, IIntentHandler> handlers = new Dictionary<string, IIntentHandler>();\n        private IIntentHandler defaultHandler;\n        public readonly ILogHelper logHelper;\n\n        public SampleSkill(ILogHelper logHelper)\n        {\n            Service.ApplicationId = Environment.GetEnvironmentVariable(\"ApplicationId\");\n            this.logHelper = logHelper;\n        }\n\n        public void Register(string intent, IIntentHandler handler)\n        {\n            handlers[intent] = handler;\n        }\n\n        public void RegisterDefault(IIntentHandler handler)\n        {\n            defaultHandler = handler;\n        }\n\n        public async Task<SpeechletResponse> OnIntentAsync(IntentRequest intentRequest, Session session, Context context) {\n            await logHelper.Log($\"{session.User.Id} in session {session.SessionId} asked for {intentRequest.Intent.Name}\");\n            IIntentHandler handler = handlers.TryGetValue(intentRequest.Intent.Name, out handler) ? handler : defaultHandler;\n            return await handler.OnIntentAsync(intentRequest, session);\n        }\n\n        public async Task<SpeechletResponse> OnLaunchAsync(LaunchRequest launchRequest, Session session, Context context)\n        {\n            await logHelper.Log($\"User {session.User.Id} in session {session.SessionId} launched skill\");\n            return await defaultHandler.OnIntentAsync(null, session);\n        }\n\n        public async Task OnSessionStartedAsync(SessionStartedRequest sessionStartedRequest, Session session, Context context)\n        {\n            await logHelper.Log($\"User {session.User.Id} started session {session.SessionId}\");\n        }\n\n        public async Task OnSessionEndedAsync(SessionEndedRequest sessionEndedRequest, Session session, Context context)\n        {\n            switch (sessionEndedRequest.Reason) {\n                case SessionEndedRequest.ReasonEnum.ERROR:\n                    await logHelper.Log($\"User {session.User.Id} ended session {session.SessionId} with error\");\n                    break;\n                case SessionEndedRequest.ReasonEnum.EXCEEDED_MAX_REPROMPTS:\n                    await logHelper.Log($\"User {session.User.Id} ended session {session.SessionId} due to lack of matching uttenancies\");\n                    break;\n                default:\n                    await logHelper.Log($\"User {session.User.Id} ended session {session.SessionId}\");\n                    break;\n            }\n        }\n\n        public async Task OnSystemExceptionEncounteredAsync(SystemExceptionEncounteredRequest systemRequest, Context context) {\n            await logHelper.Log($\"Exception '{systemRequest.Error?.Message}' encountered in request {systemRequest.Cause.RequestId}\");\n        }\n\n        public Task<AudioPlayerResponse> OnAudioPlayerAsync(AudioPlayerRequest audioRequest, Context context) {\n            throw new NotImplementedException();\n        }\n\n        public Task<AudioPlayerResponse> OnPlaybackControllerAsync(PlaybackControllerRequest playbackRequest, Context context) {\n            throw new NotImplementedException();\n        }\n    }\n}"
  },
  {
    "path": "AlexaSkillsKit.Sample.Dialog.AzureFunc/SampleSkillFactory.cs",
    "content": "﻿using AlexaSkillsKit.Sample.Dialog.AzureFunc.Handlers;\nusing AlexaSkillsKit.Sample.Dialog.AzureFunc.Helpers;\nusing AlexaSkillsKit.Sample.Dialog.AzureFunc.Helpers.Builder;\nusing AlexaSkillsKit.Sample.Dialog.AzureFunc.Helpers.Log;\nusing AlexaSkillsKit.Speechlet;\nusing Microsoft.Azure.WebJobs.Host;\n\nnamespace AlexaSkillsKit.Sample.Dialog.AzureFunc\n{\n    public class SampleSkillFactory\n    {\n        public ILogHelper CreateLogHelper(TraceWriter log) {\n            return new TraceWriterLogHelper(log);\n        }\n\n        public SpeechletBase CreateSpeechletApp(ILogHelper logHelper)\n        {\n            var responseBuilder = new SpeechletResponseBuilder();\n            var app = new SampleSkill(logHelper);\n            app.Register(IntentNames.SampleIntent1, new SampleIntent1Handler(responseBuilder, logHelper));\n            app.Register(IntentNames.SampleIntent2, new SampleIntent2Handler(responseBuilder, logHelper));\n            app.Register(IntentNames.SampleIntent3, new SampleIntent3Handler(responseBuilder, logHelper));\n            app.RegisterDefault(new DefaultHandler(responseBuilder, logHelper));\n            return app;\n        }\n    }\n}"
  },
  {
    "path": "AlexaSkillsKit.Sample.Dialog.AzureFunc/host.json",
    "content": "{\n    \"functions\": [ \"AlexaHttpTrigger\" ],\n    \"http\": {\n        \"routePrefix\": \"\",\n        \"maxConcurrentRequests\": 2\n    }\n}"
  },
  {
    "path": "AlexaSkillsKit.Sample.Dialog.AzureFunc.FunctionalTests/AlexaSkillsKit.Sample.Dialog.AzureFunc.FunctionalTests.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"15.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"..\\packages\\MSTest.TestAdapter.1.2.0\\build\\net45\\MSTest.TestAdapter.props\" Condition=\"Exists('..\\packages\\MSTest.TestAdapter.1.2.0\\build\\net45\\MSTest.TestAdapter.props')\" />\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProjectGuid>{140635E4-7705-4A2B-A8AD-F2920E0D2677}</ProjectGuid>\n    <OutputType>Library</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>AlexaSkillsKit.Sample.Dialog.AzureFunc.FunctionalTests</RootNamespace>\n    <AssemblyName>AlexaSkillsKit.Sample.Dialog.AzureFunc.FunctionalTests</AssemblyName>\n    <TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>\n    <FileAlignment>512</FileAlignment>\n    <ProjectTypeGuids>{3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>\n    <VisualStudioVersion Condition=\"'$(VisualStudioVersion)' == ''\">15.0</VisualStudioVersion>\n    <VSToolsPath Condition=\"'$(VSToolsPath)' == ''\">$(MSBuildExtensionsPath32)\\Microsoft\\VisualStudio\\v$(VisualStudioVersion)</VSToolsPath>\n    <ReferencePath>$(ProgramFiles)\\Common Files\\microsoft shared\\VSTT\\$(VisualStudioVersion)\\UITestExtensionPackages</ReferencePath>\n    <IsCodedUITest>False</IsCodedUITest>\n    <TestProjectType>UnitTest</TestProjectType>\n    <NuGetPackageImportStamp>\n    </NuGetPackageImportStamp>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\Release\\</OutputPath>\n    <DefineConstants>TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"AlexaSkillsKit, Version=1.6.0.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\AlexaSkillsKit.NET.1.6.0\\lib\\net45\\AlexaSkillsKit.dll</HintPath>\n    </Reference>\n    <Reference Include=\"BouncyCastle.Crypto, Version=1.8.1.0, Culture=neutral, PublicKeyToken=0e99375e54769942\">\n      <HintPath>..\\packages\\BouncyCastle.1.8.1\\lib\\BouncyCastle.Crypto.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Castle.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\Castle.Core.4.2.1\\lib\\net45\\Castle.Core.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.VisualStudio.TestPlatform.TestFramework, Version=14.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\MSTest.TestFramework.1.2.0\\lib\\net45\\Microsoft.VisualStudio.TestPlatform.TestFramework.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.VisualStudio.TestPlatform.TestFramework.Extensions, Version=14.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\MSTest.TestFramework.1.2.0\\lib\\net45\\Microsoft.VisualStudio.TestPlatform.TestFramework.Extensions.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Win32.Primitives, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\Microsoft.Win32.Primitives.4.3.0\\lib\\net46\\Microsoft.Win32.Primitives.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Moq, Version=4.8.0.0, Culture=neutral, PublicKeyToken=69f491c39445e920, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\Moq.4.8.1\\lib\\net45\\Moq.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Newtonsoft.Json, Version=9.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\Newtonsoft.Json.9.0.1\\lib\\net45\\Newtonsoft.Json.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.AppContext, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\System.AppContext.4.3.0\\lib\\net46\\System.AppContext.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.ComponentModel.Composition\" />\n    <Reference Include=\"System.Configuration\" />\n    <Reference Include=\"System.Console, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\System.Console.4.3.0\\lib\\net46\\System.Console.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Core\" />\n    <Reference Include=\"System.Diagnostics.DiagnosticSource, Version=4.0.2.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\System.Diagnostics.DiagnosticSource.4.4.1\\lib\\net46\\System.Diagnostics.DiagnosticSource.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Globalization.Calendars, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\System.Globalization.Calendars.4.3.0\\lib\\net46\\System.Globalization.Calendars.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.IO.Compression, Version=4.1.2.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\System.IO.Compression.4.3.0\\lib\\net46\\System.IO.Compression.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.IO.Compression.FileSystem\" />\n    <Reference Include=\"System.IO.Compression.ZipFile, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\System.IO.Compression.ZipFile.4.3.0\\lib\\net46\\System.IO.Compression.ZipFile.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.IO.FileSystem, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\System.IO.FileSystem.4.3.0\\lib\\net46\\System.IO.FileSystem.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.IO.FileSystem.Primitives, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\System.IO.FileSystem.Primitives.4.3.0\\lib\\net46\\System.IO.FileSystem.Primitives.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Net.Http, Version=4.1.1.2, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\System.Net.Http.4.3.3\\lib\\net46\\System.Net.Http.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Net.Http.Formatting, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\Microsoft.AspNet.WebApi.Client.5.2.3\\lib\\net45\\System.Net.Http.Formatting.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Net.Sockets, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\System.Net.Sockets.4.3.0\\lib\\net46\\System.Net.Sockets.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Numerics\" />\n    <Reference Include=\"System.Runtime.InteropServices.RuntimeInformation, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\System.Runtime.InteropServices.RuntimeInformation.4.3.0\\lib\\net45\\System.Runtime.InteropServices.RuntimeInformation.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Security.Cryptography.Algorithms, Version=4.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\packages\\System.Security.Cryptography.Algorithms.4.3.1\\lib\\net461\\System.Security.Cryptography.Algorithms.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Security.Cryptography.Encoding, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\System.Security.Cryptography.Encoding.4.3.0\\lib\\net46\\System.Security.Cryptography.Encoding.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Security.Cryptography.Primitives, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\System.Security.Cryptography.Primitives.4.3.0\\lib\\net46\\System.Security.Cryptography.Primitives.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Security.Cryptography.X509Certificates, Version=4.1.1.2, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\System.Security.Cryptography.X509Certificates.4.3.2\\lib\\net461\\System.Security.Cryptography.X509Certificates.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Threading.Tasks.Extensions, Version=4.1.1.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\System.Threading.Tasks.Extensions.4.4.0\\lib\\netstandard2.0\\System.Threading.Tasks.Extensions.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.ValueTuple, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\System.ValueTuple.4.4.0\\lib\\net461\\System.ValueTuple.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Xml\" />\n    <Reference Include=\"System.Xml.Linq\" />\n    <Reference Include=\"System.Xml.ReaderWriter, Version=4.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\packages\\System.Xml.ReaderWriter.4.3.1\\lib\\net46\\System.Xml.ReaderWriter.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"SampleIntent3HandlerTests.cs\" />\n    <Compile Include=\"SampleIntent2HandlerTests.cs\" />\n    <Compile Include=\"TestsBase.cs\" />\n    <Compile Include=\"SampleIntent1HandlerTests.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"app.config\" />\n    <None Include=\"packages.config\">\n      <SubType>Designer</SubType>\n    </None>\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\AlexaSkillsKit.Sample.Dialog.AzureFunc\\AlexaSkillsKit.Sample.Dialog.AzureFunc.csproj\">\n      <Project>{5d8ea80b-2194-4835-8c5f-bc9c415f51d1}</Project>\n      <Name>AlexaSkillsKit.Sample.Dialog.AzureFunc</Name>\n    </ProjectReference>\n  </ItemGroup>\n  <Import Project=\"$(VSToolsPath)\\TeamTest\\Microsoft.TestTools.targets\" Condition=\"Exists('$(VSToolsPath)\\TeamTest\\Microsoft.TestTools.targets')\" />\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\n  <Target Name=\"EnsureNuGetPackageBuildImports\" BeforeTargets=\"PrepareForBuild\">\n    <PropertyGroup>\n      <ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>\n    </PropertyGroup>\n    <Error Condition=\"!Exists('..\\packages\\MSTest.TestAdapter.1.2.0\\build\\net45\\MSTest.TestAdapter.props')\" Text=\"$([System.String]::Format('$(ErrorText)', '..\\packages\\MSTest.TestAdapter.1.2.0\\build\\net45\\MSTest.TestAdapter.props'))\" />\n    <Error Condition=\"!Exists('..\\packages\\MSTest.TestAdapter.1.2.0\\build\\net45\\MSTest.TestAdapter.targets')\" Text=\"$([System.String]::Format('$(ErrorText)', '..\\packages\\MSTest.TestAdapter.1.2.0\\build\\net45\\MSTest.TestAdapter.targets'))\" />\n  </Target>\n  <Import Project=\"..\\packages\\MSTest.TestAdapter.1.2.0\\build\\net45\\MSTest.TestAdapter.targets\" Condition=\"Exists('..\\packages\\MSTest.TestAdapter.1.2.0\\build\\net45\\MSTest.TestAdapter.targets')\" />\n</Project>"
  },
  {
    "path": "AlexaSkillsKit.Sample.Dialog.AzureFunc.FunctionalTests/Properties/AssemblyInfo.cs",
    "content": "using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n[assembly: AssemblyTitle(\"AkvelonSkill.FunctionalTests\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"\")]\n[assembly: AssemblyProduct(\"AkvelonSkill.FunctionalTests\")]\n[assembly: AssemblyCopyright(\"Copyright ©  2017\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n[assembly: ComVisible(false)]\n\n[assembly: Guid(\"140635e4-7705-4a2b-a8ad-f2920e0d2677\")]\n\n// [assembly: AssemblyVersion(\"1.0.*\")]\n[assembly: AssemblyVersion(\"1.0.0.0\")]\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\n"
  },
  {
    "path": "AlexaSkillsKit.Sample.Dialog.AzureFunc.FunctionalTests/SampleIntent1HandlerTests.cs",
    "content": "﻿using AlexaSkillsKit.Interfaces.Dialog.Directives;\nusing AlexaSkillsKit.Sample.Dialog.AzureFunc.Helpers;\nusing AlexaSkillsKit.Slu;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\nusing Moq;\nusing System.Linq;\nusing System.Threading.Tasks;\n\nnamespace AlexaSkillsKit.Sample.Dialog.AzureFunc.FunctionalTests\n{\n    [TestClass]\n    public class SampleIntent1HandlerTests: TestsBase\n    {\n        private Slot slot;\n\n        public SampleIntent1HandlerTests() {\n            intent.Name = IntentNames.SampleIntent1;\n            slot = intent.Slots[SlotNames.SampleSlot1] = new Slot { Name = SlotNames.SampleSlot1 };\n        }\n\n        [TestMethod]\n        public async Task SampleIntent1HandlerNoValueNew() {\n            var request = BuildRequest(intent);\n\n            var response = await target.ProcessRequestAsync(request);\n\n            Assert.IsTrue(keepSessionCalled);\n            Assert.IsNotNull(outputText);\n            Assert.AreEqual(0, outputDirectives.Count);\n            Mock.Get(responseBuilder).Verify(x => x.Build(), Times.Once);\n        }\n\n        [TestMethod]\n        public async Task SampleIntent1HandlerNoValueUnconfirmed() {\n            intent.ConfirmationStatus = ConfirmationStatusEnum.NONE;\n            var request = BuildRequest(intent, false);\n\n            var response = await target.ProcessRequestAsync(request);\n\n            Assert.IsTrue(keepSessionCalled);\n            Assert.IsNotNull(outputText);\n            Assert.AreEqual(1, outputDirectives.Count);\n            Assert.IsInstanceOfType(outputDirectives.First(), typeof(DialogConfirmIntentDirective));\n            Mock.Get(responseBuilder).Verify(x => x.Build(), Times.Once);\n        }\n\n        [TestMethod]\n        public async Task SampleIntent1HandlerHasValueUnconfirmed() {\n            slot.Value = \"SampleValue1\";\n            intent.ConfirmationStatus = ConfirmationStatusEnum.NONE;\n            var request = BuildRequest(intent);\n\n            var response = await target.ProcessRequestAsync(request);\n\n            Assert.IsTrue(keepSessionCalled);\n            Assert.IsNull(outputText);\n            Assert.AreEqual(1, outputDirectives.Count);\n            Assert.IsInstanceOfType(outputDirectives.First(), typeof(DialogDelegateDirective));\n            Mock.Get(responseBuilder).Verify(x => x.Build(), Times.Once);\n        }\n\n        [TestMethod]\n        public async Task SampleIntent1HandlerRejected() {\n            intent.ConfirmationStatus = ConfirmationStatusEnum.DENIED;\n            var request = BuildRequest(intent, false);\n\n            var response = await target.ProcessRequestAsync(request);\n\n            Assert.IsFalse(keepSessionCalled);\n            Assert.IsNotNull(outputText);\n            Assert.AreEqual(0, outputDirectives.Count);\n            Mock.Get(responseBuilder).Verify(x => x.Build(), Times.Once);\n        }\n\n        [TestMethod]\n        public async Task SampleIntent1HandlerHasValueConfirmed() {\n            slot.Value = \"SampleValue1\";\n            intent.ConfirmationStatus = ConfirmationStatusEnum.CONFIRMED;\n            var request = BuildRequest(intent);\n\n            var response = await target.ProcessRequestAsync(request);\n\n            Assert.IsFalse(keepSessionCalled);\n            Assert.IsTrue(outputText.Contains(slot.Value));\n            Assert.AreEqual(0, outputDirectives.Count);\n            Mock.Get(responseBuilder).Verify(x => x.Build(), Times.Once);\n        }\n    }\n}"
  },
  {
    "path": "AlexaSkillsKit.Sample.Dialog.AzureFunc.FunctionalTests/SampleIntent2HandlerTests.cs",
    "content": "﻿using AlexaSkillsKit.Sample.Dialog.AzureFunc.Helpers;\nusing AlexaSkillsKit.Slu;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\nusing Moq;\nusing System.Threading.Tasks;\n\nnamespace AlexaSkillsKit.Sample.Dialog.AzureFunc.FunctionalTests\n{\n    [TestClass]\n    public class SampleIntent2HandlerTests : TestsBase\n    {\n        private Slot slot;\n\n        public SampleIntent2HandlerTests() {\n            intent.Name = IntentNames.SampleIntent2;\n            slot = intent.Slots[SlotNames.SampleSlot1] = new Slot { Name = SlotNames.SampleSlot1 };\n        }\n\n        [TestMethod]\n        public async Task SampleIntent2HandlerNoValueNew() {\n            var request = BuildRequest(intent);\n\n            var response = await target.ProcessRequestAsync(request);\n\n            Assert.IsTrue(keepSessionCalled);\n            Assert.IsNotNull(outputText);\n            Assert.AreEqual(0, outputDirectives.Count);\n            Mock.Get(responseBuilder).Verify(x => x.Build(), Times.Once);\n        }\n\n        [TestMethod]\n        public async Task SampleIntent2HandlerNoValueNotNew() {\n            var request = BuildRequest(intent, false);\n\n            var response = await target.ProcessRequestAsync(request);\n\n            Assert.IsTrue(keepSessionCalled);\n            Assert.IsNotNull(outputText);\n            Assert.AreEqual(0, outputDirectives.Count);\n            Mock.Get(responseBuilder).Verify(x => x.Build(), Times.Once);\n        }\n\n        [TestMethod]\n        public async Task SampleIntent2HandlerHasValueNew() {\n            slot.Value = \"SampleValue1\";\n            var request = BuildRequest(intent);\n\n            var response = await target.ProcessRequestAsync(request);\n\n            Assert.IsTrue(keepSessionCalled);\n            Assert.IsNotNull(outputText);\n            Assert.AreEqual(0, outputDirectives.Count);\n            Mock.Get(responseBuilder).Verify(x => x.Build(), Times.Once);\n        }\n\n        [TestMethod]\n        public async Task SampleIntent2HandlerHasValueNotNew() {\n            slot.Value = \"SampleValue1\";\n            var request = BuildRequest(intent, false);\n\n            var response = await target.ProcessRequestAsync(request);\n\n            Assert.IsFalse(keepSessionCalled);\n            Assert.IsNotNull(outputText);\n            Assert.AreEqual(0, outputDirectives.Count);\n            Mock.Get(responseBuilder).Verify(x => x.Build(), Times.Once);\n        }\n    }\n}"
  },
  {
    "path": "AlexaSkillsKit.Sample.Dialog.AzureFunc.FunctionalTests/SampleIntent3HandlerTests.cs",
    "content": "﻿using AlexaSkillsKit.Interfaces.Dialog.Directives;\nusing AlexaSkillsKit.Sample.Dialog.AzureFunc.Helpers;\nusing AlexaSkillsKit.Slu;\nusing AlexaSkillsKit.Speechlet;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\nusing Moq;\nusing System.Linq;\nusing System.Threading.Tasks;\n\nnamespace AlexaSkillsKit.Sample.Dialog.AzureFunc.FunctionalTests\n{\n    [TestClass]\n    public class SampleIntent3HandlerTests : TestsBase\n    {\n        private Slot slot1;\n        private Slot slot2;\n        private Slot slot3;\n\n        public SampleIntent3HandlerTests() {\n            intent.Name = IntentNames.SampleIntent3;\n            slot1 = intent.Slots[SlotNames.SampleSlot1] = new Slot { Name = SlotNames.SampleSlot1 };\n            slot2 = intent.Slots[SlotNames.SampleSlot2] = new Slot { Name = SlotNames.SampleSlot2 };\n            slot3 = intent.Slots[SlotNames.SampleSlot3] = new Slot { Name = SlotNames.SampleSlot3 };\n        }\n\n        [TestMethod]\n        public async Task SampleIntent3HandlerSlot1HasValue() {\n            slot1.Value = \"SampleValue1\";\n            slot2.Value = \"SampleValue2\";\n            var request = BuildRequest(intent);\n\n            var response = await target.ProcessRequestAsync(request);\n\n            Assert.IsFalse(keepSessionCalled);\n            Assert.IsTrue(outputText.Contains(\"Slot1\"));\n            Assert.IsTrue(outputText.Contains(slot1.Value));\n            Assert.AreEqual(0, outputDirectives.Count);\n            Mock.Get(responseBuilder).Verify(x => x.Build(), Times.Once);\n        }\n\n        [TestMethod]\n        public async Task SampleIntent3HandlerSlot2HasValue() {\n            slot2.Value = \"SampleValue2\";\n            slot3.Value = \"SampleValue3\";\n            var request = BuildRequest(intent);\n\n            var response = await target.ProcessRequestAsync(request);\n\n            Assert.IsFalse(keepSessionCalled);\n            Assert.IsTrue(outputText.Contains(\"Slot2\"));\n            Assert.IsTrue(outputText.Contains(slot2.Value));\n            Assert.AreEqual(0, outputDirectives.Count);\n            Mock.Get(responseBuilder).Verify(x => x.Build(), Times.Once);\n        }\n\n        [TestMethod]\n        public async Task SampleIntent3HandlerSlot3HasValueStarted() {\n            slot3.Value = \"SampleValue3\";\n            slot3.ConfirmationStatus = ConfirmationStatusEnum.NONE;\n            var request = BuildRequest(intent, true, IntentRequest.DialogStateEnum.STARTED);\n\n            var response = await target.ProcessRequestAsync(request);\n\n            Assert.IsTrue(keepSessionCalled);\n            Assert.IsTrue(outputText.Contains(\"Slot3\"));\n            Assert.IsTrue(outputText.Contains(slot3.Value));\n            Assert.AreEqual(1, outputDirectives.Count);\n            Assert.IsInstanceOfType(outputDirectives.First(), typeof(DialogConfirmSlotDirective));\n            Mock.Get(responseBuilder).Verify(x => x.Build(), Times.Once);\n        }\n\n        [TestMethod]\n        public async Task SampleIntent3HandlerSlot3HasValueInProgress() {\n            slot3.Value = \"SampleValue3\";\n            slot3.ConfirmationStatus = ConfirmationStatusEnum.NONE;\n            var request = BuildRequest(intent, true, IntentRequest.DialogStateEnum.IN_PROGRESS);\n\n            var response = await target.ProcessRequestAsync(request);\n\n            Assert.IsTrue(keepSessionCalled);\n            Assert.IsNull(outputText);\n            Assert.AreEqual(1, outputDirectives.Count);\n            Assert.IsInstanceOfType(outputDirectives.First(), typeof(DialogDelegateDirective));\n            Mock.Get(responseBuilder).Verify(x => x.Build(), Times.Once);\n        }\n\n        [TestMethod]\n        public async Task SampleIntent3HandlerSlot3HasValueConfirmed() {\n            slot3.Value = \"SampleValue3\";\n            slot3.ConfirmationStatus = ConfirmationStatusEnum.CONFIRMED;\n            var request = BuildRequest(intent);\n\n            var response = await target.ProcessRequestAsync(request);\n\n            Assert.IsFalse(keepSessionCalled);\n            Assert.IsTrue(outputText.Contains(\"Slot3\"));\n            Assert.IsTrue(outputText.Contains(slot3.Value));\n            Assert.IsTrue(outputText.Contains(\"confirmed\"));\n            Assert.AreEqual(0, outputDirectives.Count);\n            Mock.Get(responseBuilder).Verify(x => x.Build(), Times.Once);\n        }\n\n        [TestMethod]\n        public async Task SampleIntent3HandlerSlot3HasValueRejected() {\n            slot3.Value = \"SampleValue3\";\n            slot3.ConfirmationStatus = ConfirmationStatusEnum.DENIED;\n            var request = BuildRequest(intent);\n\n            var response = await target.ProcessRequestAsync(request);\n\n            Assert.IsFalse(keepSessionCalled);\n            Assert.IsTrue(outputText.Contains(\"Slot3\"));\n            Assert.IsTrue(outputText.Contains(slot3.Value));\n            Assert.IsTrue(outputText.Contains(\"rejected\"));\n            Assert.AreEqual(0, outputDirectives.Count);\n            Mock.Get(responseBuilder).Verify(x => x.Build(), Times.Once);\n        }\n\n        [TestMethod]\n        public async Task SampleIntent3HandlerNoValue() {\n            var request = BuildRequest(intent, false);\n\n            var response = await target.ProcessRequestAsync(request);\n\n            Assert.IsTrue(keepSessionCalled);\n            Assert.IsNotNull(outputText);\n            Assert.AreEqual(0, outputDirectives.Count);\n            Mock.Get(responseBuilder).Verify(x => x.Build(), Times.Once);\n        }\n    }\n}"
  },
  {
    "path": "AlexaSkillsKit.Sample.Dialog.AzureFunc.FunctionalTests/TestsBase.cs",
    "content": "﻿using AlexaSkillsKit.Json;\nusing AlexaSkillsKit.Sample.Dialog.AzureFunc.Handlers;\nusing AlexaSkillsKit.Sample.Dialog.AzureFunc.Helpers;\nusing AlexaSkillsKit.Sample.Dialog.AzureFunc.Helpers.Builder;\nusing AlexaSkillsKit.Sample.Dialog.AzureFunc.Helpers.Log;\nusing AlexaSkillsKit.Slu;\nusing AlexaSkillsKit.Speechlet;\nusing Moq;\nusing Newtonsoft.Json;\nusing System;\nusing System.Collections.Generic;\n\nnamespace AlexaSkillsKit.Sample.Dialog.AzureFunc.FunctionalTests\n{\n    public class TestsBase\n    {\n        private static JsonSerializerSettings SerializerSettings = new JsonSerializerSettings() {\n            NullValueHandling = NullValueHandling.Ignore,\n            ContractResolver = new CamelCasePropertyNamesExceptDictionaryKeysContractResolver(),\n            Converters = new List<JsonConverter> { new Newtonsoft.Json.Converters.StringEnumConverter() }\n        };\n\n        private const string RequestJson = @\"{\"\"session\"\": {\"\"new\"\": <isNew>,\"\"sessionId\"\": \"\"SessionId.111111\"\",\n\"\"application\"\": {\"\"applicationId\"\": \"\"amzn1.ask.skill.NNN\"\"},\"\"attributes\"\": { },\"\"user\"\": {\"\"userId\"\": \"\"amzn1.ask.account.XXXX\"\"}},\n\"\"request\"\": {\"\"type\"\": \"\"IntentRequest\"\",\"\"requestId\"\": \"\"EdwRequestId.000000000\"\",\"\"intent\"\": <intent>,\n\"\"locale\"\": \"\"en-US\"\",\"\"timestamp\"\": \"\"2018-01-01T12:00:00Z\"\",\"\"dialogState\"\": <dialogState>},\n\"\"context\"\": {\"\"AudioPlayer\"\": {\"\"playerActivity\"\": \"\"IDLE\"\"},\n\"\"System\"\": {\"\"application\"\": {\"\"applicationId\"\": \"\"amzn1.ask.skill.NNN\"\"},\n\"\"user\"\": {\"\"userId\"\": \"\"amzn1.ask.account.XXXX\"\"},\"\"device\"\": {\"\"supportedInterfaces\"\": { }}}},\"\"version\"\": \"\"1.0\"\"}\";\n\n        protected readonly ILogHelper logHelper = Mock.Of<ILogHelper>();\n        protected readonly ISpeechletResponseBuilder responseBuilder = Mock.Of<ISpeechletResponseBuilder>();\n        protected readonly SpeechletResponse speechletResponse = new SpeechletResponse();\n\n        protected readonly SpeechletBase target;\n        protected readonly Intent intent;\n\n        protected string outputText = null;\n        protected List<Directive> outputDirectives = new List<Directive>();\n        protected bool keepSessionCalled = false;\n\n        protected TestsBase() {\n            Environment.SetEnvironmentVariable(\"ApplicationId\", \"amzn1.ask.skill.NNN\");\n\n            Mock.Get(responseBuilder).Setup(x => x.Say(It.IsAny<string>())).Returns(responseBuilder).Callback<string>(value => outputText = value);\n            Mock.Get(responseBuilder).Setup(x => x.KeepSession()).Returns(responseBuilder).Callback(() => keepSessionCalled = true);\n            Mock.Get(responseBuilder).Setup(x => x.WithDirective(It.IsAny<Directive>())).Returns(responseBuilder).Callback<Directive>(value => outputDirectives.Add(value));\n            Mock.Get(responseBuilder).Setup(x => x.Build()).Returns(speechletResponse);\n\n            target = InitializeApp();\n            intent = new Intent { Slots = new Dictionary<string, Slot>() };\n    }\n\n        private SpeechletBase InitializeApp() {\n            var app = new SampleSkill(logHelper);\n            app.Register(IntentNames.SampleIntent1, new SampleIntent1Handler(responseBuilder, logHelper));\n            app.Register(IntentNames.SampleIntent2, new SampleIntent2Handler(responseBuilder, logHelper));\n            app.Register(IntentNames.SampleIntent3, new SampleIntent3Handler(responseBuilder, logHelper));\n            app.RegisterDefault(new DefaultHandler(responseBuilder, logHelper));\n            return app;\n        }\n\n        protected string BuildRequest(Intent intent, bool isNewSession = true,\n            IntentRequest.DialogStateEnum dialogState = IntentRequest.DialogStateEnum.STARTED) {\n            return RequestJson\n                .Replace(\"<isNew>\", isNewSession.ToString().ToLower())\n                .Replace(\"<intent>\", JsonConvert.SerializeObject(intent, SerializerSettings))\n                .Replace(\"<dialogState>\", ((int)dialogState).ToString());\n        }\n    }\n}"
  },
  {
    "path": "AlexaSkillsKit.Sample.Dialog.AzureFunc.FunctionalTests/app.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n  <runtime>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n      <dependentAssembly>\n        <assemblyIdentity name=\"Newtonsoft.Json\" publicKeyToken=\"30ad4fe6b2a6aeed\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-9.0.0.0\" newVersion=\"9.0.0.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Diagnostics.DiagnosticSource\" publicKeyToken=\"cc7b13ffcd2ddd51\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.0.1.0\" newVersion=\"4.0.1.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Net.Http\" publicKeyToken=\"b03f5f7f11d50a3a\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.1.1.0\" newVersion=\"4.1.1.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Threading.Tasks.Extensions\" publicKeyToken=\"cc7b13ffcd2ddd51\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.1.1.0\" newVersion=\"4.1.1.0\" />\n      </dependentAssembly>\n    </assemblyBinding>\n  </runtime>\n</configuration>"
  },
  {
    "path": "AlexaSkillsKit.Sample.Dialog.AzureFunc.FunctionalTests/packages.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n  <package id=\"AlexaSkillsKit.NET\" version=\"1.6.0\" targetFramework=\"net461\" />\n  <package id=\"BouncyCastle\" version=\"1.8.1\" targetFramework=\"net461\" />\n  <package id=\"Castle.Core\" version=\"4.2.1\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.AspNet.WebApi.Client\" version=\"5.2.3\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.NETCore.Platforms\" version=\"1.1.0\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Win32.Primitives\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"Moq\" version=\"4.8.1\" targetFramework=\"net461\" />\n  <package id=\"MSTest.TestAdapter\" version=\"1.2.0\" targetFramework=\"net461\" />\n  <package id=\"MSTest.TestFramework\" version=\"1.2.0\" targetFramework=\"net461\" />\n  <package id=\"NETStandard.Library\" version=\"1.6.1\" targetFramework=\"net461\" />\n  <package id=\"Newtonsoft.Json\" version=\"9.0.1\" targetFramework=\"net461\" />\n  <package id=\"Portable.BouncyCastle\" version=\"1.8.1.3\" targetFramework=\"net461\" />\n  <package id=\"System.AppContext\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Collections\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Collections.Concurrent\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Console\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Diagnostics.Debug\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Diagnostics.DiagnosticSource\" version=\"4.4.1\" targetFramework=\"net461\" />\n  <package id=\"System.Diagnostics.Tools\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Diagnostics.Tracing\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Globalization\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Globalization.Calendars\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.IO\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.IO.Compression\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.IO.Compression.ZipFile\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.IO.FileSystem\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.IO.FileSystem.Primitives\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Linq\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Linq.Expressions\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Net.Http\" version=\"4.3.3\" targetFramework=\"net461\" />\n  <package id=\"System.Net.Primitives\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Net.Sockets\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.ObjectModel\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Reflection\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Reflection.Extensions\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Reflection.Primitives\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Resources.ResourceManager\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Runtime\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Runtime.Extensions\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Runtime.Handles\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Runtime.InteropServices\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Runtime.InteropServices.RuntimeInformation\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Runtime.Numerics\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Security.Cryptography.Algorithms\" version=\"4.3.1\" targetFramework=\"net461\" />\n  <package id=\"System.Security.Cryptography.Encoding\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Security.Cryptography.Primitives\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Security.Cryptography.X509Certificates\" version=\"4.3.2\" targetFramework=\"net461\" />\n  <package id=\"System.Text.Encoding\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Text.Encoding.Extensions\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Text.RegularExpressions\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Threading\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Threading.Tasks\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Threading.Tasks.Extensions\" version=\"4.4.0\" targetFramework=\"net461\" />\n  <package id=\"System.Threading.Timer\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.ValueTuple\" version=\"4.4.0\" targetFramework=\"net461\" />\n  <package id=\"System.Xml.ReaderWriter\" version=\"4.3.1\" targetFramework=\"net461\" />\n  <package id=\"System.Xml.XDocument\" version=\"4.3.0\" targetFramework=\"net461\" />\n</packages>"
  },
  {
    "path": "AlexaSkillsKit.Sample.Dialog.AzureFunc.sln",
    "content": "﻿\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio 15\nVisualStudioVersion = 15.0.27130.2010\nMinimumVisualStudioVersion = 10.0.40219.1\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"AlexaSkillsKit.Sample.Dialog.AzureFunc\", \"AlexaSkillsKit.Sample.Dialog.AzureFunc\\AlexaSkillsKit.Sample.Dialog.AzureFunc.csproj\", \"{0EB194AA-C3AB-49D3-875E-31BB20B752D6}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"AlexaSkillsKit.Sample.Dialog.AzureFunc.FunctionalTests\", \"AlexaSkillsKit.Sample.Dialog.AzureFunc.FunctionalTests\\AlexaSkillsKit.Sample.Dialog.AzureFunc.FunctionalTests.csproj\", \"{140635E4-7705-4A2B-A8AD-F2920E0D2677}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|Any CPU = Debug|Any CPU\n\t\tRelease|Any CPU = Release|Any CPU\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{0EB194AA-C3AB-49D3-875E-31BB20B752D6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{0EB194AA-C3AB-49D3-875E-31BB20B752D6}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{0EB194AA-C3AB-49D3-875E-31BB20B752D6}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{0EB194AA-C3AB-49D3-875E-31BB20B752D6}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{140635E4-7705-4A2B-A8AD-F2920E0D2677}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{140635E4-7705-4A2B-A8AD-F2920E0D2677}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{140635E4-7705-4A2B-A8AD-F2920E0D2677}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{140635E4-7705-4A2B-A8AD-F2920E0D2677}.Release|Any CPU.Build.0 = Release|Any CPU\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\n\tGlobalSection(ExtensibilityGlobals) = postSolution\n\t\tSolutionGuid = {814E1658-C299-4289-9B15-4FE67EE3330B}\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "AlexaSkillsKit.Tests/AlexaSkillsKit.Tests.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"12.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"..\\packages\\xunit.runner.visualstudio.2.2.0\\build\\net20\\xunit.runner.visualstudio.props\" Condition=\"Exists('..\\packages\\xunit.runner.visualstudio.2.2.0\\build\\net20\\xunit.runner.visualstudio.props')\" />\n  <Import Project=\"..\\packages\\xunit.core.2.1.0\\build\\portable-net45+win8+wp8+wpa81\\xunit.core.props\" Condition=\"Exists('..\\packages\\xunit.core.2.1.0\\build\\portable-net45+win8+wp8+wpa81\\xunit.core.props')\" />\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProjectGuid>{D0125A95-FD63-4A33-9220-206D4A1A14F0}</ProjectGuid>\n    <OutputType>Library</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>AlexaSkillsKit.Tests</RootNamespace>\n    <AssemblyName>AlexaSkillsKit.Tests</AssemblyName>\n    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\n    <FileAlignment>512</FileAlignment>\n    <ProjectTypeGuids>{3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>\n    <VisualStudioVersion Condition=\"'$(VisualStudioVersion)' == ''\">10.0</VisualStudioVersion>\n    <VSToolsPath Condition=\"'$(VSToolsPath)' == ''\">$(MSBuildExtensionsPath32)\\Microsoft\\VisualStudio\\v$(VisualStudioVersion)</VSToolsPath>\n    <ReferencePath>$(ProgramFiles)\\Common Files\\microsoft shared\\VSTT\\$(VisualStudioVersion)\\UITestExtensionPackages</ReferencePath>\n    <IsCodedUITest>False</IsCodedUITest>\n    <TestProjectType>UnitTest</TestProjectType>\n    <NuGetPackageImportStamp>\n    </NuGetPackageImportStamp>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\Release\\</OutputPath>\n    <DefineConstants>TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"Newtonsoft.Json, Version=7.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\Newtonsoft.Json.7.0.1\\lib\\net45\\Newtonsoft.Json.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System\" />\n    <Reference Include=\"xunit.abstractions, Version=2.0.0.0, Culture=neutral, PublicKeyToken=8d05b1bb7a6fdb6c, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\xunit.abstractions.2.0.0\\lib\\net35\\xunit.abstractions.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"xunit.assert, Version=2.1.0.3179, Culture=neutral, PublicKeyToken=8d05b1bb7a6fdb6c, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\xunit.assert.2.1.0\\lib\\portable-net45+win8+wp8+wpa81\\xunit.assert.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"xunit.core, Version=2.1.0.3179, Culture=neutral, PublicKeyToken=8d05b1bb7a6fdb6c, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\xunit.extensibility.core.2.1.0\\lib\\portable-net45+win8+wp8+wpa81\\xunit.core.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"xunit.execution.desktop, Version=2.1.0.3179, Culture=neutral, PublicKeyToken=8d05b1bb7a6fdb6c, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\xunit.extensibility.execution.2.1.0\\lib\\net45\\xunit.execution.desktop.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n  </ItemGroup>\n  <Choose>\n    <When Condition=\"('$(VisualStudioVersion)' == '10.0' or '$(VisualStudioVersion)' == '') and '$(TargetFrameworkVersion)' == 'v3.5'\">\n      <ItemGroup>\n        <Reference Include=\"Microsoft.VisualStudio.QualityTools.UnitTestFramework, Version=10.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\" />\n      </ItemGroup>\n    </When>\n    <Otherwise />\n  </Choose>\n  <ItemGroup>\n    <Compile Include=\"Authentication\\SignatureVerifierTests.cs\" />\n    <Compile Include=\"Helpers\\DateTimeHelpersTests.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"app.config\" />\n    <None Include=\"packages.config\" />\n    <None Include=\"TestData\\RequestWithInvalidTimestamp.json\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </None>\n    <None Include=\"TestData\\RequestWithUnixTimeTimestamp.json\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </None>\n    <None Include=\"TestData\\RequestWithIso8601Timestamp.json\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </None>\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\AlexaSkillsKit.Lib\\AlexaSkillsKit.Lib.csproj\">\n      <Project>{0ec882a8-aaca-4bd5-b449-72f20fdb8586}</Project>\n      <Name>AlexaSkillsKit.Lib</Name>\n    </ProjectReference>\n  </ItemGroup>\n  <Choose>\n    <When Condition=\"'$(VisualStudioVersion)' == '10.0' And '$(IsCodedUITest)' == 'True'\">\n      <ItemGroup>\n        <Reference Include=\"Microsoft.VisualStudio.QualityTools.CodedUITestFramework, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n          <Private>False</Private>\n        </Reference>\n        <Reference Include=\"Microsoft.VisualStudio.TestTools.UITest.Common, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n          <Private>False</Private>\n        </Reference>\n        <Reference Include=\"Microsoft.VisualStudio.TestTools.UITest.Extension, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n          <Private>False</Private>\n        </Reference>\n        <Reference Include=\"Microsoft.VisualStudio.TestTools.UITesting, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n          <Private>False</Private>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Import Project=\"$(VSToolsPath)\\TeamTest\\Microsoft.TestTools.targets\" Condition=\"Exists('$(VSToolsPath)\\TeamTest\\Microsoft.TestTools.targets')\" />\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\n  <Target Name=\"EnsureNuGetPackageBuildImports\" BeforeTargets=\"PrepareForBuild\">\n    <PropertyGroup>\n      <ErrorText>This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>\n    </PropertyGroup>\n    <Error Condition=\"!Exists('..\\packages\\xunit.core.2.1.0\\build\\portable-net45+win8+wp8+wpa81\\xunit.core.props')\" Text=\"$([System.String]::Format('$(ErrorText)', '..\\packages\\xunit.core.2.1.0\\build\\portable-net45+win8+wp8+wpa81\\xunit.core.props'))\" />\n    <Error Condition=\"!Exists('..\\packages\\xunit.runner.visualstudio.2.2.0\\build\\net20\\xunit.runner.visualstudio.props')\" Text=\"$([System.String]::Format('$(ErrorText)', '..\\packages\\xunit.runner.visualstudio.2.2.0\\build\\net20\\xunit.runner.visualstudio.props'))\" />\n  </Target>\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n</Project>"
  },
  {
    "path": "AlexaSkillsKit.Tests/Authentication/SignatureVerifierTests.cs",
    "content": "﻿// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nusing System;\nusing Xunit;\nusing AlexaSkillsKit;\nusing AlexaSkillsKit.Authentication;\n\nnamespace AlexaSkillsKit.Tests\n{\n    public class SignatureVerifierTests\n    {\n        [Fact]\n        public void VerifyCertificateUrlTest() {\n            // samples from \n            // https://developer.amazon.com/public/solutions/alexa/alexa-skills-kit/docs/developing-an-alexa-skill-as-a-web-service\n            \n            var validUrls = new string[] {\n                \"https://s3.amazonaws.com/echo.api/echo-api-cert.pem\",\n                \"https://s3.amazonaws.com:443/echo.api/echo-api-cert.pem\",\n                \"https://s3.amazonaws.com/echo.api/../echo.api/echo-api-cert.pem\"\n            };\n\n            var invalidUrls = new string[] {\n                \"http://s3.amazonaws.com/echo.api/echo-api-cert.pem\",\n                \"https://notamazon.com/echo.api/echo-api-cert.pem\",\n                \"https://s3.amazonaws.com/EcHo.aPi/echo-api-cert.pem\",\n                \"https://s3.amazonaws.com/invalid.path/echo-api-cert.pem\",\n                \"https://s3.amazonaws.com:563/echo.api/echo-api-cert.pem\"\n             };\n\n            foreach (var validUrl in validUrls) {\n                Assert.True(SpeechletRequestSignatureVerifier.VerifyCertificateUrl(validUrl));\n            }\n\n            foreach (var invalidUrl in invalidUrls) {\n                Assert.False(SpeechletRequestSignatureVerifier.VerifyCertificateUrl(invalidUrl));\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "AlexaSkillsKit.Tests/Helpers/DateTimeHelpersTests.cs",
    "content": "﻿// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nusing System;\nusing System.IO;\nusing AlexaSkillsKit.Authentication;\nusing AlexaSkillsKit.Json;\nusing Xunit;\n\nnamespace AlexaSkillsKit.Tests.Helpers\n{\n    public class DateTimeHelpersTests\n    {\n        [Fact]\n        public void RequestWithIso8601TimestampTest() {\n            const string TestDataFile = @\"TestData\\RequestWithIso8601Timestamp.json\";\n    \n            SpeechletRequestValidationResult validationResult = SpeechletRequestValidationResult.OK;\n            SpeechletRequestEnvelope alexaRequest = null;\n            var alexaContent = File.ReadAllText(TestDataFile);\n\n            try {\n                alexaRequest = SpeechletRequestEnvelope.FromJson(alexaContent);\n            }\n            catch (Exception ex)\n            when (ex is Newtonsoft.Json.JsonReaderException || ex is InvalidCastException || ex is FormatException) {\n                validationResult = validationResult | SpeechletRequestValidationResult.InvalidJson;\n            }\n\n            Assert.True(validationResult == SpeechletRequestValidationResult.OK);\n        }\n\n\n        [Fact]\n        public void RequestWithUnixTimeTimestampTest() {\n            const string TestDataFile = @\"TestData\\RequestWithUnixTimeTimestamp.json\";\n\n            SpeechletRequestValidationResult validationResult = SpeechletRequestValidationResult.OK;\n            SpeechletRequestEnvelope alexaRequest = null;\n            var alexaContent = File.ReadAllText(TestDataFile);\n\n            try {\n                alexaRequest = SpeechletRequestEnvelope.FromJson(alexaContent);\n            }\n            catch (Exception ex)\n            when (ex is Newtonsoft.Json.JsonReaderException || ex is InvalidCastException || ex is FormatException) {\n                validationResult = validationResult | SpeechletRequestValidationResult.InvalidJson;\n            }\n\n            Assert.True(validationResult == SpeechletRequestValidationResult.OK);\n        }\n\n\n        [Fact]\n        public void RequestWithInvalidTimestampTest(){\n            const string TestDataFile = @\"TestData\\RequestWithInvalidTimestamp.json\";\n\n            SpeechletRequestValidationResult validationResult = SpeechletRequestValidationResult.OK;\n            SpeechletRequestEnvelope alexaRequest = null;\n            var alexaContent = File.ReadAllText(TestDataFile);\n\n            try {\n                alexaRequest = SpeechletRequestEnvelope.FromJson(alexaContent);\n            }\n            catch (Exception ex)\n            when (ex is Newtonsoft.Json.JsonReaderException || ex is InvalidCastException || ex is FormatException) {\n                validationResult = validationResult | SpeechletRequestValidationResult.InvalidJson;\n            }\n\n            Assert.True(validationResult == SpeechletRequestValidationResult.InvalidJson);\n        }\n    }\n}\n"
  },
  {
    "path": "AlexaSkillsKit.Tests/Properties/AssemblyInfo.cs",
    "content": "﻿// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nusing System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"AlexaSkillsKit.Tests\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"\")]\n[assembly: AssemblyProduct(\"AlexaSkillsKit.Tests\")]\n[assembly: AssemblyCopyright(\"Copyright © 2018 Stefan Negritoiu (FreeBusy) and contributors\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible \n// to COM components.  If you need to access a type in this assembly from \n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid(\"353f9cb3-ae5e-4f97-ad2d-6818781e4111\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version \n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Build and Revision Numbers \n// by using the '*' as shown below:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n[assembly: AssemblyVersion(\"1.0.0.0\")]\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\n"
  },
  {
    "path": "AlexaSkillsKit.Tests/TestData/RequestWithInvalidTimestamp.json",
    "content": "﻿{\n  \"session\": {\n    \"sessionId\": \"SessionId.710422a8-4f2b-4dd5-8a59-81995f7eb6d2\",\n    \"application\": {\n      \"applicationId\": \"amzn1.ask.skill.cde8bde3-7629-4d89-9871-952be8243831\"\n    },\n    \"attributes\": {\n    },\n    \"user\": {\n      \"userId\": \"[redacted]\"\n    },\n    \"new\": true\n  },\n  \"request\": {\n    \"type\": \"IntentRequest\",\n    \"requestId\": \"EdwRequestId.295020ef-52a7-42c5-8d7e-ff6d103e9f13\",\n    \"locale\": \"en-US\",\n    \"timestamp\": \"BAADBEEF\",\n    \"intent\": {\n      \"name\": \"ClosestHospitalIntent\",\n      \"slots\": {\n      }\n    }\n  },\n  \"version\":\"1.0\"\n}"
  },
  {
    "path": "AlexaSkillsKit.Tests/TestData/RequestWithIso8601Timestamp.json",
    "content": "﻿{\n  \"session\": {\n    \"sessionId\": \"SessionId.710422a8-4f2b-4dd5-8a59-81995f7eb6d2\",\n    \"application\": {\n      \"applicationId\": \"amzn1.ask.skill.cde8bde3-7629-4d89-9871-952be8243831\"\n    },\n    \"attributes\": {\n    },\n    \"user\": {\n      \"userId\": \"[redacted]\"\n    },\n    \"new\": true\n  },\n  \"request\": {\n    \"type\": \"IntentRequest\",\n    \"requestId\": \"EdwRequestId.295020ef-52a7-42c5-8d7e-ff6d103e9f13\",\n    \"locale\": \"en-US\",\n    \"timestamp\": \"2017-07-12T19:10:19Z\",\n    \"intent\": {\n      \"name\": \"ClosestHospitalIntent\",\n      \"slots\": {\n      }\n    }\n  },\n  \"version\":\"1.0\"\n}"
  },
  {
    "path": "AlexaSkillsKit.Tests/TestData/RequestWithUnixTimeTimestamp.json",
    "content": "﻿{\n  \"session\": {\n    \"sessionId\": \"SessionId.710422a8-4f2b-4dd5-8a59-81995f7eb6d2\",\n    \"application\": {\n      \"applicationId\": \"amzn1.ask.skill.cde8bde3-7629-4d89-9871-952be8243831\"\n    },\n    \"attributes\": {\n    },\n    \"user\": {\n      \"userId\": \"[redacted]\"\n    },\n    \"new\": true\n  },\n  \"request\": {\n    \"type\": \"IntentRequest\",\n    \"requestId\": \"EdwRequestId.295020ef-52a7-42c5-8d7e-ff6d103e9f13\",\n    \"locale\": \"en-US\",\n    \"timestamp\": 1499513033284,\n    \"intent\": {\n      \"name\": \"ClosestHospitalIntent\",\n      \"slots\": {\n      }\n    }\n  },\n  \"version\":\"1.0\"\n}"
  },
  {
    "path": "AlexaSkillsKit.Tests/app.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n  <appSettings>\n    <add key=\"xunit.methodDisplay\" value=\"method\" />\n  </appSettings>\n  <runtime>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n      <dependentAssembly>\n        <assemblyIdentity name=\"Newtonsoft.Json\" publicKeyToken=\"30ad4fe6b2a6aeed\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-7.0.0.0\" newVersion=\"7.0.0.0\" />\n      </dependentAssembly>\n    </assemblyBinding>\n  </runtime>\n</configuration>"
  },
  {
    "path": "AlexaSkillsKit.Tests/packages.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n  <package id=\"Newtonsoft.Json\" version=\"7.0.1\" targetFramework=\"net45\" />\n  <package id=\"xunit\" version=\"2.1.0\" targetFramework=\"net45\" />\n  <package id=\"xunit.abstractions\" version=\"2.0.0\" targetFramework=\"net45\" />\n  <package id=\"xunit.assert\" version=\"2.1.0\" targetFramework=\"net45\" />\n  <package id=\"xunit.core\" version=\"2.1.0\" targetFramework=\"net45\" />\n  <package id=\"xunit.extensibility.core\" version=\"2.1.0\" targetFramework=\"net45\" />\n  <package id=\"xunit.extensibility.execution\" version=\"2.1.0\" targetFramework=\"net45\" />\n  <package id=\"xunit.runner.visualstudio\" version=\"2.2.0\" targetFramework=\"net45\" developmentDependency=\"true\" />\n</packages>"
  },
  {
    "path": "AlexaSkillsKit.sln",
    "content": "﻿\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio 2013\nVisualStudioVersion = 12.0.31101.0\nMinimumVisualStudioVersion = 10.0.40219.1\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"AlexaSkillsKit.Lib\", \"AlexaSkillsKit.Lib\\AlexaSkillsKit.Lib.csproj\", \"{0EC882A8-AACA-4BD5-B449-72F20FDB8586}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"AlexaSkillsKit.Sample\", \"AlexaSkillsKit.Sample\\AlexaSkillsKit.Sample.csproj\", \"{9FDEF793-5832-4D37-B0D5-62C55AB1C12E}\"\nEndProject\nProject(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\") = \".nuget\", \".nuget\", \"{D35AD75F-7926-41CB-8C8D-BB36370F3E76}\"\n\tProjectSection(SolutionItems) = preProject\n\t\t.nuget\\AlexaSkillsKit.Lib.nuspec = .nuget\\AlexaSkillsKit.Lib.nuspec\n\t\t.nuget\\NuGet.Config = .nuget\\NuGet.Config\n\t\t.nuget\\NuGet.targets = .nuget\\NuGet.targets\n\tEndProjectSection\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"AlexaSkillsKit.Tests\", \"AlexaSkillsKit.Tests\\AlexaSkillsKit.Tests.csproj\", \"{D0125A95-FD63-4A33-9220-206D4A1A14F0}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|Any CPU = Debug|Any CPU\n\t\tRelease|Any CPU = Release|Any CPU\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{0EC882A8-AACA-4BD5-B449-72F20FDB8586}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{0EC882A8-AACA-4BD5-B449-72F20FDB8586}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{0EC882A8-AACA-4BD5-B449-72F20FDB8586}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{0EC882A8-AACA-4BD5-B449-72F20FDB8586}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{9FDEF793-5832-4D37-B0D5-62C55AB1C12E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{9FDEF793-5832-4D37-B0D5-62C55AB1C12E}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{9FDEF793-5832-4D37-B0D5-62C55AB1C12E}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{9FDEF793-5832-4D37-B0D5-62C55AB1C12E}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{D0125A95-FD63-4A33-9220-206D4A1A14F0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{D0125A95-FD63-4A33-9220-206D4A1A14F0}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{D0125A95-FD63-4A33-9220-206D4A1A14F0}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{D0125A95-FD63-4A33-9220-206D4A1A14F0}.Release|Any CPU.Build.0 = Release|Any CPU\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "LICENSE",
    "content": "The MIT License (MIT)\n\nCopyright (c) 2018 Stefan Negritoiu (FreeBusy) and contributors\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "README.md",
    "content": "# AlexaSkillsKit.NET\n.NET library to write Alexa skills that's interface-compatible with [Amazon's AlexaSkillsKit for Java](https://github.com/amzn/alexa-skills-kit-java) and matches that functionality:\n* handles the (de)serialization of Alexa requests & responses into easy-to-use object models\n* verifies authenticity of the request by validating its signature and timestamp\n* code-reviewed and vetted by Amazon (Alexa skills written using this library passed certification)\n* :new: supports following interfaces:\n  * [AudioPlayer](https://developer.amazon.com/docs/custom-skills/audioplayer-interface-reference.html)\n  * [PlaybackController](https://developer.amazon.com/docs/custom-skills/playback-controller-interface-reference.html)\n  * [Display](https://developer.amazon.com/docs/custom-skills/display-interface-reference.html)\n  * [Dialog](https://developer.amazon.com/docs/custom-skills/dialog-interface-reference.html)\n  * [VideoApp](https://developer.amazon.com/docs/custom-skills/videoapp-interface-reference.html)\n  \n\nBeyond the functionality in Amazon's AlexaSkillsKit for Java, AlexaSkillsKit.NET:\n* performs automatic session management so you can easily [build conversational Alexa apps](https://freebusy.io/blog/building-conversational-alexa-apps-for-amazon-echo)\n* supports asynchronous programming model\n* :new: can be extended to support custom and new coming interfaces and request types\n(see [Implement external interface](#implement-external-interface) section), such as:\n  * [Skill Events](https://developer.amazon.com/docs/smapi/skill-events-in-alexa-skills.html)\n\nThis library was originally developed for and is in use at https://freebusy.io\n\nThis library is available as a NuGet package at https://www.nuget.org/packages/AlexaSkillsKit.NET/\n\n# How To Use\n\n### 1. Set up your development environment\n\nRead [Getting started with Alexa App development for Amazon Echo using .NET on Windows](https://freebusy.io/blog/getting-started-with-alexa-app-development-for-amazon-echo-using-dot-net)\n\nNote, that if you are hosting your API in Amazon Lambda, Azure Function, Azure Web App or other well-known cloud service, you can use parent domain certificate instead of providing your own.\n\n### 2. Implement your skill as a \"Speechlet\"\n\nIf your Alexa skill does any kind of asynchronous I/O, it's recommended that you derive your app from the `SpeechletBase` class and implement these methods as defined by `ISpeechletWithContextAsync`:\n  \n```csharp\npublic interface ISpeechletWithContextAsync\n{\n    Task<SpeechletResponse> OnIntentAsync(IntentRequest intentRequest, Session session, Context context);\n    Task<SpeechletResponse> OnLaunchAsync(LaunchRequest launchRequest, Session session);\n    Task OnSessionStartedAsync(SessionStartedRequest sessionStartedRequest, Session session);\n    Task OnSessionEndedAsync(SessionEndedRequest sessionEndedRequest, Session session);\n}\n```\n  \nAlternatively, you can implement synchronous `ISpeechletWithContext` interface:\n  \n```csharp\npublic interface ISpeechletWithContext\n{\n    SpeechletResponse OnIntent(IntentRequest intentRequest, Session session, Context context);\n    SpeechletResponse OnLaunch(LaunchRequest launchRequest, Session session);\n    void OnSessionStarted(SessionStartedRequest sessionStartedRequest, Session session);\n    void OnSessionEnded(SessionEndedRequest sessionEndedRequest, Session session);\n}\n```\n\nTo handle external interface requests, your speechlet can implement additional interfaces either synchronous or asynchronous:\n* `IAudioPlayerSpeechletAsync` or `IAudioPlayerSpeechlet` for \"AudioPlayer.*\" and \"PlaybackController.*\" requests.\n* `IDisplaySpeechletAsync` or `IDisplaySpeechlet` for \"Display.*\" requests.\n\nFor backwards compatibility `Speechlet` and `SpeechletAsync` abstract classes are still available, along with deprecated `ISpeechlet` and `ISpeechletAsync` interfaces.\nNote, that old interfaces don't support [Context object](https://developer.amazon.com/docs/custom-skills/request-and-response-json-reference.html#context-object).\n  \nTake a look at https://github.com/AreYouFreeBusy/AlexaSkillsKit.NET/blob/master/AlexaSkillsKit.Sample/Speechlet/SampleSessionSpeechlet.cs for an example.\n\n### 3. Wire-up \"Speechlet\" to HTTP hosting environment\n\nThe Sample app is using ASP.NET 4.5 WebApi 2 so wiring-up requests & responses from the HTTP hosting environment (i.e. ASP.NET 4.5) to the \"Speechlet\" is just a matter of writing a 2-line ApiController like this https://github.com/AreYouFreeBusy/AlexaSkillsKit.NET/blob/master/AlexaSkillsKit.Sample/Speechlet/AlexaController.cs \n  \n*Note: sample project is generated from the ASP.NET 4.5 WebApi 2 template so it includes a lot of functionality that's not directly related to Alexa Speechlets, but it does make make for a complete Web API project.*\n\nAlternatively you can host your app and the AlexaSkillsKit.NET library in any other web service framework like ServiceStack.\n\n# How it works\n\n### SpeechletService class\nTo handle Alexa requests an instance of `SpeechletService` is used. This is the main entry point for all operations involved in handling incoming requests.\n\nFor convenience and backward compatibility both `Speechlet` and `SpeechletAsync` now derive from `SpeechletBase` base class,\nwhich provides built-in `SpeechletService` instance and wraps most common operations with it.\nSkill authors can access this internal `SpeechletService` through `Service` property, e.g. to register additional request handlers.\n\n### Parsing request\n\nWhen new request is recieved, it first needs to be parced from json string into object model represented by `SpeechletRequestEnvelope` class.\n`Task<SpeechletRequestEnvelope> SpeechletService.GetRequestAsync(string content, string chainUrl, string signature)` method is used for this.\nRequest headers and body validation also takes place during this step. The `SpeechletValidationException` is produced in case of any validation error.\n\nSee [Override request validation policy](#override-request-validation-policy) for more details on request validation.\nRequest validation can be omitted by directly calling one of `SpeechletRequestEnvelope.FromJson` static methods.\n\nOnly version \"1.0\" of Alexa Skill API is supported. Otherwise `SpeechletValidationException` with `SpeechletRequestValidationResult.InvalidVersion` is thrown.\nSame is true, when calling `SpeechletRequestEnvelope.FromJson` methods directly.\n\nThere are a lot of different request types available for Alexa Skills.\nStandard requests have simple type names: \"LaunchRequest\", \"IntentRequest\", \"SessionEndedRequest\".\nAll other requests are related to specific interfaces and their request type name consists of interface name and request subtype name separated by \".\" sign,\ne.g. \"System.ExceptionEncountered\", \"Dialog.Delegate\" and so on.\n \n`SpeechletRequestParser` class is used to deserialize `request` json field to appropriate subclass of `SpeechletRequest` base class.\nBy default, it has no knowledge to which class each request type should be deserialized.\n`SpeechletRequestParser` has `AddInterface` method to bind interface name, with specific deserializagion handler.\n\n`SpeechletRequestEnvelope` currently uses it's static instance of `SpeechletRequestParser` for request deserialization,\nprovided as `SpeechletRequestEnvelope.RequestParser` static property.\nUse it, if you need to register deserialization method for additional request type.\n\nDeserialization methods for all natively supported requests are registered internally by default.\n\n## Advanced\n\n### Override request validation policy\n\nBy default, requests with missing or invalid signatures, or with missing or too old timestamps,\nunsupported API version (only API v\"1.0\" is supported), are rejected.\nFor Application Id to be validated, your skill needs to set value for `SpeechletService.ApplicationId` property. \nYou can override the request validation policy if you'd like not to reject the request in certain conditions and/or to log validation failures.\n\n```csharp\n/// <summary>\n/// return true if you want request to be processed, otherwise false\n/// </summary>\npublic override bool OnRequestValidation(\n    SpeechletRequestValidationResult result, DateTime referenceTimeUtc, SpeechletRequestEnvelope requestEnvelope) \n{\n\n    if (result != SpeechletRequestValidationResult.OK) \n    {\n        if (result.HasFlag(SpeechletRequestValidationResult.NoSignatureHeader)) \n        {\n            Debug.WriteLine(\"Alexa request is missing signature header, rejecting.\");\n            return false;\n        }\n        if (result.HasFlag(SpeechletRequestValidationResult.NoCertHeader)) \n        {\n            Debug.WriteLine(\"Alexa request is missing certificate header, rejecting.\");\n            return false;\n        }\n        if (result.HasFlag(SpeechletRequestValidationResult.InvalidSignature)) \n        {\n            Debug.WriteLine(\"Alexa request signature is invalid, rejecting.\");\n            return false;\n        }\n        else \n        {\n            if (result.HasFlag(SpeechletRequestValidationResult.InvalidTimestamp)) \n            {\n                var diff = referenceTimeUtc - requestEnvelope.Request.Timestamp;\n                Debug.WriteLine(\"Alexa request timestamped '{0:0.00}' seconds ago making timestamp invalid, but continue processing.\",\n                    diff.TotalSeconds);\n            }\n            return true;\n        }\n    }\n    else \n    {      \n        var diff = referenceTimeUtc - requestEnvelope.Request.Timestamp;\n        Debug.WriteLine(\"Alexa request timestamped '{0:0.00}' seconds ago.\", diff.TotalSeconds);\n        return true;\n    }            \n}\n```\n\n# Credits\n\nThe original author of AlexaSkillsKit.NET is:\n* [Stefan Negritoiu (FreeBusy)](https://github.com/stefann42)\n\nThe current authors and maintainers are:\n* [Stefan Negritoiu (FreeBusy)](https://github.com/stefann42)\n* [Sergey Greenko](https://github.com/ElvenMonky)\n\n**Thank You** to library contributors (in alphbetical order):\n* [Ahmed Osman](https://github.com/q3blend)\n* [Chris Pauly](https://github.com/chrispauly)\n* [dg-racing](https://github.com/dg-racing)\n* [Dustin Masters](https://github.com/dustinsoftware)\n* [Eric Jernigan](https://github.com/jejernig)\n* [Jasson Moya](https://github.com/Jasc01)\n* [Jayson Helseth](https://github.com/jaysonhelseth)\n* [Marcus Braun](https://github.com/teriansilva)\n* [Matt Becker](https://github.com/MattBecker)\n* [Robert Mroch](https://github.com/epsilon-rmroch)\n* [ruppert92](https://github.com/ruppert92)\n* [Sergey Greenko](https://github.com/ElvenMonky)\n* [Stefan Negritoiu](https://github.com/stefann42)\n* [vp123456](https://github.com/vp123456)\n\nContributor License Agreement:   \nhttps://cla-assistant.io/AreYouFreeBusy/AlexaSkillsKit.NET\n"
  }
]