master e4b6c895f676 cached
502 files
7.4 MB
2.0M tokens
894 symbols
1 requests
Download .txt
Showing preview only (7,842K chars total). Download the full file or copy to clipboard to get everything.
Repository: Azure-Samples/active-directory-b2c-advanced-policies
Branch: master
Commit: e4b6c895f676
Files: 502
Total size: 7.4 MB

Directory structure:
gitextract_330899_t/

├── .gitattributes
├── .gitignore
├── AppSamples-iOS-TouchID-master/
│   ├── LICENSE
│   ├── Podfile
│   ├── active-directory-ios-native-appauth-b2c/
│   │   ├── AppDelegate.h
│   │   ├── AppDelegate.m
│   │   ├── Assets.xcassets/
│   │   │   └── AppIcon.appiconset/
│   │   │       └── Contents.json
│   │   ├── Base.lproj/
│   │   │   ├── LaunchScreen.storyboard
│   │   │   └── Main.storyboard
│   │   ├── GameTableViewController.h
│   │   ├── GameTableViewController.m
│   │   ├── Games.h
│   │   ├── Games.m
│   │   ├── Info.plist
│   │   ├── ViewController.h
│   │   ├── ViewController.m
│   │   └── main.m
│   ├── active-directory-ios-native-appauth-b2c.xcodeproj/
│   │   ├── project.pbxproj
│   │   └── project.xcworkspace/
│   │       └── contents.xcworkspacedata
│   ├── active-directory-ios-native-appauth-b2c.xcworkspace/
│   │   └── contents.xcworkspacedata
│   └── readme.md
├── AzureFunctionsSamples/
│   ├── CalculatePlayerProfilePercentCompleteWebHook/
│   │   ├── function.json
│   │   └── run.csx
│   ├── CheckPlayerTagWebHook/
│   │   ├── function.json
│   │   └── run.csx
│   ├── LookUpLoyaltyWebHook/
│   │   ├── function.json
│   │   └── run.csx
│   ├── SendMailWebHook/
│   │   ├── function.json
│   │   └── run.csx
│   ├── host.json
│   └── readme.md
├── CONTRIBUTING.md
├── ExploreAdmin/
│   └── New-AzureADB2CPolicyEngineApplications.ps1
├── LICENSE
├── README.md
├── UserJourneyRecorder/
│   ├── Integrating a B2C policy with Azure Application Insights.docx
│   ├── README.md
│   ├── UserJourneyRecorder.sln
│   └── UserJourneyRecorderWebApp/
│       ├── Global.asax
│       ├── Global.asax.cs
│       ├── Infrastructure/
│       │   ├── UserJourneyRecorderHttpHandler.cs
│       │   ├── UserJourneyRecorderRouteHandler.cs
│       │   └── Utils.cs
│       ├── Properties/
│       │   ├── AssemblyInfo.cs
│       │   ├── Resources.Designer.cs
│       │   ├── Resources.resx
│       │   ├── Settings.Designer.cs
│       │   └── Settings.settings
│       ├── UserJourneyRecorderWebApp.csproj
│       ├── Web.Debug.config
│       ├── Web.Release.config
│       ├── Web.config
│       ├── base64url_102.js
│       ├── config_102.html
│       ├── config_102.js
│       ├── languages/
│       │   └── en-us_102.json
│       ├── packages.config
│       ├── trace_102.css
│       └── trace_102.html
├── account-linking/
│   ├── ACCOUNTLINKING.xml
│   ├── PASSWORDRESET.xml
│   ├── PROFILEEDIT.xml
│   ├── SignUpOrSignin.xml
│   ├── TRUSTFRAMEWORKBASE.xml
│   ├── TRUSTFRAMEWORKEXTENSIONS.xml
│   └── readme.md
├── conditional-access-preview/
│   ├── IEF Policy sample with Conditional Access and Secure Pssword reset -not for prod Sep2019.xml
│   ├── deprecated_B2CTenant.onmicrosoft.com-B2C_1A_PolicySampleV02.xml
│   └── readme.md
└── wingtipgamesb2c/
    ├── .gitignore
    ├── AzureADB2CSamples.sln
    ├── Implementing an invitation flow, Sample by Kloud.docx
    ├── Integrating a B2C policy with Azure Application Insights.docx
    ├── Policies/
    │   ├── b2ctechready.onmicrosoft.com_B2C_1A_activation.xml
    │   ├── b2ctechready.onmicrosoft.com_B2C_1A_base.xml
    │   ├── b2ctechready.onmicrosoft.com_B2C_1A_base_extensions.xml
    │   ├── b2ctechready.onmicrosoft.com_B2C_1A_invitation.xml
    │   ├── b2ctechready.onmicrosoft.com_B2C_1A_link.xml
    │   ├── b2ctechready.onmicrosoft.com_B2C_1A_password_reset.xml
    │   ├── b2ctechready.onmicrosoft.com_B2C_1A_profile_update_games.xml
    │   ├── b2ctechready.onmicrosoft.com_B2C_1A_profile_update_music.xml
    │   ├── b2ctechready.onmicrosoft.com_B2C_1A_sign_in_billing.xml
    │   ├── b2ctechready.onmicrosoft.com_B2C_1A_sign_in_games_app_code.xml
    │   ├── b2ctechready.onmicrosoft.com_B2C_1A_sign_in_games_authy_code.xml
    │   ├── b2ctechready.onmicrosoft.com_B2C_1A_sign_in_games_email_code.xml
    │   ├── b2ctechready.onmicrosoft.com_B2C_1A_sign_in_games_email_phone.xml
    │   ├── b2ctechready.onmicrosoft.com_B2C_1A_sign_in_games_phone_code.xml
    │   ├── b2ctechready.onmicrosoft.com_B2C_1A_sign_up_games_app_code.xml
    │   ├── b2ctechready.onmicrosoft.com_B2C_1A_sign_up_games_authy_code.xml
    │   ├── b2ctechready.onmicrosoft.com_B2C_1A_sign_up_sign_in_games.xml
    │   ├── b2ctechready.onmicrosoft.com_B2C_1A_sign_up_sign_in_music.xml
    │   └── b2ctechready.onmicrosoft.com_B2C_1A_step_up.xml
    ├── Reports/
    │   ├── B2CUserJourneyEvents.csv
    │   ├── B2CUserJourneyEvents.pbix
    │   └── B2CUserJourneyEvents.ps1
    ├── Templates/
    │   ├── dist/
    │   │   ├── error.html
    │   │   ├── idpselection-signin.html
    │   │   ├── idpselection-signupsignin.html
    │   │   ├── idpselection.html
    │   │   ├── js/
    │   │   │   ├── analytics.js
    │   │   │   ├── selfasserted-appfactor-registration.js
    │   │   │   ├── selfasserted-appfactor.js
    │   │   │   ├── selfasserted-listenerprofileupdate.js
    │   │   │   ├── selfasserted-playerprofileregistration-basic.js
    │   │   │   ├── selfasserted-playerprofileregistration-full.js
    │   │   │   └── selfasserted-playerprofileupdate.js
    │   │   ├── localaccount-activation.html
    │   │   ├── localaccount-discovery.html
    │   │   ├── localaccount-identification.html
    │   │   ├── localaccount-login-appcode.html
    │   │   ├── localaccount-login-authycode.html
    │   │   ├── localaccount-login-emailcode.html
    │   │   ├── localaccount-login-phonecode.html
    │   │   ├── localaccount-login.html
    │   │   ├── localaccount-passwordrecovery.html
    │   │   ├── localaccount-passwordreset.html
    │   │   ├── localaccount-passwordset.html
    │   │   ├── localaccount-registration.html
    │   │   ├── phonefactor.html
    │   │   ├── selfasserted-appfactor-registration.html
    │   │   ├── selfasserted-appfactor-verification.html
    │   │   ├── selfasserted-authyfactor.html
    │   │   ├── selfasserted-consent.html
    │   │   ├── selfasserted-listenerprofileupdate.html
    │   │   ├── selfasserted-playerprofileregistration-basic.html
    │   │   ├── selfasserted-playerprofileregistration-full.html
    │   │   ├── selfasserted-playerprofileupdate.html
    │   │   ├── signupsignin.html
    │   │   └── socialaccount-registration.html
    │   ├── gulpfile.js
    │   ├── package.json
    │   └── src/
    │       ├── css/
    │       │   ├── bootstrap.css
    │       │   └── global.css
    │       ├── error.html
    │       ├── idpselection-signin.html
    │       ├── idpselection-signupsignin.html
    │       ├── idpselection.html
    │       ├── js/
    │       │   ├── analytics.js
    │       │   ├── selfasserted-appfactor-registration.js
    │       │   ├── selfasserted-appfactor.js
    │       │   ├── selfasserted-listenerprofileupdate.js
    │       │   ├── selfasserted-playerprofileregistration-basic.js
    │       │   ├── selfasserted-playerprofileregistration-full.js
    │       │   └── selfasserted-playerprofileupdate.js
    │       ├── localaccount-activation.html
    │       ├── localaccount-discovery.html
    │       ├── localaccount-identification.html
    │       ├── localaccount-login-appcode.html
    │       ├── localaccount-login-authycode.html
    │       ├── localaccount-login-emailcode.html
    │       ├── localaccount-login-phonecode.html
    │       ├── localaccount-login.html
    │       ├── localaccount-passwordrecovery.html
    │       ├── localaccount-passwordreset.html
    │       ├── localaccount-passwordset.html
    │       ├── localaccount-registration.html
    │       ├── phonefactor.html
    │       ├── selfasserted-appfactor-registration.html
    │       ├── selfasserted-appfactor-verification.html
    │       ├── selfasserted-authyfactor.html
    │       ├── selfasserted-consent.html
    │       ├── selfasserted-listenerprofileupdate.html
    │       ├── selfasserted-playerprofileregistration-basic.html
    │       ├── selfasserted-playerprofileregistration-full.html
    │       ├── selfasserted-playerprofileupdate.html
    │       ├── signupsignin.html
    │       └── socialaccount-registration.html
    ├── readme.md
    └── src/
        ├── WingTipBillingWebApplication/
        │   ├── .bowerrc
        │   ├── Api/
        │   │   ├── Controllers/
        │   │   │   └── OrdersController.cs
        │   │   └── Models/
        │   │       └── Order.cs
        │   ├── Constants.cs
        │   ├── Controllers/
        │   │   ├── AccountController.cs
        │   │   ├── HomeController.cs
        │   │   └── MetadataController.cs
        │   ├── Identity/
        │   │   ├── ClaimsPrincipalHelper.cs
        │   │   └── Saml2/
        │   │       └── FixedSaml2AuthnResponse.cs
        │   ├── IdentityExtensions.cs
        │   ├── Program.cs
        │   ├── Startup.cs
        │   ├── Views/
        │   │   ├── Home/
        │   │   │   ├── About.cshtml
        │   │   │   ├── Contact.cshtml
        │   │   │   └── Index.cshtml
        │   │   ├── Shared/
        │   │   │   ├── Error.cshtml
        │   │   │   ├── _Layout.cshtml
        │   │   │   └── _ValidationScriptsPartial.cshtml
        │   │   ├── _ViewImports.cshtml
        │   │   └── _ViewStart.cshtml
        │   ├── WingTipBillingWebApplication.csproj
        │   ├── app.config
        │   ├── appsettings.Development.json
        │   ├── appsettings.json
        │   ├── bower.json
        │   ├── bundleconfig.json
        │   └── wwwroot/
        │       ├── css/
        │       │   └── site.css
        │       ├── js/
        │       │   └── site.js
        │       └── lib/
        │           ├── bootstrap/
        │           │   ├── .bower.json
        │           │   ├── LICENSE
        │           │   └── dist/
        │           │       ├── css/
        │           │       │   ├── bootstrap-theme.css
        │           │       │   └── bootstrap.css
        │           │       └── js/
        │           │           ├── bootstrap.js
        │           │           └── npm.js
        │           ├── jquery/
        │           │   ├── .bower.json
        │           │   ├── LICENSE.txt
        │           │   └── dist/
        │           │       └── jquery.js
        │           ├── jquery-validation/
        │           │   ├── .bower.json
        │           │   ├── LICENSE.md
        │           │   └── dist/
        │           │       ├── additional-methods.js
        │           │       └── jquery.validate.js
        │           └── jquery-validation-unobtrusive/
        │               ├── .bower.json
        │               └── jquery.validate.unobtrusive.js
        ├── WingTipCommon/
        │   ├── AspNetCore/
        │   │   ├── Authentication/
        │   │   │   └── OpenIdConnect/
        │   │   │       ├── WingTipOpenIdConnectAppBuilderExtensions.cs
        │   │   │       ├── WingTipOpenIdConnectHandler.cs
        │   │   │       └── WingTipOpenIdConnectMiddleware.cs
        │   │   └── Http/
        │   │       ├── HttpsExtensions.cs
        │   │       └── HttpsMiddleware.cs
        │   ├── Generators/
        │   │   ├── IPasswordGenerator.cs
        │   │   ├── PasswordCharacters.cs
        │   │   ├── PasswordGenerator.cs
        │   │   └── RandomPasswordGenerator.cs
        │   ├── Identity/
        │   │   ├── Migrations/
        │   │   │   ├── 20170324053803_CreateDatabase.Designer.cs
        │   │   │   ├── 20170324053803_CreateDatabase.cs
        │   │   │   └── WingTipDbContextModelSnapshot.cs
        │   │   ├── WingTipDbContext.cs
        │   │   ├── WingTipUser.cs
        │   │   └── WingTipUserManager.cs
        │   ├── MigrationStatus.cs
        │   ├── Properties/
        │   │   └── AssemblyInfo.cs
        │   ├── Services/
        │   │   ├── AuthenticationService.cs
        │   │   ├── GraphService.cs
        │   │   ├── IAuthenticationService.cs
        │   │   ├── IGraphService.cs
        │   │   ├── ISmtpService.cs
        │   │   └── SendGridSmtpService.cs
        │   ├── WingTipClaimTypes.cs
        │   ├── WingTipCommon.csproj
        │   ├── app.config
        │   └── packages.config
        ├── WingTipFunctionsApplication/
        │   ├── CalculatePlayerProfilePercentCompleteWebHook/
        │   │   ├── function.json
        │   │   └── run.csx
        │   ├── CheckEmailWebHook/
        │   │   ├── function.json
        │   │   └── run.csx
        │   ├── CheckPlayerTagWebHook/
        │   │   ├── function.json
        │   │   └── run.csx
        │   ├── CreateAndWaitForAuthyApprovalRequestWebHook/
        │   │   ├── function.json
        │   │   └── run.csx
        │   ├── CreateAuthyUserWebHook/
        │   │   ├── function.json
        │   │   └── run.csx
        │   ├── GenerateTotpWebHook/
        │   │   ├── function.json
        │   │   ├── project.json
        │   │   └── run.csx
        │   ├── Properties/
        │   │   └── AssemblyInfo.cs
        │   ├── SendMailWebHook/
        │   │   ├── function.json
        │   │   └── run.csx
        │   ├── VerifyTotpWebHook/
        │   │   ├── function.json
        │   │   ├── project.json
        │   │   └── run.csx
        │   ├── Web.Debug.config
        │   ├── Web.Release.config
        │   ├── Web.config
        │   ├── WingTipFunctionsApplication.csproj
        │   ├── appsettings.Development.json
        │   ├── appsettings.json
        │   ├── host.json
        │   └── packages.config
        ├── WingTipGamesWebApplication/
        │   ├── .bowerrc
        │   ├── Api/
        │   │   └── Controllers/
        │   │       └── GamesController.cs
        │   ├── Configuration/
        │   │   ├── ActivationControllerOptions.cs
        │   │   └── InvitationControllerOptions.cs
        │   ├── Constants.cs
        │   ├── Controllers/
        │   │   ├── AccountController.cs
        │   │   ├── ActivationController.cs
        │   │   ├── BillingController.cs
        │   │   ├── DemoController.cs
        │   │   ├── HomeController.cs
        │   │   ├── InvitationController.cs
        │   │   └── MusicController.cs
        │   ├── Filters/
        │   │   ├── CultureFilterAttribute.cs
        │   │   └── LocationFilterAttribute.cs
        │   ├── HtmlHelpers/
        │   │   ├── DropDownListHelpers.cs
        │   │   └── NavbarHelper.cs
        │   ├── IdentityExtensions.cs
        │   ├── Models/
        │   │   ├── Album.cs
        │   │   ├── Artist.cs
        │   │   ├── Game.cs
        │   │   └── Order.cs
        │   ├── Program.cs
        │   ├── Repositories/
        │   │   ├── GameRepository.cs
        │   │   ├── Games.cs
        │   │   └── IGameRepository.cs
        │   ├── Services/
        │   │   ├── FreeGeoIpGeolocationService.cs
        │   │   ├── IBillingService.cs
        │   │   ├── IGeolocationService.cs
        │   │   ├── IMusicService.cs
        │   │   ├── Location.cs
        │   │   ├── WingTipBillingService.cs
        │   │   └── WingTipMusicService.cs
        │   ├── Startup.cs
        │   ├── ViewModels/
        │   │   ├── Activation/
        │   │   │   └── RedeemedViewModel.cs
        │   │   ├── Billing/
        │   │   │   └── IndexViewModel.cs
        │   │   ├── Home/
        │   │   │   └── IndexViewModel.cs
        │   │   ├── Invitation/
        │   │   │   ├── CreateViewModel.cs
        │   │   │   └── RedeemedViewModel.cs
        │   │   └── Music/
        │   │       └── IndexViewModel.cs
        │   ├── Views/
        │   │   ├── Account/
        │   │   │   └── LinkError.cshtml
        │   │   ├── Activation/
        │   │   │   ├── RedeemError.cshtml
        │   │   │   └── Redeemed.cshtml
        │   │   ├── Billing/
        │   │   │   └── Index.cshtml
        │   │   ├── Demo/
        │   │   │   └── Index.cshtml
        │   │   ├── Home/
        │   │   │   └── Index.cshtml
        │   │   ├── Invitation/
        │   │   │   ├── Create.cshtml
        │   │   │   ├── Created.cshtml
        │   │   │   ├── RedeemError.cshtml
        │   │   │   └── Redeemed.cshtml
        │   │   ├── Music/
        │   │   │   └── Index.cshtml
        │   │   ├── Shared/
        │   │   │   ├── Error.cshtml
        │   │   │   ├── _Layout.cshtml
        │   │   │   ├── _LoginPartial.cshtml
        │   │   │   └── _ValidationScriptsPartial.cshtml
        │   │   ├── _ViewImports.cshtml
        │   │   └── _ViewStart.cshtml
        │   ├── WingTipGamesWebApplication.csproj
        │   ├── app.config
        │   ├── appsettings.Development.json
        │   ├── appsettings.json
        │   ├── bower.json
        │   ├── bundleconfig.json
        │   └── wwwroot/
        │       ├── css/
        │       │   ├── demo.css
        │       │   └── site.css
        │       ├── js/
        │       │   └── site.js
        │       └── lib/
        │           ├── bootstrap/
        │           │   ├── .bower.json
        │           │   ├── LICENSE
        │           │   └── dist/
        │           │       ├── css/
        │           │       │   ├── bootstrap-theme.css
        │           │       │   └── bootstrap.css
        │           │       └── js/
        │           │           ├── bootstrap.js
        │           │           └── npm.js
        │           ├── jquery/
        │           │   ├── .bower.json
        │           │   ├── LICENSE.txt
        │           │   └── dist/
        │           │       └── jquery.js
        │           ├── jquery-validation/
        │           │   ├── .bower.json
        │           │   ├── LICENSE.md
        │           │   └── dist/
        │           │       ├── additional-methods.js
        │           │       └── jquery.validate.js
        │           └── jquery-validation-unobtrusive/
        │               ├── .bower.json
        │               └── jquery.validate.unobtrusive.js
        ├── WingTipIdentityWebApplication/
        │   ├── Api/
        │   │   ├── Controllers/
        │   │   │   └── AccountController.cs
        │   │   └── Models/
        │   │       ├── AccountCheckNonceErrorResponse.cs
        │   │       ├── AccountCheckNonceRequest.cs
        │   │       ├── AccountCheckPasswordRequest.cs
        │   │       ├── AccountCreateRequest.cs
        │   │       ├── AccountRecoverPasswordRequest.cs
        │   │       └── AccountResetPasswordRequest.cs
        │   ├── Authentication/
        │   │   ├── BasicAuthenticationExtensions.cs
        │   │   └── BasicAuthenticationMiddleware.cs
        │   ├── MigrationStatus.cs
        │   ├── Program.cs
        │   ├── Startup.cs
        │   ├── WingTipIdentityWebApplication.csproj
        │   ├── app.config
        │   ├── appsettings.Development.json
        │   └── appsettings.json
        ├── WingTipMusicWebApplication/
        │   ├── .bowerrc
        │   ├── Api/
        │   │   └── Controllers/
        │   │       └── AlbumsController.cs
        │   ├── Constants.cs
        │   ├── Controllers/
        │   │   ├── AccountController.cs
        │   │   ├── DemoController.cs
        │   │   └── HomeController.cs
        │   ├── Filters/
        │   │   ├── CultureFilterAttribute.cs
        │   │   └── LocationFilterAttribute.cs
        │   ├── HtmlHelpers/
        │   │   ├── DropDownListHelpers.cs
        │   │   └── NavbarHelper.cs
        │   ├── IdentityExtensions.cs
        │   ├── Models/
        │   │   ├── Album.cs
        │   │   └── Artist.cs
        │   ├── Program.cs
        │   ├── Repositories/
        │   │   ├── AlbumRepository.cs
        │   │   ├── Albums.cs
        │   │   └── IAlbumRepository.cs
        │   ├── Services/
        │   │   ├── FreeGeoIpGeolocationService.cs
        │   │   ├── IGeolocationService.cs
        │   │   └── Location.cs
        │   ├── Startup.cs
        │   ├── ViewModels/
        │   │   └── Home/
        │   │       └── IndexViewModel.cs
        │   ├── Views/
        │   │   ├── Demo/
        │   │   │   └── Index.cshtml
        │   │   ├── Home/
        │   │   │   └── Index.cshtml
        │   │   ├── Shared/
        │   │   │   ├── Error.cshtml
        │   │   │   ├── _Layout.cshtml
        │   │   │   ├── _LoginPartial.cshtml
        │   │   │   └── _ValidationScriptsPartial.cshtml
        │   │   ├── _ViewImports.cshtml
        │   │   └── _ViewStart.cshtml
        │   ├── WingTipMusicWebApplication.csproj
        │   ├── app.config
        │   ├── appsettings.Development.json
        │   ├── appsettings.json
        │   ├── bower.json
        │   ├── bundleconfig.json
        │   └── wwwroot/
        │       ├── css/
        │       │   ├── demo.css
        │       │   └── site.css
        │       ├── js/
        │       │   └── site.js
        │       └── lib/
        │           ├── bootstrap/
        │           │   ├── .bower.json
        │           │   ├── LICENSE
        │           │   └── dist/
        │           │       ├── css/
        │           │       │   ├── bootstrap-theme.css
        │           │       │   └── bootstrap.css
        │           │       └── js/
        │           │           ├── bootstrap.js
        │           │           └── npm.js
        │           ├── jquery/
        │           │   ├── .bower.json
        │           │   ├── LICENSE.txt
        │           │   └── dist/
        │           │       └── jquery.js
        │           ├── jquery-validation/
        │           │   ├── .bower.json
        │           │   ├── LICENSE.md
        │           │   └── dist/
        │           │       ├── additional-methods.js
        │           │       └── jquery.validate.js
        │           └── jquery-validation-unobtrusive/
        │               ├── .bower.json
        │               └── jquery.validate.unobtrusive.js
        ├── WingTipToysWebApplication/
        │   ├── .bowerrc
        │   ├── Configuration/
        │   │   └── UserControllerOptions.cs
        │   ├── Constants.cs
        │   ├── Controllers/
        │   │   ├── AccountController.cs
        │   │   ├── AuditController.cs
        │   │   ├── HomeController.cs
        │   │   ├── ReportController.cs
        │   │   └── UserController.cs
        │   ├── HtmlHelpers/
        │   │   └── NavbarHelper.cs
        │   ├── IdentityExtensions.cs
        │   ├── MigrationStatusExtensions.cs
        │   ├── Program.cs
        │   ├── Startup.cs
        │   ├── ViewModels/
        │   │   ├── Audit/
        │   │   │   ├── AuditEntryViewModel.cs
        │   │   │   └── IndexViewModel.cs
        │   │   ├── Report/
        │   │   │   ├── B2CAuthenticationCountSummaryIndexViewModel.cs
        │   │   │   ├── B2CAuthenticationCountSummaryReportEntryViewModel.cs
        │   │   │   ├── B2CMfaRequestCountSummaryIndexViewModel.cs
        │   │   │   ├── B2CMfaRequestCountSummaryReportEntryViewModel.cs
        │   │   │   ├── B2CUserJourneySummaryEventsIndexViewModel.cs
        │   │   │   ├── B2CUserJourneySummaryEventsReportEntryViewModel.cs
        │   │   │   ├── TenantUserCountSummaryIndexViewModel.cs
        │   │   │   └── TenantUserCountSummaryReportEntryViewModel.cs
        │   │   └── User/
        │   │       ├── ChangePasswordViewModel.cs
        │   │       ├── CreateViewModel.cs
        │   │       ├── IndexViewModel.cs
        │   │       └── UserViewModel.cs
        │   ├── Views/
        │   │   ├── Audit/
        │   │   │   ├── ApplicationIndex.cshtml
        │   │   │   └── UserIndex.cshtml
        │   │   ├── Home/
        │   │   │   └── Index.cshtml
        │   │   ├── Report/
        │   │   │   ├── B2CAuthenticationCountSummaryIndex.cshtml
        │   │   │   ├── B2CMfaRequestCountSummaryIndex.cshtml
        │   │   │   ├── B2CUserJourneySummaryEventsIndex.cshtml
        │   │   │   └── TenantUserCountSummaryIndex.cshtml
        │   │   ├── Shared/
        │   │   │   ├── Error.cshtml
        │   │   │   ├── _Layout.cshtml
        │   │   │   ├── _LoginPartial.cshtml
        │   │   │   └── _ValidationScriptsPartial.cshtml
        │   │   ├── User/
        │   │   │   ├── ChangePassword.cshtml
        │   │   │   ├── Create.cshtml
        │   │   │   └── Index.cshtml
        │   │   ├── _ViewImports.cshtml
        │   │   └── _ViewStart.cshtml
        │   ├── WingTipToysWebApplication.csproj
        │   ├── app.config
        │   ├── appsettings.Development.json
        │   ├── appsettings.json
        │   ├── bower.json
        │   ├── bundleconfig.json
        │   └── wwwroot/
        │       ├── css/
        │       │   └── site.css
        │       ├── js/
        │       │   └── site.js
        │       └── lib/
        │           ├── bootstrap/
        │           │   ├── .bower.json
        │           │   ├── LICENSE
        │           │   └── dist/
        │           │       ├── css/
        │           │       │   ├── bootstrap-theme.css
        │           │       │   └── bootstrap.css
        │           │       └── js/
        │           │           ├── bootstrap.js
        │           │           └── npm.js
        │           ├── jquery/
        │           │   ├── .bower.json
        │           │   ├── LICENSE.txt
        │           │   └── dist/
        │           │       └── jquery.js
        │           ├── jquery-validation/
        │           │   ├── .bower.json
        │           │   ├── LICENSE.md
        │           │   └── dist/
        │           │       ├── additional-methods.js
        │           │       └── jquery.validate.js
        │           └── jquery-validation-unobtrusive/
        │               ├── .bower.json
        │               └── jquery.validate.unobtrusive.js
        └── WingTipUserJourneyPlayerWebApplication/
            ├── .bowerrc
            ├── Api/
            │   └── Controllers/
            │       └── StreamController.cs
            ├── AzureApplicationInsightsCredential.cs
            ├── Constants.cs
            ├── Controllers/
            │   ├── ConfigController.cs
            │   └── TraceController.cs
            ├── Program.cs
            ├── Startup.cs
            ├── Views/
            │   ├── Config/
            │   │   └── Index.cshtml
            │   ├── Trace/
            │   │   └── Index.cshtml
            │   └── _ViewStart.cshtml
            ├── WingTipUserJourneyPlayerWebApplication.csproj
            ├── app.config
            ├── appsettings.Development.json
            ├── appsettings.json
            ├── bower.json
            ├── bundleconfig.json
            └── wwwroot/
                ├── css/
                │   └── trace_102.css
                ├── js/
                │   ├── base64url_102.js
                │   └── config_102.js
                └── languages/
                    └── en-us_102.json

================================================
FILE CONTENTS
================================================

================================================
FILE: .gitattributes
================================================
###############################################################################
# Set default behavior to automatically normalize line endings.
###############################################################################
* text=auto

###############################################################################
# Set default behavior for command prompt diff.
#
# This is need for earlier builds of msysgit that does not have it on by
# default for csharp files.
# Note: This is only used by command line
###############################################################################
#*.cs     diff=csharp

###############################################################################
# Set the merge driver for project and solution files
#
# Merging from the command prompt will add diff markers to the files if there
# are conflicts (Merging from VS is not affected by the settings below, in VS
# the diff markers are never inserted). Diff markers may cause the following 
# file extensions to fail to load in VS. An alternative would be to treat
# these files as binary and thus will always conflict and require user
# intervention with every merge. To do so, just uncomment the entries below
###############################################################################
#*.sln       merge=binary
#*.csproj    merge=binary
#*.vbproj    merge=binary
#*.vcxproj   merge=binary
#*.vcproj    merge=binary
#*.dbproj    merge=binary
#*.fsproj    merge=binary
#*.lsproj    merge=binary
#*.wixproj   merge=binary
#*.modelproj merge=binary
#*.sqlproj   merge=binary
#*.wwaproj   merge=binary

###############################################################################
# behavior for image files
#
# image files are treated as binary by default.
###############################################################################
#*.jpg   binary
#*.png   binary
#*.gif   binary

###############################################################################
# diff behavior for common document formats
# 
# Convert binary document formats to text before diffing them. This feature
# is only available from the command line. Turn it on by uncommenting the 
# entries below.
###############################################################################
#*.doc   diff=astextplain
#*.DOC   diff=astextplain
#*.docx  diff=astextplain
#*.DOCX  diff=astextplain
#*.dot   diff=astextplain
#*.DOT   diff=astextplain
#*.pdf   diff=astextplain
#*.PDF   diff=astextplain
#*.rtf   diff=astextplain
#*.RTF   diff=astextplain


================================================
FILE: .gitignore
================================================
## Ignore Visual Studio temporary files, build results, and
## files generated by popular Visual Studio add-ons.

# User-specific files
*.suo
*.user
*.userosscache
*.sln.docstates

# User-specific files (MonoDevelop/Xamarin Studio)
*.userprefs

# Build results
[Dd]ebug/
[Dd]ebugPublic/
[Rr]elease/
[Rr]eleases/
x64/
x86/
bld/
[Bb]in/
[Oo]bj/

# Visual Studio 2015 cache/options directory
.vs/
# Uncomment if you have tasks that create the project's static files in wwwroot
#wwwroot/

# MSTest test Results
[Tt]est[Rr]esult*/
[Bb]uild[Ll]og.*

# NUNIT
*.VisualState.xml
TestResult.xml

# Build Results of an ATL Project
[Dd]ebugPS/
[Rr]eleasePS/
dlldata.c

# DNX
project.lock.json
artifacts/

*_i.c
*_p.c
*_i.h
*.ilk
*.meta
*.obj
*.pch
*.pdb
*.pgc
*.pgd
*.rsp
*.sbr
*.tlb
*.tli
*.tlh
*.tmp
*.tmp_proj
*.log
*.vspscc
*.vssscc
.builds
*.pidb
*.svclog
*.scc

# Chutzpah Test files
_Chutzpah*

# Visual C++ cache files
ipch/
*.aps
*.ncb
*.opendb
*.opensdf
*.sdf
*.cachefile

# Visual Studio profiler
*.psess
*.vsp
*.vspx
*.sap

# TFS 2012 Local Workspace
$tf/

# Guidance Automation Toolkit
*.gpState

# ReSharper is a .NET coding add-in
_ReSharper*/
*.[Rr]e[Ss]harper
*.DotSettings.user

# JustCode is a .NET coding add-in
.JustCode

# TeamCity is a build add-in
_TeamCity*

# DotCover is a Code Coverage Tool
*.dotCover

# NCrunch
_NCrunch_*
.*crunch*.local.xml
nCrunchTemp_*

# MightyMoose
*.mm.*
AutoTest.Net/

# Web workbench (sass)
.sass-cache/

# Installshield output folder
[Ee]xpress/

# DocProject is a documentation generator add-in
DocProject/buildhelp/
DocProject/Help/*.HxT
DocProject/Help/*.HxC
DocProject/Help/*.hhc
DocProject/Help/*.hhk
DocProject/Help/*.hhp
DocProject/Help/Html2
DocProject/Help/html

# Click-Once directory
publish/

# Publish Web Output
*.[Pp]ublish.xml
*.azurePubxml
# TODO: Comment the next line if you want to checkin your web deploy settings 
# but database connection strings (with potential passwords) will be unencrypted
*.pubxml
*.publishproj

# NuGet Packages
*.nupkg
# The packages folder can be ignored because of Package Restore
**/packages/*
# except build/, which is used as an MSBuild target.
!**/packages/build/
# Uncomment if necessary however generally it will be regenerated when needed
#!**/packages/repositories.config
# NuGet v3's project.json files produces more ignoreable files
*.nuget.props
*.nuget.targets

# Microsoft Azure Build Output
csx/
*.build.csdef

# Microsoft Azure Emulator
ecf/
rcf/

# Microsoft Azure ApplicationInsights config file
ApplicationInsights.config

# Windows Store app package directory
AppPackages/
BundleArtifacts/

# Visual Studio cache files
# files ending in .cache can be ignored
*.[Cc]ache
# but keep track of directories ending in .cache
!*.[Cc]ache/

# Others
ClientBin/
~$*
*~
*.dbmdl
*.dbproj.schemaview
*.pfx
*.publishsettings
node_modules/
orleans.codegen.cs

# RIA/Silverlight projects
Generated_Code/

# Backup & report files from converting an old project file
# to a newer Visual Studio version. Backup files are not needed,
# because we have git ;-)
_UpgradeReport_Files/
Backup*/
UpgradeLog*.XML
UpgradeLog*.htm

# SQL Server files
*.mdf
*.ldf

# Business Intelligence projects
*.rdl.data
*.bim.layout
*.bim_*.settings

# Microsoft Fakes
FakesAssemblies/

# GhostDoc plugin setting file
*.GhostDoc.xml

# Node.js Tools for Visual Studio
.ntvs_analysis.dat

# Visual Studio 6 build log
*.plg

# Visual Studio 6 workspace options file
*.opt

# Visual Studio LightSwitch build output
**/*.HTMLClient/GeneratedArtifacts
**/*.DesktopClient/GeneratedArtifacts
**/*.DesktopClient/ModelManifest.xml
**/*.Server/GeneratedArtifacts
**/*.Server/ModelManifest.xml
_Pvt_Extensions

# Paket dependency manager
.paket/paket.exe

# FAKE - F# Make
.fake/
ExploreAdmin.zip
ExploreAdmin/desktop.ini


================================================
FILE: AppSamples-iOS-TouchID-master/LICENSE
================================================
    MIT License

    Copyright (c) Microsoft Corporation. All rights reserved.

    Permission is hereby granted, free of charge, to any person obtaining a copy
    of this software and associated documentation files (the "Software"), to deal
    in the Software without restriction, including without limitation the rights
    to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
    copies of the Software, and to permit persons to whom the Software is
    furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all
    copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
    SOFTWARE


================================================
FILE: AppSamples-iOS-TouchID-master/Podfile
================================================
platform :ios, '9.0'

target 'active-directory-ios-native-appauth-b2c' do
  pod 'AppAuth'
  pod 'BKPasscodeView'
end


================================================
FILE: AppSamples-iOS-TouchID-master/active-directory-ios-native-appauth-b2c/AppDelegate.h
================================================
//
//  AppDelegate.h
//  active-directory-ios-native-appauth
//
//  Created by Saeed Akhter and Gerardo Saca on 3/1/17.
//  Copyright © 2017 Microsoft. All rights reserved.
//

#import <UIKit/UIKit.h>
#import "AppAuth.h"

@interface AppDelegate : UIResponder <UIApplicationDelegate>

@property (nonnull, strong, nonatomic) UIWindow *window;
@property (nonatomic, strong, nullable) id<OIDAuthorizationFlowSession> currentAuthorizationFlow;


@end



================================================
FILE: AppSamples-iOS-TouchID-master/active-directory-ios-native-appauth-b2c/AppDelegate.m
================================================
//
//  AppDelegate.m
//  active-directory-ios-native-appauth
//
//  Created by Saeed Akhter and Gerardo Saca on 3/1/17.
//  Copyright © 2017 Microsoft. All rights reserved.
//

#import "AppDelegate.h"

@interface AppDelegate ()

@end

@implementation AppDelegate

- (BOOL)application:(UIApplication *)application
            openURL:(NSURL *)url
  sourceApplication:(NSString *)sourceApplication
         annotation:(id)annotation
{
    if([_currentAuthorizationFlow resumeAuthorizationFlowWithURL:url]) {
        return YES;
    } else {
        
    }
    
    
    
    return NO;
}

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Override point for customization after application launch.
    return YES;
}


- (void)applicationWillResignActive:(UIApplication *)application {
    // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.
    // Use this method to pause ongoing tasks, disable timers, and invalidate graphics rendering callbacks. Games should use this method to pause the game.
}


- (void)applicationDidEnterBackground:(UIApplication *)application {
    // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.
    // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.
}


- (void)applicationWillEnterForeground:(UIApplication *)application {
    // Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background.
}


- (void)applicationDidBecomeActive:(UIApplication *)application {
    // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
}


- (void)applicationWillTerminate:(UIApplication *)application {
    // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
}


@end


================================================
FILE: AppSamples-iOS-TouchID-master/active-directory-ios-native-appauth-b2c/Assets.xcassets/AppIcon.appiconset/Contents.json
================================================
{
  "images" : [
    {
      "size" : "20x20",
      "idiom" : "iphone",
      "filename" : "Icon-40.png",
      "scale" : "2x"
    },
    {
      "size" : "20x20",
      "idiom" : "iphone",
      "filename" : "Icon-60.png",
      "scale" : "3x"
    },
    {
      "size" : "29x29",
      "idiom" : "iphone",
      "filename" : "Icon-Small@2x.png",
      "scale" : "2x"
    },
    {
      "size" : "29x29",
      "idiom" : "iphone",
      "filename" : "Icon-Small-50@2x.png",
      "scale" : "3x"
    },
    {
      "size" : "40x40",
      "idiom" : "iphone",
      "filename" : "Icon-40@2x.png",
      "scale" : "2x"
    },
    {
      "size" : "40x40",
      "idiom" : "iphone",
      "filename" : "Icon-40@3x.png",
      "scale" : "3x"
    },
    {
      "size" : "60x60",
      "idiom" : "iphone",
      "filename" : "Icon-60@2x.png",
      "scale" : "2x"
    },
    {
      "size" : "60x60",
      "idiom" : "iphone",
      "filename" : "Icon-60@3x.png",
      "scale" : "3x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: AppSamples-iOS-TouchID-master/active-directory-ios-native-appauth-b2c/Base.lproj/LaunchScreen.storyboard
================================================
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="12118" systemVersion="16E195" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES" colorMatched="YES" initialViewController="01J-lp-oVM">
    <device id="retina4_7" orientation="portrait">
        <adaptation id="fullscreen"/>
    </device>
    <dependencies>
        <deployment identifier="iOS"/>
        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="12086"/>
        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
    </dependencies>
    <scenes>
        <!--View Controller-->
        <scene sceneID="EHf-IW-A2E">
            <objects>
                <viewController id="01J-lp-oVM" sceneMemberID="viewController">
                    <layoutGuides>
                        <viewControllerLayoutGuide type="top" id="Llm-lL-Icb"/>
                        <viewControllerLayoutGuide type="bottom" id="xb3-aO-Qok"/>
                    </layoutGuides>
                    <view key="view" contentMode="scaleToFill" id="Ze5-6b-2t3">
                        <rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
                        <subviews>
                            <imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="logo.png" translatesAutoresizingMaskIntoConstraints="NO" id="zy6-HI-wuF">
                                <rect key="frame" x="102" y="261" width="170" height="144"/>
                            </imageView>
                        </subviews>
                        <color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                        <constraints>
                            <constraint firstItem="zy6-HI-wuF" firstAttribute="centerX" secondItem="Ze5-6b-2t3" secondAttribute="centerX" id="lu3-Ab-Bm1"/>
                            <constraint firstItem="zy6-HI-wuF" firstAttribute="centerY" secondItem="Ze5-6b-2t3" secondAttribute="centerY" id="nR0-5q-qJA"/>
                        </constraints>
                    </view>
                </viewController>
                <placeholder placeholderIdentifier="IBFirstResponder" id="iYj-Kq-Ea1" userLabel="First Responder" sceneMemberID="firstResponder"/>
            </objects>
            <point key="canvasLocation" x="52" y="374.66266866566718"/>
        </scene>
    </scenes>
    <resources>
        <image name="logo.png" width="170" height="144"/>
    </resources>
</document>


================================================
FILE: AppSamples-iOS-TouchID-master/active-directory-ios-native-appauth-b2c/Base.lproj/Main.storyboard
================================================
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="12118" systemVersion="16E195" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES" initialViewController="6z4-2Q-HSn">
    <device id="retina4_7" orientation="portrait">
        <adaptation id="fullscreen"/>
    </device>
    <dependencies>
        <deployment identifier="iOS"/>
        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="12086"/>
        <capability name="Constraints to layout margins" minToolsVersion="6.0"/>
        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
    </dependencies>
    <scenes>
        <!--View Controller-->
        <scene sceneID="tne-QT-ifu">
            <objects>
                <viewController id="BYZ-38-t0r" customClass="ViewController" sceneMemberID="viewController">
                    <layoutGuides>
                        <viewControllerLayoutGuide type="top" id="y3c-jy-aDJ"/>
                        <viewControllerLayoutGuide type="bottom" id="wfy-db-euE"/>
                    </layoutGuides>
                    <view key="view" contentMode="scaleToFill" id="8bC-Xf-vdC">
                        <rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
                        <subviews>
                            <button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="5JV-Pf-pu7">
                                <rect key="frame" x="140" y="393" width="95" height="30"/>
                                <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
                                <state key="normal" title="Profile Edit"/>
                                <connections>
                                    <action selector="didEditProfile:" destination="BYZ-38-t0r" eventType="touchUpInside" id="Vt2-yu-Aad"/>
                                </connections>
                            </button>
                            <button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="rYq-AM-Yf0">
                                <rect key="frame" x="156" y="317" width="62" height="30"/>
                                <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
                                <state key="normal" title="Sign In"/>
                                <connections>
                                    <action selector="didSignIn:" destination="BYZ-38-t0r" eventType="touchUpInside" id="ht4-Ti-RMv"/>
                                </connections>
                            </button>
                            <activityIndicatorView hidden="YES" opaque="NO" contentMode="scaleToFill" horizontalHuggingPriority="750" verticalHuggingPriority="750" fixedFrame="YES" style="gray" translatesAutoresizingMaskIntoConstraints="NO" id="CC5-95-Pff">
                                <rect key="frame" x="177" y="256" width="20" height="20"/>
                                <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
                            </activityIndicatorView>
                            <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="TJV-Ik-mEM">
                                <rect key="frame" x="26" y="200" width="343" height="40"/>
                                <constraints>
                                    <constraint firstAttribute="height" constant="40" id="B2P-l8-6UZ"/>
                                </constraints>
                                <fontDescription key="fontDescription" type="system" pointSize="26"/>
                                <nil key="textColor"/>
                                <nil key="highlightedColor"/>
                            </label>
                            <imageView userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="logo.png" translatesAutoresizingMaskIntoConstraints="NO" id="HyW-TM-ttI">
                                <rect key="frame" x="102" y="40" width="170" height="144"/>
                            </imageView>
                        </subviews>
                        <color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                        <constraints>
                            <constraint firstItem="HyW-TM-ttI" firstAttribute="centerX" secondItem="8bC-Xf-vdC" secondAttribute="centerX" id="8E0-PU-Z6e"/>
                            <constraint firstItem="TJV-Ik-mEM" firstAttribute="leading" secondItem="8bC-Xf-vdC" secondAttribute="leadingMargin" constant="10" id="X5K-CI-CkI"/>
                            <constraint firstItem="TJV-Ik-mEM" firstAttribute="top" secondItem="y3c-jy-aDJ" secondAttribute="bottom" constant="180" id="bMW-6z-xOS"/>
                            <constraint firstItem="HyW-TM-ttI" firstAttribute="top" secondItem="y3c-jy-aDJ" secondAttribute="bottom" constant="20" id="lRU-hY-dmS"/>
                            <constraint firstItem="TJV-Ik-mEM" firstAttribute="trailing" secondItem="8bC-Xf-vdC" secondAttribute="trailingMargin" constant="10" id="nGc-Js-0sh"/>
                        </constraints>
                    </view>
                    <navigationItem key="navigationItem" id="rDU-4z-jyu"/>
                    <connections>
                        <outlet property="MessLabel" destination="TJV-Ik-mEM" id="vc6-GO-jPG"/>
                        <outlet property="editProfileButton" destination="5JV-Pf-pu7" id="Ayr-tZ-DnK"/>
                        <outlet property="signInButton" destination="rYq-AM-Yf0" id="BC9-xZ-Nii"/>
                        <outlet property="spinnerView" destination="CC5-95-Pff" id="MM4-j3-820"/>
                    </connections>
                </viewController>
                <placeholder placeholderIdentifier="IBFirstResponder" id="dkx-z0-nzr" sceneMemberID="firstResponder"/>
            </objects>
            <point key="canvasLocation" x="268" y="607.64617691154433"/>
        </scene>
        <!--Navigation Controller-->
        <scene sceneID="hiG-3V-Tz0">
            <objects>
                <navigationController navigationBarHidden="YES" id="6z4-2Q-HSn" sceneMemberID="viewController">
                    <navigationBar key="navigationBar" contentMode="scaleToFill" id="PuQ-cn-yPq">
                        <rect key="frame" x="0.0" y="0.0" width="375" height="44"/>
                        <autoresizingMask key="autoresizingMask"/>
                    </navigationBar>
                    <connections>
                        <segue destination="BYZ-38-t0r" kind="relationship" relationship="rootViewController" id="Ri3-dc-bne"/>
                    </connections>
                </navigationController>
                <placeholder placeholderIdentifier="IBFirstResponder" id="geK-ck-2dN" userLabel="First Responder" sceneMemberID="firstResponder"/>
            </objects>
            <point key="canvasLocation" x="-563" y="608"/>
        </scene>
    </scenes>
    <resources>
        <image name="logo.png" width="170" height="144"/>
    </resources>
</document>


================================================
FILE: AppSamples-iOS-TouchID-master/active-directory-ios-native-appauth-b2c/GameTableViewController.h
================================================
//
//  GameTableViewController.h
//  active-directory-ios-native-appauth-b2c
//
//  Created by John Lyons on 10/4/17.
//  Copyright © 2017 Microsoft. All rights reserved.
//

#import <UIKit/UIKit.h>

#import "Games.h"
@interface GameTableViewController : UIViewController<UITableViewDelegate,UITableViewDataSource>{
    
    UITableView* myTableView;
    Games* allGames;
}

@end


================================================
FILE: AppSamples-iOS-TouchID-master/active-directory-ios-native-appauth-b2c/GameTableViewController.m
================================================
//
//  GameTableViewController.m
//  active-directory-ios-native-appauth-b2c
//
//  Created by John Lyons on 10/4/17.
//  Copyright © 2017 Microsoft. All rights reserved.
//

#import "GameTableViewController.h"

@interface GameTableViewController ()

@end

@implementation GameTableViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    
    CGRect r=[[UIScreen mainScreen] applicationFrame];
    
    
    UIView* contentView=[[UIView alloc] initWithFrame:r];
    contentView.backgroundColor=[UIColor whiteColor];
    self.view=contentView;
    
    myTableView=[[UITableView alloc] initWithFrame:r style:UITableViewStylePlain];
    myTableView.separatorStyle=UITableViewCellSeparatorStyleNone;
    myTableView.delegate=self;
    myTableView.dataSource=self;
    [self.view addSubview:myTableView];
    
   
    UIView* YourHeaderView=[[UIView alloc] initWithFrame:CGRectMake(0, 0, r.size.width, 40)];
    YourHeaderView.backgroundColor=[UIColor whiteColor];
    [self.view addSubview:YourHeaderView ];
    
    
    
    allGames=[Games sharedInstance];
    
}
-(void)checkTimer{
    if (allGames.gamesList.count==0){
        [NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(checkTimer) userInfo:nil repeats:NO];
    } else {
        
        [myTableView reloadData];
    }
    
}
- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

#pragma mark - Table view data source

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
    return 300.0f;
    
}

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {

    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {

    return allGames.gamesList.count;
}

- (UITableViewCell *) getCellContentView:(NSString *)cellIdentifier {
    
    float width=myTableView.frame.size.width;
    UILabel *lblTemp;
    
    UITableViewCell *cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
    /*
    lblTemp = [[UILabel alloc] initWithFrame:CGRectMake(2,2,width-4,98)];
    lblTemp.backgroundColor= [UIColor colorWithRed:0.95f green:0.95f blue:0.95f alpha:0.95f];
    lblTemp.tag=99;
    [cell.contentView addSubview:lblTemp];
    */
    
    UIImageView *picTemp = [[UIImageView alloc] init];
    picTemp.frame= CGRectMake(0,4,width,200);
    picTemp.contentMode =UIViewContentModeScaleAspectFit;
    picTemp.clipsToBounds=YES;
    picTemp.tag=4;
    [cell.contentView addSubview:picTemp];
    
    lblTemp = [[UILabel alloc] initWithFrame:CGRectMake(5, 208, width-10, 22)];
    lblTemp.font=[UIFont fontWithName:@"HelveticaNeue-Light" size:18];
    lblTemp.tag = 1;
    lblTemp.adjustsFontSizeToFitWidth=YES;
    lblTemp.textColor = [UIColor blackColor];
    lblTemp.backgroundColor= [UIColor clearColor];
    lblTemp.textAlignment=NSTextAlignmentCenter;
    [cell.contentView addSubview:lblTemp];
    
    
   
    
    
    
    
    
    lblTemp = [[UILabel alloc] initWithFrame:CGRectMake((width-140)/2,235,140,40)];
    lblTemp.backgroundColor=  [UIColor colorWithRed:0.13 green:0.30 blue:0.45 alpha:1.0];;
    lblTemp.tag=199;
    lblTemp.layer.cornerRadius = 7;
    lblTemp.layer.masksToBounds = YES;
    [cell.contentView addSubview:lblTemp];
    
    //Initialize Label with tag 2.
    lblTemp = [[UILabel alloc] initWithFrame:CGRectMake(5+(width-140)/2, 240, 130, 30)];
    lblTemp.tag = 2;
    lblTemp.font=[UIFont fontWithName:@"HelveticaNeue-Light" size:16];
    lblTemp.textColor=[UIColor whiteColor];
    //lblTemp.numberOfLines = 2;
    //lblTemp.lineBreakMode = NSLineBreakByWordWrapping;
    lblTemp.textAlignment=NSTextAlignmentCenter;
    lblTemp.backgroundColor= [UIColor clearColor];
    [cell.contentView addSubview:lblTemp];
    
    
    /*
    lblTemp = [[UILabel alloc] initWithFrame:CGRectMake(0,300,width,2)];
    lblTemp.backgroundColor= [UIColor darkGrayColor];
    lblTemp.tag=199;
    [cell.contentView addSubview:lblTemp];*/
    
    return cell;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    
    if (cell == nil) {
        cell = [self getCellContentView:CellIdentifier];
        
    }
    
    
    UILabel *lblTemp1 = (UILabel *)[cell viewWithTag:1];
    UILabel *lblTemp2 = (UILabel *)[cell viewWithTag:2];
   // UILabel *lblTemp99 = (UILabel *)[cell viewWithTag:99];
    //UILabel *lblTemp199 = (UILabel *)[cell viewWithTag:199];
    UIImageView *picTemp = (UIImageView *)[cell viewWithTag:4];

    
    NSDictionary* one=[allGames.gamesList objectAtIndex:indexPath.row];
    
    lblTemp1.text=[one objectForKey:@"title"];
    lblTemp2.text=@"$4.00";
    if ([one   objectForKey:@"standardPrice"]){
        float price=[[one objectForKey:@"standardPrice"] floatValue];
        lblTemp2.text=[@"" stringByAppendingFormat:@"$%1.2f",price];
    }
    NSString* imageUrl=[one objectForKey:@"imageSource"];
    
    [NSURLConnection sendAsynchronousRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:imageUrl]] queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) {
        picTemp.image = [UIImage imageWithData:data];
        
    }];
    
    //picTemp.image=[UIImage imageWithCo   imageWithContentsOfURL:theURL];
    
   // NSLog(@"one %@",one);
    
    
    return cell;
}


/*
// Override to support conditional editing of the table view.
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath {
    // Return NO if you do not want the specified item to be editable.
    return YES;
}
*/

/*
// Override to support editing the table view.
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
    if (editingStyle == UITableViewCellEditingStyleDelete) {
        // Delete the row from the data source
        [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
    } else if (editingStyle == UITableViewCellEditingStyleInsert) {
        // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view
    }   
}
*/

/*
// Override to support rearranging the table view.
- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath {
}
*/

/*
// Override to support conditional rearranging of the table view.
- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath {
    // Return NO if you do not want the item to be re-orderable.
    return YES;
}
*/

/*
#pragma mark - Navigation

// In a storyboard-based application, you will often want to do a little preparation before navigation
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    // Get the new view controller using [segue destinationViewController].
    // Pass the selected object to the new view controller.
}
*/

@end


================================================
FILE: AppSamples-iOS-TouchID-master/active-directory-ios-native-appauth-b2c/Games.h
================================================
//
//  Games.h
//  active-directory-ios-native-appauth-b2c
//
//  Created by John Lyons on 10/4/17.
//  Copyright © 2017 Microsoft. All rights reserved.
//

#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>


@interface Games : NSObject{
    
    NSArray* gamesList;
    
    
}
@property (readwrite, retain) NSArray* gamesList;
+ (Games *) sharedInstance;

-(void)loadGames:(NSString*)token;

@end


================================================
FILE: AppSamples-iOS-TouchID-master/active-directory-ios-native-appauth-b2c/Games.m
================================================
//
//  Games.m
//  active-directory-ios-native-appauth-b2c
//
//  Created by John Lyons on 10/4/17.
//  Copyright © 2017 Microsoft. All rights reserved.
//

#import "Games.h"

@implementation Games
static Games *_sharedInstance;
@synthesize gamesList;

- (id) init
{
    if (self = [super init])
    {
        
    }
    return self;
}
+ (Games *) sharedInstance
{
    if (!_sharedInstance)
    {
        _sharedInstance = [[Games alloc] init];
    }
    
    return _sharedInstance;
}


-(void)loadGames:(NSString*)token{
    
    //[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES];
    
   // NSString *token ; //GET THE TOKEN FROM THE KEYCHAIN
    
    NSString *authValue = [NSString stringWithFormat:@"Bearer %@",token];
    
    //Configure your session with common header fields like authorization etc
    NSURLSessionConfiguration *sessionConfiguration = [NSURLSessionConfiguration defaultSessionConfiguration];
    sessionConfiguration.HTTPAdditionalHeaders = @{@"Authorization": authValue};
    
    NSURLSession *session = [NSURLSession sessionWithConfiguration:sessionConfiguration];
    
    NSString *url=@"https://wingtipgamesb2c.azurewebsites.net/api/games/newrelease";
    NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:url]];
    //NSLog(@"url %@",url);
    
    NSURLSessionDataTask *task = [session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:NO];
        if (!error) {
            NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)response;
            if (httpResponse.statusCode == 200){
                NSArray *jsonData = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers|NSJSONReadingAllowFragments error:nil];
                
                //Process the data
                
                //NSLog(@"jsonData %@",jsonData);
                
                gamesList=jsonData;
            }
        }
        
    }];
    [task resume];
    
    
}

@end


================================================
FILE: AppSamples-iOS-TouchID-master/active-directory-ios-native-appauth-b2c/Info.plist
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>CFBundleDevelopmentRegion</key>
	<string>en</string>
	<key>CFBundleExecutable</key>
	<string>$(EXECUTABLE_NAME)</string>
	<key>CFBundleIdentifier</key>
	<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
	<key>CFBundleInfoDictionaryVersion</key>
	<string>6.0</string>
	<key>CFBundleName</key>
	<string>$(PRODUCT_NAME)</string>
	<key>CFBundlePackageType</key>
	<string>APPL</string>
	<key>CFBundleShortVersionString</key>
	<string>1.0</string>
	<key>CFBundleURLTypes</key>
	<array>
		<dict>
			<key>CFBundleTypeRole</key>
			<string>Editor</string>
			<key>CFBundleURLSchemes</key>
			<array>
				<string>com.onmicrosoft.b2ctechready.wingtipgamesb2c</string>
			</array>
		</dict>
	</array>
	<key>CFBundleVersion</key>
	<string>1</string>
	<key>LSRequiresIPhoneOS</key>
	<true/>
	<key>UILaunchStoryboardName</key>
	<string>LaunchScreen</string>
	<key>UIMainStoryboardFile</key>
	<string>Main</string>
	<key>UIRequiredDeviceCapabilities</key>
	<array>
		<string>armv7</string>
	</array>
	<key>UISupportedInterfaceOrientations</key>
	<array>
		<string>UIInterfaceOrientationPortrait</string>
		<string>UIInterfaceOrientationLandscapeLeft</string>
		<string>UIInterfaceOrientationLandscapeRight</string>
	</array>
    <key>LSApplicationQueriesSchemes</key>
    <array>
        <string>msauth</string>
    </array>
</dict>
</plist>


================================================
FILE: AppSamples-iOS-TouchID-master/active-directory-ios-native-appauth-b2c/ViewController.h
================================================
//
//  ViewController.h
//  active-directory-ios-native-appauth
//
//  Created by Saeed Akhter and Gerardo Saca on 3/1/17.
//  Copyright © 2017 Microsoft. All rights reserved.
//

#import <UIKit/UIKit.h>
#import "Games.h"
#import "BKPasscodeViewController.h"

@interface ViewController : UIViewController <BKPasscodeViewControllerDelegate>{
    
    Games* allGames;
    NSString* saveToken;
    
}


@end



================================================
FILE: AppSamples-iOS-TouchID-master/active-directory-ios-native-appauth-b2c/ViewController.m
================================================
//
//  ViewController.m
//  active-directory-ios-native-appauth
//
//  Created by Saeed Akhter and Gerardo Saca on 3/1/17.
//  Copyright © 2017 Microsoft. All rights reserved.
//

#import "ViewController.h"
#import "AppAuth.h"
#import "AppDelegate.h"
#import "GameTableViewController.h"

// Update the following for your AAD B2C tenant
static NSString *const kTenantName = @"b2ctechready.onmicrosoft.com";
static NSString *const kSignupOrSigninPolicy = @"b2c_1a_sign_up_sign_in_games";
static NSString *const kEditProfilePolicy = @"b2c_1_edit_profile";
static NSString *const kClientId = @"ac08f359-c273-4c01-9a43-3c47ec2f142b";
static NSString *const kRedirectUri = @"com.onmicrosoft.b2ctechready.wingtipgamesb2c://oauth/redirect";


// DO NOT CHANGE - This is the format of OIDC Token and Authorization enpoints for AAD B2C
static NSString *const kEndpoint = @"https://login.microsoftonline.com/te/%1$@/%2$@/oauth2/v2.0/%3$@";

@interface ViewController ()
@property (nonatomic, strong, nullable) OIDAuthState *authState;
@property (weak, nonatomic) IBOutlet UIButton *signInButton;
@property (weak, nonatomic) IBOutlet UIButton *editProfileButton;
@property (weak, nonatomic) IBOutlet UIActivityIndicatorView *spinnerView;
@property (weak, nonatomic) IBOutlet UILabel *MessLabel;

@end

@implementation ViewController
- (IBAction)didSignIn:(id)sender {
    
    NSLog(@"Signing in");
    
    [_spinnerView startAnimating];
    _spinnerView.hidden=false;
    _signInButton.enabled = NO;
    _editProfileButton.enabled = NO;
    
    NSURL *authorizationEndpoint = [NSURL URLWithString:[NSString stringWithFormat:kEndpoint, kTenantName, kSignupOrSigninPolicy, @"authorize"]];
    NSURL *tokenEndpoint = [NSURL URLWithString:[NSString stringWithFormat:kEndpoint, kTenantName, kSignupOrSigninPolicy, @"token"]];
    
  //  NSLog(@"Authorize endpoint: %@", authorizationEndpoint);
  //  NSLog(@"Token endpoint: %@", tokenEndpoint);
    
    OIDServiceConfiguration *configuration = [[OIDServiceConfiguration alloc] initWithAuthorizationEndpoint:authorizationEndpoint tokenEndpoint:tokenEndpoint];
    
    OIDAuthorizationRequest *request = [[OIDAuthorizationRequest alloc] initWithConfiguration:configuration clientId:kClientId scopes:@[OIDScopeOpenID, OIDScopeProfile,@"https://b2ctechready.onmicrosoft.com/wingtipb2c/Games.Read",@"offline_access"] redirectURL:[NSURL URLWithString:kRedirectUri] responseType:@"code" additionalParameters:nil];
    
    AppDelegate *appDelegate = (AppDelegate *)[UIApplication sharedApplication].delegate;
    
    
    appDelegate.currentAuthorizationFlow = [OIDAuthState authStateByPresentingAuthorizationRequest:request presentingViewController:self callback:^(OIDAuthState *_Nullable authState, NSError *_Nullable error) {
        
        if (authState) {
            
            [[NSUserDefaults standardUserDefaults] setObject:authState.lastTokenResponse.idToken forKey:@"idToken"];
            [[NSUserDefaults standardUserDefaults] setObject:authState.lastTokenResponse.accessToken forKey:@"accessToken"];
            [[NSUserDefaults standardUserDefaults] setObject:authState.lastTokenResponse.refreshToken forKey:@"refreshToken"];
            
            
            
            [self setAuthState:authState];
            
            [self ShowGames:authState.lastTokenResponse.accessToken];
            
        } else {
            NSLog(@"Authorization error: %@", [error localizedDescription]);
            [self setAuthState:nil];
        }
    }];
}
-(void)ShowGames:(NSString*)accessToken{
    
    NSString* aPasscode=[[NSUserDefaults standardUserDefaults] objectForKey:@"aPasscode"];
    
    
    if (aPasscode==nil){
        saveToken=accessToken;
        
        BKPasscodeViewController *viewController = [[BKPasscodeViewController alloc] initWithNibName:nil bundle:nil];
        viewController.delegate = self;
        viewController.type = BKPasscodeViewControllerNewPasscodeType;
        
        viewController.passcodeStyle = BKPasscodeInputViewNumericPasscodeStyle;
        
        // To supports Touch ID feature, set BKTouchIDManager instance to view controller.
        // It only supports iOS 8 or greater.
        viewController.touchIDManager = [[BKTouchIDManager alloc] initWithKeychainServiceName:@"<# your keychain service name #>"];
        viewController.touchIDManager.promptText = @"Scan fingerprint to authenticate";   // You can set prompt text.
        
        UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:viewController];
        [self presentViewController:navController animated:YES completion:nil];
        
    } else {
    
        _editProfileButton.enabled = YES;
        
        allGames=[Games sharedInstance];
        
        [allGames loadGames:accessToken];
        
        
        [NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(checkTimer) userInfo:nil repeats:NO];
        
    }
    
    
}

-(void)checkTimer{
    if (allGames.gamesList.count==0){
        [NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(checkTimer) userInfo:nil repeats:NO];
    } else {
        
        GameTableViewController    *targetViewController = [[GameTableViewController alloc] init];
        [[self navigationController] pushViewController:targetViewController animated:YES];
        
        [_spinnerView stopAnimating];
    }
}
- (IBAction)didEditProfile:(id)sender {
    
    
    NSURL *authorizationEndpoint = [NSURL URLWithString:[NSString stringWithFormat:kEndpoint, kTenantName, kEditProfilePolicy, @"authorize"]];
    NSURL *tokenEndpoint = [NSURL URLWithString:[NSString stringWithFormat:kEndpoint, kTenantName, kEditProfilePolicy, @"token"]];
    
    
    OIDServiceConfiguration *configuration = [[OIDServiceConfiguration alloc] initWithAuthorizationEndpoint:authorizationEndpoint tokenEndpoint:tokenEndpoint];
    
    OIDAuthorizationRequest *request = [[OIDAuthorizationRequest alloc] initWithConfiguration:configuration clientId:kClientId scopes:@[OIDScopeOpenID, OIDScopeProfile] redirectURL:[NSURL URLWithString:kRedirectUri] responseType:OIDResponseTypeCode additionalParameters:nil];
    
    
    AppDelegate *appDelegate = (AppDelegate *)[UIApplication sharedApplication].delegate;
    appDelegate.currentAuthorizationFlow = [OIDAuthState authStateByPresentingAuthorizationRequest:request presentingViewController:self callback:^(OIDAuthState *_Nullable authState, NSError *_Nullable error) {
        
        if (authState) {
           // NSLog(@"Got authorization tokens. Access token: %@", authState.lastTokenResponse.accessToken);
            [self setAuthState:authState];
        } else {
            NSLog(@"Authorization error: %@", [error localizedDescription]);
            [self setAuthState:nil];
        }
    }];
}

- (void)viewDidLoad {
    [_spinnerView stopAnimating];
    _spinnerView.hidden=true;
    [super viewDidLoad];
    _editProfileButton.enabled = NO;
    
    
    NSString* aPasscode=[[NSUserDefaults standardUserDefaults] objectForKey:@"aPasscode"];
    
    if (aPasscode==nil){
        
    } else {
        
        BKPasscodeViewController *viewController = [[BKPasscodeViewController alloc] initWithNibName:nil bundle:nil];
        viewController.delegate = self;
        viewController.type = BKPasscodeViewControllerCheckPasscodeType;   // for authentication
        viewController.passcodeStyle = BKPasscodeInputViewNumericPasscodeStyle;
        
        // To supports Touch ID feature, set BKTouchIDManager instance to view controller.
        // It only supports iOS 8 or greater.
        viewController.touchIDManager = [[BKTouchIDManager alloc] initWithKeychainServiceName:@"<# your keychain service name #>"];
        viewController.touchIDManager.promptText = @"Scan fingerprint to authenticate";   // You can set prompt text.
        
        // Show Touch ID user interface
        [viewController startTouchIDAuthenticationIfPossible:^(BOOL prompted) {
            
            // If Touch ID is unavailable or disabled, present passcode view controller for manual input.
            if (NO == prompted) {
                UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:viewController];
                [self presentViewController:navController animated:YES completion:nil];
            }
        }];
    }
    
}


- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

- (void)passcodeViewController:(BKPasscodeViewController *)aViewController didFinishWithPasscode:(NSString *)aPasscode{
    NSLog(@"aPasscode %@",aPasscode);
    
    [[NSUserDefaults standardUserDefaults] setObject:aPasscode forKey:@"aPasscode"];
    
    [aViewController dismissViewControllerAnimated:YES completion:nil];
    
    [self ShowGames:saveToken];
    
}


- (void)passcodeViewControllerDidFailAttempt:(BKPasscodeViewController *)aViewController{
    
    NSLog(@"passcodeViewControllerDidFailAttempt");
    [aViewController dismissViewControllerAnimated:YES completion:nil];
    
    _MessLabel.text=@"login error";
    
    _signInButton.enabled = NO;
    _editProfileButton.enabled = NO;
}

- (void)passcodeViewController:(BKPasscodeViewController *)aViewController authenticatePasscode:(NSString *)aPasscode resultHandler:(void(^)(BOOL succeed))aResultHandler{
    
    
    _MessLabel.text=@"loading games";
    
    _signInButton.hidden = true;
    _editProfileButton.hidden = true;
    
    
    [_spinnerView startAnimating];
    _spinnerView.hidden=false;
    
    
    NSString* refreshToken=[[NSUserDefaults standardUserDefaults] objectForKey:@"refreshToken"];
    NSLog(@"authenticatePasscode %@",refreshToken);
    if (refreshToken!=nil){
        
        NSURL *authorizationEndpoint = [NSURL URLWithString:[NSString stringWithFormat:kEndpoint, kTenantName, kSignupOrSigninPolicy, @"authorize"]];
        NSURL *tokenEndpoint = [NSURL URLWithString:[NSString stringWithFormat:kEndpoint, kTenantName, kSignupOrSigninPolicy, @"token"]];
        
        OIDServiceConfiguration *configuration = [[OIDServiceConfiguration alloc] initWithAuthorizationEndpoint:authorizationEndpoint tokenEndpoint:tokenEndpoint];
        
        
        OIDTokenRequest* newTokenRequest=[[OIDTokenRequest alloc] initWithConfiguration:configuration grantType:@"refresh_token" authorizationCode:nil redirectURL:[NSURL URLWithString:kRedirectUri] clientID:kClientId clientSecret:nil scope:@"openid profile https://b2ctechready.onmicrosoft.com/wingtipb2c/Games.Read offline_access" refreshToken:refreshToken codeVerifier:nil additionalParameters:nil];
        
        
        [OIDAuthorizationService  performTokenRequest:newTokenRequest  callback:^(OIDTokenResponse *_Nullable tokenResponse,  NSError *_Nullable tokenError) {
             
             if (tokenError){
                 NSLog(@"tokenError %@",tokenError);
             } else {
                
                 
                 [self ShowGames:tokenResponse.accessToken];
             }
            

         }];
        
        
        
    } else {
        
        [aViewController dismissViewControllerAnimated:YES completion:nil];
    }
    
    
}

@end


================================================
FILE: AppSamples-iOS-TouchID-master/active-directory-ios-native-appauth-b2c/main.m
================================================
//
//  main.m
//  active-directory-ios-native-appauth-b2c
//
//  Created by Saeed Akhter and Gerardo Saca on 3/3/17.
//  Copyright © 2017 Microsoft. All rights reserved.
//

#import <UIKit/UIKit.h>
#import "AppDelegate.h"

int main(int argc, char * argv[]) {
    @autoreleasepool {
        return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
    }
}


================================================
FILE: AppSamples-iOS-TouchID-master/active-directory-ios-native-appauth-b2c.xcodeproj/project.pbxproj
================================================
// !$*UTF8*$!
{
	archiveVersion = 1;
	classes = {
	};
	objectVersion = 46;
	objects = {

/* Begin PBXBuildFile section */
		2B50BCD21E9AF9DF0012DE89 /* Games.m in Sources */ = {isa = PBXBuildFile; fileRef = 2B50BCD11E9AF9DF0012DE89 /* Games.m */; };
		2B50BCD51E9AFDD90012DE89 /* GameTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2B50BCD41E9AFDD90012DE89 /* GameTableViewController.m */; };
		2B50BCDB1E9C4ECE0012DE89 /* logo.png in Resources */ = {isa = PBXBuildFile; fileRef = 2B50BCDA1E9C4ECE0012DE89 /* logo.png */; };
		2B50BCFA1E9DA29A0012DE89 /* Icon-16.png in Resources */ = {isa = PBXBuildFile; fileRef = 2B50BCDD1E9DA29A0012DE89 /* Icon-16.png */; };
		2B50BCFB1E9DA29A0012DE89 /* Icon-24.png in Resources */ = {isa = PBXBuildFile; fileRef = 2B50BCDE1E9DA29A0012DE89 /* Icon-24.png */; };
		2B50BCFC1E9DA29A0012DE89 /* Icon-32.png in Resources */ = {isa = PBXBuildFile; fileRef = 2B50BCDF1E9DA29A0012DE89 /* Icon-32.png */; };
		2B50BCFD1E9DA29A0012DE89 /* Icon-40.png in Resources */ = {isa = PBXBuildFile; fileRef = 2B50BCE01E9DA29A0012DE89 /* Icon-40.png */; };
		2B50BCFE1E9DA29A0012DE89 /* Icon-40@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 2B50BCE11E9DA29A0012DE89 /* Icon-40@2x.png */; };
		2B50BCFF1E9DA29A0012DE89 /* Icon-40@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 2B50BCE21E9DA29A0012DE89 /* Icon-40@3x.png */; };
		2B50BD001E9DA29A0012DE89 /* Icon-60.png in Resources */ = {isa = PBXBuildFile; fileRef = 2B50BCE31E9DA29A0012DE89 /* Icon-60.png */; };
		2B50BD011E9DA29A0012DE89 /* Icon-60@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 2B50BCE41E9DA29A0012DE89 /* Icon-60@2x.png */; };
		2B50BD021E9DA29A0012DE89 /* Icon-60@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 2B50BCE51E9DA29A0012DE89 /* Icon-60@3x.png */; };
		2B50BD031E9DA29A0012DE89 /* Icon-64.png in Resources */ = {isa = PBXBuildFile; fileRef = 2B50BCE61E9DA29A0012DE89 /* Icon-64.png */; };
		2B50BD041E9DA29A0012DE89 /* Icon-72.png in Resources */ = {isa = PBXBuildFile; fileRef = 2B50BCE71E9DA29A0012DE89 /* Icon-72.png */; };
		2B50BD051E9DA29A0012DE89 /* Icon-72@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 2B50BCE81E9DA29A0012DE89 /* Icon-72@2x.png */; };
		2B50BD061E9DA29A0012DE89 /* Icon-76.png in Resources */ = {isa = PBXBuildFile; fileRef = 2B50BCE91E9DA29A0012DE89 /* Icon-76.png */; };
		2B50BD071E9DA29A0012DE89 /* Icon-76@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 2B50BCEA1E9DA29A0012DE89 /* Icon-76@2x.png */; };
		2B50BD081E9DA29A0012DE89 /* Icon-120.png in Resources */ = {isa = PBXBuildFile; fileRef = 2B50BCEB1E9DA29A0012DE89 /* Icon-120.png */; };
		2B50BD091E9DA29A0012DE89 /* Icon-152.png in Resources */ = {isa = PBXBuildFile; fileRef = 2B50BCEC1E9DA29A0012DE89 /* Icon-152.png */; };
		2B50BD0A1E9DA29A0012DE89 /* Icon-167.png in Resources */ = {isa = PBXBuildFile; fileRef = 2B50BCED1E9DA29A0012DE89 /* Icon-167.png */; };
		2B50BD0B1E9DA29A0012DE89 /* Icon-180.png in Resources */ = {isa = PBXBuildFile; fileRef = 2B50BCEE1E9DA29A0012DE89 /* Icon-180.png */; };
		2B50BD0C1E9DA29A0012DE89 /* Icon-Small-40.png in Resources */ = {isa = PBXBuildFile; fileRef = 2B50BCEF1E9DA29A0012DE89 /* Icon-Small-40.png */; };
		2B50BD0D1E9DA29A0012DE89 /* Icon-Small-40@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 2B50BCF01E9DA29A0012DE89 /* Icon-Small-40@2x.png */; };
		2B50BD0E1E9DA29A0012DE89 /* Icon-Small-40@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 2B50BCF11E9DA29A0012DE89 /* Icon-Small-40@3x.png */; };
		2B50BD0F1E9DA29A0012DE89 /* Icon-Small-50.png in Resources */ = {isa = PBXBuildFile; fileRef = 2B50BCF21E9DA29A0012DE89 /* Icon-Small-50.png */; };
		2B50BD101E9DA29A0012DE89 /* Icon-Small-50@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 2B50BCF31E9DA29A0012DE89 /* Icon-Small-50@2x.png */; };
		2B50BD111E9DA29A0012DE89 /* Icon-Small.png in Resources */ = {isa = PBXBuildFile; fileRef = 2B50BCF41E9DA29A0012DE89 /* Icon-Small.png */; };
		2B50BD121E9DA29A0012DE89 /* Icon-Small@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 2B50BCF51E9DA29A0012DE89 /* Icon-Small@2x.png */; };
		2B50BD131E9DA29A0012DE89 /* Icon-Small@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 2B50BCF61E9DA29A0012DE89 /* Icon-Small@3x.png */; };
		2B50BD141E9DA29A0012DE89 /* Icon.png in Resources */ = {isa = PBXBuildFile; fileRef = 2B50BCF71E9DA29A0012DE89 /* Icon.png */; };
		2B50BD151E9DA29A0012DE89 /* Icon@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 2B50BCF81E9DA29A0012DE89 /* Icon@2x.png */; };
		2B50BD161E9DA29A0012DE89 /* Icon@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 2B50BCF91E9DA29A0012DE89 /* Icon@3x.png */; };
		67E207AF1C558AE7C71941DD /* libPods-active-directory-ios-native-appauth-b2c.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 799AC0E4D73FA8C3CF4B4A26 /* libPods-active-directory-ios-native-appauth-b2c.a */; };
		847CC46A1E6A4DD400B98781 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 847CC4691E6A4DD400B98781 /* main.m */; };
		847CC46D1E6A4DD400B98781 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 847CC46C1E6A4DD400B98781 /* AppDelegate.m */; };
		847CC4701E6A4DD400B98781 /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 847CC46F1E6A4DD400B98781 /* ViewController.m */; };
		847CC4731E6A4DD400B98781 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 847CC4711E6A4DD400B98781 /* Main.storyboard */; };
		847CC4751E6A4DD400B98781 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 847CC4741E6A4DD400B98781 /* Assets.xcassets */; };
		847CC4781E6A4DD400B98781 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 847CC4761E6A4DD400B98781 /* LaunchScreen.storyboard */; };
/* End PBXBuildFile section */

/* Begin PBXFileReference section */
		2B50BCD01E9AF9DF0012DE89 /* Games.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Games.h; sourceTree = "<group>"; };
		2B50BCD11E9AF9DF0012DE89 /* Games.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Games.m; sourceTree = "<group>"; };
		2B50BCD31E9AFDD90012DE89 /* GameTableViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GameTableViewController.h; sourceTree = "<group>"; };
		2B50BCD41E9AFDD90012DE89 /* GameTableViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GameTableViewController.m; sourceTree = "<group>"; };
		2B50BCDA1E9C4ECE0012DE89 /* logo.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = logo.png; sourceTree = "<group>"; };
		2B50BCDD1E9DA29A0012DE89 /* Icon-16.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Icon-16.png"; sourceTree = "<group>"; };
		2B50BCDE1E9DA29A0012DE89 /* Icon-24.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Icon-24.png"; sourceTree = "<group>"; };
		2B50BCDF1E9DA29A0012DE89 /* Icon-32.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Icon-32.png"; sourceTree = "<group>"; };
		2B50BCE01E9DA29A0012DE89 /* Icon-40.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Icon-40.png"; sourceTree = "<group>"; };
		2B50BCE11E9DA29A0012DE89 /* Icon-40@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Icon-40@2x.png"; sourceTree = "<group>"; };
		2B50BCE21E9DA29A0012DE89 /* Icon-40@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Icon-40@3x.png"; sourceTree = "<group>"; };
		2B50BCE31E9DA29A0012DE89 /* Icon-60.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Icon-60.png"; sourceTree = "<group>"; };
		2B50BCE41E9DA29A0012DE89 /* Icon-60@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Icon-60@2x.png"; sourceTree = "<group>"; };
		2B50BCE51E9DA29A0012DE89 /* Icon-60@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Icon-60@3x.png"; sourceTree = "<group>"; };
		2B50BCE61E9DA29A0012DE89 /* Icon-64.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Icon-64.png"; sourceTree = "<group>"; };
		2B50BCE71E9DA29A0012DE89 /* Icon-72.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Icon-72.png"; sourceTree = "<group>"; };
		2B50BCE81E9DA29A0012DE89 /* Icon-72@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Icon-72@2x.png"; sourceTree = "<group>"; };
		2B50BCE91E9DA29A0012DE89 /* Icon-76.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Icon-76.png"; sourceTree = "<group>"; };
		2B50BCEA1E9DA29A0012DE89 /* Icon-76@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Icon-76@2x.png"; sourceTree = "<group>"; };
		2B50BCEB1E9DA29A0012DE89 /* Icon-120.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Icon-120.png"; sourceTree = "<group>"; };
		2B50BCEC1E9DA29A0012DE89 /* Icon-152.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Icon-152.png"; sourceTree = "<group>"; };
		2B50BCED1E9DA29A0012DE89 /* Icon-167.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Icon-167.png"; sourceTree = "<group>"; };
		2B50BCEE1E9DA29A0012DE89 /* Icon-180.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Icon-180.png"; sourceTree = "<group>"; };
		2B50BCEF1E9DA29A0012DE89 /* Icon-Small-40.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Icon-Small-40.png"; sourceTree = "<group>"; };
		2B50BCF01E9DA29A0012DE89 /* Icon-Small-40@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Icon-Small-40@2x.png"; sourceTree = "<group>"; };
		2B50BCF11E9DA29A0012DE89 /* Icon-Small-40@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Icon-Small-40@3x.png"; sourceTree = "<group>"; };
		2B50BCF21E9DA29A0012DE89 /* Icon-Small-50.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Icon-Small-50.png"; sourceTree = "<group>"; };
		2B50BCF31E9DA29A0012DE89 /* Icon-Small-50@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Icon-Small-50@2x.png"; sourceTree = "<group>"; };
		2B50BCF41E9DA29A0012DE89 /* Icon-Small.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Icon-Small.png"; sourceTree = "<group>"; };
		2B50BCF51E9DA29A0012DE89 /* Icon-Small@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Icon-Small@2x.png"; sourceTree = "<group>"; };
		2B50BCF61E9DA29A0012DE89 /* Icon-Small@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Icon-Small@3x.png"; sourceTree = "<group>"; };
		2B50BCF71E9DA29A0012DE89 /* Icon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Icon.png; sourceTree = "<group>"; };
		2B50BCF81E9DA29A0012DE89 /* Icon@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Icon@2x.png"; sourceTree = "<group>"; };
		2B50BCF91E9DA29A0012DE89 /* Icon@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Icon@3x.png"; sourceTree = "<group>"; };
		3290BA4F47711C140C6C551A /* Pods-active-directory-ios-native-appauth-b2c.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-active-directory-ios-native-appauth-b2c.debug.xcconfig"; path = "Pods/Target Support Files/Pods-active-directory-ios-native-appauth-b2c/Pods-active-directory-ios-native-appauth-b2c.debug.xcconfig"; sourceTree = "<group>"; };
		799AC0E4D73FA8C3CF4B4A26 /* libPods-active-directory-ios-native-appauth-b2c.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-active-directory-ios-native-appauth-b2c.a"; sourceTree = BUILT_PRODUCTS_DIR; };
		847CC4651E6A4DD400B98781 /* WingTipGames.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = WingTipGames.app; sourceTree = BUILT_PRODUCTS_DIR; };
		847CC4691E6A4DD400B98781 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; };
		847CC46B1E6A4DD400B98781 /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = "<group>"; };
		847CC46C1E6A4DD400B98781 /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = "<group>"; };
		847CC46E1E6A4DD400B98781 /* ViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ViewController.h; sourceTree = "<group>"; };
		847CC46F1E6A4DD400B98781 /* ViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ViewController.m; sourceTree = "<group>"; };
		847CC4721E6A4DD400B98781 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; };
		847CC4741E6A4DD400B98781 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
		847CC4771E6A4DD400B98781 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
		847CC4791E6A4DD400B98781 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
		AE43D798863A7742DB7702B7 /* Pods-active-directory-ios-native-appauth-b2c.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-active-directory-ios-native-appauth-b2c.release.xcconfig"; path = "Pods/Target Support Files/Pods-active-directory-ios-native-appauth-b2c/Pods-active-directory-ios-native-appauth-b2c.release.xcconfig"; sourceTree = "<group>"; };
/* End PBXFileReference section */

/* Begin PBXFrameworksBuildPhase section */
		847CC4621E6A4DD300B98781 /* Frameworks */ = {
			isa = PBXFrameworksBuildPhase;
			buildActionMask = 2147483647;
			files = (
				67E207AF1C558AE7C71941DD /* libPods-active-directory-ios-native-appauth-b2c.a in Frameworks */,
			);
			runOnlyForDeploymentPostprocessing = 0;
		};
/* End PBXFrameworksBuildPhase section */

/* Begin PBXGroup section */
		2B50BCDC1E9DA28B0012DE89 /* icons */ = {
			isa = PBXGroup;
			children = (
				2B50BCDD1E9DA29A0012DE89 /* Icon-16.png */,
				2B50BCDE1E9DA29A0012DE89 /* Icon-24.png */,
				2B50BCDF1E9DA29A0012DE89 /* Icon-32.png */,
				2B50BCE01E9DA29A0012DE89 /* Icon-40.png */,
				2B50BCE11E9DA29A0012DE89 /* Icon-40@2x.png */,
				2B50BCE21E9DA29A0012DE89 /* Icon-40@3x.png */,
				2B50BCE31E9DA29A0012DE89 /* Icon-60.png */,
				2B50BCE41E9DA29A0012DE89 /* Icon-60@2x.png */,
				2B50BCE51E9DA29A0012DE89 /* Icon-60@3x.png */,
				2B50BCE61E9DA29A0012DE89 /* Icon-64.png */,
				2B50BCE71E9DA29A0012DE89 /* Icon-72.png */,
				2B50BCE81E9DA29A0012DE89 /* Icon-72@2x.png */,
				2B50BCE91E9DA29A0012DE89 /* Icon-76.png */,
				2B50BCEA1E9DA29A0012DE89 /* Icon-76@2x.png */,
				2B50BCEB1E9DA29A0012DE89 /* Icon-120.png */,
				2B50BCEC1E9DA29A0012DE89 /* Icon-152.png */,
				2B50BCED1E9DA29A0012DE89 /* Icon-167.png */,
				2B50BCEE1E9DA29A0012DE89 /* Icon-180.png */,
				2B50BCEF1E9DA29A0012DE89 /* Icon-Small-40.png */,
				2B50BCF01E9DA29A0012DE89 /* Icon-Small-40@2x.png */,
				2B50BCF11E9DA29A0012DE89 /* Icon-Small-40@3x.png */,
				2B50BCF21E9DA29A0012DE89 /* Icon-Small-50.png */,
				2B50BCF31E9DA29A0012DE89 /* Icon-Small-50@2x.png */,
				2B50BCF41E9DA29A0012DE89 /* Icon-Small.png */,
				2B50BCF51E9DA29A0012DE89 /* Icon-Small@2x.png */,
				2B50BCF61E9DA29A0012DE89 /* Icon-Small@3x.png */,
				2B50BCF71E9DA29A0012DE89 /* Icon.png */,
				2B50BCF81E9DA29A0012DE89 /* Icon@2x.png */,
				2B50BCF91E9DA29A0012DE89 /* Icon@3x.png */,
			);
			name = icons;
			sourceTree = "<group>";
		};
		2BFE3C511EAD6E5600F09AFA /* images */ = {
			isa = PBXGroup;
			children = (
				847CC4711E6A4DD400B98781 /* Main.storyboard */,
				847CC4741E6A4DD400B98781 /* Assets.xcassets */,
				847CC4761E6A4DD400B98781 /* LaunchScreen.storyboard */,
				2B50BCDC1E9DA28B0012DE89 /* icons */,
				2B50BCDA1E9C4ECE0012DE89 /* logo.png */,
			);
			name = images;
			sourceTree = "<group>";
		};
		847CC45C1E6A4DD300B98781 = {
			isa = PBXGroup;
			children = (
				847CC4671E6A4DD400B98781 /* active-directory-ios-native-appauth-b2c */,
				847CC4661E6A4DD400B98781 /* Products */,
				8BC01C7E01EC55A9AAFFD3A4 /* Pods */,
				C9BDBB236F41B9C66EEF1020 /* Frameworks */,
			);
			sourceTree = "<group>";
		};
		847CC4661E6A4DD400B98781 /* Products */ = {
			isa = PBXGroup;
			children = (
				847CC4651E6A4DD400B98781 /* WingTipGames.app */,
			);
			name = Products;
			sourceTree = "<group>";
		};
		847CC4671E6A4DD400B98781 /* active-directory-ios-native-appauth-b2c */ = {
			isa = PBXGroup;
			children = (
				2BFE3C511EAD6E5600F09AFA /* images */,
				847CC46E1E6A4DD400B98781 /* ViewController.h */,
				847CC46F1E6A4DD400B98781 /* ViewController.m */,
				2B50BCD31E9AFDD90012DE89 /* GameTableViewController.h */,
				2B50BCD41E9AFDD90012DE89 /* GameTableViewController.m */,
				2B50BCD01E9AF9DF0012DE89 /* Games.h */,
				2B50BCD11E9AF9DF0012DE89 /* Games.m */,
				847CC4791E6A4DD400B98781 /* Info.plist */,
				847CC4681E6A4DD400B98781 /* Supporting Files */,
				847CC46B1E6A4DD400B98781 /* AppDelegate.h */,
				847CC46C1E6A4DD400B98781 /* AppDelegate.m */,
			);
			path = "active-directory-ios-native-appauth-b2c";
			sourceTree = "<group>";
		};
		847CC4681E6A4DD400B98781 /* Supporting Files */ = {
			isa = PBXGroup;
			children = (
				847CC4691E6A4DD400B98781 /* main.m */,
			);
			name = "Supporting Files";
			sourceTree = "<group>";
		};
		8BC01C7E01EC55A9AAFFD3A4 /* Pods */ = {
			isa = PBXGroup;
			children = (
				3290BA4F47711C140C6C551A /* Pods-active-directory-ios-native-appauth-b2c.debug.xcconfig */,
				AE43D798863A7742DB7702B7 /* Pods-active-directory-ios-native-appauth-b2c.release.xcconfig */,
			);
			name = Pods;
			sourceTree = "<group>";
		};
		C9BDBB236F41B9C66EEF1020 /* Frameworks */ = {
			isa = PBXGroup;
			children = (
				799AC0E4D73FA8C3CF4B4A26 /* libPods-active-directory-ios-native-appauth-b2c.a */,
			);
			name = Frameworks;
			sourceTree = "<group>";
		};
/* End PBXGroup section */

/* Begin PBXNativeTarget section */
		847CC4641E6A4DD300B98781 /* active-directory-ios-native-appauth-b2c */ = {
			isa = PBXNativeTarget;
			buildConfigurationList = 847CC47C1E6A4DD400B98781 /* Build configuration list for PBXNativeTarget "active-directory-ios-native-appauth-b2c" */;
			buildPhases = (
				019F1F36074250DDF3FCD1D8 /* [CP] Check Pods Manifest.lock */,
				847CC4611E6A4DD300B98781 /* Sources */,
				847CC4621E6A4DD300B98781 /* Frameworks */,
				847CC4631E6A4DD300B98781 /* Resources */,
				D66DD89BFDD5F63ADD9BDC81 /* [CP] Embed Pods Frameworks */,
				833F6FA0E07BA3A0FC067E90 /* [CP] Copy Pods Resources */,
			);
			buildRules = (
			);
			dependencies = (
			);
			name = "active-directory-ios-native-appauth-b2c";
			productName = "active-directory-ios-native-appauth-b2c";
			productReference = 847CC4651E6A4DD400B98781 /* WingTipGames.app */;
			productType = "com.apple.product-type.application";
		};
/* End PBXNativeTarget section */

/* Begin PBXProject section */
		847CC45D1E6A4DD300B98781 /* Project object */ = {
			isa = PBXProject;
			attributes = {
				LastUpgradeCheck = 0820;
				ORGANIZATIONNAME = Microsoft;
				TargetAttributes = {
					847CC4641E6A4DD300B98781 = {
						CreatedOnToolsVersion = 8.2.1;
						DevelopmentTeam = MR2287782X;
						ProvisioningStyle = Automatic;
					};
				};
			};
			buildConfigurationList = 847CC4601E6A4DD300B98781 /* Build configuration list for PBXProject "active-directory-ios-native-appauth-b2c" */;
			compatibilityVersion = "Xcode 3.2";
			developmentRegion = English;
			hasScannedForEncodings = 0;
			knownRegions = (
				en,
				Base,
			);
			mainGroup = 847CC45C1E6A4DD300B98781;
			productRefGroup = 847CC4661E6A4DD400B98781 /* Products */;
			projectDirPath = "";
			projectRoot = "";
			targets = (
				847CC4641E6A4DD300B98781 /* active-directory-ios-native-appauth-b2c */,
			);
		};
/* End PBXProject section */

/* Begin PBXResourcesBuildPhase section */
		847CC4631E6A4DD300B98781 /* Resources */ = {
			isa = PBXResourcesBuildPhase;
			buildActionMask = 2147483647;
			files = (
				2B50BD101E9DA29A0012DE89 /* Icon-Small-50@2x.png in Resources */,
				2B50BCFD1E9DA29A0012DE89 /* Icon-40.png in Resources */,
				2B50BD0D1E9DA29A0012DE89 /* Icon-Small-40@2x.png in Resources */,
				2B50BCDB1E9C4ECE0012DE89 /* logo.png in Resources */,
				2B50BD0B1E9DA29A0012DE89 /* Icon-180.png in Resources */,
				2B50BCFC1E9DA29A0012DE89 /* Icon-32.png in Resources */,
				2B50BCFE1E9DA29A0012DE89 /* Icon-40@2x.png in Resources */,
				2B50BD0A1E9DA29A0012DE89 /* Icon-167.png in Resources */,
				2B50BD111E9DA29A0012DE89 /* Icon-Small.png in Resources */,
				2B50BD001E9DA29A0012DE89 /* Icon-60.png in Resources */,
				2B50BCFF1E9DA29A0012DE89 /* Icon-40@3x.png in Resources */,
				847CC4781E6A4DD400B98781 /* LaunchScreen.storyboard in Resources */,
				2B50BCFB1E9DA29A0012DE89 /* Icon-24.png in Resources */,
				2B50BD0E1E9DA29A0012DE89 /* Icon-Small-40@3x.png in Resources */,
				2B50BD141E9DA29A0012DE89 /* Icon.png in Resources */,
				847CC4751E6A4DD400B98781 /* Assets.xcassets in Resources */,
				2B50BD021E9DA29A0012DE89 /* Icon-60@3x.png in Resources */,
				2B50BD151E9DA29A0012DE89 /* Icon@2x.png in Resources */,
				2B50BD071E9DA29A0012DE89 /* Icon-76@2x.png in Resources */,
				2B50BD161E9DA29A0012DE89 /* Icon@3x.png in Resources */,
				2B50BD081E9DA29A0012DE89 /* Icon-120.png in Resources */,
				2B50BD131E9DA29A0012DE89 /* Icon-Small@3x.png in Resources */,
				2B50BD051E9DA29A0012DE89 /* Icon-72@2x.png in Resources */,
				2B50BD091E9DA29A0012DE89 /* Icon-152.png in Resources */,
				2B50BD031E9DA29A0012DE89 /* Icon-64.png in Resources */,
				2B50BD061E9DA29A0012DE89 /* Icon-76.png in Resources */,
				2B50BD041E9DA29A0012DE89 /* Icon-72.png in Resources */,
				2B50BD121E9DA29A0012DE89 /* Icon-Small@2x.png in Resources */,
				2B50BD0F1E9DA29A0012DE89 /* Icon-Small-50.png in Resources */,
				2B50BD0C1E9DA29A0012DE89 /* Icon-Small-40.png in Resources */,
				847CC4731E6A4DD400B98781 /* Main.storyboard in Resources */,
				2B50BCFA1E9DA29A0012DE89 /* Icon-16.png in Resources */,
				2B50BD011E9DA29A0012DE89 /* Icon-60@2x.png in Resources */,
			);
			runOnlyForDeploymentPostprocessing = 0;
		};
/* End PBXResourcesBuildPhase section */

/* Begin PBXShellScriptBuildPhase section */
		019F1F36074250DDF3FCD1D8 /* [CP] Check Pods Manifest.lock */ = {
			isa = PBXShellScriptBuildPhase;
			buildActionMask = 2147483647;
			files = (
			);
			inputPaths = (
			);
			name = "[CP] Check Pods Manifest.lock";
			outputPaths = (
			);
			runOnlyForDeploymentPostprocessing = 0;
			shellPath = /bin/sh;
			shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [[ $? != 0 ]] ; then\n    cat << EOM\nerror: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\nEOM\n    exit 1\nfi\n";
			showEnvVarsInLog = 0;
		};
		833F6FA0E07BA3A0FC067E90 /* [CP] Copy Pods Resources */ = {
			isa = PBXShellScriptBuildPhase;
			buildActionMask = 2147483647;
			files = (
			);
			inputPaths = (
			);
			name = "[CP] Copy Pods Resources";
			outputPaths = (
			);
			runOnlyForDeploymentPostprocessing = 0;
			shellPath = /bin/sh;
			shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-active-directory-ios-native-appauth-b2c/Pods-active-directory-ios-native-appauth-b2c-resources.sh\"\n";
			showEnvVarsInLog = 0;
		};
		D66DD89BFDD5F63ADD9BDC81 /* [CP] Embed Pods Frameworks */ = {
			isa = PBXShellScriptBuildPhase;
			buildActionMask = 2147483647;
			files = (
			);
			inputPaths = (
			);
			name = "[CP] Embed Pods Frameworks";
			outputPaths = (
			);
			runOnlyForDeploymentPostprocessing = 0;
			shellPath = /bin/sh;
			shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-active-directory-ios-native-appauth-b2c/Pods-active-directory-ios-native-appauth-b2c-frameworks.sh\"\n";
			showEnvVarsInLog = 0;
		};
/* End PBXShellScriptBuildPhase section */

/* Begin PBXSourcesBuildPhase section */
		847CC4611E6A4DD300B98781 /* Sources */ = {
			isa = PBXSourcesBuildPhase;
			buildActionMask = 2147483647;
			files = (
				847CC4701E6A4DD400B98781 /* ViewController.m in Sources */,
				847CC46D1E6A4DD400B98781 /* AppDelegate.m in Sources */,
				847CC46A1E6A4DD400B98781 /* main.m in Sources */,
				2B50BCD51E9AFDD90012DE89 /* GameTableViewController.m in Sources */,
				2B50BCD21E9AF9DF0012DE89 /* Games.m in Sources */,
			);
			runOnlyForDeploymentPostprocessing = 0;
		};
/* End PBXSourcesBuildPhase section */

/* Begin PBXVariantGroup section */
		847CC4711E6A4DD400B98781 /* Main.storyboard */ = {
			isa = PBXVariantGroup;
			children = (
				847CC4721E6A4DD400B98781 /* Base */,
			);
			name = Main.storyboard;
			sourceTree = "<group>";
		};
		847CC4761E6A4DD400B98781 /* LaunchScreen.storyboard */ = {
			isa = PBXVariantGroup;
			children = (
				847CC4771E6A4DD400B98781 /* Base */,
			);
			name = LaunchScreen.storyboard;
			sourceTree = "<group>";
		};
/* End PBXVariantGroup section */

/* Begin XCBuildConfiguration section */
		847CC47A1E6A4DD400B98781 /* Debug */ = {
			isa = XCBuildConfiguration;
			buildSettings = {
				ALWAYS_SEARCH_USER_PATHS = NO;
				CLANG_ANALYZER_NONNULL = YES;
				CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
				CLANG_CXX_LIBRARY = "libc++";
				CLANG_ENABLE_MODULES = YES;
				CLANG_ENABLE_OBJC_ARC = YES;
				CLANG_WARN_BOOL_CONVERSION = YES;
				CLANG_WARN_CONSTANT_CONVERSION = YES;
				CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
				CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
				CLANG_WARN_EMPTY_BODY = YES;
				CLANG_WARN_ENUM_CONVERSION = YES;
				CLANG_WARN_INFINITE_RECURSION = YES;
				CLANG_WARN_INT_CONVERSION = YES;
				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
				CLANG_WARN_SUSPICIOUS_MOVE = YES;
				CLANG_WARN_UNREACHABLE_CODE = YES;
				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
				COPY_PHASE_STRIP = NO;
				DEBUG_INFORMATION_FORMAT = dwarf;
				ENABLE_STRICT_OBJC_MSGSEND = YES;
				ENABLE_TESTABILITY = YES;
				GCC_C_LANGUAGE_STANDARD = gnu99;
				GCC_DYNAMIC_NO_PIC = NO;
				GCC_NO_COMMON_BLOCKS = YES;
				GCC_OPTIMIZATION_LEVEL = 0;
				GCC_PREPROCESSOR_DEFINITIONS = (
					"DEBUG=1",
					"$(inherited)",
				);
				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
				GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
				GCC_WARN_UNDECLARED_SELECTOR = YES;
				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
				GCC_WARN_UNUSED_FUNCTION = YES;
				GCC_WARN_UNUSED_VARIABLE = YES;
				IPHONEOS_DEPLOYMENT_TARGET = 10.2;
				MTL_ENABLE_DEBUG_INFO = YES;
				ONLY_ACTIVE_ARCH = YES;
				SDKROOT = iphoneos;
			};
			name = Debug;
		};
		847CC47B1E6A4DD400B98781 /* Release */ = {
			isa = XCBuildConfiguration;
			buildSettings = {
				ALWAYS_SEARCH_USER_PATHS = NO;
				CLANG_ANALYZER_NONNULL = YES;
				CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
				CLANG_CXX_LIBRARY = "libc++";
				CLANG_ENABLE_MODULES = YES;
				CLANG_ENABLE_OBJC_ARC = YES;
				CLANG_WARN_BOOL_CONVERSION = YES;
				CLANG_WARN_CONSTANT_CONVERSION = YES;
				CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
				CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
				CLANG_WARN_EMPTY_BODY = YES;
				CLANG_WARN_ENUM_CONVERSION = YES;
				CLANG_WARN_INFINITE_RECURSION = YES;
				CLANG_WARN_INT_CONVERSION = YES;
				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
				CLANG_WARN_SUSPICIOUS_MOVE = YES;
				CLANG_WARN_UNREACHABLE_CODE = YES;
				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
				COPY_PHASE_STRIP = NO;
				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
				ENABLE_NS_ASSERTIONS = NO;
				ENABLE_STRICT_OBJC_MSGSEND = YES;
				GCC_C_LANGUAGE_STANDARD = gnu99;
				GCC_NO_COMMON_BLOCKS = YES;
				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
				GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
				GCC_WARN_UNDECLARED_SELECTOR = YES;
				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
				GCC_WARN_UNUSED_FUNCTION = YES;
				GCC_WARN_UNUSED_VARIABLE = YES;
				IPHONEOS_DEPLOYMENT_TARGET = 10.2;
				MTL_ENABLE_DEBUG_INFO = NO;
				SDKROOT = iphoneos;
				VALIDATE_PRODUCT = YES;
			};
			name = Release;
		};
		847CC47D1E6A4DD400B98781 /* Debug */ = {
			isa = XCBuildConfiguration;
			baseConfigurationReference = 3290BA4F47711C140C6C551A /* Pods-active-directory-ios-native-appauth-b2c.debug.xcconfig */;
			buildSettings = {
				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
				DEVELOPMENT_TEAM = MR2287782X;
				INFOPLIST_FILE = "active-directory-ios-native-appauth-b2c/Info.plist";
				IPHONEOS_DEPLOYMENT_TARGET = 8.4;
				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
				PRODUCT_BUNDLE_IDENTIFIER = "com.microsoft.active-directory-ios-native-appauth-b2c";
				PRODUCT_NAME = WingTipGames;
			};
			name = Debug;
		};
		847CC47E1E6A4DD400B98781 /* Release */ = {
			isa = XCBuildConfiguration;
			baseConfigurationReference = AE43D798863A7742DB7702B7 /* Pods-active-directory-ios-native-appauth-b2c.release.xcconfig */;
			buildSettings = {
				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
				DEVELOPMENT_TEAM = MR2287782X;
				INFOPLIST_FILE = "active-directory-ios-native-appauth-b2c/Info.plist";
				IPHONEOS_DEPLOYMENT_TARGET = 8.4;
				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
				PRODUCT_BUNDLE_IDENTIFIER = "com.microsoft.active-directory-ios-native-appauth-b2c";
				PRODUCT_NAME = WingTipGames;
			};
			name = Release;
		};
/* End XCBuildConfiguration section */

/* Begin XCConfigurationList section */
		847CC4601E6A4DD300B98781 /* Build configuration list for PBXProject "active-directory-ios-native-appauth-b2c" */ = {
			isa = XCConfigurationList;
			buildConfigurations = (
				847CC47A1E6A4DD400B98781 /* Debug */,
				847CC47B1E6A4DD400B98781 /* Release */,
			);
			defaultConfigurationIsVisible = 0;
			defaultConfigurationName = Release;
		};
		847CC47C1E6A4DD400B98781 /* Build configuration list for PBXNativeTarget "active-directory-ios-native-appauth-b2c" */ = {
			isa = XCConfigurationList;
			buildConfigurations = (
				847CC47D1E6A4DD400B98781 /* Debug */,
				847CC47E1E6A4DD400B98781 /* Release */,
			);
			defaultConfigurationIsVisible = 0;
			defaultConfigurationName = Release;
		};
/* End XCConfigurationList section */
	};
	rootObject = 847CC45D1E6A4DD300B98781 /* Project object */;
}


================================================
FILE: AppSamples-iOS-TouchID-master/active-directory-ios-native-appauth-b2c.xcodeproj/project.xcworkspace/contents.xcworkspacedata
================================================
<?xml version="1.0" encoding="UTF-8"?>
<Workspace
   version = "1.0">
   <FileRef
      location = "self:active-directory-ios-native-appauth-b2c.xcodeproj">
   </FileRef>
</Workspace>


================================================
FILE: AppSamples-iOS-TouchID-master/active-directory-ios-native-appauth-b2c.xcworkspace/contents.xcworkspacedata
================================================
<?xml version="1.0" encoding="UTF-8"?>
<Workspace
   version = "1.0">
   <FileRef
      location = "group:active-directory-ios-native-appauth-b2c.xcodeproj">
   </FileRef>
   <FileRef
      location = "group:Pods/Pods.xcodeproj">
   </FileRef>
</Workspace>


================================================
FILE: AppSamples-iOS-TouchID-master/readme.md
================================================
B2C with iOS app and Touch ID.



================================================
FILE: AzureFunctionsSamples/CalculatePlayerProfilePercentCompleteWebHook/function.json
================================================
{
  "bindings": [
    {
      "type": "httpTrigger",
      "direction": "in",
      "webHookType": "genericJson",
      "name": "request",
      "methods": [
        "post"
      ]
    },
    {
      "type": "http",
      "direction": "out",
      "name": "response"
    }
  ],
  "disabled": false
}

================================================
FILE: AzureFunctionsSamples/CalculatePlayerProfilePercentCompleteWebHook/run.csx
================================================
#r "Newtonsoft.Json"

using System;
using System.Net;
using Newtonsoft.Json;

public static async Task<object> Run(HttpRequestMessage request, TraceWriter log)
{
    log.Info($"Webhook was triggered!");

    string requestContentAsString = await request.Content.ReadAsStringAsync();
    dynamic requestContentAsJObject = JsonConvert.DeserializeObject(requestContentAsString);
    var playerProfilePercentComplete = 0;

    if (!string.IsNullOrEmpty((string) requestContentAsJObject.playerTag))
    {
        playerProfilePercentComplete += 25;
    }

    if (!string.IsNullOrEmpty((string) requestContentAsJObject.playerZone))
    {
        playerProfilePercentComplete += 25;
    }

    if (!string.IsNullOrEmpty((string) requestContentAsJObject.playerMotto))
    {
        playerProfilePercentComplete += 25;
    }

    if (!string.IsNullOrEmpty((string) requestContentAsJObject.playerBio))
    {
        playerProfilePercentComplete += 25;
    }

    return request.CreateResponse(
        HttpStatusCode.OK,
        new {
            playerProfilePercentComplete
        });
}


================================================
FILE: AzureFunctionsSamples/CheckPlayerTagWebHook/function.json
================================================
{
  "bindings": [
    {
      "type": "httpTrigger",
      "direction": "in",
      "webHookType": "genericJson",
      "name": "request",
      "methods": [
        "post"
      ]
    },
    {
      "type": "http",
      "direction": "out",
      "name": "response"
    }
  ],
  "disabled": false
}

================================================
FILE: AzureFunctionsSamples/CheckPlayerTagWebHook/run.csx
================================================
#r "Newtonsoft.Json"

using System;
using System.Net;
using System.Net.Http.Formatting;
using Newtonsoft.Json;

public static async Task<object> Run(HttpRequestMessage request, TraceWriter log)
{
    log.Info($"Webhook was triggered!");

    string requestContentAsString = await request.Content.ReadAsStringAsync();
    dynamic requestContentAsJObject = JsonConvert.DeserializeObject(requestContentAsString);

    if (requestContentAsJObject.playerTag == null)
    {
        return request.CreateResponse(HttpStatusCode.BadRequest);
    }

    var playerTag = ((string) requestContentAsJObject.playerTag).ToLower();

    if (playerTag == "mcvinny" || playerTag == "msgates123" || playerTag == "revcottonmarcus")
    {
        return request.CreateResponse<ResponseContent>(
            HttpStatusCode.Conflict,
            new ResponseContent
            {
                version = "1.0.0",
                status = (int) HttpStatusCode.Conflict,
                userMessage = $"The player tag '{requestContentAsJObject.playerTag}' is already used."
            },
            new JsonMediaTypeFormatter(),
            "application/json");
    }

    return request.CreateResponse(HttpStatusCode.OK);
}

public class ResponseContent
{
    public string version { get; set; }

    public int status { get; set; }

    public string userMessage { get; set; }
}


================================================
FILE: AzureFunctionsSamples/LookUpLoyaltyWebHook/function.json
================================================
{
  "bindings": [
    {
      "type": "httpTrigger",
      "direction": "in",
      "webHookType": "genericJson",
      "name": "request",
      "methods": [
        "post"
      ]
    },
    {
      "type": "http",
      "name": "response",
      "direction": "out"
    }
  ],
  "disabled": false
}

================================================
FILE: AzureFunctionsSamples/LookUpLoyaltyWebHook/run.csx
================================================
#r "Newtonsoft.Json"

using System;
using System.Net;
using System.Net.Http.Formatting;
using Newtonsoft.Json;

public static async Task<object> Run(HttpRequestMessage request, TraceWriter log)
{
    log.Info($"Webhook was triggered!");

    string requestContentAsString = await request.Content.ReadAsStringAsync();
    dynamic requestContentAsJObject = JsonConvert.DeserializeObject(requestContentAsString);

    if (requestContentAsJObject.email == null)
    {
        return request.CreateResponse(HttpStatusCode.BadRequest);
    }

    var email = ((string) requestContentAsJObject.email).ToLower();


     return request.CreateResponse<ResponseContent>(
            HttpStatusCode.OK,
            new ResponseContent
            {
                version = "1.0.0",
                status = (int) HttpStatusCode.OK,
                userMessage = "User Found",
                city = "Redmond"
            },
            new JsonMediaTypeFormatter(),
            "application/json");
}

public class ResponseContent
{
    public string version { get; set; }

    public int status { get; set; }

    public string userMessage { get; set; }

    public string city {get; set; }
}


================================================
FILE: AzureFunctionsSamples/SendMailWebHook/function.json
================================================
{
  "bindings": [
    {
      "type": "httpTrigger",
      "direction": "in",
      "webHookType": "genericJson",
      "name": "request",
      "methods": [
        "post"
      ]
    },
    {
      "type": "http",
      "direction": "out",
      "name": "response"
    }
  ],
  "disabled": false
}

================================================
FILE: AzureFunctionsSamples/SendMailWebHook/run.csx
================================================
#r "Newtonsoft.Json"

using System;
using System.Net;
using System.Net.Mail;
using Newtonsoft.Json;

public static async Task<object> Run(HttpRequestMessage request, TraceWriter log)
{
    log.Verbose($"Webhook was triggered!");

    var requestContentAsString = await request.Content.ReadAsStringAsync();
    dynamic requestContentAsJObject = JsonConvert.DeserializeObject(requestContentAsString);
    string fromAddress = requestContentAsJObject.fromAddress;
    string toAddress = requestContentAsJObject.toAddress;
    var smtpHost = "smtp.sendgrid.net";
    var smtpPort = 587;
    var smtpEnableSsl = true;
    var smtpUser = GetEnvironmentVariable("SmtpUserName");
    var smtpPass = GetEnvironmentVariable("SmtpPassword");
    var subject = requestContentAsJObject.subject;
    var brand = requestContentAsJObject.brand;    
    var displayName = requestContentAsJObject.displayName;
        
    using (var client = new SmtpClient(smtpHost, smtpPort))
    {
        client.UseDefaultCredentials = false;
        client.Credentials = new System.Net.NetworkCredential(smtpUser, smtpPass);
        client.DeliveryMethod = SmtpDeliveryMethod.Network;
        client.EnableSsl = smtpEnableSsl;
        MailMessage message = new MailMessage(fromAddress, toAddress);
        message.Subject = "Welcome to WingTip Toys";
        message.IsBodyHtml = true;
        string imageSource;

        if (brand == "WingTip Games")
        {
            imageSource = "https://wingtipgamesb2c.azurewebsites.net/images/logo.png";
        }
        else if (brand == "WingTip Music")
        {
            imageSource = "https://wingtipmusicb2c.azurewebsites.net/images/logo.png";
        }
        else
        {
            imageSource = "https://wingtipb2ctmpls.blob.core.windows.net/wingtiptoys/images/logo.png";
        } 

        message.Body = $"<p>Hi {displayName}</p><p>Thank you for joining WingTip Toys by registering yourself through {brand}! We hope you enjoy our online services.</p><p>Regards,</p><p>The WingTip Toys Team</p><p><img src=\"{imageSource}\"></p>";

        try
        {
            client.Send(message);
            log.Verbose("Success.");

            return request.CreateResponse(
                HttpStatusCode.OK,
                new
                {
                    status = true,
                    message = string.Empty
                });
        }
        catch (Exception ex)
        {
            log.Verbose("Failure: " + ex.ToString());
            
            return request.CreateResponse(
                HttpStatusCode.InternalServerError,
                new
                {
                    status = false,
                    message = "Check Azure Function Logs for more information."
                });
        }
    }
}

public static string GetEnvironmentVariable(string name)
{
    return Environment.GetEnvironmentVariable(name, EnvironmentVariableTarget.Process);
}


================================================
FILE: AzureFunctionsSamples/host.json
================================================
{}

================================================
FILE: AzureFunctionsSamples/readme.md
================================================


These can be uploaded into Azure Functions directly

SendMail is sample for sending welcome emails with content

CalculatePlayerProfilePercentComplete -calculates completion of a profile based on attributes which have been filled by the end user

LookUpLoyalty and CheckPlayerTag are very simple API to complete the getting started with b2c custom policy and REST API samples


================================================
FILE: CONTRIBUTING.md
================================================
# Contributing to Azure samples

Thank you for your interest in contributing to Azure samples!

## Ways to contribute

You can contribute to [Azure samples](https://azure.microsoft.com/documentation/samples/) in a few different ways:

- Submit feedback on [this sample page](https://azure.microsoft.com/documentation/samples/active-directory-b2c-advanced-policies/) whether it was helpful or not.  
- Submit issues through [issue tracker](https://github.com/Azure-Samples/active-directory-b2c-advanced-policies/issues) on GitHub. We are actively monitoring the issues and improving our samples.
- If you wish to make code changes to samples, or contribute something new, please follow the [GitHub Forks / Pull requests model](https://help.github.com/articles/fork-a-repo/): Fork the sample repo, make the change and propose it back by submitting a pull request.

================================================
FILE: ExploreAdmin/New-AzureADB2CPolicyEngineApplications.ps1
================================================
# This PS1 script will create the required applications for B2C Advanced
# Supply the location of your base policy so that the script updates the necessary values.
Param(
    $BasePolicyPath = ""
)


$ErrorActionPreference = "Stop"

"Loading binaries"
$adal = "$PSScriptRoot\Microsoft.IdentityModel.Clients.ActiveDirectory.dll"
if (!(Test-Path $adal)) { "Could not find $adal. Please make sure you run this obtain the full ExploreAdmin folder and run the script from there."; return;}
[System.Reflection.Assembly]::LoadFile($adal);

$adalWin = "$PSScriptRoot\Microsoft.IdentityModel.Clients.ActiveDirectory.WindowsForms.dll";
if (!(Test-Path $adal)) { "Could not find $adal. Please make sure you run this obtain the full ExploreAdmin folder and run the script from there."; return;}
[System.Reflection.Assembly]::LoadFile($adalWin);

$authority = "https://login.microsoftonline.com/common";
$resource = "https://graph.windows.net/"
$clientId = "1950a258-227b-4e31-a9cf-717495945fc2"
$redirectUri = "urn:ietf:wg:oauth:2.0:oob"

$promptBehavoir = [Microsoft.IdentityModel.Clients.ActiveDirectory.PromptBehavior]::Always;

$context = New-Object Microsoft.IdentityModel.Clients.ActiveDirectory.AuthenticationContext($authority);
$token = $context.AcquireToken($resource, $clientId, $redirectUri, $promptBehavoir);

$expiryTime = ((Get-Date).ToString("yyyy-MM-dd"))

$tenantId = $token.TenantId;
$accessToken = $token.AccessToken;

"Getting Tenant Details"
$tenantDetailsResponse = Invoke-WebRequest "https://graph.windows.net/$tenantId/tenantDetails/?api-version=1.6" -Method Get -Headers @{Authorization="Bearer $accessToken"}
$tenantDetails = (ConvertFrom-Json $tenantDetailsResponse.Content).value
$tenantName = $tenantDetails.VerifiedDomains | Where Initial -eq "True" | Select -First 1 -ExpandProperty Name
"TenantName: $tenantName"

"Getting Azure AD Service Principal"
$aadSpResponse = Invoke-WebRequest "https://graph.windows.net/$tenantId/servicePrincipals?`$filter=appId+eq+'00000002-0000-0000-c000-000000000000'&api-version=1.6" -Method Get -Headers @{Authorization="Bearer $accessToken"}
$aadSp = (ConvertFrom-Json $aadSpResponse.Content).value[0]
$aadSpOid = $aadSp.objectId
$aadPermissionId = $aadSp.oauth2Permissions | where value -eq 'User.Read' | Select -First 1 -ExpandProperty Id


#----------- Web App ------------
"Registering Web App"
$webAppBody = "{`"appRoles`":[],`"availableToOtherTenants`":false,`"displayName`":`"PolicyEngine_Auto`",`"errorUrl`":null,`"groupMembershipClaims`":null,`"homepage`":`"https://login.microsoftonline.com/$tenantName`",`"identifierUris`":[`"https://$tenantName/$(New-Guid)`"],`"keyCredentials`":[],`"knownClientApplications`":[],`"logoutUrl`":null,`"oauth2AllowImplicitFlow`":false,`"oauth2AllowUrlPathMatching`":false,`"oauth2Permissions`":[],`"oauth2RequirePostResponse`":false,`"passwordCredentials`":[],`"publicClient`":false,`"recordConsentConditions`":null,`"replyUrls`":[`"https://login.microsoftonline.com/$tenantName`"],`"requiredResourceAccess`":[{`"resourceAppId`":`"00000002-0000-0000-c000-000000000000`",`"resourceAccess`":[{`"id`":`"$aadPermissionId`",`"type`":`"Scope`"}]}],`"samlMetadataUrl`":null}"
$webAppResponse = Invoke-WebRequest "https://graph.windows.net/$tenantId/applications/?api-version=1.6" -Method Post -Headers @{Authorization="Bearer $accessToken";"Content-Type"="application/json"} -Body $webAppBody
$webApp = (ConvertFrom-Json $webAppResponse.Content)
$webAppId = $webApp.appId

"Creating Service Principal for Web App"
$webSpBody = "{`"appId`":`"$webAppId`" }"
$webSpResponse = Invoke-WebRequest "https://graph.windows.net/$tenantId/servicePrincipals/?api-version=1.6" -Method Post -Headers @{Authorization="Bearer $accessToken";"Content-Type"="application/json"} -Body $webSpBody
$webSp = (ConvertFrom-Json $webSpResponse.Content)
$webSpOid = $webSp.objectId
$webAppPermissionId = $webApp.oauth2Permissions[0].id


#----------- Native App ------------
"Registering Native App"
$nativeAppBody = "{`"appRoles`":[],`"availableToOtherTenants`":false,`"displayName`":`"PolicyEngineProxy_Auto`",`"errorUrl`":null,`"groupMembershipClaims`":null,`"homepage`":null,`"identifierUris`":[],`"keyCredentials`":[],`"knownClientApplications`":[],`"logoutUrl`":null,`"oauth2AllowImplicitFlow`":false,`"oauth2AllowUrlPathMatching`":false,`"oauth2Permissions`":[],`"oauth2RequirePostResponse`":false,`"passwordCredentials`":[],`"publicClient`":true,`"recordConsentConditions`":null,`"replyUrls`":[`"https://login.microsoftonline.com/$tenantName`"],`"requiredResourceAccess`":[{`"resourceAppId`":`"$webAppId`",`"resourceAccess`":[{`"id`":`"$webAppPermissionId`",`"type`":`"Scope`"}]},{`"resourceAppId`":`"00000002-0000-0000-c000-000000000000`",`"resourceAccess`":[{`"id`":`"$aadPermissionId`",`"type`":`"Scope`"}]}],`"samlMetadataUrl`":null}"
$nativeAppResponse = Invoke-WebRequest "https://graph.windows.net/$tenantId/applications/?api-version=1.6" -Method Post -Headers @{Authorization="Bearer $accessToken";"Content-Type"="application/json"} -Body $nativeAppBody
$nativeApp = (ConvertFrom-Json $nativeAppResponse.Content)
$nativeAppId = $nativeApp.appId

"Creating Service Principal for Native App"
$nativeSpBody = "{`"appId`":`"$nativeAppId`" }"
$nativeSpResponse = Invoke-WebRequest "https://graph.windows.net/$tenantId/servicePrincipals/?api-version=1.6" -Method Post -Headers @{Authorization="Bearer $accessToken";"Content-Type"="application/json"} -Body $nativeSpBody
$nativeSp = (ConvertFrom-Json $nativeSpResponse.Content)
$nativeSpOid = $nativeSp.objectId


#----------- Consent (OAuth2PermissionGrants) -------------
"Consenting to Web App"
$webGrantBody = "{`"clientId`": `"$webSpOid`",`"consentType`": `"AllPrincipals`",`"resourceId`": `"$aadSpOid`",`"scope`": `"User.Read`", `"expiryTime`":`"$expiryTime`"}"
$webGrantResponse = Invoke-WebRequest "https://graph.windows.net/$tenantId/oauth2PermissionGrants/?api-version=1.6" -Method Post -Headers @{Authorization="Bearer $accessToken";"Content-Type"="application/json"} -Body $webGrantBody
$webGrant = (ConvertFrom-Json $webGrantResponse.Content)

"Consenting to Native App"
$nativeGrantBody = "{`"clientId`": `"$nativeSpOid`",`"consentType`": `"AllPrincipals`",`"resourceId`": `"$aadSpOid`",`"scope`": `"User.Read`", `"expiryTime`":`"$expiryTime`"}"
$nativeGrantResponse = Invoke-WebRequest "https://graph.windows.net/$tenantId/oauth2PermissionGrants/?api-version=1.6" -Method Post -Headers @{Authorization="Bearer $accessToken";"Content-Type"="application/json"} -Body $nativeGrantBody
$nativeGrant = (ConvertFrom-Json $nativeGrantResponse.Content)

"Conseting to Native App's use of Web App"
$nativeGrantWebBody = "{`"clientId`": `"$nativeSpOid`",`"consentType`": `"AllPrincipals`",`"resourceId`": `"$webSpOid`",`"scope`": `"user_impersonation`", `"expiryTime`":`"$expiryTime`"}"
$nativeGrantWebResponse = Invoke-WebRequest "https://graph.windows.net/$tenantId/oauth2PermissionGrants/?api-version=1.6" -Method Post -Headers @{Authorization="Bearer $accessToken";"Content-Type"="application/json"} -Body $nativeGrantWebBody
$nativeGrantWeb = (ConvertFrom-Json $nativeGrantWebResponse.Content)


#Final-Test
#$username = ""
#$password = ""
#$resourceOwnerBody = "grant_type=password&username=$username&password=$password&resource=$webAppId&client_id=$nativeAppID"
#Invoke-WebRequest "https://login.microsoftonline.com/$tenantName/oauth2/token" -Method Post -Body $resourceOwnerBody

"-------------------------"
"Web App ID: $webAppId"
"Native App ID: $nativeAppId"
"-------------------------"


if ($BasePolicyPath) {
    "Updating $BasePolicyPath"
    $newPolicy = @()
    Get-Content $basePolicyPath| foreach {
        $newPolicy += $_.Replace("(insert client_id of native client here)", $nativeAppId).Replace("(insert client_id of web app here)", $webAppId);
    }
    $outputPolicyPath = $basePolicyPath.Replace(".xml", "_updated.xml")
    $newPolicy > $outputPolicyPath
    "Updates saved to new file: $outputPolicyPath"
}
else {
    "Please proceed to update your Base policy"
}


================================================
FILE: LICENSE
================================================
The MIT License (MIT)

Copyright (c) 2015 Microsoft Corporation

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

================================================
FILE: README.md
================================================
---
languages:
- csharp
- powershell
- objc
- html
- javascript
page_type: sample
description: "A demo of Azure AD B2C Custom Policies with the Identity Experience Framework (IEF)."
products:
- azure
- azure-active-directory
urlFragment: identity-experience-framework-azure-ad
---

# Azure AD B2C Custom Policies with the Identity Experience Framework (IEF) 

Active Repos:

- Starter pack https://github.com/Azure-Samples/active-directory-b2c-custom-policy-starterpack
- App samples https://docs.microsoft.com/en-us/azure/active-directory-b2c/code-samples
- The community repo https://github.com/azure-ad-b2c. 

### Solutions and training for Azure AD B2C
https://docs.microsoft.com/en-us/azure/active-directory-b2c/solution-articles

## What are the supported features and where is the supported documentation?  Supported feature set of Custom Policies with IEF available via:
1. The inline documentation in the Identity Experience Framework tab in B2C. Click on "Developer Responsibilities"
2. [Azure official documentation page](https://docs.microsoft.com/en-us/azure/active-directory-b2c/)



### Unsupported material 

A Demo of Azure AD B2C is deployed at https://wingtipgamesb2c.azurewebsites.net/.

### Samples for Wingtipgamesb2c.azurewebsites.net. Including:

* Web application /src/WingTipGamesWebApplication
* Application Insights Viewer /src/WingTipUserJourneyPlayerWebApplication
* Web app with admin side analytics src/WingTipToysWebApplication


**The contents of this repository are unsupported and may or not be current. Replies to questions about unsupported material have the lowest priority**

## Why unsupported?

The Identity Experience Framework is a powerful identity engine with a very comprehensive feature set, that is used internally for Microsoft services like Azure AD B2C.  Only a subset of features will be tested, monitored, documented, and supported over time. The supported list will increase quickly.  Unsupported samples and documentation are provided for our fans and partners for training, and feedback only. 




================================================
FILE: UserJourneyRecorder/README.md
================================================
Azure AD B2C can log activity data into Azure Application Insights for the purposes of troubleshooting during development.  
https://github.com/MicrosoftDocs/azure-docs/blob/master/articles/active-directory-b2c/active-directory-b2c-troubleshoot-custom.md

The article added here (.docx) also explains how to use a sample to deploy a simple web service that will enhance the visualization of the troubleshooting output, it is called the userjourney recorder.

The userjourney recorder version in this folder is the generic sample.

A different version of the userjourney recorder, adapted to read B2C logs in Application Insights, can be found here as part of the wingtiptoys project. See article for details:

https://github.com/Azure-Samples/active-directory-b2c-advanced-policies/tree/master/wingtipgamesb2c/src/WingTipUserJourneyPlayerWebApplication


================================================
FILE: UserJourneyRecorder/UserJourneyRecorder.sln
================================================

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 14
VisualStudioVersion = 14.0.25123.0
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UserJourneyRecorderWebApp", "UserJourneyRecorderWebApp\UserJourneyRecorderWebApp.csproj", "{574DDB74-36FD-460B-8E35-A7B0F539015D}"
EndProject
Global
	GlobalSection(SolutionConfigurationPlatforms) = preSolution
		Debug|Any CPU = Debug|Any CPU
		Release|Any CPU = Release|Any CPU
	EndGlobalSection
	GlobalSection(ProjectConfigurationPlatforms) = postSolution
		{574DDB74-36FD-460B-8E35-A7B0F539015D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{574DDB74-36FD-460B-8E35-A7B0F539015D}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{574DDB74-36FD-460B-8E35-A7B0F539015D}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{574DDB74-36FD-460B-8E35-A7B0F539015D}.Release|Any CPU.Build.0 = Release|Any CPU
	EndGlobalSection
	GlobalSection(SolutionProperties) = preSolution
		HideSolutionNode = FALSE
	EndGlobalSection
EndGlobal


================================================
FILE: UserJourneyRecorder/UserJourneyRecorderWebApp/Global.asax
================================================
<%@ Application Codebehind="Global.asax.cs" Inherits="UserJourneyRecorderWebApp.UserJourneyRecorderWebApplication" Language="C#" %>


================================================
FILE: UserJourneyRecorder/UserJourneyRecorderWebApp/Global.asax.cs
================================================
using System;
using System.Web;
using System.Web.Routing;
using UserJourneyRecorderWebApp.Infrastructure;

namespace UserJourneyRecorderWebApp
{
    public class UserJourneyRecorderWebApplication : HttpApplication
    {
        protected void Application_Start(object sender, EventArgs e)
        {
            var routeHandler = new UserJourneyRecorderRouteHandler();
            var route = new Route("stream", routeHandler);
            RouteTable.Routes.Add(string.Empty, route);
        }
    }
}


================================================
FILE: UserJourneyRecorder/UserJourneyRecorderWebApp/Infrastructure/UserJourneyRecorderHttpHandler.cs
================================================
using System;
using System.IO;
using System.Net;
using System.Text;
using System.Threading.Tasks;
using System.Web;
using System.Web.Routing;
using System.Web.SessionState;

namespace UserJourneyRecorderWebApp.Infrastructure
{
    public class UserJourneyRecorderHttpHandler : HttpTaskAsyncHandler, IRequiresSessionState
    {
        public override Task ProcessRequestAsync(HttpContext context)
        {
            Task task = null;

            try
            {
                task = new Task(() =>
                {
                    if (context.Request.HttpMethod == "GET")
                    {
                        ProcessGetRequest(context);
                    }
                    else if (context.Request.HttpMethod == "POST")
                    {
                        ProcessPostRequest(context);
                    }

                    context.ApplicationInstance.CompleteRequest();
                });

                task.RunSynchronously();
            }
            catch (HttpException)
            {
                context.Response.StatusCode = (int)HttpStatusCode.BadRequest;
                context.ApplicationInstance.CompleteRequest();
            }
            catch (ArgumentException)
            {
                context.Response.StatusCode = (int)HttpStatusCode.InternalServerError;
                context.ApplicationInstance.CompleteRequest();
            }

            return task;
        }

        private void ProcessGetRequest(HttpContext context)
        {
            var streamId = context.Request.Params["id"];
            var streamsDirectory = Utils.GetStreamsDirectory(context.Request.PhysicalApplicationPath);
            Utils.EnsureStreamDirectoryExists(streamsDirectory);
            var streamPath = Utils.GetStreamPath(streamsDirectory, streamId);
            var deleteStream = true;
            var autoDeleteStream = context.Request.Params["autodelete"];

            if (!string.IsNullOrEmpty(autoDeleteStream) && autoDeleteStream.ToLower() == false.ToString().ToLower())
            {
                deleteStream = false;
            }

            try
            {
                string payload;

                using (var inputStream = new FileStream(streamPath, FileMode.Open, FileAccess.Read))
                {
                    var inputReader = new StreamReader(inputStream, new UTF8Encoding());
                    payload = inputReader.ReadToEnd();
                    inputReader.Close();
                    inputStream.Close();
                }

                if (deleteStream)
                {
                    File.Delete(streamPath);
                }

                context.Response.AddHeader("Access-Control-Allow-Origin", "*");
                context.Response.AddHeader("Cache-Control", "no-cache");
                context.Response.AddHeader("Expires", "Thu, 01 Jan 1970 00:00:00 GMT");
                context.Response.AddHeader("Pragma", "no-cache");
                context.Response.Output.Write(payload);
                context.Response.StatusCode = (int)HttpStatusCode.OK;
            }
            catch (FileNotFoundException)
            {
                context.Response.StatusCode = (int)HttpStatusCode.NoContent;
            }
        }

        private void ProcessPostRequest(HttpContext context)
        {
            var streamId = context.Request.Params["id"];
            var streamsDirectory = Utils.GetStreamsDirectory(context.Request.PhysicalApplicationPath);
            Utils.EnsureStreamDirectoryExists(streamsDirectory);
            var streamPath = Utils.GetStreamPath(streamsDirectory, streamId);
            string payload;

            using (var inputReader = new StreamReader(context.Request.InputStream, Encoding.UTF8))
            {
                payload = inputReader.ReadToEnd();
            }

            using (var outputStream = new FileStream(streamPath, FileMode.Append, FileAccess.Write))
            {
                var outputWriter = new StreamWriter(outputStream, new UTF8Encoding());
                outputWriter.Write(payload);
                outputWriter.Flush();
                outputWriter.Close();
                outputStream.Close();
            }
        }
    }
}


================================================
FILE: UserJourneyRecorder/UserJourneyRecorderWebApp/Infrastructure/UserJourneyRecorderRouteHandler.cs
================================================
using System.Web;
using System.Web.Routing;

namespace UserJourneyRecorderWebApp.Infrastructure
{
    public class UserJourneyRecorderRouteHandler : IRouteHandler
    {
        public IHttpHandler GetHttpHandler(RequestContext requestContext)
        {
            return new UserJourneyRecorderHttpHandler();
        }
    }
}


================================================
FILE: UserJourneyRecorder/UserJourneyRecorderWebApp/Infrastructure/Utils.cs
================================================
using System;
using System.IO;
using System.Net;
using System.Net.Http;
using System.Text.RegularExpressions;
using System.Web.Http;
using UserJourneyRecorderWebApp.Properties;

namespace UserJourneyRecorderWebApp.Infrastructure
{
    internal static class Utils
    {
        public static void EnsureStreamDirectoryExists(string streamPath)
        {
            Directory.CreateDirectory(streamPath);
        }

        public static string GetStreamsDirectory(string basePath)
        {
            return basePath + "streams\\";
        }

        public static string GetStreamPath(string streamsDirectory, string streamId)
        {
            ValidateStreamId(streamId);
            return streamsDirectory + streamId;
        }

        public static void ValidateStreamId(string streamId)
        {
            if (!Regex.IsMatch(streamId, "", RegexOptions.IgnoreCase, TimeSpan.FromMilliseconds(100)))
            {
                var errorResponse = new HttpResponseMessage(HttpStatusCode.BadRequest)
                {
                    ReasonPhrase = string.Format(Resources.InvalidStreamId, streamId)
                };

                throw new HttpResponseException(errorResponse);
            }
        }
    }
}


================================================
FILE: UserJourneyRecorder/UserJourneyRecorderWebApp/Properties/AssemblyInfo.cs
================================================
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;

// General Information about an assembly is controlled through the following 
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("UserJourneyRecorderWebApp")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("UserJourneyRecorderWebApp")]
[assembly: AssemblyCopyright("Copyright ©  2016")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]

// Setting ComVisible to false makes the types in this assembly not visible 
// to COM components.  If you need to access a type in this assembly from 
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]

// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("574ddb74-36fd-460b-8e35-a7b0f539015d")]

// Version information for an assembly consists of the following four values:
//
//      Major Version
//      Minor Version 
//      Build Number
//      Revision
//
// You can specify all the values or you can default the Revision and Build Numbers 
// by using the '*' as shown below:
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]


================================================
FILE: UserJourneyRecorder/UserJourneyRecorderWebApp/Properties/Resources.Designer.cs
================================================
//------------------------------------------------------------------------------
// <auto-generated>
//     This code was generated by a tool.
//     Runtime Version:4.0.30319.42000
//
//     Changes to this file may cause incorrect behavior and will be lost if
//     the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------

namespace UserJourneyRecorderWebApp.Properties {
    using System;
    
    
    /// <summary>
    ///   A strongly-typed resource class, for looking up localized strings, etc.
    /// </summary>
    // This class was auto-generated by the StronglyTypedResourceBuilder
    // class via a tool like ResGen or Visual Studio.
    // To add or remove a member, edit your .ResX file then rerun ResGen
    // with the /str option, or rebuild your VS project.
    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
    internal class Resources {
        
        private static global::System.Resources.ResourceManager resourceMan;
        
        private static global::System.Globalization.CultureInfo resourceCulture;
        
        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
        internal Resources() {
        }
        
        /// <summary>
        ///   Returns the cached ResourceManager instance used by this class.
        /// </summary>
        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
        internal static global::System.Resources.ResourceManager ResourceManager {
            get {
                if (object.ReferenceEquals(resourceMan, null)) {
                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("UserJourneyRecorderWebApp.Properties.Resources", typeof(Resources).Assembly);
                    resourceMan = temp;
                }
                return resourceMan;
            }
        }
        
        /// <summary>
        ///   Overrides the current thread's CurrentUICulture property for all
        ///   resource lookups using this strongly typed resource class.
        /// </summary>
        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
        internal static global::System.Globalization.CultureInfo Culture {
            get {
                return resourceCulture;
            }
            set {
                resourceCulture = value;
            }
        }
        
        /// <summary>
        ///   Looks up a localized string similar to The stream identifier &apos;{0}&apos; is invalid. It must be formatted as a GUID string..
        /// </summary>
        internal static string InvalidStreamId {
            get {
                return ResourceManager.GetString("InvalidStreamId", resourceCulture);
            }
        }
    }
}


================================================
FILE: UserJourneyRecorder/UserJourneyRecorderWebApp/Properties/Resources.resx
================================================
<?xml version="1.0" encoding="utf-8"?>
<root>
  <!-- 
    Microsoft ResX Schema 
    
    Version 2.0
    
    The primary goals of this format is to allow a simple XML format 
    that is mostly human readable. The generation and parsing of the 
    various data types are done through the TypeConverter classes 
    associated with the data types.
    
    Example:
    
    ... ado.net/XML headers & schema ...
    <resheader name="resmimetype">text/microsoft-resx</resheader>
    <resheader name="version">2.0</resheader>
    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
        <value>[base64 mime encoded serialized .NET Framework object]</value>
    </data>
    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
        <comment>This is a comment</comment>
    </data>
                
    There are any number of "resheader" rows that contain simple 
    name/value pairs.
    
    Each data row contains a name, and value. The row also contains a 
    type or mimetype. Type corresponds to a .NET class that support 
    text/value conversion through the TypeConverter architecture. 
    Classes that don't support this are serialized and stored with the 
    mimetype set.
    
    The mimetype is used for serialized objects, and tells the 
    ResXResourceReader how to depersist the object. This is currently not 
    extensible. For a given mimetype the value must be set accordingly:
    
    Note - application/x-microsoft.net.object.binary.base64 is the format 
    that the ResXResourceWriter will generate, however the reader can 
    read any of the formats listed below.
    
    mimetype: application/x-microsoft.net.object.binary.base64
    value   : The object must be serialized with 
            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
            : and then encoded with base64 encoding.
    
    mimetype: application/x-microsoft.net.object.soap.base64
    value   : The object must be serialized with 
            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
            : and then encoded with base64 encoding.

    mimetype: application/x-microsoft.net.object.bytearray.base64
    value   : The object must be serialized into a byte array 
            : using a System.ComponentModel.TypeConverter
            : and then encoded with base64 encoding.
    -->
  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
    <xsd:element name="root" msdata:IsDataSet="true">
      <xsd:complexType>
        <xsd:choice maxOccurs="unbounded">
          <xsd:element name="metadata">
            <xsd:complexType>
              <xsd:sequence>
                <xsd:element name="value" type="xsd:string" minOccurs="0" />
              </xsd:sequence>
              <xsd:attribute name="name" use="required" type="xsd:string" />
              <xsd:attribute name="type" type="xsd:string" />
              <xsd:attribute name="mimetype" type="xsd:string" />
              <xsd:attribute ref="xml:space" />
            </xsd:complexType>
          </xsd:element>
          <xsd:element name="assembly">
            <xsd:complexType>
              <xsd:attribute name="alias" type="xsd:string" />
              <xsd:attribute name="name" type="xsd:string" />
            </xsd:complexType>
          </xsd:element>
          <xsd:element name="data">
            <xsd:complexType>
              <xsd:sequence>
                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
              </xsd:sequence>
              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
              <xsd:attribute ref="xml:space" />
            </xsd:complexType>
          </xsd:element>
          <xsd:element name="resheader">
            <xsd:complexType>
              <xsd:sequence>
                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
              </xsd:sequence>
              <xsd:attribute name="name" type="xsd:string" use="required" />
            </xsd:complexType>
          </xsd:element>
        </xsd:choice>
      </xsd:complexType>
    </xsd:element>
  </xsd:schema>
  <resheader name="resmimetype">
    <value>text/microsoft-resx</value>
  </resheader>
  <resheader name="version">
    <value>2.0</value>
  </resheader>
  <resheader name="reader">
    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
  </resheader>
  <resheader name="writer">
    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
  </resheader>
  <data name="InvalidStreamId" xml:space="preserve">
    <value>The stream identifier '{0}' is invalid. It must be formatted as a GUID string.</value>
  </data>
</root>

================================================
FILE: UserJourneyRecorder/UserJourneyRecorderWebApp/Properties/Settings.Designer.cs
================================================
//------------------------------------------------------------------------------
// <auto-generated>
//     This code was generated by a tool.
//     Runtime Version:4.0.30319.42000
//
//     Changes to this file may cause incorrect behavior and will be lost if
//     the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------

namespace UserJourneyRecorderWebApp.Properties {
    
    
    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "14.0.0.0")]
    internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
        
        private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
        
        public static Settings Default {
            get {
                return defaultInstance;
            }
        }
        
        [global::System.Configuration.ApplicationScopedSettingAttribute()]
        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
        [global::System.Configuration.DefaultSettingValueAttribute("stream")]
        public string StreamFolder {
            get {
                return ((string)(this["StreamFolder"]));
            }
        }
    }
}


================================================
FILE: UserJourneyRecorder/UserJourneyRecorderWebApp/Properties/Settings.settings
================================================
<?xml version='1.0' encoding='utf-8'?>
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" GeneratedClassNamespace="UserJourneyRecorderWebApp.Properties" GeneratedClassName="Settings">
  <Profiles />
  <Settings>
    <Setting Name="StreamFolder" Type="System.String" Scope="Application">
      <Value Profile="(Default)">stream</Value>
    </Setting>
  </Settings>
</SettingsFile>

================================================
FILE: UserJourneyRecorder/UserJourneyRecorderWebApp/UserJourneyRecorderWebApp.csproj
================================================
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <Import Project="..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.0\build\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props" Condition="Exists('..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.0\build\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props')" />
  <Import Project="..\packages\Microsoft.Net.Compilers.1.0.0\build\Microsoft.Net.Compilers.props" Condition="Exists('..\packages\Microsoft.Net.Compilers.1.0.0\build\Microsoft.Net.Compilers.props')" />
  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
  <PropertyGroup>
    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
    <ProductVersion>
    </ProductVersion>
    <SchemaVersion>2.0</SchemaVersion>
    <ProjectGuid>{574DDB74-36FD-460B-8E35-A7B0F539015D}</ProjectGuid>
    <ProjectTypeGuids>{349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}</ProjectTypeGuids>
    <OutputType>Library</OutputType>
    <AppDesignerFolder>Properties</AppDesignerFolder>
    <RootNamespace>UserJourneyRecorderWebApp</RootNamespace>
    <AssemblyName>UserJourneyRecorderWebApp</AssemblyName>
    <TargetFrameworkVersion>v4.5.2</TargetFrameworkVersion>
    <UseIISExpress>true</UseIISExpress>
    <IISExpressSSLPort />
    <IISExpressAnonymousAuthentication />
    <IISExpressWindowsAuthentication />
    <IISExpressUseClassicPipelineMode />
    <UseGlobalApplicationHostFile />
    <NuGetPackageImportStamp>
    </NuGetPackageImportStamp>
    <Use64BitIISExpress />
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
    <DebugSymbols>true</DebugSymbols>
    <DebugType>full</DebugType>
    <Optimize>false</Optimize>
    <OutputPath>bin\</OutputPath>
    <DefineConstants>DEBUG;TRACE</DefineConstants>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
    <DebugType>pdbonly</DebugType>
    <Optimize>true</Optimize>
    <OutputPath>bin\</OutputPath>
    <DefineConstants>TRACE</DefineConstants>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
  </PropertyGroup>
  <ItemGroup>
    <Reference Include="Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
      <HintPath>..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.0\lib\net45\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.dll</HintPath>
      <Private>True</Private>
    </Reference>
    <Reference Include="Microsoft.CSharp" />
    <Reference Include="Newtonsoft.Json, Version=6.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
      <HintPath>..\packages\Newtonsoft.Json.6.0.4\lib\net45\Newtonsoft.Json.dll</HintPath>
      <Private>True</Private>
    </Reference>
    <Reference Include="System.Net.Http" />
    <Reference Include="System.Net.Http.Formatting, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
      <HintPath>..\packages\Microsoft.AspNet.WebApi.Client.5.2.3\lib\net45\System.Net.Http.Formatting.dll</HintPath>
    </Reference>
    <Reference Include="System.Web.DynamicData" />
    <Reference Include="System.Web.Entity" />
    <Reference Include="System.Web.ApplicationServices" />
    <Reference Include="System.ComponentModel.DataAnnotations" />
    <Reference Include="System" />
    <Reference Include="System.Data" />
    <Reference Include="System.Core" />
    <Reference Include="System.Data.DataSetExtensions" />
    <Reference Include="System.Web.Extensions" />
    <Reference Include="System.Web.Http, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
      <HintPath>..\packages\Microsoft.AspNet.WebApi.Core.5.2.3\lib\net45\System.Web.Http.dll</HintPath>
    </Reference>
    <Reference Include="System.Xml.Linq" />
    <Reference Include="System.Drawing" />
    <Reference Include="System.Web" />
    <Reference Include="System.Xml" />
    <Reference Include="System.Configuration" />
    <Reference Include="System.Web.Services" />
    <Reference Include="System.EnterpriseServices" />
  </ItemGroup>
  <ItemGroup>
    <Content Include="base64url_102.js" />
    <Content Include="config_102.html" />
    <Content Include="config_102.js" />
    <Content Include="packages.config" />
    <Content Include="languages\en-us_102.json" />
    <None Include="Properties\PublishProfiles\B2CRecorder.pubxml" />
    <None Include="Properties\Settings.settings">
      <Generator>SettingsSingleFileGenerator</Generator>
      <LastGenOutput>Settings.Designer.cs</LastGenOutput>
    </None>
    <None Include="Web.Debug.config">
      <DependentUpon>Web.config</DependentUpon>
    </None>
    <None Include="Web.Release.config">
      <DependentUpon>Web.config</DependentUpon>
    </None>
  </ItemGroup>
  <ItemGroup>
    <Content Include="Global.asax" />
    <Content Include="trace_102.css" />
    <Content Include="trace_102.html" />
    <Content Include="Web.config" />
  </ItemGroup>
  <ItemGroup>
    <Compile Include="Global.asax.cs">
      <DependentUpon>Global.asax</DependentUpon>
    </Compile>
    <Compile Include="Infrastructure\UserJourneyRecorderHttpHandler.cs" />
    <Compile Include="Infrastructure\UserJourneyRecorderRouteHandler.cs" />
    <Compile Include="Infrastructure\Utils.cs" />
    <Compile Include="Properties\AssemblyInfo.cs" />
    <Compile Include="Properties\Resources.Designer.cs">
      <AutoGen>True</AutoGen>
      <DesignTime>True</DesignTime>
      <DependentUpon>Resources.resx</DependentUpon>
    </Compile>
    <Compile Include="Properties\Settings.Designer.cs">
      <AutoGen>True</AutoGen>
      <DesignTimeSharedInput>True</DesignTimeSharedInput>
      <DependentUpon>Settings.settings</DependentUpon>
    </Compile>
  </ItemGroup>
  <ItemGroup>
    <EmbeddedResource Include="Properties\Resources.resx">
      <Generator>ResXFileCodeGenerator</Generator>
      <LastGenOutput>Resources.Designer.cs</LastGenOutput>
    </EmbeddedResource>
  </ItemGroup>
  <PropertyGroup>
    <VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">10.0</VisualStudioVersion>
    <VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
  </PropertyGroup>
  <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
  <Import Project="$(VSToolsPath)\WebApplications\Microsoft.WebApplication.targets" Condition="'$(VSToolsPath)' != ''" />
  <Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" Condition="false" />
  <ProjectExtensions>
    <VisualStudio>
      <FlavorProperties GUID="{349c5851-65df-11da-9384-00065b846f21}">
        <WebProjectProperties>
          <UseIIS>True</UseIIS>
          <AutoAssignPort>True</AutoAssignPort>
          <DevelopmentServerPort>5350</DevelopmentServerPort>
          <DevelopmentServerVPath>/</DevelopmentServerVPath>
          <IISUrl>http://localhost:5350/</IISUrl>
          <NTLMAuthentication>False</NTLMAuthentication>
          <UseCustomServer>False</UseCustomServer>
          <CustomServerUrl>
          </CustomServerUrl>
          <SaveServerSettingsInUserFile>False</SaveServerSettingsInUserFile>
        </WebProjectProperties>
      </FlavorProperties>
    </VisualStudio>
  </ProjectExtensions>
  <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
    <PropertyGroup>
      <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>
    </PropertyGroup>
    <Error Condition="!Exists('..\packages\Microsoft.Net.Compilers.1.0.0\build\Microsoft.Net.Compilers.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Microsoft.Net.Compilers.1.0.0\build\Microsoft.Net.Compilers.props'))" />
    <Error Condition="!Exists('..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.0\build\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.0\build\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props'))" />
  </Target>
  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
       Other similar extension points exist, see Microsoft.Common.targets.
  <Target Name="BeforeBuild">
  </Target>
  <Target Name="AfterBuild">
  </Target>
  -->
</Project>

================================================
FILE: UserJourneyRecorder/UserJourneyRecorderWebApp/Web.Debug.config
================================================
<?xml version="1.0" encoding="utf-8"?>

<!-- For more information on using web.config transformation visit http://go.microsoft.com/fwlink/?LinkId=125889 -->

<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
  <!--
    In the example below, the "SetAttributes" transform will change the value of 
    "connectionString" to use "ReleaseSQLServer" only when the "Match" locator 
    finds an attribute "name" that has a value of "MyDB".
    
    <connectionStrings>
      <add name="MyDB" 
        connectionString="Data Source=ReleaseSQLServer;Initial Catalog=MyReleaseDB;Integrated Security=True" 
        xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/>
    </connectionStrings>
  -->
  <system.web>
    <!--
      In the example below, the "Replace" transform will replace the entire 
      <customErrors> section of your web.config file.
      Note that because there is only one customErrors section under the 
      <system.web> node, there is no need to use the "xdt:Locator" attribute.
      
      <customErrors defaultRedirect="GenericError.htm"
        mode="RemoteOnly" xdt:Transform="Replace">
        <error statusCode="500" redirect="InternalError.htm"/>
      </customErrors>
    -->
  </system.web>
</configuration>

================================================
FILE: UserJourneyRecorder/UserJourneyRecorderWebApp/Web.Release.config
================================================
<?xml version="1.0" encoding="utf-8"?>

<!-- For more information on using web.config transformation visit http://go.microsoft.com/fwlink/?LinkId=125889 -->

<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
  <!--
    In the example below, the "SetAttributes" transform will change the value of 
    "connectionString" to use "ReleaseSQLServer" only when the "Match" locator 
    finds an attribute "name" that has a value of "MyDB".
    
    <connectionStrings>
      <add name="MyDB" 
        connectionString="Data Source=ReleaseSQLServer;Initial Catalog=MyReleaseDB;Integrated Security=True" 
        xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/>
    </connectionStrings>
  -->
  <system.web>
    <compilation xdt:Transform="RemoveAttributes(debug)" />
    <!--
      In the example below, the "Replace" transform will replace the entire 
      <customErrors> section of your web.config file.
      Note that because there is only one customErrors section under the 
      <system.web> node, there is no need to use the "xdt:Locator" attribute.
      
      <customErrors defaultRedirect="GenericError.htm"
        mode="RemoteOnly" xdt:Transform="Replace">
        <error statusCode="500" redirect="InternalError.htm"/>
      </customErrors>
    -->
  </system.web>
</configuration>

================================================
FILE: UserJourneyRecorder/UserJourneyRecorderWebApp/Web.config
================================================
<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
      <section name="UserJourneyRecorderWebApp.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
      <section name="Web.UserJourneyRecorder.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
    </sectionGroup>
  </configSections>
  <system.web>
    <authentication>
      <forms requireSSL="true" />
    </authentication>
    <compilation debug="true" targetFramework="4.5" />
    <customErrors mode="Off" />
    <httpRuntime targetFramework="4.5" enableVersionHeader="false" />
    <httpCookies httpOnlyCookies="true" requireSSL="true" />
  </system.web>
  <system.webServer>
    <httpErrors errorMode="DetailedLocalOnly" />
    <staticContent>
      <remove fileExtension=".json" />
      <mimeMap fileExtension=".json" mimeType="application/json" />
    </staticContent>
  <handlers>
      <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
      <remove name="OPTIONSVerbHandler" />
      <remove name="TRACEVerbHandler" />
      <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
    </handlers></system.webServer>
  <applicationSettings>
    <UserJourneyRecorderWebApp.Properties.Settings>
      <setting name="StreamFolder" serializeAs="String">
        <value>stream</value>
      </setting>
    </UserJourneyRecorderWebApp.Properties.Settings>
  </applicationSettings>
</configuration>


================================================
FILE: UserJourneyRecorder/UserJourneyRecorderWebApp/base64url_102.js
================================================
/// <summary>
/// Provides extension methods for Base64 URL encoding strings
/// </summary>

function DecodeBytesFromUrlCompliant64(input) {
    var base64PadCharacter = '=';
    var doubleBase64PadCharacter = "==";
    var base64Character62 = '+';
    var base64Character63 = '/';
    var base64UrlCharacter62 = '-';
    var base64UrlCharacter63 = '_';

    input = input.replace(
        base64UrlCharacter62,
        base64Character62);
    input = input.replace(
        base64UrlCharacter63,
        base64Character63);

    switch (input.length % 4) {
        case 0:
            break;
        case 2:
            input += doubleBase64PadCharacter;
            break;
        case 3:
            input += base64PadCharacter;
            break;

        default:
            throw ("base64 decoding error");
    }

    return res = atob(input);
}

function renderOAuthMessage(input)
{
    var segments = input.split(".");
    var result = "decoding error";
    if (segments.length === 3)
    {
        result = G_Resources.JoseHeader + ":\r\n";
        result += renderJson(DecodeBytesFromUrlCompliant64(segments[0]), true) + "\r\n\r\n";

        result += G_Resources.ClaimsSet + ":\r\n";
        result += renderJson(DecodeBytesFromUrlCompliant64(segments[1]), true) + "\r\n\r\n";

        var additional = segments[2].split(";");
        result += G_Resources.Signature + ":\r\n";
        result += additional[0] + "\r\n\r\n";

        result += G_Resources.Miscellaneous + ":\r\n";
        for (var count = 1; count < additional.length; count++)
        {
            result += additional[count] + "\r\n";
        }
    }

    return result;
}

function renderJsonMessage(string)
{
	var eomOffset = string.lastIndexOf("};");
	if (eomOffset > 0)
	{
		string = string.substring(0, eomOffset + 1);
	}

	return renderJson(string, true);
}

function renderJson(string, showError)
{
	var output = "";
	try
	{
		var jsonobj = JSON.parse(string);
		output = JSON.stringify(jsonobj, null, 2);
	}
	catch (err)
	{
		if (showError)
		{
			output = "Defective JSON string - " + err + ":\r\n";				
		}
		output += string;
	}
	
	return output;
}


================================================
FILE: UserJourneyRecorder/UserJourneyRecorderWebApp/config_102.html
================================================
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>Recorder Configuration</title>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
    <script src="config_102.js"></script>
    <script>
        $(document).ready(function () {
            if (typeof (Storage) !== "undefined") {
                // Code for localStorage/sessionStorage.
            } else {
                var checkboxDiv = document.getElementById("Checkboxes");
                checkboxDiv.innerHTML = "<b>This browser doesn't support HTML5 'localStorage' so cannot be configured.</b>";
            }
            Config_InitializeConfigUI();
        });
    </script>
    <style>
        .Checkboxes {
            padding-left: 2em;
            padding-bottom: 2em;
            padding-top: 2em;
        }
        .CheckboxClass {
            line-height: 150%;
        }
    </style>
</head>
<body>
    <h2>B2C Recorder Reader Configuration</h2>
    <div id="Checkboxes" class="Checkboxes">
        <form id="configForm"></form>
    </div>
    <button type="button" id="resetButton" onclick="Config_ResetConfig();">Reset Configuration</button>
    <button type="button" id="saveButton" onclick="Config_WriteConfig();">Save Configuration</button>
    <button type="button" id="readerButton" onclick="Config_ReturnToReader();">Return to Reader</button>
</body>
</html>


================================================
FILE: UserJourneyRecorder/UserJourneyRecorderWebApp/config_102.js
================================================
    var Config_HasChanged = false;
    var G_StreamId = "";
    var G_Version = "102";

    // variables read from the language file
    var G_StateitemKeyNames;
    var G_HandlerFriendlyNames;
    var G_HandlerDescriptions;
    var G_ComplexStatebagItems;
    var G_Resources;
    var G_HeadersTitle;
    var G_OrchestrationPreconditionTypes;
    var G_OrchestrationPreconditionActionTypes;

    var Config_AutoRefresh = false;
    var Config_SummariesTrumpSuppressions = true;
    var Config_ShowUnsuppressedRequests = false;
    var Config_ShowTransitions = false;
    var Config_ShowFullStatebag = false;
    var Config_EnablePredicateSuppression = true;
    var Config_EnableActionSuppression = true;
    var Config_EnableSuppressionOfEmptyHandlerResults = true;
    var Config_ReportEnabledTechnicalProfiles = false;
    var Config_PlaySound = false;
    var Config_Sound = "segment";
    var Config_RecorderEndpoint = "/stream";

    var Config_ConfigurationDefaults = {
        "Config_AutoRefresh": "false",
        "Config_SummariesTrumpSuppressions": "true",
        "Config_ShowUnsuppressedRequests": "false",
        "Config_ShowTransitions": "false",
        "Config_ShowFullStatebag": "false",
        "Config_EnablePredicateSuppression": "true",
        "Config_EnableActionSuppression": "true",
        "Config_EnableSuppressionOfEmptyHandlerResults": "true",
        "Config_ReportEnabledTechnicalProfiles": "false",
        "Config_PlaySound": "true",
        "Config_RecorderEndpoint": "/stream"
    };

    var Config_ConfigurationControlTypes = {
        "Config_AutoRefresh": "checkbox",
        "Config_SummariesTrumpSuppressions": "checkbox",
        "Config_ShowUnsuppressedRequests": "checkbox",
        "Config_ShowTransitions": "checkbox",
        "Config_ShowFullStatebag": "checkbox",
        "Config_EnablePredicateSuppression": "checkbox",
        "Config_EnableActionSuppression": "checkbox",
        "Config_EnableSuppressionOfEmptyHandlerResults": "checkbox",
        "Config_ReportEnabledTechnicalProfiles": "checkbox",
        "Config_PlaySound": "checkbox",
        "Config_RecorderEndpoint": "textbox"
    };

    var Config_ConfigurationControlText = {
        "Config_AutoRefresh": "The reader should start in AutoRefresh mode",
        "Config_SummariesTrumpSuppressions": "Always show a result if it contains an engine explanation",
        "Config_ShowUnsuppressedRequests": "Always show Predicate or Action requests",
        "Config_EnablePredicateSuppression": "Don't show unnecessary Predicate requests",
        "Config_EnableActionSuppression": "Don't show unnecessary Action requests",
        "Config_EnableSuppressionOfEmptyHandlerResults": "Don't show empty handler results",
        "Config_ShowTransitions": "Show state transitions",
        "Config_ShowFullStatebag": "Aways show the full the statebag rather than just deltas",
        "Config_ReportEnabledTechnicalProfiles": "Report when check on enabled technical profiles succeeds",
        "Config_PlaySound": "Play a sound when a journey segment arrives using AutoRefresh",
        "Config_RecorderEndpoint": "Recorder URL"
};

    function Config_ReadConfig() {
        setStreamId();

        if (localStorage.Config_AutoRefresh !== undefined) {
            Config_AutoRefresh = localStorage.Config_AutoRefresh === "true";
        }

        if (localStorage.Config_SummariesTrumpSuppressions !== undefined) {
            Config_SummariesTrumpSuppressions = localStorage.Config_SummariesTrumpSuppressions === "true";
        }

        if (localStorage.Config_ShowUnsuppressedRequests !== undefined) {
            Config_ShowUnsuppressedRequests = localStorage.Config_ShowUnsuppressedRequests === "true";
        }

        if (localStorage.Config_ShowTransitions !== undefined) {
            Config_ShowTransitions = localStorage.Config_ShowTransitions === "true";
        }

        if (localStorage.Config_ShowFullStatebag !== undefined) {
            Config_ShowFullStatebag = localStorage.Config_ShowFullStatebag === "true";
        }

        if (localStorage.Config_EnablePredicateSuppression !== undefined) {
            Config_EnablePredicateSuppression = localStorage.Config_EnablePredicateSuppression === "true";
        }

        if (localStorage.Config_EnableActionSuppression !== undefined) {
            Config_EnableActionSuppression = localStorage.Config_EnableActionSuppression === "true";
        }

        if (localStorage.Config_EnableSuppressionOfEmptyHandlerResults !== undefined) {
            Config_EnableSuppressionOfEmptyHandlerResults = localStorage.Config_EnableSuppressionOfEmptyHandlerResults === "true";
        }

        if (localStorage.Config_ReportEnabledTechnicalProfiles !== undefined) {
            Config_ReportEnabledTechnicalProfiles = localStorage.Config_ReportEnabledTechnicalProfiles === "true";
        }

        if (localStorage.Config_PlaySound !== undefined) {
            Config_PlaySound = localStorage.Config_PlaySound === "true";
        }

        if (localStorage.Config_RecorderEndpoint !== undefined) {
            Config_RecorderEndpoint = localStorage.Config_RecorderEndpoint;
        }
    }

    function setStreamId() {
        var stream = getParameter("id");
        G_StreamId = validateStreamId(stream);
    }

    function validateStreamId(id) {
        id = id.replace(/[^a-zA-Z0-9\-\s]/, "");
        if (id.length !== 36) {
            return "INVALID_STREAM_ID";
        }

        return id;
    }

    function getStreamUrl() {
        return Config_RecorderEndpoint + "?id=" + G_StreamId;
    }

    function configControlClicked()
    {
        Config_HasChanged = true;
    }

    function Config_InitializeConfigUI()
    {
        setStreamId();

        var keys = Object.keys(Config_ConfigurationControlText);

        var text = "";
        for (var keyCount = 0; keyCount < keys.length; keyCount++) {
            var key = keys[keyCount];
            var buttonText = Config_ConfigurationControlText[key];
            var divId = "ConfigControl_" + keyCount.toString();
            switch (Config_ConfigurationControlTypes[key])
            {
                case "checkbox":
                    text += "<div id=\"" + divId + "\" class=\"CheckboxClass\" onclick=\"configControlClicked();\">\r\n<input type=\"checkbox\" id=\"" + key + "\" name=\"" + key + "\">" + buttonText + "</input>\r\n</div>\r\n";
                    break;
                case "textbox":
                    text += "<div id=\"" + divId + "\" class=\"TextboxClass\" onclick=\"configControlClicked();\">\r\n" + buttonText + "&nbsp;<input type=\"text\" id=\"" + key + "\" name=\"" + key + "\" size=\"64\"></input>\r\n</div>\r\n";
                    break;
                default:
                    break;
            }
        }

        var element = document.getElementById("configForm");
        element.innerHTML = text;

        readConfigIntoCheckboxes();
    }

    function readConfigIntoCheckboxes()
    {
        var keys = Object.keys(Config_ConfigurationDefaults);

        var saveIsNecessary = false;
        for (var keyCount=0; keyCount < keys.length; keyCount++)
        {
            var key = keys[keyCount];
            var currentValue = localStorage.getItem(key);
            if (!currentValue)
            {
                saveIsNecessary = true;
                currentValue = Config_ConfigurationDefaults[key];
            }

            var element = document.getElementById(key);
            switch (Config_ConfigurationControlTypes[key]) {
                case "checkbox":
                    element.checked = currentValue === "true";
                    break;
                case "textbox":
                    element.value = currentValue;
                    break;
                default:
                    break;
            }

        }

        if (saveIsNecessary)
        {
            Config_WriteConfig();
        }

    }

    function Config_WriteConfig()
    {
        var keys = Object.keys(Config_ConfigurationDefaults);

        for (var keyCount = 0; keyCount < keys.length; keyCount++) {
            var key = keys[keyCount];
            var element = document.getElementById(key);
            switch (Config_ConfigurationControlTypes[key]) {
                case "checkbox":
                    localStorage.setItem(key, element.checked.toString());
                    break;
                case "textbox":
                    localStorage.setItem(key, element.value);
                    break;
                default:
                    break;
            }
        }

        Config_HasChanged = false;
    }

    function Config_ResetConfig()
    {
        var keys = Object.keys(Config_ConfigurationDefaults);

        for (var keyCount = 0; keyCount < keys.length; keyCount++) {
            var key = keys[keyCount];
            localStorage.removeItem(key);
        }

        readConfigIntoCheckboxes();
    }

    function getParameter(val) {
        var result = "Not found",
        tmp = [];
        location.search
        .substr(1).split("&").forEach(function (item) {
            tmp = item.split("=");
            if (tmp[0] === val) result = decodeURIComponent(tmp[1]);
        });
        return result;
    }

    function Config_ReturnToReader() {
        if (Config_HasChanged)
        {
            if (confirm("Do you want to save your changes before returning to the Reader?"))
            {
                Config_WriteConfig();
            }
        }

        var stream = getParameter("stream");
        document.location = "trace_" + G_Version + ".html?stream=" + stream;
    }

    function CreateXMLDocFromString(str) {
        var xmlDoc = null;
        if (window.DOMParser) {
            var parser = new DOMParser();
            xmlDoc = parser.parseFromString(str, "text/xml");
        } else if (window.ActiveXObject) {
            xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
            xmlDoc.async = false;
            xmlDoc.loadXML(str);
        }

        return xmlDoc;
    }

    function CreateXmlDocFromUrl(url) {
        if (window.ActiveXObject) {
            xhttp = new ActiveXObject("Msxml2.XMLHTTP");
        }
        else {
            xhttp = new XMLHttpRequest();
        }
        xhttp.open("GET", url, false);
        try { xhttp.responseType = "msxml-document" } catch (err) { } // Helping IE11
        xhttp.send("");
        return xhttp.responseXML;
    }

    function renderXmlMessage(str) {
        var text = "";
        str = str.replace("&", "");
        xml = CreateXMLDocFromString(str);
        xsl = CreateXmlDocFromUrl("xmltoken.xsl");
        // code for IE
        if (window.ActiveXObject || xhttp.responseType == "msxml-document") {
            text = xml.transformNode(xsl);
        }
        // code for Chrome, Firefox, Opera, etc.
        else if (document.implementation && document.implementation.createDocument) {
            xsltProcessor = new XSLTProcessor();
            xsltProcessor.importStylesheet(xsl);
            text = xsltProcessor.transformToFragment(xml, document);
        }
    }

    function Config_ReadLanguage() {
        var url = "languages/en-us_" + G_Version + ".json";
        $.get(url, processLoadLanguage, "json");
    }

    function processLoadLanguage(languageElements, status, jqXHR) {
        var languageContent = eval(languageElements);

        G_StateitemKeyNames = languageContent.G_StateitemKeyNames;
        G_HandlerFriendlyNames = languageContent.G_HandlerFriendlyNames;
        G_HandlerDescriptions = languageContent.G_HandlerDescriptions;
        G_ComplexStatebagItems = languageContent.G_ComplexStatebagItems;
        G_Resources = languageContent.G_Resources;
        G_HeadersTitle = languageContent.G_HeadersTitle;
        G_OrchestrationPreconditionTypes = languageContent.G_OrchestrationPreconditionTypes;
        G_OrchestrationPreconditionActionTypes = languageContent.G_OrchestrationPreconditionActionTypes;

        // Due to a side-effect of the $get behavior this config needs to happen after 
        // values are loaded and this works
        InitializeRefreshMode();
    }





================================================
FILE: UserJourneyRecorder/UserJourneyRecorderWebApp/languages/en-us_102.json
================================================
{
    "G_StateitemKeyNames": {
        "ORCH_CS": "Orchestration Step",
        "RPP": "Protocol selected by the caller",
        "RQCTX": "Request Context String",
        "RPIPP": "Communications with the caller handled by",
        "TAGE": "Target entity",
        "IPP": "Claims provider protocol provider type",
        "CMESSAGE": "Current message Id",
        "IMESSAGE": "Id of the message initially sent by the calling application",
        "CLIENTID": "Client Id"
    },

    "G_HandlerFriendlyNames": {
        "Web.TPEngine.StateMachineHandlers.MessageValidationHandler": "Performing MessageValidation",
        "Web.TPEngine.StateMachineHandlers.IsClaimsExchangeProtocolARedirectionHandler": "Initiating a claims exchange",
        "Web.TPEngine.StateMachineHandlers.IsClaimsExchangeProtocolAServiceCallHandler": "Initiating a claims exchange",
        "Web.TPEngine.StateMachineHandlers.PresentationTokenGenerationHandler": "Generating claims for the application",
        "Web.TPEngine.StateMachineHandlers.OutputClaimsTransformationHandler": "Processing the exchange's output claims",
        "Web.TPEngine.StateMachineHandlers.InputClaimsTransformationHandler": "Processing the exchange's input claims",
        "Web.TPEngine.StateMachineHandlers.PersistedClaimsTransformationHandler": "Processing the exchange's persisted claims",
        "Web.TPEngine.StateMachineHandlers.SendRequestHandler": "Sending the claims exchange request",
        "Web.TPEngine.StateMachineHandlers.ValidateApiResponseHandler": "Validating journey Api response",
        "Web.TPEngine.StateMachineHandlers.SendResponseHandler": "Sending the response to the application",
        "Web.TPEngine.Api.ApiUIManager": "Api UI manager"
    },

    "G_HandlerDescriptions": {
        "MessageValidationHandler": "Analyses an incoming message to ensure it is valid in the communication context",
        "SecondHandler": "Second Description"
    },

    "G_ComplexStatebagItems": {
        "Complex-CLMS": "Claims",
        "Complex-API_RESULT": "Journey Api Result",
        "Complex-API_SETTINGS": "Journey Api Settings"
    },

    "G_Resources": {
        "AutoRefresh": "Auto Refresh",
        "JourneySegment": "Journey Segment",
        "Refresh": "Refresh",
        "StreamDeletion": "Stream Deletion",
        "DeletionSuccessful": "Deletion was successful",
        "CorrelationId": "Correlation Id",
        "TenantId": "Tenant Id",
        "PolicyId": "Policy Id",
        "UserJourneyRecorderEndpoint": "User journey recorder endpoint",
        "Transition": "Transition",
        "StateName": "StateName",
        "EventName": "EventName",
        "Predicate": "Predicate",
        "Action": "Action",
        "Result": "Result",
        "UnknownRequest": "Unknown request - ",
        "IsPreparing": "is preparing",
        "Message": "Message",
        "MessageDetail": "Message Detail",
        "FatalException": "Fatal Exception",
        "Exception":  "Exception:",
        "Time": "Time",
        "UnknownTrace": "Unknown Trace",
        "ExecutingStep": "Executing Step",
        "MessageSubmittedBy": "The message was received from {0}",
        "TheApplication": "the calling application",
        "AndConjunction": "and",
        "Equals":  "equals",
        "SkipStep":  "Skip step",
        "DontSkipStep": "Don't skip step",
        "IfClaimsPresent": "{0} if {1} claims are present",
        "IfClaimsEqual": "{0} if {1} are equal",
        "SkippingStep": "Skipping step {0}",
        "SendingRequest": "Claims exchange target: {0}",
        "MappingPartnerClaim": "Mapping '{0}' partner claim type to '{1}' policy claim type",
        "InitiatingClaimsExchange": "Preparing a {0} request for {1} using the {2} technical profile and the {3}",
        "InitiatingBackendClaimsExchange":  "Initiating a request for claims using the {0} technical profile and the {1}",
        "IsEnabled": "is enabled",
        "IsDisabled": "is disabled",
        "TechnicalProfileEnabled": "Technical profile {0} {1} - configured as {2}",
        "LogicDetail": "Logic Detail",
        "EnabledForUserJourneysTrue":  "Technical profiles enabled that allow step {0} to proceed",
        "EnabledForUserJourneysFalse": "Step {0} will be skipped because technical profiles are disabled",
        "HomeRealmDiscovery":  "Technical profiles enabled that allow step {0} to proceed",
        "PreconditionList": "Journey logic has been applied",
        "NoClaimMappingNeeded": "No claim mapping needed for {0}",
        "MappingFromPartnerClaimType": "Mapping partner '{0}' to policy '{1}'",
        "MappingToPartnerClaimType": "Mapping policy '{0}' to partner '{1}'",
        "MappingDefaultValueForClaim": "Mapping default value '{0}' to policy '{1}'",
        "ClaimsTransformationId": "'{0}' Claims Transformation:",
        "TransformationInputClaim":  "Input claim: policy '{0}' with value '{1}'",
        "TransformationInputParameter":  "Input parameter: '{0}' with value '{1}'",
        "TransformationResult":  "Output claim: 'policy {0}' with value '{1}'",
        "OutputClaimsTransformation": "Claims mappings or transformations have been applied",
        "GettingClaimsTransformation": "Details of logic getting claims",
        "JoseHeader": "JOSE Header",
        "ClaimsSet": "Claims Set",
        "Signature": "Signature",
        "Miscellaneous": "Miscellaneous",
        "ApiUIManagerInfo": "The {0} UI Api was invoked",
        "ApiDetail": "Api Detail",
        "ProtocolProviderType":   "Validation via {0}",
		"TechnicalProfileId":  "OperativeTechnicalProfile is {0}",
		"ValidationRequestUrl":  "Using validation endpoint at: {0}",
		"RequestEndpointUrl":  "Issuing request to endpoint at: {0}",
		"ErrorResponseReceived":  "Error response received: {0}",
        "AdditionalValidation": "Additional validation is required...",
        "SendErrorTechnicalProfile": "An error response is being sent to the application using {0}",
        "OAuth1RequestInfo": "Requesting OAuth1 access token using {0} from {1}",
        "AuthorizationEndpoint": "Authorization endpoint: {0}",
        "CallbackUri": "Callback uri: {0}",
        "ClientId": "Client Id: {0}",
        "Response": "Response",
        "Request":  "Request"
    },

    "G_OrchestrationPreconditionTypes": [
        "ClaimsExist",
        "ClaimsEquals"
    ],

    "G_OrchestrationPreconditionActionTypes": [
        "SkipThisOrchestrationStep"
    ],

    "G_HeadersTitle": "Journey Segment"
}

================================================
FILE: UserJourneyRecorder/UserJourneyRecorderWebApp/packages.config
================================================
<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="Microsoft.AspNet.WebApi.Client" version="5.2.3" targetFramework="net452" />
  <package id="Microsoft.AspNet.WebApi.Core" version="5.2.3" targetFramework="net452" />
  <package id="Microsoft.CodeDom.Providers.DotNetCompilerPlatform" version="1.0.0" targetFramework="net452" />
  <package id="Microsoft.Net.Compilers" version="1.0.0" targetFramework="net452" developmentDependency="true" />
  <package id="Newtonsoft.Json" version="6.0.4" targetFramework="net452" />
</packages>

================================================
FILE: UserJourneyRecorder/UserJourneyRecorderWebApp/trace_102.css
================================================
.KindColumn {
    width: 300px;
    padding-left: 15px;
    padding-right: 15px;
    font-size: 120%;
}

.Headers {
    background-color: #ecf9ec;
    width: 100%;
}

.Headers_c2 {
    padding-left: 15px;
}

.Transition {
    width: 100%;
}

.Transition_c2 {
    padding-left: 15px;
}

.Predicate {
    background-color: #e5ffe5;
    width: 100%;
}

.Predicate_c2 {
    padding-left: 15px;
}

.Action {
    background-color: #e5f2ff;
    width: 100%;
}

.Action_c2 {
    padding-left: 15px;
}

.HandlerResult {
    background-color: #F8F8F8;
    width: 100%;
}

.HandlerResult_c2 {
    padding-left: 15px;
    padding-bottom: 15px;
}

.Complex-CLMS {
	background-color: #ffffcc;
	padding-left: 1em;
	padding-right: 1em;
}

.newInfo, .Complex-API_SETTINGS, .Complex-API_RESULT {
    font-family: monospace;
    font-weight: normal;
    color: black;
    font-size: 80%;
}

.seenInfo {
    font-family: monospace;
    font-weight: normal;
    color: black;
    font-size: 80%;
}

.Claims {
    font-family: monospace;
    padding-left: 20px;
    padding-right: 50px;
    padding-top: 15px;
    background-color:  #ffffff;
    margin-bottom: 15px;
    border-style: solid;
    border-color: white;
    border-width: 15px;
}

.FatalException {
    background-color: red;
    width: 100%;
}

.FatalException_c2 {
    padding-left: 15px;
}

.ExceptionDetail {
    font-style: italic;
    color: white;
}

.Exception {
	padding-top: 1em;
	padding-bottom: 1em;
    background-color: yellow;
    width: 100%;	
    font-style: italic;
}

.ExecutingStep {
    background-color: #339933;
    color: #ffffff;
}

.HiddenToken {
    background-color: green;
    visibility: hidden;
}

.ValidationTechnicalProfile {
	background-color:  #E8E8E8;
	padding: 1em;
}

.TokenButton {
   border-top: 1px solid #b3b3b3;
   background: black;
   background: -webkit-gradient(linear, left top, left bottom, from(#ffffff), to(#ebebeb));
   background: -webkit-linear-gradient(top, #ffffff, #ebebeb);
   background: -moz-linear-gradient(top, #ffffff, #ebebeb);
   background: -ms-linear-gradient(top, #ffffff, #ebebeb);
   background: -o-linear-gradient(top, #ffffff, #ebebeb);   
   padding: 4.5px 9px;
   -webkit-border-radius: 6px;
   -moz-border-radius: 6px;
   border-radius: 6px;
   -webkit-box-shadow: rgba(0,0,0,1) 0 1px 0;
   -moz-box-shadow: rgba(0,0,0,1) 0 1px 0;
   box-shadow: rgba(0,0,0,1) 0 1px 0;
   text-shadow: rgba(0,0,0,.4) 0 1px 0;
   color: #175404;
   font-size: 13px;
   font-family: 'Lucida Grande', Helvetica, Arial, Sans-Serif;
   text-decoration: none;
   vertical-align: middle;
   }
 .TokenButton:hover {
   border-top-color: #b3b3b3;
   background: #e0e0e0;
   color: #175404;
   }
 .TokenButton:active {
   border-top-color: #2a3842;
   background: #2a3842;
   }

.InfoButton {
   border-top: 1px solid #7dbd7d;
   background: #4fb04f;
   background: -webkit-gradient(linear, left top, left bottom, from(#267526), to(#4fb04f));
   background: -webkit-linear-gradient(top, #267526, #4fb04f);
   background: -moz-linear-gradient(top, #267526, #4fb04f);
   background: -ms-linear-gradient(top, #267526, #4fb04f);
   background: -o-linear-gradient(top, #267526, #4fb04f);
   padding: 4.5px 9px;
   -webkit-border-radius: 6px;
   -moz-border-radius: 6px;
   border-radius: 6px;
   -webkit-box-shadow: rgba(0,0,0,1) 0 1px 0;
   -moz-box-shadow: rgba(0,0,0,1) 0 1px 0;
   box-shadow: rgba(0,0,0,1) 0 1px 0;
   text-shadow: rgba(0,0,0,.4) 0 1px 0;
   color: white;
   font-size: 13px;
   font-family: 'Lucida Grande', Helvetica, Arial, Sans-Serif;
   text-decoration: none;
   vertical-align: middle;
   }
 .InfoButton:hover {
   border-top-color: #339933;
   background: #267526;
   color: #white;
   }
 .InfoButton:active {
   border-top-color: #2a3842;
   background: #2a3842;
   }

================================================
FILE: UserJourneyRecorder/UserJourneyRecorderWebApp/trace_102.html
================================================
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>User Journey Player</title>
    <link rel="stylesheet" type="text/css" href="trace_102.css" /> 
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
    <script src="config_102.js"></script>
    <script src="base64url_102.js"></script>
    <script>
        $(document).ready(function () {

            Config_ReadConfig();

            Config_ReadLanguage();            
        });

        var G_StatebagTruth = [];
        var G_StatebagLastShown = [];
        var G_RequestKind = "";
        var G_RequestDetail = "";
        var G_HtmlIdCounter = 1;
        var G_TokenContents = new Array();
        var G_SuppressDisplay = false;  // set in ProcessPredicate and Action then used in HandlerResult
        var G_SummaryDetails = new Array();
        var G_DictionaryMoniker = "System.Collections.Generic.Dictionary";
        var G_DictionaryMonikerLength = G_DictionaryMoniker.length;
        var G_LastCorrelationId = "";
        var G_2linefeeds = "\r\n\r\n";
        var G_linefeed = "\r\n";

        var G_PredicateSuppressions = [
            "Web.TPEngine.StateMachineHandlers.NoOpHandler",
            "Web.TPEngine.SSO.IsSSOSessionParticipantHandler",
            "Web.TPEngine.StateMachineHandlers.ShouldOrchestrationStepBeInvokedHandler",
            "Web.TPEngine.StateMachineHandlers.IsClaimsExchangeProtocolARedirectionHandler",
            "Web.TPEngine.StateMachineHandlers.IsClaimsExchangeProtocolAServiceCallHandler",
            "Web.TPEngine.StateMachineHandlers.IsClaimsExchangeProtocolAnApiHandler",
            "Web.TPEngine.StateMachineHandlers.IsPresentationTokenGeneratedHandler",
            "Web.TPEngine.StateMachineHandlers.CrossSiteRequestForgeryValidationHandler"
        ];

        var G_ActionSuppressions = [
            "Web.TPEngine.SSO.ResetSSOSessionHandler",
            "Web.TPEngine.StateMachineHandlers.RequestTracingHandler",
            "Web.TPEngine.StateMachineHandlers.PreSetupHandler",
            "Web.TPEngine.StateMachineHandlers.ClaimsExchangeCleanupHandler",
            "Web.TPEngine.StateMachineHandlers.SpecialCaseClaimsExchangeCleanupHandler",
            "Web.TPEngine.SSO.SSOSessionHandler",
            "Web.TPEngine.SSO.ActivateSSOSessionHandler",
            "Web.TPEngine.StateMachineHandlers.TransactionEndHandler",
            "Web.TPEngine.StateMachineHandlers.SigninSignUpApiLoadHandler"
        ];

        var G_StatebagSuppressions = [
            "$type",
            "MACHSTATE",
			"EID",
            "TID",
            "PID",
            "IPP",
            "RQCTX",
            "Complex-CLMS",
            "Complex-API_SETTINGS",
            "Complex-API_RESULT",
            "ComplexItems",
            "OTID",
            "JC",
            "APIURL",
            "CLIENTID",
            "CMESSAGE",
            "IMESSAGE"
        ];

        var G_ExceptionsToSkip =  [
            "Please see the HTTP response returned by the 'Response' property of this exception for details"
        ];


        function Clip(kind, content) {
            this.kind = kind;
            this.content = content;
        }

        function InitializeRefreshMode()
        {
            if (Config_AutoRefresh) {
                var actionButton = document.getElementById("refreshActionButton");
                actionButton.innerText = G_Resources.AutoRefresh;
                actionButton.enabled = false;
                document.getElementById("DeleteStreamButton").style.visibility = "hidden";
                retrieveRecording();
            }
        }

        function ToggleRefreshMode()
        {
            var actionButton = document.getElementById("refreshActionButton");
            if (Config_AutoRefresh) {
                Config_AutoRefresh = false;
                actionButton.innerText = G_Resources.Refresh;
                actionButton.disabled = false;
                document.getElementById("DeleteStreamButton").style.visibility = "visible";
            }
            else
            {
                Config_AutoRefresh = true;
                actionButton.innerText = G_Resources.AutoRefresh;
                actionButton.disabled = true;
                document.getElementById("DeleteStreamButton").style.visibility = "hidden";
                retrieveRecording();
            }
        }

        function ManualRefresh()
        {
            retrieveRecording();
        }

        function retrieveRecording()
        {
            var url = getStreamUrl();
            if (!Config_AutoRefresh)
            {
                url += "&autodelete=false";
            }

            $.get(url, processRecording, "text");

            if (Config_AutoRefresh) {
                window.setTimeout(retrieveRecording, 2000);
            }
        }

        function DeleteStream()
        {
            var url = getStreamUrl();
            $.get(url, processStreamDelete, "text");
        }

        function processStreamDelete()
        {
            G_StatebagTruth = [];
            G_StatebagLastShown = [];
            window.location.reload(true);
        }

        function processRecording(recording, status, jqXHR) {
            if (recording !== undefined) {
                var journeySegments = recording.split("\r\n]");
                for (var segmentCount = 0; segmentCount < journeySegments.length; segmentCount++) {
                    if (journeySegments[segmentCount].length === 0) {
                        continue;
                    }

                    // hydrate the clips in a journey segment
                    var clips = eval("(" + journeySegments[segmentCount] + "])");
                    for (var clipCount = 0; clipCount < clips.length; clipCount++) {
                        var clip = clips[clipCount];
                        switch (clip.Kind) {
                            case "Headers":
                                ProcessHeaders(clip);
                                break;

                            case "Transition":
                                ProcessTransition(clip);
                                break;

                            case "Predicate":
                                ProcessPredicate(clip);
                                break;

                            case "Action":
                                ProcessAction(clip);
                                break;

                            case "HandlerResult":
                                ProcessHandlerResult(clip);
                                break;

                            case "FatalException":
                                ProcessFatalException(clip);
                                break;

                            default:
                                ProcessUnrecognized(clip)
                                break;
                        }
                    }

                    if (Config_PlaySound && Config_AutoRefresh) {
                        var audio = new Audio('sounds/' + Config_Sound + '.mp3');
                        audio.play();
                    }
                }
            }
        }

        function GetPresentationRow(kind, rowTitle)
        {
            var table = document.getElementById("ClipTable");
            var rowCount = table.rows.length;
            var row = table.insertRow(rowCount);

            row.className = kind;
            var cell1 = row.insertCell(0);
            cell1.className = "KindColumn";
            cell1.innerHTML = rowTitle;

            var cell2 = row.insertCell(1);
            cell2.className = kind + "_c2";
            return (cell2);
        }

        function ProcessHeaders(clip)
        {
            G_StatebagTruth = [];
            var cell2 = GetPresentationRow(clip.Kind, G_HeadersTitle);
            var headers = clip.Content;
            var text = "";
            text += OutputValue(headers.EventInstance);

            if (headers.CurrentOrchestrationStep === undefined) {
                G_StatebagLastShown = [];
                G_LastCorrelationId = "";
            }

            if (headers.CorrelationId !== G_LastCorrelationId)
            {
                text += OutputKeyValue(G_Resources.CorrelationId, headers.CorrelationId);
                text += OutputKeyValue(G_Resources.TenantId, headers.TenantId);
                text += OutputKeyValue(G_Resources.PolicyId, headers.PolicyId);
                text += OutputKeyValue(G_Resources.UserJourneyRecorderEndpoint, headers.UserJourneyRecorderEndpoint);
                G_LastCorrelationId = headers.CorrelationId;
            }

            text += renderHeaderThatIsStatebagElement("ORCH_CS", headers.CurrentOrchestrationStep);
            text += renderHeaderThatIsStatebagElement("TAGE", headers.TargetEntity);
            text += renderHeaderThatIsStatebagElement("IPP", headers.ClaimsProviderProtocolProviderType);

            cell2.innerHTML = text;
        }

        function renderHeaderThatIsStatebagElement(key, value)
        {
            var text = "";
            if (value !== undefined)
            {
                text = OutputKeyValue(stateitemKeyFriendlyName(key), value);
                G_StatebagLastShown[key] = new Item(key, value);
            }

            return text;
        }

        function Item(key, value)
        {
            this.k;
            this.p = key;
            this.v = value;
        }

        function OutputKeyValue(key, value)
        {
            var result = "<p>" + key + ": " + value + "</p>\r\n";
            return result;
        }

        function OutputValue(value) {
            var result = "<p>" + value + "</p>\r\n";
            return result;
        }

        function ProcessTransition(clip)
        {
            if (Config_ShowTransitions)
            {
                var cell2 = GetPresentationRow(clip.Kind, G_Resources.Transition);
                var text = "";
                text += OutputKeyValue(G_Resources.StateName, clip.Content.StateName);
                text += OutputKeyValue(G_Resources.EventName, clip.Content.EventName);
                cell2.innerHTML = text;
            }
        }

        function ProcessPredicate(clip)
        {
            G_RequestKind = clip.Kind;
            G_RequestDetail = clip.Content;
            if (Config_EnablePredicateSuppression && G_PredicateSuppressions.indexOf(clip.Content) >= 0) {
                G_SuppressDisplay = true;
            }
            else {
                G_SuppressDisplay = false;

                if (Config_ShowUnsuppressedRequests) {
                    var cell2 = GetPresentationRow(clip.Kind, G_Resources.Predicate);
                    var text = "";
                    text += OutputKeyValue(G_Resources.Predicate, clip.Content);
                    cell2.innerHTML = text;
                }
            }
        }

        function ProcessAction(clip)
        {
            G_RequestKind = clip.Kind;
            G_RequestDetail = clip.Content;
            if (Config_EnableActionSuppression && G_ActionSuppressions.indexOf(clip.Content) >= 0) {
                G_SuppressDisplay = true;
            }
            else
            {
                G_SuppressDisplay = false;

                if (Config_ShowUnsuppressedRequests)
                {
                    var cell2 = GetPresentationRow(clip.Kind, G_Resources.Action);
                    var text = "";
                    text += OutputKeyValue(G_Resources.Action, clip.Content);
                    cell2.innerHTML = text;
                }
            }
        }

        function ProcessHandlerResult(clip)
        {
            var statebagContent = false;
            if (clip.Content.Statebag !== undefined) {
                statebagContent = hydrateStatebagTruth(clip);
            }

            if (G_SuppressDisplay)
            {
                if (!Config_SummariesTrumpSuppressions || clip.Content.RecorderRecord === undefined)
                {
                    return;
                }
            }

            if (SpecializedResultProcessing(G_RequestDetail, clip))
            {
                return;
            }

            var idtext = "";
            var friendlyName = handlerFriendlyName(G_RequestDetail);
            var resultTitle;

            switch (G_RequestKind)
            {
                case "Action":
                    resultTitle = G_Resources.Result;

                    idtext += OutputValue(friendlyName);
                    idtext += renderHandlerDescription(G_RequestDetail);
                    break;

                case "Predicate":
                    resultTitle = G_Resources.Result;
                    idtext += OutputValue(friendlyName);
                    idtext += renderHandlerDescription(G_RequestDetail);
                    break;

                default:
                    resultTitle = G_Resources.UnknownRequest + G_RequestKind;
                    break;
            }

            var text = "";
            if (clip.Content.RecorderRecord !== undefined)
            {
                text += ProcessRecorderRecord(clip.Content.RecorderRecord);
            }

            if (statebagContent)
            {
                text += getPresentationDelta(clip);
            }

            if (clip.Content.Exception !== undefined)
            {
                text += "<div class=\"Exception\"><p>" + stringFormat(G_Resources.Exception, [null]) + "</p>";
                text += renderException(clip.Content.Exception);
                text += "</div>";
            }

            if (text.length === 0)
            {
                if (Config_EnableSuppressionOfEmptyHandlerResults)
                {
                    return;
                }
            }

            var cell2 = GetPresentationRow(clip.Kind, resultTitle);
            cell2.innerHTML = idtext + text;
        }

        function ProcessRecorderRecord(recorderRecord)
        {
            var text = "";

            if (recorderRecord === undefined || recorderRecord.Values === undefined)
            {
                return text;
            }

            for (var infoCount=0; infoCount < recorderRecord.Values.length; infoCount++)
            {
                var info = recorderRecord.Values[infoCount];
                switch (info.Key)
                {
                    case "Validation":
                        var details = "";
                        for (var count = 0; count < info.Value.Values.length; count++) {
                            var item = info.Value.Values[count];
                            switch (item.Key) {
                                case "SubmittedBy":
                                    var sender = item.Value;
                                    if (sender === "Application") {
                                        sender = G_Resources.TheApplication;
                                    }

                                    text += "<p>" + stringFormat(G_Resources.MessageSubmittedBy, [sender]) + "</p>";
                                    break;

                                case "ProtocolProviderType":
                                    text += "<p>" + stringFormat(G_Resources.ProtocolProviderType, [item.Value]) + "</p>";
                                    break;
									
								case "ValidationTechnicalProfile":
                                    text += "<p>" + stringFormat(G_Resources.AdditionalValidation, [null]) + "</p>";
									text += "<div class=\"ValidationTechnicalProfile\">"
												+ ProcessRecorderRecord(item.Value) + "</div>";
                            }
                        }

                        if (details.length > 0)
                        {
                            var htmlId = "HtmlId_" + G_HtmlIdCounter++;
                            G_SummaryDetails[htmlId] = details;
                            text += "<p  class=\"ExecutingStep\">" + G_Resources.PreconditionList + ": &nbsp;<button type=\"button\" class=\"InfoButton\" onclick=\"populateSummaryDetailsDiv('" + htmlId + "');\">" + G_Resources.LogicDetail + "</button> </p>";
                            text += "<div id=\"" + htmlId + "\"></div>";
                        }
                        break;

                    case "PreconditionList":
                        var details = "";
                        for (var count = 0; count < info.Value.Values.length; count++)
                        {
                            var key = info.Value.Values[count].Key;
                            if (key === "Precondition")
                            {
                                var precondition = info.Value.Values[count].Value;
                                var claimNames = "";

                                // if claims are present
                                for (var claimCount = 0; claimCount < precondition.Values.length; claimCount++) {
                                    if (claimCount > 0) {
                                        claimNames += " " + G_Resources.AndConjunction + " ";
                                    }

                                    claimNames += precondition.Values[claimCount];
                                }

                                var intent = getIntent(precondition.ExecuteActionsIf);

                                if (precondition.Type === 0) {
                                    details += stringFormat(G_Resources.IfClaimsPresent, [intent, claimNames]) + G_linefeed;
                                }
                                else if (precondition.Type === 1) {
                                    details += stringFormat(G_Resources.IfClaimsEqual, [intent, claimNames]) + G_linefeed;
                                }
                            }
                            else if (key === "SkippingStep")
                            {
                                var value = info.Value.Values[count].Value;
                                details += stringFormat(G_Resources.SkippingStep, [value]) + G_linefeed;
                            }
                        }

                        var htmlId = "HtmlId_" + G_HtmlIdCounter++;
                        G_SummaryDetails[htmlId] = details;
                        text += "<p  class=\"ExecutingStep\">" + G_Resources.PreconditionList + ": &nbsp;<button type=\"button\" class=\"InfoButton\" onclick=\"populateSummaryDetailsDiv('" + htmlId + "');\">" + G_Resources.LogicDetail + "</button> </p>";
                        text += "<div id=\"" + htmlId + "\"></div>";
                        break;

                    case "InitiatingClaimsExchange":
                        text += "<p>" + stringFormat(G_Resources.InitiatingClaimsExchange, 
                            [info.Value.ProtocolType, info.Value.TargetEntity, 
                                info.Value.TechnicalProfileId, info.Value.ProtocolProviderType 
                            ]) + "</p>";
                        break;

                    case "InitiatingBackendClaimsExchange":
                        text += "<p>" + stringFormat(G_Resources.InitiatingBackendClaimsExchange,
                            [info.Value.TechnicalProfileId, info.Value.ProtocolProviderType
                            ]) + "</p>";
                        break;

                    case "OAuth1RequestInfo":
                        var details = "";
                        details += stringFormat(G_Resources.OAuth1RequestInfo, [info.Value.TechnicalProfileId, info.Value.AccessTokenEndpoint]) + G_2linefeeds;
                        details += stringFormat(G_Resources.AuthorizationEndpoint, [info.Value.AuthorizationEndpoint]) + G_2linefeeds;
                        details += stringFormat(G_Resources.CallbackUri, [info.Value.CallbackUri]) + G_2linefeeds;
                        details += stringFormat(G_Resources.ClientId, [info.Value.ClientId]) + G_linefeed;

                        var htmlId = "HtmlId_" + G_HtmlIdCounter++;
                        G_SummaryDetails[htmlId] = details;
                        text += "<p><button type=\"button\" class=\"TokenButton\" onclick=\"populateSummaryDetailsDiv('" + htmlId + "');\">" + G_Resources.Request + "</button> </p>";
                        text += "<div id=\"" + htmlId + "\"></div>";
                        break;

                    case "MappingPartnerTypeForClaim":
                        if (info.Value.PartnerClaimType !== info.Value.PolicyClaimType)
                        {
                            text += "<p>" + stringFormat(G_Resources.MappingPartnerClaim, [info.Value.PartnerClaimType, info.Value.PolicyClaimType]) + "</p>";
                        }
                        break;

                    case "MappingDefaultValueForClaim":
                        text += "<p>" + stringFormat(G_Resources.MappingDefaultValueForClaim, [info.Value.DefaultValue, info.Value.PolicyClaimType]) + "</p>";
                        break;

                    case "Response":
                        var htmlId = "HtmlId_" + G_HtmlIdCounter++;
                        G_SummaryDetails[htmlId] = info.Value + G_linefeed;
                        text += "<p><button type=\"button\" class=\"TokenButton\" onclick=\"populateSummaryDetailsDiv('" + htmlId + "');\">" + G_Resources.Response + "</button> </p>";
                        text += "<div id=\"" + htmlId + "\"></div>";
                        break;

                    case "SkippingStep":
                        text += "<p>" + stringFormat(G_Resources.SkippingStep, [info.Value]) + "</p>";
                        break;

                    case "SendingRequest":
                        text += "<p>" + stringFormat(G_Resources.SendingRequest, [info.Value]) + "</p>";
                        break;

                    case "HomeRealmDiscovery":
                    case "EnabledForUserJourneysTrue":
                    case "EnabledForUserJourneysFalse":
                        if (info.Key === "EnabledForUserJourneysFalse" || Config_ReportEnabledTechnicalProfiles) {
                            var details = "";
                            var currentStep = 0;
                            for (var count = 0; count < info.Value.Values.length; count++) {
                                var profile = info.Value.Values[count].Value;
                                if (count === 0)
                                {
                                    currentStep = profile;
                                    continue;
                                }

                                var enabled;
                                if (profile.EnabledResult === true) {
                                    enabled = G_Resources.IsEnabled;
                                }
                                else {
                                    enabled = G_Resources.IsDisabled;
                                }

                                details += stringFormat(G_Resources.TechnicalProfileEnabled,
                                    [profile.TechnicalProfile, enabled, profile.EnabledRule]) + G_linefeed;
                            }

                            var htmlId = "HtmlId_" + G_HtmlIdCounter++;
                            G_SummaryDetails[htmlId] = details;
                            var explanation = stringFormat(G_Resources[info.Key], [currentStep]);
                            text += "<p  class=\"newInfo\">" + explanation + ": <button type=\"button\" class=\"TokenButton\" onclick=\"populateSummaryDetailsDiv('" + htmlId + "');\">" + G_Resources.LogicDetail + "</button> </p>";
                            text += "<div id=\"" + htmlId + "\"></div>";
                        }
                        break;

                    case "GettingClaims":
                        var details = "";
                        for (var count = 0; count < info.Value.Values.length; count++) {
                            var key = info.Value.Values[count].Key;
                            var mapping = info.Value.Values[count].Value;
                            switch (key) {
                                case "InitiatingBackendClaimsExchange":
                                    text += stringFormat(G_Resources.InitiatingBackendClaimsExchange,
                                        [mapping.TechnicalProfileId, mapping.ProtocolProviderType]) + G_linefeed;
                                    break;

                                case "RequestEndpointUrl":
                                    details += stringFormat(G_Resources.RequestEndpointUrl, [mapping]) + G_2linefeeds;
                                    break;

                                case "MappingFromPartnerClaimType":
                                    details += stringFormat(G_Resources.MappingFromPartnerClaimType,
                                        [mapping.PartnerClaimType, mapping.PolicyClaimType]) + G_2linefeeds;
                                    break;

                                case "MappingToPartnerClaimType":
                                    details += stringFormat(G_Resources.MappingToPartnerClaimType,
                                        [mapping.PolicyClaimType, mapping.PartnerClaimType]) + G_2linefeeds;
                                    break;

                                case "MappingDefaultValueForClaim":
                                    details += stringFormat(G_Resources.MappingDefaultValueForClaim,
                                        [mapping.DefaultValue, mapping.PolicyClaimType]) + G_2linefeeds;
                                    break;

                                default:
                                    alert("Undefined key " + key);
                                    break;
                            }
                        }

                        if (details.length > 0)
                        {
                            var htmlId = "HtmlId_" + G_HtmlIdCounter++;
                            G_SummaryDetails[htmlId] = details;
                            var explanation = stringFormat(G_Resources.GettingClaimsTransformation, [null]);
                            text += "<p  class=\"newInfo\">" + explanation + ": <button type=\"button\" class=\"TokenButton\" onclick=\"populateSummaryDetailsDiv('" + htmlId + "');\">" + G_Resources.LogicDetail + "</button> </p>";
                            text += "<div id=\"" + htmlId + "\"></div>";
                        }
                        break;

                    case "MappingToPartnerClaimType":
                        var mapping = info.Value;
                        text += stringFormat(G_Resources.MappingToPartnerClaimType,
                            [mapping.PolicyClaimType, mapping.PartnerClaimType]) + G_linefeed;
                        break;

                    case "OutputClaimsTransformation":
                        var details = "";
                        for (var count = 0; count < info.Value.Values.length; count++) {
                            var key = info.Value.Values[count].Key;
                            var mapping = info.Value.Values[count].Value;
                            switch (key) {
                                case "MappingFromPartnerClaimType":
                                    details += stringFormat(G_Resources.MappingFromPartnerClaimType,
                                        [mapping.PartnerClaimType, mapping.PolicyClaimType]) + G_linefeed;
                                    break;

                                case "MappingDefaultValueForClaim":
                                    details += stringFormat(G_Resources.MappingDefaultValueForClaim,
                                        [mapping.DefaultValue, mapping.PolicyClaimType]) + G_linefeed;
                                    break;

                                case "MappingPartnerTypeForClaim":
                                    break;

                                case "ClaimsTransformation":
                                    for (var ctCount = 0; ctCount < mapping.Values.length; ctCount++)
                                    {
                                        var field = mapping.Values[ctCount];
                                        switch (field.Key)
                                        {
                                            case "Id":
                                                details += G_linefeed + stringFormat(G_Resources.ClaimsTransformationId,
                                                    [field.Value]) + G_linefeed;
                                                break;

                                            case "InputClaim":
                                                var claim = field.Value;
                                                details += stringFormat(G_Resources.TransformationInputClaim, [claim.PolicyClaimType, claim.Value]) + G_linefeed;
                                                break;

                                            case "InputParameter":
                                                var parameter = field.Value;
                                                details += stringFormat(G_Resources.TransformationInputParameter, [parameter.Id, parameter.Value]) + G_linefeed;
                                                break;

                                            case "Result":
                                                var claim = field.Value;
                                                details += stringFormat(G_Resources.TransformationResult, [claim.PolicyClaimType, claim.Value]) + G_linefeed;
                                                break;

                                        }
                                    }

                                    break;
                            }
                        }

                        var htmlId = "HtmlId_" + G_HtmlIdCounter++;
                        G_SummaryDetails[htmlId] = details;
                        var explanation = stringFormat(G_Resources.OutputClaimsTransformation, [null]);
                        text += "<p  class=\"newInfo\">" + explanation + ": <button type=\"button\" class=\"TokenButton\" onclick=\"populateSummaryDetailsDiv('" + htmlId + "');\">" + G_Resources.LogicDetail + "</button> </p>";
                        text += "<div id=\"" + htmlId + "\"></div>";
                        break;

                    case "ApiUiManagerInfo":
                        var details = "";
                        var apiName = "";
                        for (var count = 0; count < info.Value.Values.length; count++) {
                            var key = info.Value.Values[count].Key;
                            var json = info.Value.Values[count].Value;
                            switch (key) {
                                case "Settings":
                                    var settings = eval("(" + json + ")");
                                    apiName = settings === undefined || settings.api === undefined ? "Api" : settings.api;
                                    details += json + G_linefeed;
                                    break;

                                default:
                                    break;
                            }
                        }

                        var htmlId = "HtmlId_" + G_HtmlIdCounter++;
                        G_SummaryDetails[htmlId] = details;
                        var explanation = stringFormat(G_Resources.ApiU
Download .txt
gitextract_330899_t/

├── .gitattributes
├── .gitignore
├── AppSamples-iOS-TouchID-master/
│   ├── LICENSE
│   ├── Podfile
│   ├── active-directory-ios-native-appauth-b2c/
│   │   ├── AppDelegate.h
│   │   ├── AppDelegate.m
│   │   ├── Assets.xcassets/
│   │   │   └── AppIcon.appiconset/
│   │   │       └── Contents.json
│   │   ├── Base.lproj/
│   │   │   ├── LaunchScreen.storyboard
│   │   │   └── Main.storyboard
│   │   ├── GameTableViewController.h
│   │   ├── GameTableViewController.m
│   │   ├── Games.h
│   │   ├── Games.m
│   │   ├── Info.plist
│   │   ├── ViewController.h
│   │   ├── ViewController.m
│   │   └── main.m
│   ├── active-directory-ios-native-appauth-b2c.xcodeproj/
│   │   ├── project.pbxproj
│   │   └── project.xcworkspace/
│   │       └── contents.xcworkspacedata
│   ├── active-directory-ios-native-appauth-b2c.xcworkspace/
│   │   └── contents.xcworkspacedata
│   └── readme.md
├── AzureFunctionsSamples/
│   ├── CalculatePlayerProfilePercentCompleteWebHook/
│   │   ├── function.json
│   │   └── run.csx
│   ├── CheckPlayerTagWebHook/
│   │   ├── function.json
│   │   └── run.csx
│   ├── LookUpLoyaltyWebHook/
│   │   ├── function.json
│   │   └── run.csx
│   ├── SendMailWebHook/
│   │   ├── function.json
│   │   └── run.csx
│   ├── host.json
│   └── readme.md
├── CONTRIBUTING.md
├── ExploreAdmin/
│   └── New-AzureADB2CPolicyEngineApplications.ps1
├── LICENSE
├── README.md
├── UserJourneyRecorder/
│   ├── Integrating a B2C policy with Azure Application Insights.docx
│   ├── README.md
│   ├── UserJourneyRecorder.sln
│   └── UserJourneyRecorderWebApp/
│       ├── Global.asax
│       ├── Global.asax.cs
│       ├── Infrastructure/
│       │   ├── UserJourneyRecorderHttpHandler.cs
│       │   ├── UserJourneyRecorderRouteHandler.cs
│       │   └── Utils.cs
│       ├── Properties/
│       │   ├── AssemblyInfo.cs
│       │   ├── Resources.Designer.cs
│       │   ├── Resources.resx
│       │   ├── Settings.Designer.cs
│       │   └── Settings.settings
│       ├── UserJourneyRecorderWebApp.csproj
│       ├── Web.Debug.config
│       ├── Web.Release.config
│       ├── Web.config
│       ├── base64url_102.js
│       ├── config_102.html
│       ├── config_102.js
│       ├── languages/
│       │   └── en-us_102.json
│       ├── packages.config
│       ├── trace_102.css
│       └── trace_102.html
├── account-linking/
│   ├── ACCOUNTLINKING.xml
│   ├── PASSWORDRESET.xml
│   ├── PROFILEEDIT.xml
│   ├── SignUpOrSignin.xml
│   ├── TRUSTFRAMEWORKBASE.xml
│   ├── TRUSTFRAMEWORKEXTENSIONS.xml
│   └── readme.md
├── conditional-access-preview/
│   ├── IEF Policy sample with Conditional Access and Secure Pssword reset -not for prod Sep2019.xml
│   ├── deprecated_B2CTenant.onmicrosoft.com-B2C_1A_PolicySampleV02.xml
│   └── readme.md
└── wingtipgamesb2c/
    ├── .gitignore
    ├── AzureADB2CSamples.sln
    ├── Implementing an invitation flow, Sample by Kloud.docx
    ├── Integrating a B2C policy with Azure Application Insights.docx
    ├── Policies/
    │   ├── b2ctechready.onmicrosoft.com_B2C_1A_activation.xml
    │   ├── b2ctechready.onmicrosoft.com_B2C_1A_base.xml
    │   ├── b2ctechready.onmicrosoft.com_B2C_1A_base_extensions.xml
    │   ├── b2ctechready.onmicrosoft.com_B2C_1A_invitation.xml
    │   ├── b2ctechready.onmicrosoft.com_B2C_1A_link.xml
    │   ├── b2ctechready.onmicrosoft.com_B2C_1A_password_reset.xml
    │   ├── b2ctechready.onmicrosoft.com_B2C_1A_profile_update_games.xml
    │   ├── b2ctechready.onmicrosoft.com_B2C_1A_profile_update_music.xml
    │   ├── b2ctechready.onmicrosoft.com_B2C_1A_sign_in_billing.xml
    │   ├── b2ctechready.onmicrosoft.com_B2C_1A_sign_in_games_app_code.xml
    │   ├── b2ctechready.onmicrosoft.com_B2C_1A_sign_in_games_authy_code.xml
    │   ├── b2ctechready.onmicrosoft.com_B2C_1A_sign_in_games_email_code.xml
    │   ├── b2ctechready.onmicrosoft.com_B2C_1A_sign_in_games_email_phone.xml
    │   ├── b2ctechready.onmicrosoft.com_B2C_1A_sign_in_games_phone_code.xml
    │   ├── b2ctechready.onmicrosoft.com_B2C_1A_sign_up_games_app_code.xml
    │   ├── b2ctechready.onmicrosoft.com_B2C_1A_sign_up_games_authy_code.xml
    │   ├── b2ctechready.onmicrosoft.com_B2C_1A_sign_up_sign_in_games.xml
    │   ├── b2ctechready.onmicrosoft.com_B2C_1A_sign_up_sign_in_music.xml
    │   └── b2ctechready.onmicrosoft.com_B2C_1A_step_up.xml
    ├── Reports/
    │   ├── B2CUserJourneyEvents.csv
    │   ├── B2CUserJourneyEvents.pbix
    │   └── B2CUserJourneyEvents.ps1
    ├── Templates/
    │   ├── dist/
    │   │   ├── error.html
    │   │   ├── idpselection-signin.html
    │   │   ├── idpselection-signupsignin.html
    │   │   ├── idpselection.html
    │   │   ├── js/
    │   │   │   ├── analytics.js
    │   │   │   ├── selfasserted-appfactor-registration.js
    │   │   │   ├── selfasserted-appfactor.js
    │   │   │   ├── selfasserted-listenerprofileupdate.js
    │   │   │   ├── selfasserted-playerprofileregistration-basic.js
    │   │   │   ├── selfasserted-playerprofileregistration-full.js
    │   │   │   └── selfasserted-playerprofileupdate.js
    │   │   ├── localaccount-activation.html
    │   │   ├── localaccount-discovery.html
    │   │   ├── localaccount-identification.html
    │   │   ├── localaccount-login-appcode.html
    │   │   ├── localaccount-login-authycode.html
    │   │   ├── localaccount-login-emailcode.html
    │   │   ├── localaccount-login-phonecode.html
    │   │   ├── localaccount-login.html
    │   │   ├── localaccount-passwordrecovery.html
    │   │   ├── localaccount-passwordreset.html
    │   │   ├── localaccount-passwordset.html
    │   │   ├── localaccount-registration.html
    │   │   ├── phonefactor.html
    │   │   ├── selfasserted-appfactor-registration.html
    │   │   ├── selfasserted-appfactor-verification.html
    │   │   ├── selfasserted-authyfactor.html
    │   │   ├── selfasserted-consent.html
    │   │   ├── selfasserted-listenerprofileupdate.html
    │   │   ├── selfasserted-playerprofileregistration-basic.html
    │   │   ├── selfasserted-playerprofileregistration-full.html
    │   │   ├── selfasserted-playerprofileupdate.html
    │   │   ├── signupsignin.html
    │   │   └── socialaccount-registration.html
    │   ├── gulpfile.js
    │   ├── package.json
    │   └── src/
    │       ├── css/
    │       │   ├── bootstrap.css
    │       │   └── global.css
    │       ├── error.html
    │       ├── idpselection-signin.html
    │       ├── idpselection-signupsignin.html
    │       ├── idpselection.html
    │       ├── js/
    │       │   ├── analytics.js
    │       │   ├── selfasserted-appfactor-registration.js
    │       │   ├── selfasserted-appfactor.js
    │       │   ├── selfasserted-listenerprofileupdate.js
    │       │   ├── selfasserted-playerprofileregistration-basic.js
    │       │   ├── selfasserted-playerprofileregistration-full.js
    │       │   └── selfasserted-playerprofileupdate.js
    │       ├── localaccount-activation.html
    │       ├── localaccount-discovery.html
    │       ├── localaccount-identification.html
    │       ├── localaccount-login-appcode.html
    │       ├── localaccount-login-authycode.html
    │       ├── localaccount-login-emailcode.html
    │       ├── localaccount-login-phonecode.html
    │       ├── localaccount-login.html
    │       ├── localaccount-passwordrecovery.html
    │       ├── localaccount-passwordreset.html
    │       ├── localaccount-passwordset.html
    │       ├── localaccount-registration.html
    │       ├── phonefactor.html
    │       ├── selfasserted-appfactor-registration.html
    │       ├── selfasserted-appfactor-verification.html
    │       ├── selfasserted-authyfactor.html
    │       ├── selfasserted-consent.html
    │       ├── selfasserted-listenerprofileupdate.html
    │       ├── selfasserted-playerprofileregistration-basic.html
    │       ├── selfasserted-playerprofileregistration-full.html
    │       ├── selfasserted-playerprofileupdate.html
    │       ├── signupsignin.html
    │       └── socialaccount-registration.html
    ├── readme.md
    └── src/
        ├── WingTipBillingWebApplication/
        │   ├── .bowerrc
        │   ├── Api/
        │   │   ├── Controllers/
        │   │   │   └── OrdersController.cs
        │   │   └── Models/
        │   │       └── Order.cs
        │   ├── Constants.cs
        │   ├── Controllers/
        │   │   ├── AccountController.cs
        │   │   ├── HomeController.cs
        │   │   └── MetadataController.cs
        │   ├── Identity/
        │   │   ├── ClaimsPrincipalHelper.cs
        │   │   └── Saml2/
        │   │       └── FixedSaml2AuthnResponse.cs
        │   ├── IdentityExtensions.cs
        │   ├── Program.cs
        │   ├── Startup.cs
        │   ├── Views/
        │   │   ├── Home/
        │   │   │   ├── About.cshtml
        │   │   │   ├── Contact.cshtml
        │   │   │   └── Index.cshtml
        │   │   ├── Shared/
        │   │   │   ├── Error.cshtml
        │   │   │   ├── _Layout.cshtml
        │   │   │   └── _ValidationScriptsPartial.cshtml
        │   │   ├── _ViewImports.cshtml
        │   │   └── _ViewStart.cshtml
        │   ├── WingTipBillingWebApplication.csproj
        │   ├── app.config
        │   ├── appsettings.Development.json
        │   ├── appsettings.json
        │   ├── bower.json
        │   ├── bundleconfig.json
        │   └── wwwroot/
        │       ├── css/
        │       │   └── site.css
        │       ├── js/
        │       │   └── site.js
        │       └── lib/
        │           ├── bootstrap/
        │           │   ├── .bower.json
        │           │   ├── LICENSE
        │           │   └── dist/
        │           │       ├── css/
        │           │       │   ├── bootstrap-theme.css
        │           │       │   └── bootstrap.css
        │           │       └── js/
        │           │           ├── bootstrap.js
        │           │           └── npm.js
        │           ├── jquery/
        │           │   ├── .bower.json
        │           │   ├── LICENSE.txt
        │           │   └── dist/
        │           │       └── jquery.js
        │           ├── jquery-validation/
        │           │   ├── .bower.json
        │           │   ├── LICENSE.md
        │           │   └── dist/
        │           │       ├── additional-methods.js
        │           │       └── jquery.validate.js
        │           └── jquery-validation-unobtrusive/
        │               ├── .bower.json
        │               └── jquery.validate.unobtrusive.js
        ├── WingTipCommon/
        │   ├── AspNetCore/
        │   │   ├── Authentication/
        │   │   │   └── OpenIdConnect/
        │   │   │       ├── WingTipOpenIdConnectAppBuilderExtensions.cs
        │   │   │       ├── WingTipOpenIdConnectHandler.cs
        │   │   │       └── WingTipOpenIdConnectMiddleware.cs
        │   │   └── Http/
        │   │       ├── HttpsExtensions.cs
        │   │       └── HttpsMiddleware.cs
        │   ├── Generators/
        │   │   ├── IPasswordGenerator.cs
        │   │   ├── PasswordCharacters.cs
        │   │   ├── PasswordGenerator.cs
        │   │   └── RandomPasswordGenerator.cs
        │   ├── Identity/
        │   │   ├── Migrations/
        │   │   │   ├── 20170324053803_CreateDatabase.Designer.cs
        │   │   │   ├── 20170324053803_CreateDatabase.cs
        │   │   │   └── WingTipDbContextModelSnapshot.cs
        │   │   ├── WingTipDbContext.cs
        │   │   ├── WingTipUser.cs
        │   │   └── WingTipUserManager.cs
        │   ├── MigrationStatus.cs
        │   ├── Properties/
        │   │   └── AssemblyInfo.cs
        │   ├── Services/
        │   │   ├── AuthenticationService.cs
        │   │   ├── GraphService.cs
        │   │   ├── IAuthenticationService.cs
        │   │   ├── IGraphService.cs
        │   │   ├── ISmtpService.cs
        │   │   └── SendGridSmtpService.cs
        │   ├── WingTipClaimTypes.cs
        │   ├── WingTipCommon.csproj
        │   ├── app.config
        │   └── packages.config
        ├── WingTipFunctionsApplication/
        │   ├── CalculatePlayerProfilePercentCompleteWebHook/
        │   │   ├── function.json
        │   │   └── run.csx
        │   ├── CheckEmailWebHook/
        │   │   ├── function.json
        │   │   └── run.csx
        │   ├── CheckPlayerTagWebHook/
        │   │   ├── function.json
        │   │   └── run.csx
        │   ├── CreateAndWaitForAuthyApprovalRequestWebHook/
        │   │   ├── function.json
        │   │   └── run.csx
        │   ├── CreateAuthyUserWebHook/
        │   │   ├── function.json
        │   │   └── run.csx
        │   ├── GenerateTotpWebHook/
        │   │   ├── function.json
        │   │   ├── project.json
        │   │   └── run.csx
        │   ├── Properties/
        │   │   └── AssemblyInfo.cs
        │   ├── SendMailWebHook/
        │   │   ├── function.json
        │   │   └── run.csx
        │   ├── VerifyTotpWebHook/
        │   │   ├── function.json
        │   │   ├── project.json
        │   │   └── run.csx
        │   ├── Web.Debug.config
        │   ├── Web.Release.config
        │   ├── Web.config
        │   ├── WingTipFunctionsApplication.csproj
        │   ├── appsettings.Development.json
        │   ├── appsettings.json
        │   ├── host.json
        │   └── packages.config
        ├── WingTipGamesWebApplication/
        │   ├── .bowerrc
        │   ├── Api/
        │   │   └── Controllers/
        │   │       └── GamesController.cs
        │   ├── Configuration/
        │   │   ├── ActivationControllerOptions.cs
        │   │   └── InvitationControllerOptions.cs
        │   ├── Constants.cs
        │   ├── Controllers/
        │   │   ├── AccountController.cs
        │   │   ├── ActivationController.cs
        │   │   ├── BillingController.cs
        │   │   ├── DemoController.cs
        │   │   ├── HomeController.cs
        │   │   ├── InvitationController.cs
        │   │   └── MusicController.cs
        │   ├── Filters/
        │   │   ├── CultureFilterAttribute.cs
        │   │   └── LocationFilterAttribute.cs
        │   ├── HtmlHelpers/
        │   │   ├── DropDownListHelpers.cs
        │   │   └── NavbarHelper.cs
        │   ├── IdentityExtensions.cs
        │   ├── Models/
        │   │   ├── Album.cs
        │   │   ├── Artist.cs
        │   │   ├── Game.cs
        │   │   └── Order.cs
        │   ├── Program.cs
        │   ├── Repositories/
        │   │   ├── GameRepository.cs
        │   │   ├── Games.cs
        │   │   └── IGameRepository.cs
        │   ├── Services/
        │   │   ├── FreeGeoIpGeolocationService.cs
        │   │   ├── IBillingService.cs
        │   │   ├── IGeolocationService.cs
        │   │   ├── IMusicService.cs
        │   │   ├── Location.cs
        │   │   ├── WingTipBillingService.cs
        │   │   └── WingTipMusicService.cs
        │   ├── Startup.cs
        │   ├── ViewModels/
        │   │   ├── Activation/
        │   │   │   └── RedeemedViewModel.cs
        │   │   ├── Billing/
        │   │   │   └── IndexViewModel.cs
        │   │   ├── Home/
        │   │   │   └── IndexViewModel.cs
        │   │   ├── Invitation/
        │   │   │   ├── CreateViewModel.cs
        │   │   │   └── RedeemedViewModel.cs
        │   │   └── Music/
        │   │       └── IndexViewModel.cs
        │   ├── Views/
        │   │   ├── Account/
        │   │   │   └── LinkError.cshtml
        │   │   ├── Activation/
        │   │   │   ├── RedeemError.cshtml
        │   │   │   └── Redeemed.cshtml
        │   │   ├── Billing/
        │   │   │   └── Index.cshtml
        │   │   ├── Demo/
        │   │   │   └── Index.cshtml
        │   │   ├── Home/
        │   │   │   └── Index.cshtml
        │   │   ├── Invitation/
        │   │   │   ├── Create.cshtml
        │   │   │   ├── Created.cshtml
        │   │   │   ├── RedeemError.cshtml
        │   │   │   └── Redeemed.cshtml
        │   │   ├── Music/
        │   │   │   └── Index.cshtml
        │   │   ├── Shared/
        │   │   │   ├── Error.cshtml
        │   │   │   ├── _Layout.cshtml
        │   │   │   ├── _LoginPartial.cshtml
        │   │   │   └── _ValidationScriptsPartial.cshtml
        │   │   ├── _ViewImports.cshtml
        │   │   └── _ViewStart.cshtml
        │   ├── WingTipGamesWebApplication.csproj
        │   ├── app.config
        │   ├── appsettings.Development.json
        │   ├── appsettings.json
        │   ├── bower.json
        │   ├── bundleconfig.json
        │   └── wwwroot/
        │       ├── css/
        │       │   ├── demo.css
        │       │   └── site.css
        │       ├── js/
        │       │   └── site.js
        │       └── lib/
        │           ├── bootstrap/
        │           │   ├── .bower.json
        │           │   ├── LICENSE
        │           │   └── dist/
        │           │       ├── css/
        │           │       │   ├── bootstrap-theme.css
        │           │       │   └── bootstrap.css
        │           │       └── js/
        │           │           ├── bootstrap.js
        │           │           └── npm.js
        │           ├── jquery/
        │           │   ├── .bower.json
        │           │   ├── LICENSE.txt
        │           │   └── dist/
        │           │       └── jquery.js
        │           ├── jquery-validation/
        │           │   ├── .bower.json
        │           │   ├── LICENSE.md
        │           │   └── dist/
        │           │       ├── additional-methods.js
        │           │       └── jquery.validate.js
        │           └── jquery-validation-unobtrusive/
        │               ├── .bower.json
        │               └── jquery.validate.unobtrusive.js
        ├── WingTipIdentityWebApplication/
        │   ├── Api/
        │   │   ├── Controllers/
        │   │   │   └── AccountController.cs
        │   │   └── Models/
        │   │       ├── AccountCheckNonceErrorResponse.cs
        │   │       ├── AccountCheckNonceRequest.cs
        │   │       ├── AccountCheckPasswordRequest.cs
        │   │       ├── AccountCreateRequest.cs
        │   │       ├── AccountRecoverPasswordRequest.cs
        │   │       └── AccountResetPasswordRequest.cs
        │   ├── Authentication/
        │   │   ├── BasicAuthenticationExtensions.cs
        │   │   └── BasicAuthenticationMiddleware.cs
        │   ├── MigrationStatus.cs
        │   ├── Program.cs
        │   ├── Startup.cs
        │   ├── WingTipIdentityWebApplication.csproj
        │   ├── app.config
        │   ├── appsettings.Development.json
        │   └── appsettings.json
        ├── WingTipMusicWebApplication/
        │   ├── .bowerrc
        │   ├── Api/
        │   │   └── Controllers/
        │   │       └── AlbumsController.cs
        │   ├── Constants.cs
        │   ├── Controllers/
        │   │   ├── AccountController.cs
        │   │   ├── DemoController.cs
        │   │   └── HomeController.cs
        │   ├── Filters/
        │   │   ├── CultureFilterAttribute.cs
        │   │   └── LocationFilterAttribute.cs
        │   ├── HtmlHelpers/
        │   │   ├── DropDownListHelpers.cs
        │   │   └── NavbarHelper.cs
        │   ├── IdentityExtensions.cs
        │   ├── Models/
        │   │   ├── Album.cs
        │   │   └── Artist.cs
        │   ├── Program.cs
        │   ├── Repositories/
        │   │   ├── AlbumRepository.cs
        │   │   ├── Albums.cs
        │   │   └── IAlbumRepository.cs
        │   ├── Services/
        │   │   ├── FreeGeoIpGeolocationService.cs
        │   │   ├── IGeolocationService.cs
        │   │   └── Location.cs
        │   ├── Startup.cs
        │   ├── ViewModels/
        │   │   └── Home/
        │   │       └── IndexViewModel.cs
        │   ├── Views/
        │   │   ├── Demo/
        │   │   │   └── Index.cshtml
        │   │   ├── Home/
        │   │   │   └── Index.cshtml
        │   │   ├── Shared/
        │   │   │   ├── Error.cshtml
        │   │   │   ├── _Layout.cshtml
        │   │   │   ├── _LoginPartial.cshtml
        │   │   │   └── _ValidationScriptsPartial.cshtml
        │   │   ├── _ViewImports.cshtml
        │   │   └── _ViewStart.cshtml
        │   ├── WingTipMusicWebApplication.csproj
        │   ├── app.config
        │   ├── appsettings.Development.json
        │   ├── appsettings.json
        │   ├── bower.json
        │   ├── bundleconfig.json
        │   └── wwwroot/
        │       ├── css/
        │       │   ├── demo.css
        │       │   └── site.css
        │       ├── js/
        │       │   └── site.js
        │       └── lib/
        │           ├── bootstrap/
        │           │   ├── .bower.json
        │           │   ├── LICENSE
        │           │   └── dist/
        │           │       ├── css/
        │           │       │   ├── bootstrap-theme.css
        │           │       │   └── bootstrap.css
        │           │       └── js/
        │           │           ├── bootstrap.js
        │           │           └── npm.js
        │           ├── jquery/
        │           │   ├── .bower.json
        │           │   ├── LICENSE.txt
        │           │   └── dist/
        │           │       └── jquery.js
        │           ├── jquery-validation/
        │           │   ├── .bower.json
        │           │   ├── LICENSE.md
        │           │   └── dist/
        │           │       ├── additional-methods.js
        │           │       └── jquery.validate.js
        │           └── jquery-validation-unobtrusive/
        │               ├── .bower.json
        │               └── jquery.validate.unobtrusive.js
        ├── WingTipToysWebApplication/
        │   ├── .bowerrc
        │   ├── Configuration/
        │   │   └── UserControllerOptions.cs
        │   ├── Constants.cs
        │   ├── Controllers/
        │   │   ├── AccountController.cs
        │   │   ├── AuditController.cs
        │   │   ├── HomeController.cs
        │   │   ├── ReportController.cs
        │   │   └── UserController.cs
        │   ├── HtmlHelpers/
        │   │   └── NavbarHelper.cs
        │   ├── IdentityExtensions.cs
        │   ├── MigrationStatusExtensions.cs
        │   ├── Program.cs
        │   ├── Startup.cs
        │   ├── ViewModels/
        │   │   ├── Audit/
        │   │   │   ├── AuditEntryViewModel.cs
        │   │   │   └── IndexViewModel.cs
        │   │   ├── Report/
        │   │   │   ├── B2CAuthenticationCountSummaryIndexViewModel.cs
        │   │   │   ├── B2CAuthenticationCountSummaryReportEntryViewModel.cs
        │   │   │   ├── B2CMfaRequestCountSummaryIndexViewModel.cs
        │   │   │   ├── B2CMfaRequestCountSummaryReportEntryViewModel.cs
        │   │   │   ├── B2CUserJourneySummaryEventsIndexViewModel.cs
        │   │   │   ├── B2CUserJourneySummaryEventsReportEntryViewModel.cs
        │   │   │   ├── TenantUserCountSummaryIndexViewModel.cs
        │   │   │   └── TenantUserCountSummaryReportEntryViewModel.cs
        │   │   └── User/
        │   │       ├── ChangePasswordViewModel.cs
        │   │       ├── CreateViewModel.cs
        │   │       ├── IndexViewModel.cs
        │   │       └── UserViewModel.cs
        │   ├── Views/
        │   │   ├── Audit/
        │   │   │   ├── ApplicationIndex.cshtml
        │   │   │   └── UserIndex.cshtml
        │   │   ├── Home/
        │   │   │   └── Index.cshtml
        │   │   ├── Report/
        │   │   │   ├── B2CAuthenticationCountSummaryIndex.cshtml
        │   │   │   ├── B2CMfaRequestCountSummaryIndex.cshtml
        │   │   │   ├── B2CUserJourneySummaryEventsIndex.cshtml
        │   │   │   └── TenantUserCountSummaryIndex.cshtml
        │   │   ├── Shared/
        │   │   │   ├── Error.cshtml
        │   │   │   ├── _Layout.cshtml
        │   │   │   ├── _LoginPartial.cshtml
        │   │   │   └── _ValidationScriptsPartial.cshtml
        │   │   ├── User/
        │   │   │   ├── ChangePassword.cshtml
        │   │   │   ├── Create.cshtml
        │   │   │   └── Index.cshtml
        │   │   ├── _ViewImports.cshtml
        │   │   └── _ViewStart.cshtml
        │   ├── WingTipToysWebApplication.csproj
        │   ├── app.config
        │   ├── appsettings.Development.json
        │   ├── appsettings.json
        │   ├── bower.json
        │   ├── bundleconfig.json
        │   └── wwwroot/
        │       ├── css/
        │       │   └── site.css
        │       ├── js/
        │       │   └── site.js
        │       └── lib/
        │           ├── bootstrap/
        │           │   ├── .bower.json
        │           │   ├── LICENSE
        │           │   └── dist/
        │           │       ├── css/
        │           │       │   ├── bootstrap-theme.css
        │           │       │   └── bootstrap.css
        │           │       └── js/
        │           │           ├── bootstrap.js
        │           │           └── npm.js
        │           ├── jquery/
        │           │   ├── .bower.json
        │           │   ├── LICENSE.txt
        │           │   └── dist/
        │           │       └── jquery.js
        │           ├── jquery-validation/
        │           │   ├── .bower.json
        │           │   ├── LICENSE.md
        │           │   └── dist/
        │           │       ├── additional-methods.js
        │           │       └── jquery.validate.js
        │           └── jquery-validation-unobtrusive/
        │               ├── .bower.json
        │               └── jquery.validate.unobtrusive.js
        └── WingTipUserJourneyPlayerWebApplication/
            ├── .bowerrc
            ├── Api/
            │   └── Controllers/
            │       └── StreamController.cs
            ├── AzureApplicationInsightsCredential.cs
            ├── Constants.cs
            ├── Controllers/
            │   ├── ConfigController.cs
            │   └── TraceController.cs
            ├── Program.cs
            ├── Startup.cs
            ├── Views/
            │   ├── Config/
            │   │   └── Index.cshtml
            │   ├── Trace/
            │   │   └── Index.cshtml
            │   └── _ViewStart.cshtml
            ├── WingTipUserJourneyPlayerWebApplication.csproj
            ├── app.config
            ├── appsettings.Development.json
            ├── appsettings.json
            ├── bower.json
            ├── bundleconfig.json
            └── wwwroot/
                ├── css/
                │   └── trace_102.css
                ├── js/
                │   ├── base64url_102.js
                │   └── config_102.js
                └── languages/
                    └── en-us_102.json
Download .txt
SYMBOL INDEX (894 symbols across 170 files)

FILE: AppSamples-iOS-TouchID-master/active-directory-ios-native-appauth-b2c/Games.h
  function interface (line 13) | interface Games : NSObject{

FILE: AppSamples-iOS-TouchID-master/active-directory-ios-native-appauth-b2c/ViewController.h
  function interface (line 13) | interface ViewController : UIViewController <BKPasscodeViewControllerDel...

FILE: UserJourneyRecorder/UserJourneyRecorderWebApp/Global.asax.cs
  class UserJourneyRecorderWebApplication (line 8) | public class UserJourneyRecorderWebApplication : HttpApplication
    method Application_Start (line 10) | protected void Application_Start(object sender, EventArgs e)

FILE: UserJourneyRecorder/UserJourneyRecorderWebApp/Infrastructure/UserJourneyRecorderHttpHandler.cs
  class UserJourneyRecorderHttpHandler (line 12) | public class UserJourneyRecorderHttpHandler : HttpTaskAsyncHandler, IReq...
    method ProcessRequestAsync (line 14) | public override Task ProcessRequestAsync(HttpContext context)
    method ProcessGetRequest (line 50) | private void ProcessGetRequest(HttpContext context)
    method ProcessPostRequest (line 94) | private void ProcessPostRequest(HttpContext context)

FILE: UserJourneyRecorder/UserJourneyRecorderWebApp/Infrastructure/UserJourneyRecorderRouteHandler.cs
  class UserJourneyRecorderRouteHandler (line 6) | public class UserJourneyRecorderRouteHandler : IRouteHandler
    method GetHttpHandler (line 8) | public IHttpHandler GetHttpHandler(RequestContext requestContext)

FILE: UserJourneyRecorder/UserJourneyRecorderWebApp/Infrastructure/Utils.cs
  class Utils (line 11) | internal static class Utils
    method EnsureStreamDirectoryExists (line 13) | public static void EnsureStreamDirectoryExists(string streamPath)
    method GetStreamsDirectory (line 18) | public static string GetStreamsDirectory(string basePath)
    method GetStreamPath (line 23) | public static string GetStreamPath(string streamsDirectory, string str...
    method ValidateStreamId (line 29) | public static void ValidateStreamId(string streamId)

FILE: UserJourneyRecorder/UserJourneyRecorderWebApp/Properties/Resources.Designer.cs
  class Resources (line 22) | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resource...
    method Resources (line 31) | [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Mic...

FILE: UserJourneyRecorder/UserJourneyRecorderWebApp/Properties/Settings.Designer.cs
  class Settings (line 14) | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]

FILE: UserJourneyRecorder/UserJourneyRecorderWebApp/base64url_102.js
  function DecodeBytesFromUrlCompliant64 (line 5) | function DecodeBytesFromUrlCompliant64(input) {
  function renderOAuthMessage (line 37) | function renderOAuthMessage(input)
  function renderJsonMessage (line 63) | function renderJsonMessage(string)
  function renderJson (line 74) | function renderJson(string, showError)

FILE: UserJourneyRecorder/UserJourneyRecorderWebApp/config_102.js
  function Config_ReadConfig (line 70) | function Config_ReadConfig() {
  function setStreamId (line 118) | function setStreamId() {
  function validateStreamId (line 123) | function validateStreamId(id) {
  function getStreamUrl (line 132) | function getStreamUrl() {
  function configControlClicked (line 136) | function configControlClicked()
  function Config_InitializeConfigUI (line 141) | function Config_InitializeConfigUI()
  function readConfigIntoCheckboxes (line 171) | function readConfigIntoCheckboxes()
  function Config_WriteConfig (line 207) | function Config_WriteConfig()
  function Config_ResetConfig (line 229) | function Config_ResetConfig()
  function getParameter (line 241) | function getParameter(val) {
  function Config_ReturnToReader (line 252) | function Config_ReturnToReader() {
  function CreateXMLDocFromString (line 265) | function CreateXMLDocFromString(str) {
  function CreateXmlDocFromUrl (line 279) | function CreateXmlDocFromUrl(url) {
  function renderXmlMessage (line 292) | function renderXmlMessage(str) {
  function Config_ReadLanguage (line 309) | function Config_ReadLanguage() {
  function processLoadLanguage (line 314) | function processLoadLanguage(languageElements, status, jqXHR) {

FILE: wingtipgamesb2c/src/WingTipBillingWebApplication/Api/Controllers/OrdersController.cs
  class OrdersController (line 9) | [Authorize(ActiveAuthenticationSchemes = Constants.AuthenticationSchemes...
    method Get (line 13) | public IActionResult Get()

FILE: wingtipgamesb2c/src/WingTipBillingWebApplication/Api/Models/Order.cs
  class Order (line 5) | public class Order

FILE: wingtipgamesb2c/src/WingTipBillingWebApplication/Constants.cs
  class Constants (line 3) | public static class Constants
    class AuthenticationSchemes (line 5) | public static class AuthenticationSchemes
    class AuthorizationPolicies (line 10) | public static class AuthorizationPolicies
    class PolicyIds (line 15) | public static class PolicyIds

FILE: wingtipgamesb2c/src/WingTipBillingWebApplication/Controllers/AccountController.cs
  class AccountController (line 13) | public class AccountController : Controller
    method AccountController (line 19) | public AccountController(Saml2Configuration configuration)
    method AssertionConsumer (line 24) | public async Task<IActionResult> AssertionConsumer()
    method LogIn (line 34) | public IActionResult LogIn(string returnUrl)
    method LogOut (line 50) | [HttpPost]
    method LoggedOut (line 67) | public IActionResult LoggedOut()
    method SingleLogout (line 75) | public async Task<IActionResult> SingleLogout()

FILE: wingtipgamesb2c/src/WingTipBillingWebApplication/Controllers/HomeController.cs
  class HomeController (line 5) | public class HomeController : Controller
    method Index (line 7) | public IActionResult Index()
    method Error (line 12) | public IActionResult Error()

FILE: wingtipgamesb2c/src/WingTipBillingWebApplication/Controllers/MetadataController.cs
  class MetadataController (line 11) | [AllowAnonymous]
    method MetadataController (line 16) | public MetadataController(Saml2Configuration configuration)
    method Index (line 21) | public IActionResult Index()

FILE: wingtipgamesb2c/src/WingTipBillingWebApplication/Identity/ClaimsPrincipalHelper.cs
  class ClaimsPrincipalHelper (line 6) | public static class ClaimsPrincipalHelper
    method Transform (line 8) | public static ClaimsPrincipal Transform(ClaimsPrincipal principal)

FILE: wingtipgamesb2c/src/WingTipBillingWebApplication/Identity/Saml2/FixedSaml2AuthnResponse.cs
  class FixedSaml2AuthnResponse (line 6) | public class FixedSaml2AuthnResponse : Saml2AuthnResponse
    method FixedSaml2AuthnResponse (line 8) | public FixedSaml2AuthnResponse(Saml2Configuration configuration)
    method GetAssertionElement (line 13) | protected override XmlElement GetAssertionElement()

FILE: wingtipgamesb2c/src/WingTipBillingWebApplication/IdentityExtensions.cs
  class IdentityExtensions (line 7) | public static class IdentityExtensions
    method GetDisplayName (line 9) | public static string GetDisplayName(this IIdentity identity)
    method GetClaimValue (line 14) | private static string GetClaimValue(IIdentity identity, string claimType)

FILE: wingtipgamesb2c/src/WingTipBillingWebApplication/Program.cs
  class Program (line 6) | public class Program
    method Main (line 8) | public static void Main(string[] args)

FILE: wingtipgamesb2c/src/WingTipBillingWebApplication/Startup.cs
  class Startup (line 17) | public class Startup
    method Startup (line 19) | public Startup(IHostingEnvironment hostingEnvironment)
    method Configure (line 36) | public void Configure(IApplicationBuilder applicationBuilder, IHosting...
    method ConfigureServices (line 83) | public void ConfigureServices(IServiceCollection services)
    method ConfigureJwtBearerAuthentication (line 115) | private static void ConfigureJwtBearerAuthentication(IApplicationBuild...
    method ConfigureSaml2 (line 126) | private static void ConfigureSaml2(IServiceCollection services, IConfi...

FILE: wingtipgamesb2c/src/WingTipBillingWebApplication/wwwroot/lib/bootstrap/dist/js/bootstrap.js
  function transitionEnd (line 34) | function transitionEnd() {
  function removeElement (line 126) | function removeElement() {
  function Plugin (line 142) | function Plugin(option) {
  function Plugin (line 251) | function Plugin(option) {
  function Plugin (line 475) | function Plugin(option) {
  function getTargetFromTrigger (line 695) | function getTargetFromTrigger($trigger) {
  function Plugin (line 707) | function Plugin(option) {
  function getParent (line 774) | function getParent($this) {
  function clearMenus (line 787) | function clearMenus(e) {
  function Plugin (line 880) | function Plugin(option) {
  function Plugin (line 1208) | function Plugin(option, _relatedTarget) {
  function complete (line 1574) | function complete() {
  function Plugin (line 1750) | function Plugin(option) {
  function Plugin (line 1859) | function Plugin(option) {
  function ScrollSpy (line 1902) | function ScrollSpy(element, options) {
  function Plugin (line 2022) | function Plugin(option) {
  function next (line 2131) | function next() {
  function Plugin (line 2177) | function Plugin(option) {
  function Plugin (line 2334) | function Plugin(option) {

FILE: wingtipgamesb2c/src/WingTipBillingWebApplication/wwwroot/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.js
  function setValidationValues (line 14) | function setValidationValues(options, ruleName, value) {
  function splitAndTrim (line 21) | function splitAndTrim(value) {
  function escapeAttributeValue (line 25) | function escapeAttributeValue(value) {
  function getModelPrefix (line 30) | function getModelPrefix(fieldName) {
  function appendModelPrefix (line 34) | function appendModelPrefix(value, prefix) {
  function onError (line 41) | function onError(error, inputElement) {  // 'this' is the form element
  function onErrors (line 58) | function onErrors(event, validator) {  // 'this' is the form element
  function onSuccess (line 72) | function onSuccess(error) {  // 'this' is the form element
  function onReset (line 88) | function onReset(event) {  // 'this' is the form element
  function validationInfo (line 113) | function validationInfo(form) {

FILE: wingtipgamesb2c/src/WingTipBillingWebApplication/wwwroot/lib/jquery-validation/dist/additional-methods.js
  function stripHtml (line 19) | function stripHtml(value) {

FILE: wingtipgamesb2c/src/WingTipBillingWebApplication/wwwroot/lib/jquery-validation/dist/jquery.validate.js
  function handle (line 65) | function handle() {
  function delegate (line 375) | function delegate( event ) {

FILE: wingtipgamesb2c/src/WingTipBillingWebApplication/wwwroot/lib/jquery/dist/jquery.js
  function isArrayLike (line 524) | function isArrayLike( obj ) {
  function Sizzle (line 733) | function Sizzle( selector, context, results, seed ) {
  function createCache (line 873) | function createCache() {
  function markFunction (line 891) | function markFunction( fn ) {
  function assert (line 900) | function assert( fn ) {
  function addHandle (line 922) | function addHandle( attrs, handler ) {
  function siblingCheck (line 937) | function siblingCheck( a, b ) {
  function createInputPseudo (line 964) | function createInputPseudo( type ) {
  function createButtonPseudo (line 975) | function createButtonPseudo( type ) {
  function createPositionalPseudo (line 986) | function createPositionalPseudo( fn ) {
  function testContext (line 1009) | function testContext( context ) {
  function setFilters (line 2054) | function setFilters() {}
  function toSelector (line 2125) | function toSelector( tokens ) {
  function addCombinator (line 2135) | function addCombinator( matcher, combinator, base ) {
  function elementMatcher (line 2193) | function elementMatcher( matchers ) {
  function multipleContexts (line 2207) | function multipleContexts( selector, contexts, results ) {
  function condense (line 2216) | function condense( unmatched, map, filter, context, xml ) {
  function setMatcher (line 2237) | function setMatcher( preFilter, selector, matcher, postFilter, postFinde...
  function matcherFromTokens (line 2330) | function matcherFromTokens( tokens ) {
  function matcherFromGroupMatchers (line 2388) | function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
  function winnow (line 2726) | function winnow( elements, qualifier, not ) {
  function sibling (line 3033) | function sibling( cur, dir ) {
  function createOptions (line 3109) | function createOptions( options ) {
  function completed (line 3544) | function completed() {
  function Data (line 3655) | function Data() {
  function dataAttr (line 3865) | function dataAttr( elem, key, data ) {
  function adjustCSS (line 4182) | function adjustCSS( elem, prop, valueParts, tween ) {
  function getAll (line 4271) | function getAll( context, tag ) {
  function setGlobalEval (line 4288) | function setGlobalEval( elems, refElements ) {
  function buildFragment (line 4304) | function buildFragment( elems, context, scripts, selection, ignored ) {
  function returnTrue (line 4425) | function returnTrue() {
  function returnFalse (line 4429) | function returnFalse() {
  function safeActiveElement (line 4435) | function safeActiveElement() {
  function on (line 4441) | function on( elem, types, selector, data, fn, one ) {
  function manipulationTarget (line 5131) | function manipulationTarget( elem, content ) {
  function disableScript (line 5142) | function disableScript( elem ) {
  function restoreScript (line 5146) | function restoreScript( elem ) {
  function cloneCopyEvent (line 5158) | function cloneCopyEvent( src, dest ) {
  function fixInput (line 5193) | function fixInput( src, dest ) {
  function domManip (line 5206) | function domManip( collection, args, callback, ignored ) {
  function remove (line 5296) | function remove( elem, selector, keepData ) {
  function actualDisplay (line 5587) | function actualDisplay( name, doc ) {
  function defaultDisplay (line 5603) | function defaultDisplay( nodeName ) {
  function computeStyleTests (line 5699) | function computeStyleTests() {
  function curCSS (line 5789) | function curCSS( elem, name, computed ) {
  function addGetHookIf (line 5836) | function addGetHookIf( conditionFn, hookFn ) {
  function vendorPropName (line 5873) | function vendorPropName( name ) {
  function setPositiveNumber (line 5892) | function setPositiveNumber( elem, value, subtract ) {
  function augmentWidthOrHeight (line 5904) | function augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) {
  function getWidthOrHeight (line 5948) | function getWidthOrHeight( elem, name, extra ) {
  function showHide (line 6006) | function showHide( elements, show ) {
  function Tween (line 6345) | function Tween( elem, options, prop, end, easing ) {
  function createFxNow (line 6469) | function createFxNow() {
  function genFx (line 6477) | function genFx( type, includeWidth ) {
  function createTween (line 6497) | function createTween( value, prop, animation ) {
  function defaultPrefilter (line 6511) | function defaultPrefilter( elem, props, opts ) {
  function propFilter (line 6647) | function propFilter( props, specialEasing ) {
  function Animation (line 6684) | function Animation( elem, properties, options ) {
  function getClass (line 7357) | function getClass( elem ) {
  function addToPrefiltersOrTransports (line 8022) | function addToPrefiltersOrTransports( structure ) {
  function inspectPrefiltersOrTransports (line 8056) | function inspectPrefiltersOrTransports( structure, options, originalOpti...
  function ajaxExtend (line 8085) | function ajaxExtend( target, src ) {
  function ajaxHandleResponses (line 8105) | function ajaxHandleResponses( s, jqXHR, responses ) {
  function ajaxConvert (line 8163) | function ajaxConvert( s, response, jqXHR, isSuccess ) {
  function done (line 8668) | function done( status, nativeStatusText, responses, headers ) {
  function buildParams (line 8921) | function buildParams( prefix, obj, traditional, add ) {
  function getWindow (line 9504) | function getWindow( elem ) {

FILE: wingtipgamesb2c/src/WingTipCommon/AspNetCore/Authentication/OpenIdConnect/WingTipOpenIdConnectAppBuilderExtensions.cs
  class WingTipOpenIdConnectAppBuilderExtensions (line 7) | public static class WingTipOpenIdConnectAppBuilderExtensions
    method UseWingTipOpenIdConnectAuthentication (line 9) | public static IApplicationBuilder UseWingTipOpenIdConnectAuthenticatio...
    method UseWingTipOpenIdConnectAuthentication (line 19) | public static IApplicationBuilder UseWingTipOpenIdConnectAuthentication(

FILE: wingtipgamesb2c/src/WingTipCommon/AspNetCore/Authentication/OpenIdConnect/WingTipOpenIdConnectHandler.cs
  class WingTipOpenIdConnectHandler (line 8) | public class WingTipOpenIdConnectHandler : OpenIdConnectHandler
    method WingTipOpenIdConnectHandler (line 10) | public WingTipOpenIdConnectHandler(HttpClient backchannel, HtmlEncoder...
    method GenerateCorrelationId (line 15) | protected override void GenerateCorrelationId(AuthenticationProperties...
    method ValidateCorrelationId (line 27) | protected override bool ValidateCorrelationId(AuthenticationProperties...
    method SkipCorrelation (line 39) | private static bool SkipCorrelation(AuthenticationProperties authentic...

FILE: wingtipgamesb2c/src/WingTipCommon/AspNetCore/Authentication/OpenIdConnect/WingTipOpenIdConnectMiddleware.cs
  class WingTipOpenIdConnectMiddleware (line 13) | public class WingTipOpenIdConnectMiddleware : OpenIdConnectMiddleware
    method WingTipOpenIdConnectMiddleware (line 15) | public WingTipOpenIdConnectMiddleware(
    method CreateHandler (line 28) | protected override AuthenticationHandler<OpenIdConnectOptions> CreateH...

FILE: wingtipgamesb2c/src/WingTipCommon/AspNetCore/Http/HttpsExtensions.cs
  class HttpsExtensions (line 6) | public static class HttpsExtensions
    method UseHttps (line 8) | public static IApplicationBuilder UseHttps(this IApplicationBuilder ap...

FILE: wingtipgamesb2c/src/WingTipCommon/AspNetCore/Http/HttpsMiddleware.cs
  class HttpsMiddleware (line 7) | public class HttpsMiddleware
    method HttpsMiddleware (line 11) | public HttpsMiddleware(RequestDelegate next)
    method Invoke (line 16) | public async Task Invoke(HttpContext context)

FILE: wingtipgamesb2c/src/WingTipCommon/Generators/IPasswordGenerator.cs
  type IPasswordGenerator (line 3) | public interface IPasswordGenerator
    method GeneratePassword (line 5) | string GeneratePassword();

FILE: wingtipgamesb2c/src/WingTipCommon/Generators/PasswordCharacters.cs
  type PasswordCharacters (line 5) | [Flags]

FILE: wingtipgamesb2c/src/WingTipCommon/Generators/PasswordGenerator.cs
  class PasswordGenerator (line 5) | public class PasswordGenerator : IPasswordGenerator
    method PasswordGenerator (line 7) | public PasswordGenerator(
    method GeneratePassword (line 26) | public string GeneratePassword()
    method IsStrongPassword (line 38) | private static bool IsStrongPassword(string secret)

FILE: wingtipgamesb2c/src/WingTipCommon/Generators/RandomPasswordGenerator.cs
  class RandomPasswordGenerator (line 9) | public static class RandomPasswordGenerator
    method Generate (line 11) | public static string Generate(int length, PasswordCharacters includedC...
    method GenerateCharacters (line 33) | private static char[] GenerateCharacters(PasswordCharacters includedCh...

FILE: wingtipgamesb2c/src/WingTipCommon/Identity/Migrations/20170324053803_CreateDatabase.Designer.cs
  class CreateDatabase (line 9) | [DbContext(typeof(WingTipDbContext))]
    method BuildTargetModel (line 13) | protected override void BuildTargetModel(ModelBuilder modelBuilder)

FILE: wingtipgamesb2c/src/WingTipCommon/Identity/Migrations/20170324053803_CreateDatabase.cs
  class CreateDatabase (line 7) | public partial class CreateDatabase : Migration
    method Up (line 9) | protected override void Up(MigrationBuilder migrationBuilder)
    method Down (line 189) | protected override void Down(MigrationBuilder migrationBuilder)

FILE: wingtipgamesb2c/src/WingTipCommon/Identity/Migrations/WingTipDbContextModelSnapshot.cs
  class WingTipDbContextModelSnapshot (line 9) | [DbContext(typeof(WingTipDbContext))]
    method BuildModel (line 12) | protected override void BuildModel(ModelBuilder modelBuilder)

FILE: wingtipgamesb2c/src/WingTipCommon/Identity/WingTipDbContext.cs
  class WingTipDbContext (line 6) | public class WingTipDbContext : IdentityDbContext<WingTipUser>
    method WingTipDbContext (line 8) | public WingTipDbContext(DbContextOptions options)

FILE: wingtipgamesb2c/src/WingTipCommon/Identity/WingTipUser.cs
  class WingTipUser (line 5) | public class WingTipUser : IdentityUser

FILE: wingtipgamesb2c/src/WingTipCommon/Identity/WingTipUserManager.cs
  class WingTipUserManager (line 11) | public class WingTipUserManager : UserManager<WingTipUser>
    method WingTipUserManager (line 13) | public WingTipUserManager(
    method SetPasswordAsync (line 27) | public async Task<IdentityResult> SetPasswordAsync(WingTipUser user, s...

FILE: wingtipgamesb2c/src/WingTipCommon/MigrationStatus.cs
  type MigrationStatus (line 3) | public enum MigrationStatus

FILE: wingtipgamesb2c/src/WingTipCommon/Services/AuthenticationService.cs
  class AuthenticationService (line 7) | public class AuthenticationService : IAuthenticationService
    method AuthenticationService (line 11) | public AuthenticationService(string tenantId)
    method AcquireTokenAsync (line 21) | public Task<AuthenticationResult> AcquireTokenAsync(string resource, C...
    method AcquireTokenAsync (line 26) | public Task<AuthenticationResult> AcquireTokenAsync(
    method AcquireTokenByAuthorizationCodeAsync (line 40) | public Task<AuthenticationResult> AcquireTokenByAuthorizationCodeAsync(

FILE: wingtipgamesb2c/src/WingTipCommon/Services/GraphService.cs
  class GraphService (line 12) | public class GraphService : IGraphService
    method GraphService (line 21) | public GraphService(
    method GraphService (line 30) | public GraphService(
    method CreateUserAsync (line 58) | public async Task<JObject> CreateUserAsync(
    method DeleteUserAsync (line 107) | public async Task DeleteUserAsync(string userName)
    method GetAuditAsync (line 117) | public async Task<JObject> GetAuditAsync(string activityType, int top,...
    method GetReportAsync (line 127) | public async Task<JObject> GetReportAsync(string reportType, string us...
    method ResetAsync (line 137) | public async Task ResetAsync(string userName)
    method SetUserActivationStatusAsync (line 158) | public async Task SetUserActivationStatusAsync(string userName, string...
    method SetUserPasswordAsync (line 177) | public async Task SetUserPasswordAsync(string userName, string password)
    method AcquireTokenForApplicationAsync (line 200) | private Task<AuthenticationResult> AcquireTokenForApplicationAsync()
    method AcquireTokenForUserAsync (line 205) | private Task<AuthenticationResult> AcquireTokenForUserAsync(string use...
    method GetUserBySignInNameAsync (line 214) | private async Task<JObject> GetUserBySignInNameAsync(string signInName)
    method SendGraphDeleteRequestAsync (line 230) | private Task SendGraphDeleteRequestAsync(Func<Task<AuthenticationResul...
    method SendGraphGetRequestAsync (line 240) | private Task<string> SendGraphGetRequestAsync(
    method SendGraphPatchRequestAsync (line 254) | private Task<string> SendGraphPatchRequestAsync(
    method SendGraphPostRequestAsync (line 277) | private Task<string> SendGraphPostRequestAsync(
    method SendGraphRequestAsync (line 300) | private async Task<string> SendGraphRequestAsync(

FILE: wingtipgamesb2c/src/WingTipCommon/Services/IAuthenticationService.cs
  type IAuthenticationService (line 7) | public interface IAuthenticationService
    method AcquireTokenAsync (line 9) | Task<AuthenticationResult> AcquireTokenAsync(string resource, ClientCr...
    method AcquireTokenAsync (line 11) | Task<AuthenticationResult> AcquireTokenAsync(
    method AcquireTokenByAuthorizationCodeAsync (line 17) | Task<AuthenticationResult> AcquireTokenByAuthorizationCodeAsync(

FILE: wingtipgamesb2c/src/WingTipCommon/Services/IGraphService.cs
  type IGraphService (line 6) | public interface IGraphService
    method CreateUserAsync (line 8) | Task<JObject> CreateUserAsync(
    method DeleteUserAsync (line 16) | Task DeleteUserAsync(string userName);
    method GetAuditAsync (line 18) | Task<JObject> GetAuditAsync(string activityType, int top, string userId);
    method GetReportAsync (line 20) | Task<JObject> GetReportAsync(string reportType, string userId);
    method ResetAsync (line 22) | Task ResetAsync(string userName);
    method SetUserActivationStatusAsync (line 24) | Task SetUserActivationStatusAsync(string userName, string activationSt...
    method SetUserPasswordAsync (line 26) | Task SetUserPasswordAsync(string userName, string password);

FILE: wingtipgamesb2c/src/WingTipCommon/Services/ISmtpService.cs
  type ISmtpService (line 3) | public interface ISmtpService
    method SendActivationEmail (line 5) | void SendActivationEmail(string toAddress, string displayName, string ...
    method SendInvitationEmail (line 7) | void SendInvitationEmail(string toAddress, string redeemUrl);

FILE: wingtipgamesb2c/src/WingTipCommon/Services/SendGridSmtpService.cs
  class SendGridSmtpService (line 5) | public class SendGridSmtpService : ISmtpService
    method SendGridSmtpService (line 13) | public SendGridSmtpService(
    method SendActivationEmail (line 27) | public void SendActivationEmail(string toAddress, string displayName, ...
    method SendInvitationEmail (line 35) | public void SendInvitationEmail(string toAddress, string redeemUrl)
    method SendEmail (line 43) | private void SendEmail(string toAddress, string subject, string body)

FILE: wingtipgamesb2c/src/WingTipCommon/WingTipClaimTypes.cs
  class WingTipClaimTypes (line 3) | public static class WingTipClaimTypes

FILE: wingtipgamesb2c/src/WingTipGamesWebApplication/Api/Controllers/GamesController.cs
  class GamesController (line 10) | [Authorize(ActiveAuthenticationSchemes = Constants.AuthenticationSchemes...
    method GamesController (line 16) | public GamesController(IGameRepository gameRepository)
    method GetNewReleaseGames (line 21) | [Route("newrelease")]

FILE: wingtipgamesb2c/src/WingTipGamesWebApplication/Configuration/ActivationControllerOptions.cs
  class ActivationControllerOptions (line 3) | public class ActivationControllerOptions

FILE: wingtipgamesb2c/src/WingTipGamesWebApplication/Configuration/InvitationControllerOptions.cs
  class InvitationControllerOptions (line 3) | public class InvitationControllerOptions

FILE: wingtipgamesb2c/src/WingTipGamesWebApplication/Constants.cs
  class Constants (line 3) | public static class Constants
    class AuthenticationPropertiesKeys (line 5) | public static class AuthenticationPropertiesKeys
    class AuthenticationSchemes (line 22) | public static class AuthenticationSchemes
    class AuthorizationPolicies (line 29) | public static class AuthorizationPolicies
    class CookieNames (line 34) | public static class CookieNames
    class Cultures (line 41) | public static class Cultures
      class Keys (line 43) | public static class Keys
      class Values (line 52) | public static class Values
    class Domains (line 62) | public static class Domains
    class Locations (line 69) | public static class Locations
      class Keys (line 71) | public static class Keys
      class Values (line 82) | public static class Values
    class PlayerZones (line 94) | public static class PlayerZones
    class PolicyIds (line 105) | public static class PolicyIds
    class TempDataKeys (line 138) | public static class TempDataKeys
    class ViewDataKeys (line 143) | public static class ViewDataKeys

FILE: wingtipgamesb2c/src/WingTipGamesWebApplication/Controllers/AccountController.cs
  class AccountController (line 12) | [Authorize]
    method AccountController (line 17) | public AccountController(IGeolocationService geolocationService)
    method EditProfile (line 22) | [AllowAnonymous]
    method Link (line 46) | [AllowAnonymous]
    method LinkError (line 69) | public IActionResult LinkError(string returnUrl)
    method LoggedIn (line 74) | public IActionResult LoggedIn(string returnUrl)
    method LogIn (line 84) | [AllowAnonymous]
    method LogInUsingAppCode (line 187) | [AllowAnonymous]
    method LogInUsingAuthyCode (line 208) | [AllowAnonymous]
    method LogInUsingEmailCode (line 229) | [AllowAnonymous]
    method LogInUsingPhoneCode (line 250) | [AllowAnonymous]
    method LogOut (line 271) | [HttpPost]
    method RecoverPassword (line 286) | [AllowAnonymous]
    method RegisterUsingAppCode (line 307) | [AllowAnonymous]
    method RegisterUsingAuthyCode (line 328) | [AllowAnonymous]
    method GetLocationAsync (line 349) | private async Task<string> GetLocationAsync()

FILE: wingtipgamesb2c/src/WingTipGamesWebApplication/Controllers/ActivationController.cs
  class ActivationController (line 17) | public class ActivationController : Controller
    method ActivationController (line 22) | public ActivationController(IGameRepository gameRepository, IOptions<A...
    method Redeem (line 34) | [HttpGet]
    method Redeemed (line 61) | [HttpGet]
    method GenerateRedeemUrl (line 74) | private string GenerateRedeemUrl(
    method ValidateSignedRedeemUrl (line 99) | private bool ValidateSignedRedeemUrl(

FILE: wingtipgamesb2c/src/WingTipGamesWebApplication/Controllers/BillingController.cs
  class BillingController (line 13) | public class BillingController : Controller
    method BillingController (line 17) | public BillingController(IBillingService billingService)
    method Index (line 22) | [Authorize]
    method GetAccessTokenAsync (line 46) | private async Task<string> GetAccessTokenAsync()

FILE: wingtipgamesb2c/src/WingTipGamesWebApplication/Controllers/DemoController.cs
  class DemoController (line 5) | public class DemoController : Controller
    method Index (line 7) | public IActionResult Index()

FILE: wingtipgamesb2c/src/WingTipGamesWebApplication/Controllers/HomeController.cs
  class HomeController (line 11) | public class HomeController : Controller
    method HomeController (line 15) | public HomeController(IGameRepository gameRepository)
    method ChangeCulture (line 20) | [HttpPost]
    method ChangeLocation (line 43) | [HttpPost]
    method Error (line 66) | public IActionResult Error()
    method Index (line 71) | public async Task<IActionResult> Index()

FILE: wingtipgamesb2c/src/WingTipGamesWebApplication/Controllers/InvitationController.cs
  class InvitationController (line 18) | public class InvitationController : Controller
    method InvitationController (line 26) | public InvitationController(IGameRepository gameRepository, IOptions<I...
    method Create (line 39) | [HttpGet]
    method Create (line 45) | [HttpPost]
    method Redeem (line 89) | [HttpGet]
    method Redeemed (line 114) | [HttpGet]
    method GenerateRedeemUrl (line 127) | private string GenerateRedeemUrl(
    method GenerateSignedRedeemUrl (line 150) | private string GenerateSignedRedeemUrl(string emailAddress)
    method ValidateSignedRedeemUrl (line 175) | private bool ValidateSignedRedeemUrl(

FILE: wingtipgamesb2c/src/WingTipGamesWebApplication/Controllers/MusicController.cs
  class MusicController (line 11) | public class MusicController : Controller
    method MusicController (line 15) | public MusicController(IMusicService albumsService)
    method Index (line 20) | [Authorize]
    method GetAccessTokenAsync (line 34) | private async Task<string> GetAccessTokenAsync()

FILE: wingtipgamesb2c/src/WingTipGamesWebApplication/Filters/CultureFilterAttribute.cs
  class CultureFilterAttribute (line 7) | public class CultureFilterAttribute : ActionFilterAttribute
    method OnActionExecuted (line 9) | public override void OnActionExecuted(ActionExecutedContext context)

FILE: wingtipgamesb2c/src/WingTipGamesWebApplication/Filters/LocationFilterAttribute.cs
  class LocationFilterAttribute (line 7) | public class LocationFilterAttribute : ActionFilterAttribute
    method OnActionExecuted (line 9) | public override void OnActionExecuted(ActionExecutedContext context)

FILE: wingtipgamesb2c/src/WingTipGamesWebApplication/HtmlHelpers/DropDownListHelpers.cs
  class DropDownListHelpers (line 7) | public static class DropDownListHelpers
    method DropDownListHelpers (line 12) | static DropDownListHelpers()
    method CreateCultureSelectListItems (line 30) | public static IEnumerable<SelectListItem> CreateCultureSelectListItems...
    method CreateLocationSelectListItems (line 38) | public static IEnumerable<SelectListItem> CreateLocationSelectListItem...

FILE: wingtipgamesb2c/src/WingTipGamesWebApplication/HtmlHelpers/NavbarHelper.cs
  class NavbarHelper (line 6) | public static class NavbarHelper
    method ActiveNavbarItem (line 8) | public static string ActiveNavbarItem(this IHtmlHelper htmlHelper, str...

FILE: wingtipgamesb2c/src/WingTipGamesWebApplication/IdentityExtensions.cs
  class IdentityExtensions (line 8) | public static class IdentityExtensions
    method HasIdentityProvider (line 10) | public static bool HasIdentityProvider(this IIdentity identity)
    method GetDisplayName (line 20) | public static string GetDisplayName(this IIdentity identity)
    method GetEmailAddress (line 25) | public static string GetEmailAddress(this IIdentity identity)
    method GetIdentityProvider (line 30) | public static string GetIdentityProvider(this IIdentity identity)
    method GetPictureUrl (line 35) | public static string GetPictureUrl(this IIdentity identity)
    method GetPlayerProfilePercentComplete (line 54) | public static string GetPlayerProfilePercentComplete(this IIdentity id...
    method GetPlayerTag (line 59) | public static string GetPlayerTag(this IIdentity identity)
    method GetPlayerZone (line 64) | public static string GetPlayerZone(this IIdentity identity)
    method GetPolicy (line 69) | public static string GetPolicy(this IIdentity identity)
    method IsNewUser (line 74) | public static bool IsNewUser(this IIdentity identity)
    method GetClaimValue (line 98) | private static string GetClaimValue(IIdentity identity, string claimType)

FILE: wingtipgamesb2c/src/WingTipGamesWebApplication/Models/Album.cs
  class Album (line 3) | public class Album

FILE: wingtipgamesb2c/src/WingTipGamesWebApplication/Models/Artist.cs
  class Artist (line 3) | public class Artist

FILE: wingtipgamesb2c/src/WingTipGamesWebApplication/Models/Game.cs
  class Game (line 3) | public class Game

FILE: wingtipgamesb2c/src/WingTipGamesWebApplication/Models/Order.cs
  class Order (line 5) | public class Order

FILE: wingtipgamesb2c/src/WingTipGamesWebApplication/Program.cs
  class Program (line 6) | public class Program
    method Main (line 8) | public static void Main(string[] args)

FILE: wingtipgamesb2c/src/WingTipGamesWebApplication/Repositories/GameRepository.cs
  class GameRepository (line 7) | public class GameRepository : IGameRepository
    method GetNewReleaseGamesAsync (line 9) | public Task<IEnumerable<Game>> GetNewReleaseGamesAsync()

FILE: wingtipgamesb2c/src/WingTipGamesWebApplication/Repositories/Games.cs
  class Games (line 6) | public static class Games
    method Games (line 8) | static Games()

FILE: wingtipgamesb2c/src/WingTipGamesWebApplication/Repositories/IGameRepository.cs
  type IGameRepository (line 7) | public interface IGameRepository
    method GetNewReleaseGamesAsync (line 9) | Task<IEnumerable<Game>> GetNewReleaseGamesAsync();

FILE: wingtipgamesb2c/src/WingTipGamesWebApplication/Services/FreeGeoIpGeolocationService.cs
  class FreeGeoIpGeolocationService (line 8) | public class FreeGeoIpGeolocationService : IGeolocationService
    method FreeGeoIpGeolocationService (line 14) | public FreeGeoIpGeolocationService(string baseUrl, string apiKey, stri...
    method GetLocationAsync (line 21) | public async Task<Location> GetLocationAsync(string ipAddress)

FILE: wingtipgamesb2c/src/WingTipGamesWebApplication/Services/IBillingService.cs
  type IBillingService (line 7) | public interface IBillingService
    method GetOrdersAsync (line 9) | Task<IEnumerable<Order>> GetOrdersAsync(string accessToken);

FILE: wingtipgamesb2c/src/WingTipGamesWebApplication/Services/IGeolocationService.cs
  type IGeolocationService (line 5) | public interface IGeolocationService
    method GetLocationAsync (line 7) | Task<Location> GetLocationAsync(string ipAddress);

FILE: wingtipgamesb2c/src/WingTipGamesWebApplication/Services/IMusicService.cs
  type IMusicService (line 7) | public interface IMusicService
    method GetNewReleaseAlbumsAsync (line 9) | Task<IEnumerable<Album>> GetNewReleaseAlbumsAsync(string accessToken);

FILE: wingtipgamesb2c/src/WingTipGamesWebApplication/Services/Location.cs
  class Location (line 5) | public class Location

FILE: wingtipgamesb2c/src/WingTipGamesWebApplication/Services/WingTipBillingService.cs
  class WingTipBillingService (line 11) | public class WingTipBillingService : IBillingService, IDisposable
    method WingTipBillingService (line 15) | public WingTipBillingService()
    method GetOrdersAsync (line 20) | public async Task<IEnumerable<Order>> GetOrdersAsync(string accessToken)
    method Dispose (line 31) | public void Dispose()

FILE: wingtipgamesb2c/src/WingTipGamesWebApplication/Services/WingTipMusicService.cs
  class WingTipMusicService (line 11) | public class WingTipMusicService : IMusicService, IDisposable
    method WingTipMusicService (line 15) | public WingTipMusicService()
    method GetNewReleaseAlbumsAsync (line 20) | public async Task<IEnumerable<Album>> GetNewReleaseAlbumsAsync(string ...
    method Dispose (line 31) | public void Dispose()

FILE: wingtipgamesb2c/src/WingTipGamesWebApplication/Startup.cs
  class Startup (line 27) | public class Startup
    method Startup (line 29) | public Startup(IHostingEnvironment hostingEnvironment)
    method Configure (line 46) | public void Configure(IApplicationBuilder applicationBuilder, IHosting...
    method ConfigureServices (line 233) | public void ConfigureServices(IServiceCollection services)
    method ConfigureCookieAuthentication (line 302) | private static void ConfigureCookieAuthentication(IApplicationBuilder ...
    method ConfigureJwtBearerAuthentication (line 313) | private static void ConfigureJwtBearerAuthentication(IApplicationBuild...
    method ConfigureOpenIdConnectAuthenticationOptions (line 324) | private static void ConfigureOpenIdConnectAuthenticationOptions(
    method ConfigureOpenIdConnectAuthenticationWithLink (line 509) | private static void ConfigureOpenIdConnectAuthenticationWithLink(
    method ConfigureOpenIdConnectAuthenticationWithRedirect (line 537) | private static void ConfigureOpenIdConnectAuthenticationWithRedirect(
    method CreateSelfIssuedToken (line 563) | internal static string CreateSelfIssuedToken(

FILE: wingtipgamesb2c/src/WingTipGamesWebApplication/ViewModels/Activation/RedeemedViewModel.cs
  class RedeemedViewModel (line 6) | public class RedeemedViewModel

FILE: wingtipgamesb2c/src/WingTipGamesWebApplication/ViewModels/Billing/IndexViewModel.cs
  class IndexViewModel (line 6) | public class IndexViewModel

FILE: wingtipgamesb2c/src/WingTipGamesWebApplication/ViewModels/Home/IndexViewModel.cs
  class IndexViewModel (line 6) | public class IndexViewModel

FILE: wingtipgamesb2c/src/WingTipGamesWebApplication/ViewModels/Invitation/CreateViewModel.cs
  class CreateViewModel (line 5) | public class CreateViewModel

FILE: wingtipgamesb2c/src/WingTipGamesWebApplication/ViewModels/Invitation/RedeemedViewModel.cs
  class RedeemedViewModel (line 6) | public class RedeemedViewModel

FILE: wingtipgamesb2c/src/WingTipGamesWebApplication/ViewModels/Music/IndexViewModel.cs
  class IndexViewModel (line 6) | public class IndexViewModel

FILE: wingtipgamesb2c/src/WingTipGamesWebApplication/wwwroot/lib/bootstrap/dist/js/bootstrap.js
  function transitionEnd (line 34) | function transitionEnd() {
  function removeElement (line 126) | function removeElement() {
  function Plugin (line 142) | function Plugin(option) {
  function Plugin (line 251) | function Plugin(option) {
  function Plugin (line 475) | function Plugin(option) {
  function getTargetFromTrigger (line 695) | function getTargetFromTrigger($trigger) {
  function Plugin (line 707) | function Plugin(option) {
  function getParent (line 774) | function getParent($this) {
  function clearMenus (line 787) | function clearMenus(e) {
  function Plugin (line 880) | function Plugin(option) {
  function Plugin (line 1208) | function Plugin(option, _relatedTarget) {
  function complete (line 1574) | function complete() {
  function Plugin (line 1750) | function Plugin(option) {
  function Plugin (line 1859) | function Plugin(option) {
  function ScrollSpy (line 1902) | function ScrollSpy(element, options) {
  function Plugin (line 2022) | function Plugin(option) {
  function next (line 2131) | function next() {
  function Plugin (line 2177) | function Plugin(option) {
  function Plugin (line 2334) | function Plugin(option) {

FILE: wingtipgamesb2c/src/WingTipGamesWebApplication/wwwroot/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.js
  function setValidationValues (line 14) | function setValidationValues(options, ruleName, value) {
  function splitAndTrim (line 21) | function splitAndTrim(value) {
  function escapeAttributeValue (line 25) | function escapeAttributeValue(value) {
  function getModelPrefix (line 30) | function getModelPrefix(fieldName) {
  function appendModelPrefix (line 34) | function appendModelPrefix(value, prefix) {
  function onError (line 41) | function onError(error, inputElement) {  // 'this' is the form element
  function onErrors (line 58) | function onErrors(event, validator) {  // 'this' is the form element
  function onSuccess (line 72) | function onSuccess(error) {  // 'this' is the form element
  function onReset (line 88) | function onReset(event) {  // 'this' is the form element
  function validationInfo (line 113) | function validationInfo(form) {

FILE: wingtipgamesb2c/src/WingTipGamesWebApplication/wwwroot/lib/jquery-validation/dist/additional-methods.js
  function stripHtml (line 19) | function stripHtml(value) {

FILE: wingtipgamesb2c/src/WingTipGamesWebApplication/wwwroot/lib/jquery-validation/dist/jquery.validate.js
  function handle (line 65) | function handle() {
  function delegate (line 375) | function delegate( event ) {

FILE: wingtipgamesb2c/src/WingTipGamesWebApplication/wwwroot/lib/jquery/dist/jquery.js
  function isArrayLike (line 524) | function isArrayLike( obj ) {
  function Sizzle (line 733) | function Sizzle( selector, context, results, seed ) {
  function createCache (line 873) | function createCache() {
  function markFunction (line 891) | function markFunction( fn ) {
  function assert (line 900) | function assert( fn ) {
  function addHandle (line 922) | function addHandle( attrs, handler ) {
  function siblingCheck (line 937) | function siblingCheck( a, b ) {
  function createInputPseudo (line 964) | function createInputPseudo( type ) {
  function createButtonPseudo (line 975) | function createButtonPseudo( type ) {
  function createPositionalPseudo (line 986) | function createPositionalPseudo( fn ) {
  function testContext (line 1009) | function testContext( context ) {
  function setFilters (line 2054) | function setFilters() {}
  function toSelector (line 2125) | function toSelector( tokens ) {
  function addCombinator (line 2135) | function addCombinator( matcher, combinator, base ) {
  function elementMatcher (line 2193) | function elementMatcher( matchers ) {
  function multipleContexts (line 2207) | function multipleContexts( selector, contexts, results ) {
  function condense (line 2216) | function condense( unmatched, map, filter, context, xml ) {
  function setMatcher (line 2237) | function setMatcher( preFilter, selector, matcher, postFilter, postFinde...
  function matcherFromTokens (line 2330) | function matcherFromTokens( tokens ) {
  function matcherFromGroupMatchers (line 2388) | function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
  function winnow (line 2726) | function winnow( elements, qualifier, not ) {
  function sibling (line 3033) | function sibling( cur, dir ) {
  function createOptions (line 3109) | function createOptions( options ) {
  function completed (line 3544) | function completed() {
  function Data (line 3655) | function Data() {
  function dataAttr (line 3865) | function dataAttr( elem, key, data ) {
  function adjustCSS (line 4182) | function adjustCSS( elem, prop, valueParts, tween ) {
  function getAll (line 4271) | function getAll( context, tag ) {
  function setGlobalEval (line 4288) | function setGlobalEval( elems, refElements ) {
  function buildFragment (line 4304) | function buildFragment( elems, context, scripts, selection, ignored ) {
  function returnTrue (line 4425) | function returnTrue() {
  function returnFalse (line 4429) | function returnFalse() {
  function safeActiveElement (line 4435) | function safeActiveElement() {
  function on (line 4441) | function on( elem, types, selector, data, fn, one ) {
  function manipulationTarget (line 5131) | function manipulationTarget( elem, content ) {
  function disableScript (line 5142) | function disableScript( elem ) {
  function restoreScript (line 5146) | function restoreScript( elem ) {
  function cloneCopyEvent (line 5158) | function cloneCopyEvent( src, dest ) {
  function fixInput (line 5193) | function fixInput( src, dest ) {
  function domManip (line 5206) | function domManip( collection, args, callback, ignored ) {
  function remove (line 5296) | function remove( elem, selector, keepData ) {
  function actualDisplay (line 5587) | function actualDisplay( name, doc ) {
  function defaultDisplay (line 5603) | function defaultDisplay( nodeName ) {
  function computeStyleTests (line 5699) | function computeStyleTests() {
  function curCSS (line 5789) | function curCSS( elem, name, computed ) {
  function addGetHookIf (line 5836) | function addGetHookIf( conditionFn, hookFn ) {
  function vendorPropName (line 5873) | function vendorPropName( name ) {
  function setPositiveNumber (line 5892) | function setPositiveNumber( elem, value, subtract ) {
  function augmentWidthOrHeight (line 5904) | function augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) {
  function getWidthOrHeight (line 5948) | function getWidthOrHeight( elem, name, extra ) {
  function showHide (line 6006) | function showHide( elements, show ) {
  function Tween (line 6345) | function Tween( elem, options, prop, end, easing ) {
  function createFxNow (line 6469) | function createFxNow() {
  function genFx (line 6477) | function genFx( type, includeWidth ) {
  function createTween (line 6497) | function createTween( value, prop, animation ) {
  function defaultPrefilter (line 6511) | function defaultPrefilter( elem, props, opts ) {
  function propFilter (line 6647) | function propFilter( props, specialEasing ) {
  function Animation (line 6684) | function Animation( elem, properties, options ) {
  function getClass (line 7357) | function getClass( elem ) {
  function addToPrefiltersOrTransports (line 8022) | function addToPrefiltersOrTransports( structure ) {
  function inspectPrefiltersOrTransports (line 8056) | function inspectPrefiltersOrTransports( structure, options, originalOpti...
  function ajaxExtend (line 8085) | function ajaxExtend( target, src ) {
  function ajaxHandleResponses (line 8105) | function ajaxHandleResponses( s, jqXHR, responses ) {
  function ajaxConvert (line 8163) | function ajaxConvert( s, response, jqXHR, isSuccess ) {
  function done (line 8668) | function done( status, nativeStatusText, responses, headers ) {
  function buildParams (line 8921) | function buildParams( prefix, obj, traditional, add ) {
  function getWindow (line 9504) | function getWindow( elem ) {

FILE: wingtipgamesb2c/src/WingTipIdentityWebApplication/Api/Controllers/AccountController.cs
  class AccountController (line 19) | [Route("api/[controller]")]
    method AccountController (line 31) | public AccountController(IGraphService graphService, IPasswordGenerato...
    method CheckNonce (line 41) | [Authorize(Roles = "Client")]
    method CheckPassword (line 87) | [Authorize(Roles = "Client")]
    method Create (line 146) | [Authorize(Roles = "Client")]
    method RecoverPassword (line 204) | [Authorize(Roles = "Client")]
    method ResetPassword (line 249) | [Authorize(Roles = "Client")]

FILE: wingtipgamesb2c/src/WingTipIdentityWebApplication/Api/Models/AccountCheckNonceErrorResponse.cs
  class AccountCheckNonceErrorResponse (line 3) | public class AccountCheckNonceErrorResponse

FILE: wingtipgamesb2c/src/WingTipIdentityWebApplication/Api/Models/AccountCheckNonceRequest.cs
  class AccountCheckNonceRequest (line 3) | public class AccountCheckNonceRequest

FILE: wingtipgamesb2c/src/WingTipIdentityWebApplication/Api/Models/AccountCheckPasswordRequest.cs
  class AccountCheckPasswordRequest (line 3) | public class AccountCheckPasswordRequest

FILE: wingtipgamesb2c/src/WingTipIdentityWebApplication/Api/Models/AccountCreateRequest.cs
  class AccountCreateRequest (line 3) | public class AccountCreateRequest

FILE: wingtipgamesb2c/src/WingTipIdentityWebApplication/Api/Models/AccountRecoverPasswordRequest.cs
  class AccountRecoverPasswordRequest (line 3) | public class AccountRecoverPasswordRequest

FILE: wingtipgamesb2c/src/WingTipIdentityWebApplication/Api/Models/AccountResetPasswordRequest.cs
  class AccountResetPasswordRequest (line 3) | public class AccountResetPasswordRequest

FILE: wingtipgamesb2c/src/WingTipIdentityWebApplication/Authentication/BasicAuthenticationExtensions.cs
  class BasicAuthenticationExtensions (line 6) | public static class BasicAuthenticationExtensions
    method UseBasicAuthentication (line 8) | public static IApplicationBuilder UseBasicAuthentication(this IApplica...

FILE: wingtipgamesb2c/src/WingTipIdentityWebApplication/Authentication/BasicAuthenticationMiddleware.cs
  class BasicAuthenticationMiddleware (line 10) | public class BasicAuthenticationMiddleware
    method BasicAuthenticationMiddleware (line 16) | public BasicAuthenticationMiddleware(RequestDelegate next, string clie...
    method Invoke (line 33) | public async Task Invoke(HttpContext context)
    method TryGetBasicCredentials (line 59) | private static bool TryGetBasicCredentials(HttpRequest request, out st...
    method TryValidateBasicCredentials (line 100) | private bool TryValidateBasicCredentials(string clientId, string clien...

FILE: wingtipgamesb2c/src/WingTipIdentityWebApplication/MigrationStatus.cs
  type MigrationStatus (line 3) | public enum MigrationStatus

FILE: wingtipgamesb2c/src/WingTipIdentityWebApplication/Program.cs
  class Program (line 7) | public class Program
    method Main (line 9) | public static void Main(string[] args)

FILE: wingtipgamesb2c/src/WingTipIdentityWebApplication/Startup.cs
  class Startup (line 17) | public class Startup
    method Startup (line 19) | public Startup(IHostingEnvironment hostingEnvironment)
    method Configure (line 36) | public void Configure(IApplicationBuilder applicationBuilder, IHosting...
    method ConfigureServices (line 64) | public void ConfigureServices(IServiceCollection services)

FILE: wingtipgamesb2c/src/WingTipMusicWebApplication/Api/Controllers/AlbumsController.cs
  class AlbumsController (line 10) | [Authorize(ActiveAuthenticationSchemes = Constants.AuthenticationSchemes...
    method AlbumsController (line 16) | public AlbumsController(IAlbumRepository albumRepository)
    method GetNewReleaseAlbums (line 21) | [Route("newrelease")]

FILE: wingtipgamesb2c/src/WingTipMusicWebApplication/Constants.cs
  class Constants (line 3) | public static class Constants
    class AuthenticationPropertiesKeys (line 5) | public static class AuthenticationPropertiesKeys
    class AuthenticationSchemes (line 12) | public static class AuthenticationSchemes
    class AuthorizationPolicies (line 19) | public static class AuthorizationPolicies
    class CookieNames (line 24) | public static class CookieNames
    class Cultures (line 31) | public static class Cultures
      class Keys (line 33) | public static class Keys
      class Values (line 42) | public static class Values
    class Domains (line 52) | public static class Domains
    class ListenerGenres (line 59) | public static class ListenerGenres
    class Locations (line 80) | public static class Locations
      class Keys (line 82) | public static class Keys
      class Values (line 93) | public static class Values
    class PolicyIds (line 105) | public static class PolicyIds
    class TempDataKeys (line 114) | public static class TempDataKeys
    class ViewDataKeys (line 119) | public static class ViewDataKeys

FILE: wingtipgamesb2c/src/WingTipMusicWebApplication/Controllers/AccountController.cs
  class AccountController (line 12) | [Authorize]
    method AccountController (line 17) | public AccountController(IGeolocationService geolocationService)
    method EditProfile (line 22) | [AllowAnonymous]
    method LoggedIn (line 46) | public IActionResult LoggedIn(string returnUrl)
    method LogIn (line 56) | [AllowAnonymous]
    method LogOut (line 142) | [HttpPost]
    method RecoverPassword (line 156) | [AllowAnonymous]
    method GetLocationAsync (line 177) | private async Task<string> GetLocationAsync()

FILE: wingtipgamesb2c/src/WingTipMusicWebApplication/Controllers/DemoController.cs
  class DemoController (line 5) | public class DemoController : Controller
    method Index (line 7) | public IActionResult Index()

FILE: wingtipgamesb2c/src/WingTipMusicWebApplication/Controllers/HomeController.cs
  class HomeController (line 11) | public class HomeController : Controller
    method HomeController (line 15) | public HomeController(IAlbumRepository albumRepository)
    method ChangeCulture (line 20) | [HttpPost]
    method ChangeLocation (line 43) | [HttpPost]
    method Error (line 66) | public IActionResult Error()
    method Index (line 71) | public async Task<IActionResult> Index()

FILE: wingtipgamesb2c/src/WingTipMusicWebApplication/Filters/CultureFilterAttribute.cs
  class CultureFilterAttribute (line 7) | public class CultureFilterAttribute : ActionFilterAttribute
    method OnActionExecuted (line 9) | public override void OnActionExecuted(ActionExecutedContext context)

FILE: wingtipgamesb2c/src/WingTipMusicWebApplication/Filters/LocationFilterAttribute.cs
  class LocationFilterAttribute (line 7) | public class LocationFilterAttribute : ActionFilterAttribute
    method OnActionExecuted (line 9) | public override void OnActionExecuted(ActionExecutedContext context)

FILE: wingtipgamesb2c/src/WingTipMusicWebApplication/HtmlHelpers/DropDownListHelpers.cs
  class DropDownListHelpers (line 7) | public static class DropDownListHelpers
    method DropDownListHelpers (line 12) | static DropDownListHelpers()
    method CreateCultureSelectListItems (line 30) | public static IEnumerable<SelectListItem> CreateCultureSelectListItems...
    method CreateLocationSelectListItems (line 40) | public static IEnumerable<SelectListItem> CreateLocationSelectListItem...

FILE: wingtipgamesb2c/src/WingTipMusicWebApplication/HtmlHelpers/NavbarHelper.cs
  class NavbarHelper (line 6) | public static class NavbarHelper
    method ActiveNavbarItem (line 8) | public static string ActiveNavbarItem(this IHtmlHelper htmlHelper, str...

FILE: wingtipgamesb2c/src/WingTipMusicWebApplication/IdentityExtensions.cs
  class IdentityExtensions (line 8) | public static class IdentityExtensions
    method GetDisplayName (line 10) | public static string GetDisplayName(this IIdentity identity)
    method GetEmailAddress (line 15) | public static string GetEmailAddress(this IIdentity identity)
    method GetIdentityProvider (line 20) | public static string GetIdentityProvider(this IIdentity identity)
    method GetListenerGenre (line 25) | public static string GetListenerGenre(this IIdentity identity)
    method GetPictureUrl (line 30) | public static string GetPictureUrl(this IIdentity identity)
    method GetPolicy (line 49) | public static string GetPolicy(this IIdentity identity)
    method IsNewUser (line 54) | public static bool IsNewUser(this IIdentity identity)
    method GetClaimValue (line 78) | private static string GetClaimValue(IIdentity identity, string claimType)

FILE: wingtipgamesb2c/src/WingTipMusicWebApplication/Models/Album.cs
  class Album (line 3) | public class Album

FILE: wingtipgamesb2c/src/WingTipMusicWebApplication/Models/Artist.cs
  class Artist (line 3) | public class Artist

FILE: wingtipgamesb2c/src/WingTipMusicWebApplication/Program.cs
  class Program (line 6) | public class Program
    method Main (line 8) | public static void Main(string[] args)

FILE: wingtipgamesb2c/src/WingTipMusicWebApplication/Repositories/AlbumRepository.cs
  class AlbumRepository (line 7) | public class AlbumRepository : IAlbumRepository
    method GetNewReleaseAlbumsAsync (line 9) | public Task<IEnumerable<Album>> GetNewReleaseAlbumsAsync()

FILE: wingtipgamesb2c/src/WingTipMusicWebApplication/Repositories/Albums.cs
  class Albums (line 6) | public static class Albums
    method Albums (line 8) | static Albums()

FILE: wingtipgamesb2c/src/WingTipMusicWebApplication/Repositories/IAlbumRepository.cs
  type IAlbumRepository (line 7) | public interface IAlbumRepository
    method GetNewReleaseAlbumsAsync (line 9) | Task<IEnumerable<Album>> GetNewReleaseAlbumsAsync();

FILE: wingtipgamesb2c/src/WingTipMusicWebApplication/Services/FreeGeoIpGeolocationService.cs
  class FreeGeoIpGeolocationService (line 8) | public class FreeGeoIpGeolocationService : IGeolocationService
    method GetLocationAsync (line 10) | public async Task<Location> GetLocationAsync(string ipAddress)

FILE: wingtipgamesb2c/src/WingTipMusicWebApplication/Services/IGeolocationService.cs
  type IGeolocationService (line 5) | public interface IGeolocationService
    method GetLocationAsync (line 7) | Task<Location> GetLocationAsync(string ipAddress);

FILE: wingtipgamesb2c/src/WingTipMusicWebApplication/Services/Location.cs
  class Location (line 5) | public class Location

FILE: wingtipgamesb2c/src/WingTipMusicWebApplication/Startup.cs
  class Startup (line 24) | public class Startup
    method Startup (line 26) | public Startup(IHostingEnvironment hostingEnvironment)
    method Configure (line 43) | public void Configure(IApplicationBuilder applicationBuilder, IHosting...
    method ConfigureServices (line 119) | public void ConfigureServices(IServiceCollection services)
    method ConfigureCookieAuthentication (line 157) | private static void ConfigureCookieAuthentication(IApplicationBuilder ...
    method ConfigureJwtBearerAuthentication (line 168) | private static void ConfigureJwtBearerAuthentication(IApplicationBuild...
    method ConfigureOpenIdConnectAuthentication (line 179) | private static void ConfigureOpenIdConnectAuthentication(
    method CreateSelfIssuedToken (line 286) | private static string CreateSelfIssuedToken(

FILE: wingtipgamesb2c/src/WingTipMusicWebApplication/ViewModels/Home/IndexViewModel.cs
  class IndexViewModel (line 6) | public class IndexViewModel

FILE: wingtipgamesb2c/src/WingTipMusicWebApplication/wwwroot/lib/bootstrap/dist/js/bootstrap.js
  function transitionEnd (line 34) | function transitionEnd() {
  function removeElement (line 126) | function removeElement() {
  function Plugin (line 142) | function Plugin(option) {
  function Plugin (line 251) | function Plugin(option) {
  function Plugin (line 475) | function Plugin(option) {
  function getTargetFromTrigger (line 695) | function getTargetFromTrigger($trigger) {
  function Plugin (line 707) | function Plugin(option) {
  function getParent (line 774) | function getParent($this) {
  function clearMenus (line 787) | function clearMenus(e) {
  function Plugin (line 880) | function Plugin(option) {
  function Plugin (line 1208) | function Plugin(option, _relatedTarget) {
  function complete (line 1574) | function complete() {
  function Plugin (line 1750) | function Plugin(option) {
  function Plugin (line 1859) | function Plugin(option) {
  function ScrollSpy (line 1902) | function ScrollSpy(element, options) {
  function Plugin (line 2022) | function Plugin(option) {
  function next (line 2131) | function next() {
  function Plugin (line 2177) | function Plugin(option) {
  function Plugin (line 2334) | function Plugin(option) {

FILE: wingtipgamesb2c/src/WingTipMusicWebApplication/wwwroot/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.js
  function setValidationValues (line 14) | function setValidationValues(options, ruleName, value) {
  function splitAndTrim (line 21) | function splitAndTrim(value) {
  function escapeAttributeValue (line 25) | function escapeAttributeValue(value) {
  function getModelPrefix (line 30) | function getModelPrefix(fieldName) {
  function appendModelPrefix (line 34) | function appendModelPrefix(value, prefix) {
  function onError (line 41) | function onError(error, inputElement) {  // 'this' is the form element
  function onErrors (line 58) | function onErrors(event, validator) {  // 'this' is the form element
  function onSuccess (line 72) | function onSuccess(error) {  // 'this' is the form element
  function onReset (line 88) | function onReset(event) {  // 'this' is the form element
  function validationInfo (line 113) | function validationInfo(form) {

FILE: wingtipgamesb2c/src/WingTipMusicWebApplication/wwwroot/lib/jquery-validation/dist/additional-methods.js
  function stripHtml (line 19) | function stripHtml(value) {

FILE: wingtipgamesb2c/src/WingTipMusicWebApplication/wwwroot/lib/jquery-validation/dist/jquery.validate.js
  function handle (line 65) | function handle() {
  function delegate (line 375) | function delegate( event ) {

FILE: wingtipgamesb2c/src/WingTipMusicWebApplication/wwwroot/lib/jquery/dist/jquery.js
  function isArrayLike (line 524) | function isArrayLike( obj ) {
  function Sizzle (line 733) | function Sizzle( selector, context, results, seed ) {
  function createCache (line 873) | function createCache() {
  function markFunction (line 891) | function markFunction( fn ) {
  function assert (line 900) | function assert( fn ) {
  function addHandle (line 922) | function addHandle( attrs, handler ) {
  function siblingCheck (line 937) | function siblingCheck( a, b ) {
  function createInputPseudo (line 964) | function createInputPseudo( type ) {
  function createButtonPseudo (line 975) | function createButtonPseudo( type ) {
  function createPositionalPseudo (line 986) | function createPositionalPseudo( fn ) {
  function testContext (line 1009) | function testContext( context ) {
  function setFilters (line 2054) | function setFilters() {}
  function toSelector (line 2125) | function toSelector( tokens ) {
  function addCombinator (line 2135) | function addCombinator( matcher, combinator, base ) {
  function elementMatcher (line 2193) | function elementMatcher( matchers ) {
  function multipleContexts (line 2207) | function multipleContexts( selector, contexts, results ) {
  function condense (line 2216) | function condense( unmatched, map, filter, context, xml ) {
  function setMatcher (line 2237) | function setMatcher( preFilter, selector, matcher, postFilter, postFinde...
  function matcherFromTokens (line 2330) | function matcherFromTokens( tokens ) {
  function matcherFromGroupMatchers (line 2388) | function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
  function winnow (line 2726) | function winnow( elements, qualifier, not ) {
  function sibling (line 3033) | function sibling( cur, dir ) {
  function createOptions (line 3109) | function createOptions( options ) {
  function completed (line 3544) | function completed() {
  function Data (line 3655) | function Data() {
  function dataAttr (line 3865) | function dataAttr( elem, key, data ) {
  function adjustCSS (line 4182) | function adjustCSS( elem, prop, valueParts, tween ) {
  function getAll (line 4271) | function getAll( context, tag ) {
  function setGlobalEval (line 4288) | function setGlobalEval( elems, refElements ) {
  function buildFragment (line 4304) | function buildFragment( elems, context, scripts, selection, ignored ) {
  function returnTrue (line 4425) | function returnTrue() {
  function returnFalse (line 4429) | function returnFalse() {
  function safeActiveElement (line 4435) | function safeActiveElement() {
  function on (line 4441) | function on( elem, types, selector, data, fn, one ) {
  function manipulationTarget (line 5131) | function manipulationTarget( elem, content ) {
  function disableScript (line 5142) | function disableScript( elem ) {
  function restoreScript (line 5146) | function restoreScript( elem ) {
  function cloneCopyEvent (line 5158) | function cloneCopyEvent( src, dest ) {
  function fixInput (line 5193) | function fixInput( src, dest ) {
  function domManip (line 5206) | function domManip( collection, args, callback, ignored ) {
  function remove (line 5296) | function remove( elem, selector, keepData ) {
  function actualDisplay (line 5587) | function actualDisplay( name, doc ) {
  function defaultDisplay (line 5603) | function defaultDisplay( nodeName ) {
  function computeStyleTests (line 5699) | function computeStyleTests() {
  function curCSS (line 5789) | function curCSS( elem, name, computed ) {
  function addGetHookIf (line 5836) | function addGetHookIf( conditionFn, hookFn ) {
  function vendorPropName (line 5873) | function vendorPropName( name ) {
  function setPositiveNumber (line 5892) | function setPositiveNumber( elem, value, subtract ) {
  function augmentWidthOrHeight (line 5904) | function augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) {
  function getWidthOrHeight (line 5948) | function getWidthOrHeight( elem, name, extra ) {
  function showHide (line 6006) | function showHide( elements, show ) {
  function Tween (line 6345) | function Tween( elem, options, prop, end, easing ) {
  function createFxNow (line 6469) | function createFxNow() {
  function genFx (line 6477) | function genFx( type, includeWidth ) {
  function createTween (line 6497) | function createTween( value, prop, animation ) {
  function defaultPrefilter (line 6511) | function defaultPrefilter( elem, props, opts ) {
  function propFilter (line 6647) | function propFilter( props, specialEasing ) {
  function Animation (line 6684) | function Animation( elem, properties, options ) {
  function getClass (line 7357) | function getClass( elem ) {
  function addToPrefiltersOrTransports (line 8022) | function addToPrefiltersOrTransports( structure ) {
  function inspectPrefiltersOrTransports (line 8056) | function inspectPrefiltersOrTransports( structure, options, originalOpti...
  function ajaxExtend (line 8085) | function ajaxExtend( target, src ) {
  function ajaxHandleResponses (line 8105) | function ajaxHandleResponses( s, jqXHR, responses ) {
  function ajaxConvert (line 8163) | function ajaxConvert( s, response, jqXHR, isSuccess ) {
  function done (line 8668) | function done( status, nativeStatusText, responses, headers ) {
  function buildParams (line 8921) | function buildParams( prefix, obj, traditional, add ) {
  function getWindow (line 9504) | function getWindow( elem ) {

FILE: wingtipgamesb2c/src/WingTipToysWebApplication/Configuration/UserControllerOptions.cs
  class UserControllerOptions (line 3) | public class UserControllerOptions

FILE: wingtipgamesb2c/src/WingTipToysWebApplication/Constants.cs
  class Constants (line 3) | public static class Constants
    class AuthenticationSchemes (line 5) | public static class AuthenticationSchemes

FILE: wingtipgamesb2c/src/WingTipToysWebApplication/Controllers/AccountController.cs
  class AccountController (line 9) | [Authorize]
    method LogIn (line 12) | [AllowAnonymous]
    method LogOut (line 24) | [HttpPost]

FILE: wingtipgamesb2c/src/WingTipToysWebApplication/Controllers/AuditController.cs
  class AuditController (line 12) | [Authorize]
    method AuditController (line 17) | public AuditController(IGraphService graphService)
    method ApplicationIndex (line 27) | public async Task<IActionResult> ApplicationIndex()
    method UserIndex (line 83) | public async Task<IActionResult> UserIndex()
    method GetCurrentUserId (line 135) | private string GetCurrentUserId()

FILE: wingtipgamesb2c/src/WingTipToysWebApplication/Controllers/HomeController.cs
  class HomeController (line 6) | [Authorize]
    method Error (line 9) | [AllowAnonymous]
    method Index (line 15) | public IActionResult Index()

FILE: wingtipgamesb2c/src/WingTipToysWebApplication/Controllers/ReportController.cs
  class ReportController (line 12) | [Authorize]
    method ReportController (line 17) | public ReportController(IGraphService graphService)
    method B2CAuthenticationCountSummaryIndex (line 22) | public async Task<IActionResult> B2CAuthenticationCountSummaryIndex()
    method B2CMfaRequestCountSummaryIndex (line 76) | public async Task<IActionResult> B2CMfaRequestCountSummaryIndex()
    method B2CUserJourneySummaryEventsIndex (line 102) | public async Task<IActionResult> B2CUserJourneySummaryEventsIndex()
    method TenantUserCountSummaryIndex (line 132) | public async Task<IActionResult> TenantUserCountSummaryIndex()
    method GetCurrentUserId (line 170) | private string GetCurrentUserId()

FILE: wingtipgamesb2c/src/WingTipToysWebApplication/Controllers/UserController.cs
  class UserController (line 23) | [Authorize]
    method UserController (line 38) | public UserController(
    method Activate (line 58) | public async Task<IActionResult> Activate(string id)
    method ChangePassword (line 106) | [HttpGet]
    method ChangePassword (line 117) | [HttpPost]
    method Create (line 164) | [HttpGet]
    method Create (line 170) | [HttpPost]
    method Delete (line 219) | public async Task<IActionResult> Delete(string id)
    method Demigrate (line 237) | public async Task<IActionResult> Demigrate(string id)
    method Index (line 262) | public async Task<IActionResult> Index()
    method Migrate (line 279) | public async Task<IActionResult> Migrate(string id)
    method Reset (line 315) | public async Task<IActionResult> Reset(string id)
    method GenerateRedeemUrl (line 334) | private string GenerateRedeemUrl(
    method GenerateSignedRedeemUrl (line 360) | private string GenerateSignedRedeemUrl(string emailAddress, string nonce)

FILE: wingtipgamesb2c/src/WingTipToysWebApplication/HtmlHelpers/NavbarHelper.cs
  class NavbarHelper (line 6) | public static class NavbarHelper
    method ActiveNavbarItem (line 8) | public static string ActiveNavbarItem(this IHtmlHelper htmlHelper, str...

FILE: wingtipgamesb2c/src/WingTipToysWebApplication/IdentityExtensions.cs
  class IdentityExtensions (line 7) | public static class IdentityExtensions
    method GetDisplayName (line 9) | public static string GetDisplayName(this IIdentity identity)

FILE: wingtipgamesb2c/src/WingTipToysWebApplication/MigrationStatusExtensions.cs
  class MigrationStatusExtensions (line 5) | public static class MigrationStatusExtensions
    method ToDisplayString (line 7) | public static string ToDisplayString(this MigrationStatus migrationSta...

FILE: wingtipgamesb2c/src/WingTipToysWebApplication/Program.cs
  class Program (line 6) | public class Program
    method Main (line 8) | public static void Main(string[] args)

FILE: wingtipgamesb2c/src/WingTipToysWebApplication/Startup.cs
  class Startup (line 21) | public class Startup
    method Startup (line 23) | public Startup(IHostingEnvironment hostingEnvironment)
    method Configure (line 40) | public void Configure(IApplicationBuilder applicationBuilder, IHosting...
    method ConfigureServices (line 82) | public void ConfigureServices(IServiceCollection services)
    method ConfigureCookieAuthentication (line 142) | private static void ConfigureCookieAuthentication(IApplicationBuilder ...
    method ConfigureOpenIdConnectAuthentication (line 153) | private static void ConfigureOpenIdConnectAuthentication(IApplicationB...

FILE: wingtipgamesb2c/src/WingTipToysWebApplication/ViewModels/Audit/AuditEntryViewModel.cs
  class AuditEntryViewModel (line 5) | public class AuditEntryViewModel

FILE: wingtipgamesb2c/src/WingTipToysWebApplication/ViewModels/Audit/IndexViewModel.cs
  class IndexViewModel (line 5) | public class IndexViewModel

FILE: wingtipgamesb2c/src/WingTipToysWebApplication/ViewModels/Report/B2CAuthenticationCountSummaryIndexViewModel.cs
  class B2CAuthenticationCountSummaryIndexViewModel (line 5) | public class B2CAuthenticationCountSummaryIndexViewModel

FILE: wingtipgamesb2c/src/WingTipToysWebApplication/ViewModels/Report/B2CAuthenticationCountSummaryReportEntryViewModel.cs
  class B2CAuthenticationCountSummaryReportEntryViewModel (line 5) | public class B2CAuthenticationCountSummaryReportEntryViewModel

FILE: wingtipgamesb2c/src/WingTipToysWebApplication/ViewModels/Report/B2CMfaRequestCountSummaryIndexViewModel.cs
  class B2CMfaRequestCountSummaryIndexViewModel (line 5) | public class B2CMfaRequestCountSummaryIndexViewModel

FILE: wingtipgamesb2c/src/WingTipToysWebApplication/ViewModels/Report/B2CMfaRequestCountSummaryReportEntryViewModel.cs
  class B2CMfaRequestCountSummaryReportEntryViewModel (line 5) | public class B2CMfaRequestCountSummaryReportEntryViewModel

FILE: wingtipgamesb2c/src/WingTipToysWebApplication/ViewModels/Report/B2CUserJourneySummaryEventsIndexViewModel.cs
  class B2CUserJourneySummaryEventsIndexViewModel (line 5) | public class B2CUserJourneySummaryEventsIndexViewModel

FILE: wingtipgamesb2c/src/WingTipToysWebApplication/ViewModels/Report/B2CUserJourneySummaryEventsReportEntryViewModel.cs
  class B2CUserJourneySummaryEventsReportEntryViewModel (line 5) | public class B2CUserJourneySummaryEventsReportEntryViewModel

FILE: wingtipgamesb2c/src/WingTipToysWebApplication/ViewModels/Report/TenantUserCountSummaryIndexViewModel.cs
  class TenantUserCountSummaryIndexViewModel (line 5) | public class TenantUserCountSummaryIndexViewModel

FILE: wingtipgamesb2c/src/WingTipToysWebApplication/ViewModels/Report/TenantUserCountSummaryReportEntryViewModel.cs
  class TenantUserCountSummaryReportEntryViewModel (line 5) | public class TenantUserCountSummaryReportEntryViewModel

FILE: wingtipgamesb2c/src/WingTipToysWebApplication/ViewModels/User/ChangePasswordViewModel.cs
  class ChangePasswordViewModel (line 5) | public class ChangePasswordViewModel

FILE: wingtipgamesb2c/src/WingTipToysWebApplication/ViewModels/User/CreateViewModel.cs
  class CreateViewModel (line 5) | public class CreateViewModel

FILE: wingtipgamesb2c/src/WingTipToysWebApplication/ViewModels/User/IndexViewModel.cs
  class IndexViewModel (line 5) | public class IndexViewModel

FILE: wingtipgamesb2c/src/WingTipToysWebApplication/ViewModels/User/UserViewModel.cs
  class UserViewModel (line 5) | public class UserViewModel

FILE: wingtipgamesb2c/src/WingTipToysWebApplication/wwwroot/lib/bootstrap/dist/js/bootstrap.js
  function transitionEnd (line 34) | function transitionEnd() {
  function removeElement (line 126) | function removeElement() {
  function Plugin (line 142) | function Plugin(option) {
  function Plugin (line 251) | function Plugin(option) {
  function Plugin (line 475) | function Plugin(option) {
  function getTargetFromTrigger (line 695) | function getTargetFromTrigger($trigger) {
  function Plugin (line 707) | function Plugin(option) {
  function getParent (line 774) | function getParent($this) {
  function clearMenus (line 787) | function clearMenus(e) {
  function Plugin (line 880) | function Plugin(option) {
  function Plugin (line 1208) | function Plugin(option, _relatedTarget) {
  function complete (line 1574) | function complete() {
  function Plugin (line 1750) | function Plugin(option) {
  function Plugin (line 1859) | function Plugin(option) {
  function ScrollSpy (line 1902) | function ScrollSpy(element, options) {
  function Plugin (line 2022) | function Plugin(option) {
  function next (line 2131) | function next() {
  function Plugin (line 2177) | function Plugin(option) {
  function Plugin (line 2334) | function Plugin(option) {

FILE: wingtipgamesb2c/src/WingTipToysWebApplication/wwwroot/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.js
  function setValidationValues (line 14) | function setValidationValues(options, ruleName, value) {
  function splitAndTrim (line 21) | function splitAndTrim(value) {
  function escapeAttributeValue (line 25) | function escapeAttributeValue(value) {
  function getModelPrefix (line 30) | function getModelPrefix(fieldName) {
  function appendModelPrefix (line 34) | function appendModelPrefix(value, prefix) {
  function onError (line 41) | function onError(error, inputElement) {  // 'this' is the form element
  function onErrors (line 58) | function onErrors(event, validator) {  // 'this' is the form element
  function onSuccess (line 72) | function onSuccess(error) {  // 'this' is the form element
  function onReset (line 88) | function onReset(event) {  // 'this' is the form element
  function validationInfo (line 113) | function validationInfo(form) {

FILE: wingtipgamesb2c/src/WingTipToysWebApplication/wwwroot/lib/jquery-validation/dist/additional-methods.js
  function stripHtml (line 19) | function stripHtml(value) {

FILE: wingtipgamesb2c/src/WingTipToysWebApplication/wwwroot/lib/jquery-validation/dist/jquery.validate.js
  function handle (line 65) | function handle() {
  function delegate (line 375) | function delegate( event ) {

FILE: wingtipgamesb2c/src/WingTipToysWebApplication/wwwroot/lib/jquery/dist/jquery.js
  function isArrayLike (line 524) | function isArrayLike( obj ) {
  function Sizzle (line 733) | function Sizzle( selector, context, results, seed ) {
  function createCache (line 873) | function createCache() {
  function markFunction (line 891) | function markFunction( fn ) {
  function assert (line 900) | function assert( fn ) {
  function addHandle (line 922) | function addHandle( attrs, handler ) {
  function siblingCheck (line 937) | function siblingCheck( a, b ) {
  function createInputPseudo (line 964) | function createInputPseudo( type ) {
  function createButtonPseudo (line 975) | function createButtonPseudo( type ) {
  function createPositionalPseudo (line 986) | function createPositionalPseudo( fn ) {
  function testContext (line 1009) | function testContext( context ) {
  function setFilters (line 2054) | function setFilters() {}
  function toSelector (line 2125) | function toSelector( tokens ) {
  function addCombinator (line 2135) | function addCombinator( matcher, combinator, base ) {
  function elementMatcher (line 2193) | function elementMatcher( matchers ) {
  function multipleContexts (line 2207) | function multipleContexts( selector, contexts, results ) {
  function condense (line 2216) | function condense( unmatched, map, filter, context, xml ) {
  function setMatcher (line 2237) | function setMatcher( preFilter, selector, matcher, postFilter, postFinde...
  function matcherFromTokens (line 2330) | function matcherFromTokens( tokens ) {
  function matcherFromGroupMatchers (line 2388) | function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
  function winnow (line 2726) | function winnow( elements, qualifier, not ) {
  function sibling (line 3033) | function sibling( cur, dir ) {
  function createOptions (line 3109) | function createOptions( options ) {
  function completed (line 3544) | function completed() {
  function Data (line 3655) | function Data() {
  function dataAttr (line 3865) | function dataAttr( elem, key, data ) {
  function adjustCSS (line 4182) | function adjustCSS( elem, prop, valueParts, tween ) {
  function getAll (line 4271) | function getAll( context, tag ) {
  function setGlobalEval (line 4288) | function setGlobalEval( elems, refElements ) {
  function buildFragment (line 4304) | function buildFragment( elems, context, scripts, selection, ignored ) {
  function returnTrue (line 4425) | function returnTrue() {
  function returnFalse (line 4429) | function returnFalse() {
  function safeActiveElement (line 4435) | function safeActiveElement() {
  function on (line 4441) | function on( elem, types, selector, data, fn, one ) {
  function manipulationTarget (line 5131) | function manipulationTarget( elem, content ) {
  function disableScript (line 5142) | function disableScript( elem ) {
  function restoreScript (line 5146) | function restoreScript( elem ) {
  function cloneCopyEvent (line 5158) | function cloneCopyEvent( src, dest ) {
  function fixInput (line 5193) | function fixInput( src, dest ) {
  function domManip (line 5206) | function domManip( collection, args, callback, ignored ) {
  function remove (line 5296) | function remove( elem, selector, keepData ) {
  function actualDisplay (line 5587) | function actualDisplay( name, doc ) {
  function defaultDisplay (line 5603) | function defaultDisplay( nodeName ) {
  function computeStyleTests (line 5699) | function computeStyleTests() {
  function curCSS (line 5789) | function curCSS( elem, name, computed ) {
  function addGetHookIf (line 5836) | function addGetHookIf( conditionFn, hookFn ) {
  function vendorPropName (line 5873) | function vendorPropName( name ) {
  function setPositiveNumber (line 5892) | function setPositiveNumber( elem, value, subtract ) {
  function augmentWidthOrHeight (line 5904) | function augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) {
  function getWidthOrHeight (line 5948) | function getWidthOrHeight( elem, name, extra ) {
  function showHide (line 6006) | function showHide( elements, show ) {
  function Tween (line 6345) | function Tween( elem, options, prop, end, easing ) {
  function createFxNow (line 6469) | function createFxNow() {
  function genFx (line 6477) | function genFx( type, includeWidth ) {
  function createTween (line 6497) | function createTween( value, prop, animation ) {
  function defaultPrefilter (line 6511) | function defaultPrefilter( elem, props, opts ) {
  function propFilter (line 6647) | function propFilter( props, specialEasing ) {
  function Animation (line 6684) | function Animation( elem, properties, options ) {
  function getClass (line 7357) | function getClass( elem ) {
  function addToPrefiltersOrTransports (line 8022) | function addToPrefiltersOrTransports( structure ) {
  function inspectPrefiltersOrTransports (line 8056) | function inspectPrefiltersOrTransports( structure, options, originalOpti...
  function ajaxExtend (line 8085) | function ajaxExtend( target, src ) {
  function ajaxHandleResponses (line 8105) | function ajaxHandleResponses( s, jqXHR, responses ) {
  function ajaxConvert (line 8163) | function ajaxConvert( s, response, jqXHR, isSuccess ) {
  function done (line 8668) | function done( status, nativeStatusText, responses, headers ) {
  function buildParams (line 8921) | function buildParams( prefix, obj, traditional, add ) {
  function getWindow (line 9504) | function getWindow( elem ) {

FILE: wingtipgamesb2c/src/WingTipUserJourneyPlayerWebApplication/Api/Controllers/StreamController.cs
  class StreamController (line 8) | [Route("api/[controller]")]
    method StreamController (line 16) | public StreamController(AzureApplicationInsightsCredential application...
    method Get (line 27) | [HttpGet]

FILE: wingtipgamesb2c/src/WingTipUserJourneyPlayerWebApplication/AzureApplicationInsightsCredential.cs
  class AzureApplicationInsightsCredential (line 3) | public class AzureApplicationInsightsCredential

FILE: wingtipgamesb2c/src/WingTipUserJourneyPlayerWebApplication/Constants.cs
  class Constants (line 3) | public static class Constants
    class AuthenticationSchemes (line 5) | public static class AuthenticationSchemes

FILE: wingtipgamesb2c/src/WingTipUserJourneyPlayerWebApplication/Controllers/ConfigController.cs
  class ConfigController (line 5) | public class ConfigController : Controller
    method Index (line 7) | public IActionResult Index()

FILE: wingtipgamesb2c/src/WingTipUserJourneyPlayerWebApplication/Controllers/TraceController.cs
  class TraceController (line 5) | public class TraceController : Controller
    method Index (line 7) | public IActionResult Index()

FILE: wingtipgamesb2c/src/WingTipUserJourneyPlayerWebApplication/Program.cs
  class Program (line 6) | public class Program
    method Main (line 8) | public static void Main(string[] args)

FILE: wingtipgamesb2c/src/WingTipUserJourneyPlayerWebApplication/Startup.cs
  class Startup (line 15) | public class Startup
    method Startup (line 17) | public Startup(IHostingEnvironment hostingEnvironment)
    method Configure (line 34) | public void Configure(IApplicationBuilder applicationBuilder, IHosting...
    method ConfigureServices (line 78) | public void ConfigureServices(IServiceCollection services)
    method ConfigureCookieAuthentication (line 103) | private static void ConfigureCookieAuthentication(IApplicationBuilder ...
    method ConfigureOpenIdConnectAuthentication (line 114) | private static void ConfigureOpenIdConnectAuthentication(IApplicationB...

FILE: wingtipgamesb2c/src/WingTipUserJourneyPlayerWebApplication/wwwroot/js/base64url_102.js
  function DecodeBytesFromUrlCompliant64 (line 5) | function DecodeBytesFromUrlCompliant64(input) {
  function renderOAuthMessage (line 37) | function renderOAuthMessage(input)
  function renderJsonMessage (line 63) | function renderJsonMessage(string)
  function renderJson (line 74) | function renderJson(string, showError)

FILE: wingtipgamesb2c/src/WingTipUserJourneyPlayerWebApplication/wwwroot/js/config_102.js
  function Config_ReadConfig (line 74) | function Config_ReadConfig() {
  function validateStreamId (line 116) | function validateStreamId(id) {
  function getStreamUrl (line 125) | function getStreamUrl() {
  function configControlClicked (line 129) | function configControlClicked() {
  function Config_InitializeConfigUI (line 133) | function Config_InitializeConfigUI() {
  function readConfigIntoCheckboxes (line 170) | function readConfigIntoCheckboxes() {
  function Config_WriteConfig (line 205) | function Config_WriteConfig() {
  function Config_ResetConfig (line 229) | function Config_ResetConfig() {
  function Config_ReturnToReader (line 240) | function Config_ReturnToReader() {
  function CreateXMLDocFromString (line 250) | function CreateXMLDocFromString(str) {
  function CreateXmlDocFromUrl (line 264) | function CreateXmlDocFromUrl(url) {
  function renderXmlMessage (line 277) | function renderXmlMessage(str) {
  function Config_ReadLanguage (line 294) | function Config_ReadLanguage() {
  function processLoadLanguage (line 299) | function processLoadLanguage(languageElements, status, jqXHR) {
Condensed preview — 502 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (8,093K chars).
[
  {
    "path": ".gitattributes",
    "chars": 2518,
    "preview": "###############################################################################\n# Set default behavior to automatically "
  },
  {
    "path": ".gitignore",
    "chars": 3784,
    "preview": "## Ignore Visual Studio temporary files, build results, and\n## files generated by popular Visual Studio add-ons.\n\n# User"
  },
  {
    "path": "AppSamples-iOS-TouchID-master/LICENSE",
    "chars": 1183,
    "preview": "    MIT License\r\n\r\n    Copyright (c) Microsoft Corporation. All rights reserved.\r\n\r\n    Permission is hereby granted, fr"
  },
  {
    "path": "AppSamples-iOS-TouchID-master/Podfile",
    "chars": 117,
    "preview": "platform :ios, '9.0'\n\ntarget 'active-directory-ios-native-appauth-b2c' do\n  pod 'AppAuth'\n  pod 'BKPasscodeView'\nend\n"
  },
  {
    "path": "AppSamples-iOS-TouchID-master/active-directory-ios-native-appauth-b2c/AppDelegate.h",
    "chars": 447,
    "preview": "//\n//  AppDelegate.h\n//  active-directory-ios-native-appauth\n//\n//  Created by Saeed Akhter and Gerardo Saca on 3/1/17.\n"
  },
  {
    "path": "AppSamples-iOS-TouchID-master/active-directory-ios-native-appauth-b2c/AppDelegate.m",
    "chars": 2404,
    "preview": "//\n//  AppDelegate.m\n//  active-directory-ios-native-appauth\n//\n//  Created by Saeed Akhter and Gerardo Saca on 3/1/17.\n"
  },
  {
    "path": "AppSamples-iOS-TouchID-master/active-directory-ios-native-appauth-b2c/Assets.xcassets/AppIcon.appiconset/Contents.json",
    "chars": 1052,
    "preview": "{\n  \"images\" : [\n    {\n      \"size\" : \"20x20\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Icon-40.png\",\n      \"scale\""
  },
  {
    "path": "AppSamples-iOS-TouchID-master/active-directory-ios-native-appauth-b2c/Base.lproj/LaunchScreen.storyboard",
    "chars": 2803,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB\" version=\"3"
  },
  {
    "path": "AppSamples-iOS-TouchID-master/active-directory-ios-native-appauth-b2c/Base.lproj/Main.storyboard",
    "chars": 7975,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB\" version=\"3"
  },
  {
    "path": "AppSamples-iOS-TouchID-master/active-directory-ios-native-appauth-b2c/GameTableViewController.h",
    "chars": 380,
    "preview": "//\n//  GameTableViewController.h\n//  active-directory-ios-native-appauth-b2c\n//\n//  Created by John Lyons on 10/4/17.\n//"
  },
  {
    "path": "AppSamples-iOS-TouchID-master/active-directory-ios-native-appauth-b2c/GameTableViewController.m",
    "chars": 7263,
    "preview": "//\n//  GameTableViewController.m\n//  active-directory-ios-native-appauth-b2c\n//\n//  Created by John Lyons on 10/4/17.\n//"
  },
  {
    "path": "AppSamples-iOS-TouchID-master/active-directory-ios-native-appauth-b2c/Games.h",
    "chars": 407,
    "preview": "//\n//  Games.h\n//  active-directory-ios-native-appauth-b2c\n//\n//  Created by John Lyons on 10/4/17.\n//  Copyright © 2017"
  },
  {
    "path": "AppSamples-iOS-TouchID-master/active-directory-ios-native-appauth-b2c/Games.m",
    "chars": 2118,
    "preview": "//\n//  Games.m\n//  active-directory-ios-native-appauth-b2c\n//\n//  Created by John Lyons on 10/4/17.\n//  Copyright © 2017"
  },
  {
    "path": "AppSamples-iOS-TouchID-master/active-directory-ios-native-appauth-b2c/Info.plist",
    "chars": 1499,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "AppSamples-iOS-TouchID-master/active-directory-ios-native-appauth-b2c/ViewController.h",
    "chars": 407,
    "preview": "//\n//  ViewController.h\n//  active-directory-ios-native-appauth\n//\n//  Created by Saeed Akhter and Gerardo Saca on 3/1/1"
  },
  {
    "path": "AppSamples-iOS-TouchID-master/active-directory-ios-native-appauth-b2c/ViewController.m",
    "chars": 11304,
    "preview": "//\n//  ViewController.m\n//  active-directory-ios-native-appauth\n//\n//  Created by Saeed Akhter and Gerardo Saca on 3/1/1"
  },
  {
    "path": "AppSamples-iOS-TouchID-master/active-directory-ios-native-appauth-b2c/main.m",
    "chars": 381,
    "preview": "//\n//  main.m\n//  active-directory-ios-native-appauth-b2c\n//\n//  Created by Saeed Akhter and Gerardo Saca on 3/3/17.\n// "
  },
  {
    "path": "AppSamples-iOS-TouchID-master/active-directory-ios-native-appauth-b2c.xcodeproj/project.pbxproj",
    "chars": 30874,
    "preview": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 46;\n\tobjects = {\n\n/* Begin PBXBuildFile section *"
  },
  {
    "path": "AppSamples-iOS-TouchID-master/active-directory-ios-native-appauth-b2c.xcodeproj/project.xcworkspace/contents.xcworkspacedata",
    "chars": 184,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"self:active-director"
  },
  {
    "path": "AppSamples-iOS-TouchID-master/active-directory-ios-native-appauth-b2c.xcworkspace/contents.xcworkspacedata",
    "chars": 257,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"group:active-directo"
  },
  {
    "path": "AppSamples-iOS-TouchID-master/readme.md",
    "chars": 32,
    "preview": "B2C with iOS app and Touch ID.\n\n"
  },
  {
    "path": "AzureFunctionsSamples/CalculatePlayerProfilePercentCompleteWebHook/function.json",
    "chars": 317,
    "preview": "{\r\n  \"bindings\": [\r\n    {\r\n      \"type\": \"httpTrigger\",\r\n      \"direction\": \"in\",\r\n      \"webHookType\": \"genericJson\",\r\n"
  },
  {
    "path": "AzureFunctionsSamples/CalculatePlayerProfilePercentCompleteWebHook/run.csx",
    "chars": 1081,
    "preview": "#r \"Newtonsoft.Json\"\n\nusing System;\nusing System.Net;\nusing Newtonsoft.Json;\n\npublic static async Task<object> Run(HttpR"
  },
  {
    "path": "AzureFunctionsSamples/CheckPlayerTagWebHook/function.json",
    "chars": 317,
    "preview": "{\r\n  \"bindings\": [\r\n    {\r\n      \"type\": \"httpTrigger\",\r\n      \"direction\": \"in\",\r\n      \"webHookType\": \"genericJson\",\r\n"
  },
  {
    "path": "AzureFunctionsSamples/CheckPlayerTagWebHook/run.csx",
    "chars": 1361,
    "preview": "#r \"Newtonsoft.Json\"\n\nusing System;\nusing System.Net;\nusing System.Net.Http.Formatting;\nusing Newtonsoft.Json;\n\npublic s"
  },
  {
    "path": "AzureFunctionsSamples/LookUpLoyaltyWebHook/function.json",
    "chars": 317,
    "preview": "{\r\n  \"bindings\": [\r\n    {\r\n      \"type\": \"httpTrigger\",\r\n      \"direction\": \"in\",\r\n      \"webHookType\": \"genericJson\",\r\n"
  },
  {
    "path": "AzureFunctionsSamples/LookUpLoyaltyWebHook/run.csx",
    "chars": 1229,
    "preview": "#r \"Newtonsoft.Json\"\r\n\r\nusing System;\r\nusing System.Net;\r\nusing System.Net.Http.Formatting;\r\nusing Newtonsoft.Json;\r\n\r\np"
  },
  {
    "path": "AzureFunctionsSamples/SendMailWebHook/function.json",
    "chars": 317,
    "preview": "{\r\n  \"bindings\": [\r\n    {\r\n      \"type\": \"httpTrigger\",\r\n      \"direction\": \"in\",\r\n      \"webHookType\": \"genericJson\",\r\n"
  },
  {
    "path": "AzureFunctionsSamples/SendMailWebHook/run.csx",
    "chars": 2930,
    "preview": "#r \"Newtonsoft.Json\"\n\nusing System;\nusing System.Net;\nusing System.Net.Mail;\nusing Newtonsoft.Json;\n\npublic static async"
  },
  {
    "path": "AzureFunctionsSamples/host.json",
    "chars": 2,
    "preview": "{}"
  },
  {
    "path": "AzureFunctionsSamples/readme.md",
    "chars": 378,
    "preview": "\n\nThese can be uploaded into Azure Functions directly\n\nSendMail is sample for sending welcome emails with content\n\nCalcu"
  },
  {
    "path": "CONTRIBUTING.md",
    "chars": 871,
    "preview": "# Contributing to Azure samples\r\n\r\nThank you for your interest in contributing to Azure samples!\r\n\r\n## Ways to contribut"
  },
  {
    "path": "ExploreAdmin/New-AzureADB2CPolicyEngineApplications.ps1",
    "chars": 8018,
    "preview": "# This PS1 script will create the required applications for B2C Advanced\n# Supply the location of your base policy so t"
  },
  {
    "path": "LICENSE",
    "chars": 1087,
    "preview": "The MIT License (MIT)\n\nCopyright (c) 2015 Microsoft Corporation\n\nPermission is hereby granted, free of charge, to any pe"
  },
  {
    "path": "README.md",
    "chars": 2053,
    "preview": "---\nlanguages:\n- csharp\n- powershell\n- objc\n- html\n- javascript\npage_type: sample\ndescription: \"A demo of Azure AD B2C C"
  },
  {
    "path": "UserJourneyRecorder/README.md",
    "chars": 853,
    "preview": "Azure AD B2C can log activity data into Azure Application Insights for the purposes of troubleshooting during developmen"
  },
  {
    "path": "UserJourneyRecorder/UserJourneyRecorder.sln",
    "chars": 1018,
    "preview": "\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio 14\nVisualStudioVersion = 14.0.25123.0\nMini"
  },
  {
    "path": "UserJourneyRecorder/UserJourneyRecorderWebApp/Global.asax",
    "chars": 133,
    "preview": "<%@ Application Codebehind=\"Global.asax.cs\" Inherits=\"UserJourneyRecorderWebApp.UserJourneyRecorderWebApplication\" Lang"
  },
  {
    "path": "UserJourneyRecorder/UserJourneyRecorderWebApp/Global.asax.cs",
    "chars": 503,
    "preview": "using System;\nusing System.Web;\nusing System.Web.Routing;\nusing UserJourneyRecorderWebApp.Infrastructure;\n\nnamespace Us"
  },
  {
    "path": "UserJourneyRecorder/UserJourneyRecorderWebApp/Infrastructure/UserJourneyRecorderHttpHandler.cs",
    "chars": 4237,
    "preview": "using System;\nusing System.IO;\nusing System.Net;\nusing System.Text;\nusing System.Threading.Tasks;\nusing System.Web;\nusi"
  },
  {
    "path": "UserJourneyRecorder/UserJourneyRecorderWebApp/Infrastructure/UserJourneyRecorderRouteHandler.cs",
    "chars": 329,
    "preview": "using System.Web;\nusing System.Web.Routing;\n\nnamespace UserJourneyRecorderWebApp.Infrastructure\n{\n    public class User"
  },
  {
    "path": "UserJourneyRecorder/UserJourneyRecorderWebApp/Infrastructure/Utils.cs",
    "chars": 1235,
    "preview": "using System;\nusing System.IO;\nusing System.Net;\nusing System.Net.Http;\nusing System.Text.RegularExpressions;\nusing Sys"
  },
  {
    "path": "UserJourneyRecorder/UserJourneyRecorderWebApp/Properties/AssemblyInfo.cs",
    "chars": 1383,
    "preview": "using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Infor"
  },
  {
    "path": "UserJourneyRecorder/UserJourneyRecorderWebApp/Properties/Resources.Designer.cs",
    "chars": 3187,
    "preview": "//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code w"
  },
  {
    "path": "UserJourneyRecorder/UserJourneyRecorderWebApp/Properties/Resources.resx",
    "chars": 5857,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The prim"
  },
  {
    "path": "UserJourneyRecorder/UserJourneyRecorderWebApp/Properties/Settings.Designer.cs",
    "chars": 1446,
    "preview": "//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code w"
  },
  {
    "path": "UserJourneyRecorder/UserJourneyRecorderWebApp/Properties/Settings.settings",
    "chars": 437,
    "preview": "<?xml version='1.0' encoding='utf-8'?>\n<SettingsFile xmlns=\"http://schemas.microsoft.com/VisualStudio/2004/01/settings\""
  },
  {
    "path": "UserJourneyRecorder/UserJourneyRecorderWebApp/UserJourneyRecorderWebApp.csproj",
    "chars": 9132,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"12.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.micros"
  },
  {
    "path": "UserJourneyRecorder/UserJourneyRecorderWebApp/Web.Debug.config",
    "chars": 1270,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n\n<!-- For more information on using web.config transformation visit http://go.mic"
  },
  {
    "path": "UserJourneyRecorder/UserJourneyRecorderWebApp/Web.Release.config",
    "chars": 1330,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n\n<!-- For more information on using web.config transformation visit http://go.mic"
  },
  {
    "path": "UserJourneyRecorder/UserJourneyRecorderWebApp/Web.config",
    "chars": 1923,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n  <configSections>\n    <sectionGroup name=\"applicationSettings\" "
  },
  {
    "path": "UserJourneyRecorder/UserJourneyRecorderWebApp/base64url_102.js",
    "chars": 2142,
    "preview": "/// <summary>\n/// Provides extension methods for Base64 URL encoding strings\n/// </summary>\n\nfunction DecodeBytesFromUr"
  },
  {
    "path": "UserJourneyRecorder/UserJourneyRecorderWebApp/config_102.html",
    "chars": 1408,
    "preview": "<!DOCTYPE html>\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n    <title>Recorder Configuration</title>\n    <scrip"
  },
  {
    "path": "UserJourneyRecorder/UserJourneyRecorderWebApp/config_102.js",
    "chars": 12168,
    "preview": "    var Config_HasChanged = false;\n    var G_StreamId = \"\";\n    var G_Version = \"102\";\n\n    // variables read from the "
  },
  {
    "path": "UserJourneyRecorder/UserJourneyRecorderWebApp/languages/en-us_102.json",
    "chars": 6477,
    "preview": "{\n    \"G_StateitemKeyNames\": {\n        \"ORCH_CS\": \"Orchestration Step\",\n        \"RPP\": \"Protocol selected by the caller"
  },
  {
    "path": "UserJourneyRecorder/UserJourneyRecorderWebApp/packages.config",
    "chars": 542,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n  <package id=\"Microsoft.AspNet.WebApi.Client\" version=\"5.2.3\" target"
  },
  {
    "path": "UserJourneyRecorder/UserJourneyRecorderWebApp/trace_102.css",
    "chars": 3781,
    "preview": ".KindColumn {\n    width: 300px;\n    padding-left: 15px;\n    padding-right: 15px;\n    font-size: 120%;\n}\n\n.Headers {\n   "
  },
  {
    "path": "UserJourneyRecorder/UserJourneyRecorderWebApp/trace_102.html",
    "chars": 49567,
    "preview": "<!DOCTYPE html>\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n    <title>User Journey Player</title>\n    <link rel"
  },
  {
    "path": "account-linking/ACCOUNTLINKING.xml",
    "chars": 1300,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<TrustFrameworkPolicy\n  xmlns:xsi=\"http://www.w3.org/2001/XMLSch"
  },
  {
    "path": "account-linking/PASSWORDRESET.xml",
    "chars": 1063,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<TrustFrameworkPolicy\n  xmlns:xsi=\"http://www.w3.org/2001/XMLSc"
  },
  {
    "path": "account-linking/PROFILEEDIT.xml",
    "chars": 1004,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<TrustFrameworkPolicy\n  xmlns:xsi=\"http://www.w3.org/2001/XMLSc"
  },
  {
    "path": "account-linking/SignUpOrSignin.xml",
    "chars": 1290,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<TrustFrameworkPolicy\n  xmlns:xsi=\"http://www.w3.org/2001/XMLSc"
  },
  {
    "path": "account-linking/TRUSTFRAMEWORKBASE.xml",
    "chars": 77870,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<TrustFrameworkPolicy xmlns:xsi=\"http://www.w3.org/2001/XMLSche"
  },
  {
    "path": "account-linking/TRUSTFRAMEWORKEXTENSIONS.xml",
    "chars": 2359,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n<TrustFrameworkPolicy \n  xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" "
  },
  {
    "path": "account-linking/readme.md",
    "chars": 5244,
    "preview": "\nThis folder contains a complete starterpack to enable account linking.  The key pieces are defined and identified below"
  },
  {
    "path": "conditional-access-preview/IEF Policy sample with Conditional Access and Secure Pssword reset -not for prod Sep2019.xml",
    "chars": 57796,
    "preview": "<TrustFrameworkPolicy xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\""
  },
  {
    "path": "conditional-access-preview/deprecated_B2CTenant.onmicrosoft.com-B2C_1A_PolicySampleV02.xml",
    "chars": 50615,
    "preview": "<TrustFrameworkPolicy xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\""
  },
  {
    "path": "conditional-access-preview/readme.md",
    "chars": 1357,
    "preview": "Updated sample, September 25, 2019, now includes chg_password response end user experience.\n\nIntro\nAzure Active Director"
  },
  {
    "path": "wingtipgamesb2c/.gitignore",
    "chars": 4832,
    "preview": "## Ignore Visual Studio temporary files, build results, and\n## files generated by popular Visual Studio add-ons.\n##\n## G"
  },
  {
    "path": "wingtipgamesb2c/AzureADB2CSamples.sln",
    "chars": 12707,
    "preview": "\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio 15\r\nVisualStudioVersion = 15.0.26403.0\r\n"
  },
  {
    "path": "wingtipgamesb2c/Policies/b2ctechready.onmicrosoft.com_B2C_1A_activation.xml",
    "chars": 2292,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\r\n<TrustFrameworkPolicy\r\n\tPolicySchemaVersion=\"0.3.0.0\"\r\n\tTenantI"
  },
  {
    "path": "wingtipgamesb2c/Policies/b2ctechready.onmicrosoft.com_B2C_1A_base.xml",
    "chars": 328183,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\r\n<TrustFrameworkPolicy\r\n  PolicySchemaVersion=\"0.3.0.0\"\r\n  Tenan"
  },
  {
    "path": "wingtipgamesb2c/Policies/b2ctechready.onmicrosoft.com_B2C_1A_base_extensions.xml",
    "chars": 8342,
    "preview": "<TrustFrameworkPolicy\r\n  PolicySchemaVersion=\"0.3.0.0\"\r\n  TenantId=\"b2ctechready.onmicrosoft.com\"\r\n  PolicyId=\"B2C_1A_ba"
  },
  {
    "path": "wingtipgamesb2c/Policies/b2ctechready.onmicrosoft.com_B2C_1A_invitation.xml",
    "chars": 2360,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\r\n<TrustFrameworkPolicy\r\n\tPolicySchemaVersion=\"0.3.0.0\"\r\n\tTenantI"
  },
  {
    "path": "wingtipgamesb2c/Policies/b2ctechready.onmicrosoft.com_B2C_1A_link.xml",
    "chars": 1832,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\r\n<TrustFrameworkPolicy\r\n\tPolicySchemaVersion=\"0.3.0.0\"\r\n\tTenantI"
  },
  {
    "path": "wingtipgamesb2c/Policies/b2ctechready.onmicrosoft.com_B2C_1A_password_reset.xml",
    "chars": 1776,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\r\n<TrustFrameworkPolicy\r\n\tPolicySchemaVersion=\"0.3.0.0\"\r\n\tTenantI"
  },
  {
    "path": "wingtipgamesb2c/Policies/b2ctechready.onmicrosoft.com_B2C_1A_profile_update_games.xml",
    "chars": 1859,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\r\n<TrustFrameworkPolicy\r\n\tPolicySchemaVersion=\"0.3.0.0\"\r\n\tTenantI"
  },
  {
    "path": "wingtipgamesb2c/Policies/b2ctechready.onmicrosoft.com_B2C_1A_profile_update_music.xml",
    "chars": 1706,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\r\n<TrustFrameworkPolicy\r\n\tPolicySchemaVersion=\"0.3.0.0\"\r\n\tTenantI"
  },
  {
    "path": "wingtipgamesb2c/Policies/b2ctechready.onmicrosoft.com_B2C_1A_sign_in_billing.xml",
    "chars": 2359,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\r\n<TrustFrameworkPolicy\r\n\tPolicySchemaVersion=\"0.3.0.0\"\r\n\tTenantI"
  },
  {
    "path": "wingtipgamesb2c/Policies/b2ctechready.onmicrosoft.com_B2C_1A_sign_in_games_app_code.xml",
    "chars": 1813,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<TrustFrameworkPolicy\n\tPolicySchemaVersion=\"0.3.0.0\"\n\tTenantId=\""
  },
  {
    "path": "wingtipgamesb2c/Policies/b2ctechready.onmicrosoft.com_B2C_1A_sign_in_games_authy_code.xml",
    "chars": 1819,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<TrustFrameworkPolicy\n\tPolicySchemaVersion=\"0.3.0.0\"\n\tTenantId=\""
  },
  {
    "path": "wingtipgamesb2c/Policies/b2ctechready.onmicrosoft.com_B2C_1A_sign_in_games_email_code.xml",
    "chars": 1829,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\r\n<TrustFrameworkPolicy\r\n\tPolicySchemaVersion=\"0.3.0.0\"\r\n\tTenantI"
  },
  {
    "path": "wingtipgamesb2c/Policies/b2ctechready.onmicrosoft.com_B2C_1A_sign_in_games_email_phone.xml",
    "chars": 1833,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<TrustFrameworkPolicy\n  PolicySchemaVersion=\"0.3.0.0\"\n  TenantId"
  },
  {
    "path": "wingtipgamesb2c/Policies/b2ctechready.onmicrosoft.com_B2C_1A_sign_in_games_phone_code.xml",
    "chars": 1828,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\r\n<TrustFrameworkPolicy\r\n\tPolicySchemaVersion=\"0.3.0.0\"\r\n\tTenantI"
  },
  {
    "path": "wingtipgamesb2c/Policies/b2ctechready.onmicrosoft.com_B2C_1A_sign_up_games_app_code.xml",
    "chars": 1877,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<TrustFrameworkPolicy\n\tPolicySchemaVersion=\"0.3.0.0\"\n\tTenantId=\""
  },
  {
    "path": "wingtipgamesb2c/Policies/b2ctechready.onmicrosoft.com_B2C_1A_sign_up_games_authy_code.xml",
    "chars": 1883,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<TrustFrameworkPolicy\n\tPolicySchemaVersion=\"0.3.0.0\"\n\tTenantId=\""
  },
  {
    "path": "wingtipgamesb2c/Policies/b2ctechready.onmicrosoft.com_B2C_1A_sign_up_sign_in_games.xml",
    "chars": 2351,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\r\n<TrustFrameworkPolicy\r\n\tPolicySchemaVersion=\"0.3.0.0\"\r\n\tTenantI"
  },
  {
    "path": "wingtipgamesb2c/Policies/b2ctechready.onmicrosoft.com_B2C_1A_sign_up_sign_in_music.xml",
    "chars": 2109,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\r\n<TrustFrameworkPolicy\r\n\tPolicySchemaVersion=\"0.3.0.0\"\r\n\tTenantI"
  },
  {
    "path": "wingtipgamesb2c/Policies/b2ctechready.onmicrosoft.com_B2C_1A_step_up.xml",
    "chars": 1987,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\r\n<TrustFrameworkPolicy\r\n\tPolicySchemaVersion=\"0.3.0.0\"\r\n\tTenantI"
  },
  {
    "path": "wingtipgamesb2c/Reports/B2CUserJourneyEvents.csv",
    "chars": 43171,
    "preview": "\"EventId\",\"ObjectId\",\"TransactionStart\",\"TransactionEnd\",\"ResourceId\",\"JourneyOutcome\",\"PolicyId\",\"UserJourneyId\",\"Appli"
  },
  {
    "path": "wingtipgamesb2c/Reports/B2CUserJourneyEvents.ps1",
    "chars": 1278,
    "preview": "$loginHost = \"https://login.microsoftonline.com\"\r\n$tenantId = \"b2ctechready.onmicrosoft.com\"\r\n$clientId = \"f67e0340-6713"
  },
  {
    "path": "wingtipgamesb2c/Templates/dist/error.html",
    "chars": 136464,
    "preview": "<!DOCTYPE html>\n<html>\n  <head>\n    <title>Sign in</title>\n    <meta charset=\"utf-8\" />\n    <meta http-equiv=\"X-UA-Compa"
  },
  {
    "path": "wingtipgamesb2c/Templates/dist/idpselection-signin.html",
    "chars": 136124,
    "preview": "<!DOCTYPE html>\n<html>\n  <head>\n    <title>Sign in</title>\n    <meta charset=\"utf-8\" />\n    <meta http-equiv=\"X-UA-Compa"
  },
  {
    "path": "wingtipgamesb2c/Templates/dist/idpselection-signupsignin.html",
    "chars": 136124,
    "preview": "<!DOCTYPE html>\n<html>\n  <head>\n    <title>Sign in</title>\n    <meta charset=\"utf-8\" />\n    <meta http-equiv=\"X-UA-Compa"
  },
  {
    "path": "wingtipgamesb2c/Templates/dist/idpselection.html",
    "chars": 136124,
    "preview": "<!DOCTYPE html>\n<html>\n  <head>\n    <title>Sign in</title>\n    <meta charset=\"utf-8\" />\n    <meta http-equiv=\"X-UA-Compa"
  },
  {
    "path": "wingtipgamesb2c/Templates/dist/js/analytics.js",
    "chars": 395,
    "preview": "  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){\n  (i[r].q=i[r].q||[]).push(arguments)},i["
  },
  {
    "path": "wingtipgamesb2c/Templates/dist/js/selfasserted-appfactor-registration.js",
    "chars": 399,
    "preview": "$(function () {\n\tvar $strongAuthenticationAppQRCodeBitmapImage = $('#strongAuthenticationAppQRCodeBitmapImage');\n\tvar $s"
  },
  {
    "path": "wingtipgamesb2c/Templates/dist/js/selfasserted-appfactor.js",
    "chars": 399,
    "preview": "$(function () {\n\tvar $strongAuthenticationAppQRCodeBitmapImage = $('#strongAuthenticationAppQRCodeBitmapImage');\n\tvar $s"
  },
  {
    "path": "wingtipgamesb2c/Templates/dist/js/selfasserted-listenerprofileupdate.js",
    "chars": 1095,
    "preview": "$(function () {\n\tvar $marketingConsentedTextInput = $('#extension_MarketingConsented');\n\t\n\t$marketingConsentedTextInput."
  },
  {
    "path": "wingtipgamesb2c/Templates/dist/js/selfasserted-playerprofileregistration-basic.js",
    "chars": 907,
    "preview": "$(function () {\n\tvar $marketingConsentedTextInput = $('#extension_MarketingConsented');\n\t\n\t$marketingConsentedTextInput."
  },
  {
    "path": "wingtipgamesb2c/Templates/dist/js/selfasserted-playerprofileregistration-full.js",
    "chars": 906,
    "preview": "$(function () {\n\tvar $marketingConsentedTextInput = $('#extension_MarketingConsented');\n\t\n\t$marketingConsentedTextInput."
  },
  {
    "path": "wingtipgamesb2c/Templates/dist/js/selfasserted-playerprofileupdate.js",
    "chars": 1093,
    "preview": "$(function () {\n\tvar $marketingConsentedTextInput = $('#extension_MarketingConsented');\n\t\n\t$marketingConsentedTextInput."
  },
  {
    "path": "wingtipgamesb2c/Templates/dist/localaccount-activation.html",
    "chars": 136163,
    "preview": "<!DOCTYPE html>\n<html>\n  <head>\n    <title>Edit profile</title>\n    <meta charset=\"utf-8\" />\n    <meta http-equiv=\"X-UA-"
  },
  {
    "path": "wingtipgamesb2c/Templates/dist/localaccount-discovery.html",
    "chars": 136157,
    "preview": "<!DOCTYPE html>\n<html>\n  <head>\n    <title>Sign in</title>\n    <meta charset=\"utf-8\" />\n    <meta http-equiv=\"X-UA-Compa"
  },
  {
    "path": "wingtipgamesb2c/Templates/dist/localaccount-identification.html",
    "chars": 136219,
    "preview": "<!DOCTYPE html>\n<html>\n  <head>\n    <title>Sign in</title>\n    <meta charset=\"utf-8\" />\n    <meta http-equiv=\"X-UA-Compa"
  },
  {
    "path": "wingtipgamesb2c/Templates/dist/localaccount-login-appcode.html",
    "chars": 136162,
    "preview": "<!DOCTYPE html>\n<html>\n  <head>\n    <title>Sign in</title>\n    <meta charset=\"utf-8\" />\n    <meta http-equiv=\"X-UA-Compa"
  },
  {
    "path": "wingtipgamesb2c/Templates/dist/localaccount-login-authycode.html",
    "chars": 136164,
    "preview": "<!DOCTYPE html>\n<html>\n  <head>\n    <title>Sign in</title>\n    <meta charset=\"utf-8\" />\n    <meta http-equiv=\"X-UA-Compa"
  },
  {
    "path": "wingtipgamesb2c/Templates/dist/localaccount-login-emailcode.html",
    "chars": 136164,
    "preview": "<!DOCTYPE html>\n<html>\n  <head>\n    <title>Sign in</title>\n    <meta charset=\"utf-8\" />\n    <meta http-equiv=\"X-UA-Compa"
  },
  {
    "path": "wingtipgamesb2c/Templates/dist/localaccount-login-phonecode.html",
    "chars": 136164,
    "preview": "<!DOCTYPE html>\n<html>\n  <head>\n    <title>Sign in</title>\n    <meta charset=\"utf-8\" />\n    <meta http-equiv=\"X-UA-Compa"
  },
  {
    "path": "wingtipgamesb2c/Templates/dist/localaccount-login.html",
    "chars": 136179,
    "preview": "<!DOCTYPE html>\n<html>\n  <head>\n    <title>Sign in with your WingTip account</title>\n    <meta charset=\"utf-8\" />\n    <m"
  },
  {
    "path": "wingtipgamesb2c/Templates/dist/localaccount-passwordrecovery.html",
    "chars": 136170,
    "preview": "<!DOCTYPE html>\n<html>\n  <head>\n    <title>Edit profile</title>\n    <meta charset=\"utf-8\" />\n    <meta http-equiv=\"X-UA-"
  },
  {
    "path": "wingtipgamesb2c/Templates/dist/localaccount-passwordreset.html",
    "chars": 136167,
    "preview": "<!DOCTYPE html>\n<html>\n  <head>\n    <title>Edit profile</title>\n    <meta charset=\"utf-8\" />\n    <meta http-equiv=\"X-UA-"
  },
  {
    "path": "wingtipgamesb2c/Templates/dist/localaccount-passwordset.html",
    "chars": 136165,
    "preview": "<!DOCTYPE html>\n<html>\n  <head>\n    <title>Edit profile</title>\n    <meta charset=\"utf-8\" />\n    <meta http-equiv=\"X-UA-"
  },
  {
    "path": "wingtipgamesb2c/Templates/dist/localaccount-registration.html",
    "chars": 136165,
    "preview": "<!DOCTYPE html>\n<html>\n  <head>\n    <title>Edit profile</title>\n    <meta charset=\"utf-8\" />\n    <meta http-equiv=\"X-UA-"
  },
  {
    "path": "wingtipgamesb2c/Templates/dist/phonefactor.html",
    "chars": 136120,
    "preview": "<!DOCTYPE html>\n<html>\n  <head>\n    <title>Step up</title>\n    <meta charset=\"utf-8\" />\n    <meta http-equiv=\"X-UA-Compa"
  },
  {
    "path": "wingtipgamesb2c/Templates/dist/selfasserted-appfactor-registration.html",
    "chars": 137682,
    "preview": "<!DOCTYPE html>\n<html>\n  <head>\n    <title>Register your authentication app</title>\n    <meta charset=\"utf-8\" />\n    <me"
  },
  {
    "path": "wingtipgamesb2c/Templates/dist/selfasserted-appfactor-verification.html",
    "chars": 136229,
    "preview": "<!DOCTYPE html>\n<html>\n  <head>\n    <title>Verify your authentication app</title>\n    <meta charset=\"utf-8\" />\n    <meta"
  },
  {
    "path": "wingtipgamesb2c/Templates/dist/selfasserted-authyfactor.html",
    "chars": 136183,
    "preview": "<!DOCTYPE html>\n<html>\n  <head>\n    <title>Verify your authentication app</title>\n    <meta charset=\"utf-8\" />\n    <meta"
  },
  {
    "path": "wingtipgamesb2c/Templates/dist/selfasserted-consent.html",
    "chars": 136152,
    "preview": "<!DOCTYPE html>\n<html>\n  <head>\n    <title>Join</title>\n    <meta charset=\"utf-8\" />\n    <meta http-equiv=\"X-UA-Compatib"
  },
  {
    "path": "wingtipgamesb2c/Templates/dist/selfasserted-listenerprofileupdate.html",
    "chars": 136303,
    "preview": "<!DOCTYPE html>\n<html>\n  <head>\n    <title>Edit profile</title>\n    <meta charset=\"utf-8\" />\n    <meta http-equiv=\"X-UA-"
  },
  {
    "path": "wingtipgamesb2c/Templates/dist/selfasserted-playerprofileregistration-basic.html",
    "chars": 136370,
    "preview": "<!DOCTYPE html>\n<html>\n  <head>\n    <title>Sign up</title>\n    <meta charset=\"utf-8\" />\n    <meta http-equiv=\"X-UA-Compa"
  },
  {
    "path": "wingtipgamesb2c/Templates/dist/selfasserted-playerprofileregistration-full.html",
    "chars": 136368,
    "preview": "<!DOCTYPE html>\n<html>\n  <head>\n    <title>Sign up</title>\n    <meta charset=\"utf-8\" />\n    <meta http-equiv=\"X-UA-Compa"
  },
  {
    "path": "wingtipgamesb2c/Templates/dist/selfasserted-playerprofileupdate.html",
    "chars": 136299,
    "preview": "<!DOCTYPE html>\n<html>\n  <head>\n    <title>Edit profile</title>\n    <meta charset=\"utf-8\" />\n    <meta http-equiv=\"X-UA-"
  },
  {
    "path": "wingtipgamesb2c/Templates/dist/signupsignin.html",
    "chars": 136112,
    "preview": "<!DOCTYPE html>\n<html>\n  <head>\n    <title>Sign in</title>\n    <meta charset=\"utf-8\" />\n    <meta http-equiv=\"X-UA-Compa"
  },
  {
    "path": "wingtipgamesb2c/Templates/dist/socialaccount-registration.html",
    "chars": 136166,
    "preview": "<!DOCTYPE html>\n<html>\n  <head>\n    <title>Edit profile</title>\n    <meta charset=\"utf-8\" />\n    <meta http-equiv=\"X-UA-"
  },
  {
    "path": "wingtipgamesb2c/Templates/gulpfile.js",
    "chars": 1172,
    "preview": "var gulp = require('gulp');\nvar concat = require('gulp-concat');\nvar cssmin = require('gulp-cssmin');\nvar inject = requi"
  },
  {
    "path": "wingtipgamesb2c/Templates/package.json",
    "chars": 427,
    "preview": "{\n  \"name\": \"templates\",\n  \"version\": \"1.0.0\",\n  \"description\": \"\",\n  \"main\": \"Gruntfile.js\",\n  \"dependencies\": {},\n  \"d"
  },
  {
    "path": "wingtipgamesb2c/Templates/src/css/bootstrap.css",
    "chars": 147760,
    "preview": "/*!\n * Bootstrap v3.3.5 (http://getbootstrap.com)\n * Copyright 2011-2015 Twitter, Inc.\n * Licensed under MIT (https://gi"
  },
  {
    "path": "wingtipgamesb2c/Templates/src/css/global.css",
    "chars": 19443,
    "preview": "@font-face {\n  font-family: 'Ubuntu-Bold';\n  src: url(https://wingtipb2ctmpls.blob.core.windows.net/wingtiptoys/fonts/Ub"
  },
  {
    "path": "wingtipgamesb2c/Templates/src/error.html",
    "chars": 1665,
    "preview": "<!DOCTYPE html>\n<html>\n  <head>\n    <title>Sign in</title>\n    <meta charset=\"utf-8\" />\n    <meta http-equiv=\"X-UA-Compa"
  },
  {
    "path": "wingtipgamesb2c/Templates/src/idpselection-signin.html",
    "chars": 1325,
    "preview": "<!DOCTYPE html>\n<html>\n  <head>\n    <title>Sign in</title>\n    <meta charset=\"utf-8\" />\n    <meta http-equiv=\"X-UA-Compa"
  },
  {
    "path": "wingtipgamesb2c/Templates/src/idpselection-signupsignin.html",
    "chars": 1325,
    "preview": "<!DOCTYPE html>\n<html>\n  <head>\n    <title>Sign in</title>\n    <meta charset=\"utf-8\" />\n    <meta http-equiv=\"X-UA-Compa"
  },
  {
    "path": "wingtipgamesb2c/Templates/src/idpselection.html",
    "chars": 1325,
    "preview": "<!DOCTYPE html>\n<html>\n  <head>\n    <title>Sign in</title>\n    <meta charset=\"utf-8\" />\n    <meta http-equiv=\"X-UA-Compa"
  },
  {
    "path": "wingtipgamesb2c/Templates/src/js/analytics.js",
    "chars": 395,
    "preview": "  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){\n  (i[r].q=i[r].q||[]).push(arguments)},i["
  },
  {
    "path": "wingtipgamesb2c/Templates/src/js/selfasserted-appfactor-registration.js",
    "chars": 399,
    "preview": "$(function () {\n\tvar $strongAuthenticationAppQRCodeBitmapImage = $('#strongAuthenticationAppQRCodeBitmapImage');\n\tvar $s"
  },
  {
    "path": "wingtipgamesb2c/Templates/src/js/selfasserted-appfactor.js",
    "chars": 399,
    "preview": "$(function () {\n\tvar $strongAuthenticationAppQRCodeBitmapImage = $('#strongAuthenticationAppQRCodeBitmapImage');\n\tvar $s"
  },
  {
    "path": "wingtipgamesb2c/Templates/src/js/selfasserted-listenerprofileupdate.js",
    "chars": 1095,
    "preview": "$(function () {\n\tvar $marketingConsentedTextInput = $('#extension_MarketingConsented');\n\t\n\t$marketingConsentedTextInput."
  },
  {
    "path": "wingtipgamesb2c/Templates/src/js/selfasserted-playerprofileregistration-basic.js",
    "chars": 907,
    "preview": "$(function () {\n\tvar $marketingConsentedTextInput = $('#extension_MarketingConsented');\n\t\n\t$marketingConsentedTextInput."
  },
  {
    "path": "wingtipgamesb2c/Templates/src/js/selfasserted-playerprofileregistration-full.js",
    "chars": 906,
    "preview": "$(function () {\n\tvar $marketingConsentedTextInput = $('#extension_MarketingConsented');\n\t\n\t$marketingConsentedTextInput."
  },
  {
    "path": "wingtipgamesb2c/Templates/src/js/selfasserted-playerprofileupdate.js",
    "chars": 1093,
    "preview": "$(function () {\n\tvar $marketingConsentedTextInput = $('#extension_MarketingConsented');\n\t\n\t$marketingConsentedTextInput."
  },
  {
    "path": "wingtipgamesb2c/Templates/src/localaccount-activation.html",
    "chars": 1364,
    "preview": "<!DOCTYPE html>\n<html>\n  <head>\n    <title>Edit profile</title>\n    <meta charset=\"utf-8\" />\n    <meta http-equiv=\"X-UA-"
  },
  {
    "path": "wingtipgamesb2c/Templates/src/localaccount-discovery.html",
    "chars": 1358,
    "preview": "<!DOCTYPE html>\n<html>\n  <head>\n    <title>Sign in</title>\n    <meta charset=\"utf-8\" />\n    <meta http-equiv=\"X-UA-Compa"
  },
  {
    "path": "wingtipgamesb2c/Templates/src/localaccount-identification.html",
    "chars": 1420,
    "preview": "<!DOCTYPE html>\n<html>\n  <head>\n    <title>Sign in</title>\n    <meta charset=\"utf-8\" />\n    <meta http-equiv=\"X-UA-Compa"
  },
  {
    "path": "wingtipgamesb2c/Templates/src/localaccount-login-appcode.html",
    "chars": 1363,
    "preview": "<!DOCTYPE html>\n<html>\n  <head>\n    <title>Sign in</title>\n    <meta charset=\"utf-8\" />\n    <meta http-equiv=\"X-UA-Compa"
  },
  {
    "path": "wingtipgamesb2c/Templates/src/localaccount-login-authycode.html",
    "chars": 1365,
    "preview": "<!DOCTYPE html>\n<html>\n  <head>\n    <title>Sign in</title>\n    <meta charset=\"utf-8\" />\n    <meta http-equiv=\"X-UA-Compa"
  },
  {
    "path": "wingtipgamesb2c/Templates/src/localaccount-login-emailcode.html",
    "chars": 1365,
    "preview": "<!DOCTYPE html>\n<html>\n  <head>\n    <title>Sign in</title>\n    <meta charset=\"utf-8\" />\n    <meta http-equiv=\"X-UA-Compa"
  },
  {
    "path": "wingtipgamesb2c/Templates/src/localaccount-login-phonecode.html",
    "chars": 1365,
    "preview": "<!DOCTYPE html>\n<html>\n  <head>\n    <title>Sign in</title>\n    <meta charset=\"utf-8\" />\n    <meta http-equiv=\"X-UA-Compa"
  },
  {
    "path": "wingtipgamesb2c/Templates/src/localaccount-login.html",
    "chars": 1380,
    "preview": "<!DOCTYPE html>\n<html>\n  <head>\n    <title>Sign in with your WingTip account</title>\n    <meta charset=\"utf-8\" />\n    <m"
  },
  {
    "path": "wingtipgamesb2c/Templates/src/localaccount-passwordrecovery.html",
    "chars": 1371,
    "preview": "<!DOCTYPE html>\n<html>\n  <head>\n    <title>Edit profile</title>\n    <meta charset=\"utf-8\" />\n    <meta http-equiv=\"X-UA-"
  },
  {
    "path": "wingtipgamesb2c/Templates/src/localaccount-passwordreset.html",
    "chars": 1368,
    "preview": "<!DOCTYPE html>\n<html>\n  <head>\n    <title>Edit profile</title>\n    <meta charset=\"utf-8\" />\n    <meta http-equiv=\"X-UA-"
  },
  {
    "path": "wingtipgamesb2c/Templates/src/localaccount-passwordset.html",
    "chars": 1366,
    "preview": "<!DOCTYPE html>\n<html>\n  <head>\n    <title>Edit profile</title>\n    <meta charset=\"utf-8\" />\n    <meta http-equiv=\"X-UA-"
  },
  {
    "path": "wingtipgamesb2c/Templates/src/localaccount-registration.html",
    "chars": 1366,
    "preview": "<!DOCTYPE html>\n<html>\n  <head>\n    <title>Edit profile</title>\n    <meta charset=\"utf-8\" />\n    <meta http-equiv=\"X-UA-"
  },
  {
    "path": "wingtipgamesb2c/Templates/src/phonefactor.html",
    "chars": 1321,
    "preview": "<!DOCTYPE html>\n<html>\n  <head>\n    <title>Step up</title>\n    <meta charset=\"utf-8\" />\n    <meta http-equiv=\"X-UA-Compa"
  },
  {
    "path": "wingtipgamesb2c/Templates/src/selfasserted-appfactor-registration.html",
    "chars": 2883,
    "preview": "<!DOCTYPE html>\n<html>\n  <head>\n    <title>Register your authentication app</title>\n    <meta charset=\"utf-8\" />\n    <me"
  },
  {
    "path": "wingtipgamesb2c/Templates/src/selfasserted-appfactor-verification.html",
    "chars": 1430,
    "preview": "<!DOCTYPE html>\n<html>\n  <head>\n    <title>Verify your authentication app</title>\n    <meta charset=\"utf-8\" />\n    <meta"
  },
  {
    "path": "wingtipgamesb2c/Templates/src/selfasserted-authyfactor.html",
    "chars": 1384,
    "preview": "<!DOCTYPE html>\n<html>\n  <head>\n    <title>Verify your authentication app</title>\n    <meta charset=\"utf-8\" />\n    <meta"
  },
  {
    "path": "wingtipgamesb2c/Templates/src/selfasserted-consent.html",
    "chars": 1353,
    "preview": "<!DOCTYPE html>\n<html>\n  <head>\n    <title>Join</title>\n    <meta charset=\"utf-8\" />\n    <meta http-equiv=\"X-UA-Compatib"
  },
  {
    "path": "wingtipgamesb2c/Templates/src/selfasserted-listenerprofileupdate.html",
    "chars": 1504,
    "preview": "<!DOCTYPE html>\n<html>\n  <head>\n    <title>Edit profile</title>\n    <meta charset=\"utf-8\" />\n    <meta http-equiv=\"X-UA-"
  },
  {
    "path": "wingtipgamesb2c/Templates/src/selfasserted-playerprofileregistration-basic.html",
    "chars": 1571,
    "preview": "<!DOCTYPE html>\n<html>\n  <head>\n    <title>Sign up</title>\n    <meta charset=\"utf-8\" />\n    <meta http-equiv=\"X-UA-Compa"
  },
  {
    "path": "wingtipgamesb2c/Templates/src/selfasserted-playerprofileregistration-full.html",
    "chars": 1569,
    "preview": "<!DOCTYPE html>\n<html>\n  <head>\n    <title>Sign up</title>\n    <meta charset=\"utf-8\" />\n    <meta http-equiv=\"X-UA-Compa"
  },
  {
    "path": "wingtipgamesb2c/Templates/src/selfasserted-playerprofileupdate.html",
    "chars": 1500,
    "preview": "<!DOCTYPE html>\n<html>\n  <head>\n    <title>Edit profile</title>\n    <meta charset=\"utf-8\" />\n    <meta http-equiv=\"X-UA-"
  },
  {
    "path": "wingtipgamesb2c/Templates/src/signupsignin.html",
    "chars": 1313,
    "preview": "<!DOCTYPE html>\n<html>\n  <head>\n    <title>Sign in</title>\n    <meta charset=\"utf-8\" />\n    <meta http-equiv=\"X-UA-Compa"
  },
  {
    "path": "wingtipgamesb2c/Templates/src/socialaccount-registration.html",
    "chars": 1367,
    "preview": "<!DOCTYPE html>\n<html>\n  <head>\n    <title>Edit profile</title>\n    <meta charset=\"utf-8\" />\n    <meta http-equiv=\"X-UA-"
  },
  {
    "path": "wingtipgamesb2c/readme.md",
    "chars": 64,
    "preview": "Complete project for https://wingtipgamesb2c.azurewebsites.net/\n"
  },
  {
    "path": "wingtipgamesb2c/src/WingTipBillingWebApplication/.bowerrc",
    "chars": 33,
    "preview": "{\n  \"directory\": \"wwwroot/lib\"\n}\n"
  },
  {
    "path": "wingtipgamesb2c/src/WingTipBillingWebApplication/Api/Controllers/OrdersController.cs",
    "chars": 1489,
    "preview": "using System;\nusing System.Collections.Generic;\nusing Microsoft.AspNetCore.Authorization;\nusing Microsoft.AspNetCore.Mv"
  },
  {
    "path": "wingtipgamesb2c/src/WingTipBillingWebApplication/Api/Models/Order.cs",
    "chars": 330,
    "preview": "using System;\n\nnamespace WingTipBillingWebApplication.Api.Models\n{\n    public class Order\n    {\n        public string I"
  },
  {
    "path": "wingtipgamesb2c/src/WingTipBillingWebApplication/Constants.cs",
    "chars": 752,
    "preview": "namespace WingTipBillingWebApplication\n{\n    public static class Constants\n    {\n        public static class Authentica"
  },
  {
    "path": "wingtipgamesb2c/src/WingTipBillingWebApplication/Controllers/AccountController.cs",
    "chars": 3597,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.Threading.Tasks;\nusing ITfoxtec.Identity.Saml2;\nusing ITfo"
  },
  {
    "path": "wingtipgamesb2c/src/WingTipBillingWebApplication/Controllers/HomeController.cs",
    "chars": 315,
    "preview": "using Microsoft.AspNetCore.Mvc;\n\nnamespace WingTipBillingWebApplication.Controllers\n{\n    public class HomeController :"
  },
  {
    "path": "wingtipgamesb2c/src/WingTipBillingWebApplication/Controllers/MetadataController.cs",
    "chars": 2228,
    "preview": "using System;\nusing ITfoxtec.Identity.Saml2;\nusing ITfoxtec.Identity.Saml2.MvcCore;\nusing ITfoxtec.Identity.Saml2.Schem"
  },
  {
    "path": "wingtipgamesb2c/src/WingTipBillingWebApplication/Identity/ClaimsPrincipalHelper.cs",
    "chars": 879,
    "preview": "using System.Collections.Generic;\nusing System.Security.Claims;\n\nnamespace WingTipBillingWebApplication.Identity\n{\n    "
  },
  {
    "path": "wingtipgamesb2c/src/WingTipBillingWebApplication/Identity/Saml2/FixedSaml2AuthnResponse.cs",
    "chars": 852,
    "preview": "using System.Xml;\nusing ITfoxtec.Identity.Saml2;\n\nnamespace WingTipBillingWebApplication.Identity.Saml2\n{\n    public cl"
  },
  {
    "path": "wingtipgamesb2c/src/WingTipBillingWebApplication/IdentityExtensions.cs",
    "chars": 685,
    "preview": "using System;\nusing System.Security.Claims;\nusing System.Security.Principal;\n\nnamespace WingTipBillingWebApplication\n{\n"
  },
  {
    "path": "wingtipgamesb2c/src/WingTipBillingWebApplication/Program.cs",
    "chars": 516,
    "preview": "using System.IO;\nusing Microsoft.AspNetCore.Hosting;\n\nnamespace WingTipBillingWebApplication\n{\n    public class Program"
  },
  {
    "path": "wingtipgamesb2c/src/WingTipBillingWebApplication/Startup.cs",
    "chars": 6686,
    "preview": "using System;\nusing System.Linq;\nusing System.Security.Cryptography.X509Certificates;\nusing System.ServiceModel.Securit"
  },
  {
    "path": "wingtipgamesb2c/src/WingTipBillingWebApplication/Views/Home/About.cshtml",
    "chars": 155,
    "preview": "@{\n    ViewData[\"Title\"] = \"About\";\n}\n<h2>@ViewData[\"Title\"].</h2>\n<h3>@ViewData[\"Message\"]</h3>\n\n<p>Use this area to p"
  },
  {
    "path": "wingtipgamesb2c/src/WingTipBillingWebApplication/Views/Home/Contact.cshtml",
    "chars": 450,
    "preview": "@{\n    ViewData[\"Title\"] = \"Contact\";\n}\n<h2>@ViewData[\"Title\"].</h2>\n<h3>@ViewData[\"Message\"]</h3>\n\n<address>\n    One M"
  },
  {
    "path": "wingtipgamesb2c/src/WingTipBillingWebApplication/Views/Home/Index.cshtml",
    "chars": 5573,
    "preview": "@{\n    ViewData[\"Title\"] = \"Home Page\";\n}\n\n<div id=\"myCarousel\" class=\"carousel slide\" data-ride=\"carousel\" data-interv"
  },
  {
    "path": "wingtipgamesb2c/src/WingTipBillingWebApplication/Views/Shared/Error.cshtml",
    "chars": 706,
    "preview": "@{\n    ViewData[\"Title\"] = \"Error\";\n}\n<h1 class=\"text-danger\">Error.</h1>\n<h2 class=\"text-danger\">An error occurred whi"
  },
  {
    "path": "wingtipgamesb2c/src/WingTipBillingWebApplication/Views/Shared/_Layout.cshtml",
    "chars": 4086,
    "preview": "@inject Microsoft.ApplicationInsights.AspNetCore.JavaScriptSnippet JavaScriptSnippet\n<!DOCTYPE html>\n<html>\n<head>\n    "
  },
  {
    "path": "wingtipgamesb2c/src/WingTipBillingWebApplication/Views/Shared/_ValidationScriptsPartial.cshtml",
    "chars": 1158,
    "preview": "<environment names=\"Development\">\n    <script src=\"~/lib/jquery-validation/dist/jquery.validate.js\"></script>\n    <scri"
  },
  {
    "path": "wingtipgamesb2c/src/WingTipBillingWebApplication/Views/_ViewImports.cshtml",
    "chars": 90,
    "preview": "@using WingTipBillingWebApplication\n@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers\n"
  },
  {
    "path": "wingtipgamesb2c/src/WingTipBillingWebApplication/Views/_ViewStart.cshtml",
    "chars": 30,
    "preview": "@{\n    Layout = \"_Layout\";\n}\n"
  },
  {
    "path": "wingtipgamesb2c/src/WingTipBillingWebApplication/WingTipBillingWebApplication.csproj",
    "chars": 1225,
    "preview": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\n  <PropertyGroup>\n    <TargetFramework>net452</TargetFramework>\n    <RuntimeIdent"
  },
  {
    "path": "wingtipgamesb2c/src/WingTipBillingWebApplication/app.config",
    "chars": 94,
    "preview": "<configuration>\n   <runtime>\n      <gcServer enabled=\"true\"/>\n   </runtime>\n</configuration>\n"
  },
  {
    "path": "wingtipgamesb2c/src/WingTipBillingWebApplication/appsettings.Development.json",
    "chars": 165,
    "preview": "{\n  \"Logger\": {\n    \"IncludeScopes\": false,\n    \"LogLevel\": {\n      \"Default\": \"Debug\",\n      \"System\": \"Information\",\n"
  },
  {
    "path": "wingtipgamesb2c/src/WingTipBillingWebApplication/appsettings.json",
    "chars": 553,
    "preview": "{\n  \"JwtBearerAuthentication\": {\n    \"Audience\": \"\",\n    \"MetadataAddress\": \"https://login.microsoftonline.com/b2ctechr"
  },
  {
    "path": "wingtipgamesb2c/src/WingTipBillingWebApplication/bower.json",
    "chars": 197,
    "preview": "{\n  \"name\": \"asp.net\",\n  \"private\": true,\n  \"dependencies\": {\n    \"bootstrap\": \"3.3.7\",\n    \"jquery\": \"2.2.0\",\n    \"jque"
  },
  {
    "path": "wingtipgamesb2c/src/WingTipBillingWebApplication/bundleconfig.json",
    "chars": 602,
    "preview": "// Configure bundling and minification for the project.\n// More info at https://go.microsoft.com/fwlink/?LinkId=808241\n"
  },
  {
    "path": "wingtipgamesb2c/src/WingTipBillingWebApplication/wwwroot/css/site.css",
    "chars": 716,
    "preview": "body {\n    padding-top: 50px;\n    padding-bottom: 20px;\n}\n\n/* Wrapping element */\n/* Set some basic padding to keep con"
  },
  {
    "path": "wingtipgamesb2c/src/WingTipBillingWebApplication/wwwroot/js/site.js",
    "chars": 32,
    "preview": "// Write your Javascript code.\n"
  },
  {
    "path": "wingtipgamesb2c/src/WingTipBillingWebApplication/wwwroot/lib/bootstrap/.bower.json",
    "chars": 940,
    "preview": "{\n  \"name\": \"bootstrap\",\n  \"description\": \"The most popular front-end framework for developing responsive, mobile first "
  },
  {
    "path": "wingtipgamesb2c/src/WingTipBillingWebApplication/wwwroot/lib/bootstrap/LICENSE",
    "chars": 1085,
    "preview": "The MIT License (MIT)\n\nCopyright (c) 2011-2016 Twitter, Inc.\n\nPermission is hereby granted, free of charge, to any perso"
  },
  {
    "path": "wingtipgamesb2c/src/WingTipBillingWebApplication/wwwroot/lib/bootstrap/dist/css/bootstrap-theme.css",
    "chars": 26132,
    "preview": "/*!\n * Bootstrap v3.3.7 (http://getbootstrap.com)\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://gi"
  },
  {
    "path": "wingtipgamesb2c/src/WingTipBillingWebApplication/wwwroot/lib/bootstrap/dist/css/bootstrap.css",
    "chars": 146010,
    "preview": "/*!\n * Bootstrap v3.3.7 (http://getbootstrap.com)\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://gi"
  },
  {
    "path": "wingtipgamesb2c/src/WingTipBillingWebApplication/wwwroot/lib/bootstrap/dist/js/bootstrap.js",
    "chars": 69707,
    "preview": "/*!\n * Bootstrap v3.3.7 (http://getbootstrap.com)\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under the MIT license"
  },
  {
    "path": "wingtipgamesb2c/src/WingTipBillingWebApplication/wwwroot/lib/bootstrap/dist/js/npm.js",
    "chars": 484,
    "preview": "// This file is autogenerated via the `commonjs` Grunt task. You can require() this file in a CommonJS environment.\nrequ"
  },
  {
    "path": "wingtipgamesb2c/src/WingTipBillingWebApplication/wwwroot/lib/jquery/.bower.json",
    "chars": 523,
    "preview": "{\n  \"name\": \"jquery\",\n  \"main\": \"dist/jquery.js\",\n  \"license\": \"MIT\",\n  \"ignore\": [\n    \"package.json\"\n  ],\n  \"keywords\""
  },
  {
    "path": "wingtipgamesb2c/src/WingTipBillingWebApplication/wwwroot/lib/jquery/LICENSE.txt",
    "chars": 1606,
    "preview": "Copyright jQuery Foundation and other contributors, https://jquery.org/\n\nThis software consists of voluntary contributio"
  }
]

// ... and 302 more files (download for full content)

About this extraction

This page contains the full source code of the Azure-Samples/active-directory-b2c-advanced-policies GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 502 files (7.4 MB), approximately 2.0M tokens, and a symbol index with 894 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!