From 0bad914be41a2c9ce061aa25b347e43d5283c414 Mon Sep 17 00:00:00 2001 From: Daniel Wathen Date: Thu, 5 Jan 2023 10:49:15 -0700 Subject: [PATCH] Clean up directories --- .gitignore | 11 +- ...portingServices.API_FabTimeController.html | 219 ------ .../ReportingServices.API_Program.html | 195 ----- ...ortingServices.API_ScrapeDBController.html | 227 ------ ...ingServices.Shared_APIHelperFunctions.html | 290 ------- .../ReportingServices.Shared_ApiCaller.html | 189 ----- .../ReportingServices.Shared_DailyReport.html | 360 --------- ...tingServices.Shared_DailyReportHelper.html | 261 ------- ...ngServices.Shared_EquipmentStateByDay.html | 181 ----- ...ces.Shared_FabTimeReportingRepository.html | 231 ------ ...ortingServices.Shared_JsonFileHandler.html | 188 ----- ...ngServices.Shared_ManualReportEntries.html | 216 ----- ...rtingServices.Shared_QuarterlyTargets.html | 193 ----- .../ReportingServices.Shared_RDS.html | 193 ----- .../ReportingServices.Shared_Reactor.html | 189 ----- ...rtingServices.Shared_ReactorOutsByDay.html | 177 ----- ...rtingServices.Shared_ReactorOutsByRDS.html | 185 ----- ...rtingServices.Shared_ReactorPSNWORuns.html | 185 ----- .../ReportingServices.Shared_SLLTool.html | 180 ----- .../ReportingServices.Shared_ScrapByDay.html | 193 ----- ...vices.Shared_ScrapeDatabaseRepository.html | 456 ----------- ...ortingServices.Shared_ToolStateByType.html | 252 ------ ...rtingServices.Shared_ToolStateCurrent.html | 206 ----- ...rtingServices.Shared_UnloadTempsByDay.html | 180 ----- ...tingServices.Shared_WeeklyPartChanges.html | 183 ----- ...rtingServices.Shared_YieldInformation.html | 186 ----- ...ortingServices.Shared_YieldStatistics.html | 244 ------ .../ReportingServices.UI_ErrorViewModel.html | 178 ----- .../ReportingServices.UI_HomeController.html | 199 ----- ...gServices.UI_PlanningReportController.html | 206 ----- ...ervices.UI_ProductionReportController.html | 233 ------ .../ReportingServices.UI_Program.html | 219 ------ ...ReportingServices.UI_Views_Home_Index.html | 186 ----- ...ervices.UI_Views_PlanningReport_Index.html | 214 ----- ...lanningReport_WeeklyPartChangesReport.html | 247 ------ ...UI_Views_ProductionReport_DailyReport.html | 590 -------------- ...iews_ProductionReport_EditDailyReport.html | 413 ---------- ...vices.UI_Views_ProductionReport_Index.html | 186 ----- ...portingServices.UI_Views_Shared_Error.html | 192 ----- ...s.UI_Views_Shared__DailyReportPartial.html | 423 ---------- ...rtingServices.UI_Views_Shared__Layout.html | 230 ------ ...ReportingServices.UI_Views__ViewStart.html | 170 ---- .../Html_Dark/1d194f36/class.js | 218 ------ .../Html_Dark/1d194f36/icon_cube.svg | 2 - .../Html_Dark/1d194f36/icon_cube_dark.svg | 1 - .../1d194f36/icon_down-dir_active.svg | 2 - .../1d194f36/icon_down-dir_active_dark.svg | 1 - .../Html_Dark/1d194f36/icon_fork.svg | 2 - .../Html_Dark/1d194f36/icon_fork_dark.svg | 1 - .../Html_Dark/1d194f36/icon_info-circled.svg | 2 - .../1d194f36/icon_info-circled_dark.svg | 2 - .../Html_Dark/1d194f36/icon_minus.svg | 2 - .../Html_Dark/1d194f36/icon_minus_dark.svg | 1 - .../Html_Dark/1d194f36/icon_plus.svg | 2 - .../Html_Dark/1d194f36/icon_plus_dark.svg | 1 - .../Html_Dark/1d194f36/icon_search-minus.svg | 2 - .../1d194f36/icon_search-minus_dark.svg | 1 - .../Html_Dark/1d194f36/icon_search-plus.svg | 2 - .../1d194f36/icon_search-plus_dark.svg | 1 - .../Html_Dark/1d194f36/icon_sponsor.svg | 2 - .../Html_Dark/1d194f36/icon_star.svg | 2 - .../Html_Dark/1d194f36/icon_star_dark.svg | 2 - .../Html_Dark/1d194f36/icon_up-dir.svg | 2 - .../Html_Dark/1d194f36/icon_up-dir_active.svg | 2 - .../Html_Dark/1d194f36/icon_wrench.svg | 2 - .../Html_Dark/1d194f36/icon_wrench_dark.svg | 1 - .../Html_Dark/1d194f36/index.htm | 253 ------ .../Html_Dark/1d194f36/index.html | 253 ------ .../Html_Dark/1d194f36/main.js | 344 -------- .../Html_Dark/1d194f36/report.css | 735 ------------------ 70 files changed, 10 insertions(+), 11487 deletions(-) delete mode 100644 .vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.API_FabTimeController.html delete mode 100644 .vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.API_Program.html delete mode 100644 .vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.API_ScrapeDBController.html delete mode 100644 .vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.Shared_APIHelperFunctions.html delete mode 100644 .vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.Shared_ApiCaller.html delete mode 100644 .vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.Shared_DailyReport.html delete mode 100644 .vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.Shared_DailyReportHelper.html delete mode 100644 .vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.Shared_EquipmentStateByDay.html delete mode 100644 .vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.Shared_FabTimeReportingRepository.html delete mode 100644 .vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.Shared_JsonFileHandler.html delete mode 100644 .vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.Shared_ManualReportEntries.html delete mode 100644 .vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.Shared_QuarterlyTargets.html delete mode 100644 .vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.Shared_RDS.html delete mode 100644 .vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.Shared_Reactor.html delete mode 100644 .vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.Shared_ReactorOutsByDay.html delete mode 100644 .vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.Shared_ReactorOutsByRDS.html delete mode 100644 .vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.Shared_ReactorPSNWORuns.html delete mode 100644 .vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.Shared_SLLTool.html delete mode 100644 .vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.Shared_ScrapByDay.html delete mode 100644 .vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.Shared_ScrapeDatabaseRepository.html delete mode 100644 .vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.Shared_ToolStateByType.html delete mode 100644 .vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.Shared_ToolStateCurrent.html delete mode 100644 .vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.Shared_UnloadTempsByDay.html delete mode 100644 .vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.Shared_WeeklyPartChanges.html delete mode 100644 .vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.Shared_YieldInformation.html delete mode 100644 .vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.Shared_YieldStatistics.html delete mode 100644 .vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.UI_ErrorViewModel.html delete mode 100644 .vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.UI_HomeController.html delete mode 100644 .vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.UI_PlanningReportController.html delete mode 100644 .vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.UI_ProductionReportController.html delete mode 100644 .vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.UI_Program.html delete mode 100644 .vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.UI_Views_Home_Index.html delete mode 100644 .vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.UI_Views_PlanningReport_Index.html delete mode 100644 .vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.UI_Views_PlanningReport_WeeklyPartChangesReport.html delete mode 100644 .vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.UI_Views_ProductionReport_DailyReport.html delete mode 100644 .vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.UI_Views_ProductionReport_EditDailyReport.html delete mode 100644 .vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.UI_Views_ProductionReport_Index.html delete mode 100644 .vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.UI_Views_Shared_Error.html delete mode 100644 .vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.UI_Views_Shared__DailyReportPartial.html delete mode 100644 .vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.UI_Views_Shared__Layout.html delete mode 100644 .vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.UI_Views__ViewStart.html delete mode 100644 .vscode/ReportGenerator/Html_Dark/1d194f36/class.js delete mode 100644 .vscode/ReportGenerator/Html_Dark/1d194f36/icon_cube.svg delete mode 100644 .vscode/ReportGenerator/Html_Dark/1d194f36/icon_cube_dark.svg delete mode 100644 .vscode/ReportGenerator/Html_Dark/1d194f36/icon_down-dir_active.svg delete mode 100644 .vscode/ReportGenerator/Html_Dark/1d194f36/icon_down-dir_active_dark.svg delete mode 100644 .vscode/ReportGenerator/Html_Dark/1d194f36/icon_fork.svg delete mode 100644 .vscode/ReportGenerator/Html_Dark/1d194f36/icon_fork_dark.svg delete mode 100644 .vscode/ReportGenerator/Html_Dark/1d194f36/icon_info-circled.svg delete mode 100644 .vscode/ReportGenerator/Html_Dark/1d194f36/icon_info-circled_dark.svg delete mode 100644 .vscode/ReportGenerator/Html_Dark/1d194f36/icon_minus.svg delete mode 100644 .vscode/ReportGenerator/Html_Dark/1d194f36/icon_minus_dark.svg delete mode 100644 .vscode/ReportGenerator/Html_Dark/1d194f36/icon_plus.svg delete mode 100644 .vscode/ReportGenerator/Html_Dark/1d194f36/icon_plus_dark.svg delete mode 100644 .vscode/ReportGenerator/Html_Dark/1d194f36/icon_search-minus.svg delete mode 100644 .vscode/ReportGenerator/Html_Dark/1d194f36/icon_search-minus_dark.svg delete mode 100644 .vscode/ReportGenerator/Html_Dark/1d194f36/icon_search-plus.svg delete mode 100644 .vscode/ReportGenerator/Html_Dark/1d194f36/icon_search-plus_dark.svg delete mode 100644 .vscode/ReportGenerator/Html_Dark/1d194f36/icon_sponsor.svg delete mode 100644 .vscode/ReportGenerator/Html_Dark/1d194f36/icon_star.svg delete mode 100644 .vscode/ReportGenerator/Html_Dark/1d194f36/icon_star_dark.svg delete mode 100644 .vscode/ReportGenerator/Html_Dark/1d194f36/icon_up-dir.svg delete mode 100644 .vscode/ReportGenerator/Html_Dark/1d194f36/icon_up-dir_active.svg delete mode 100644 .vscode/ReportGenerator/Html_Dark/1d194f36/icon_wrench.svg delete mode 100644 .vscode/ReportGenerator/Html_Dark/1d194f36/icon_wrench_dark.svg delete mode 100644 .vscode/ReportGenerator/Html_Dark/1d194f36/index.htm delete mode 100644 .vscode/ReportGenerator/Html_Dark/1d194f36/index.html delete mode 100644 .vscode/ReportGenerator/Html_Dark/1d194f36/main.js delete mode 100644 .vscode/ReportGenerator/Html_Dark/1d194f36/report.css diff --git a/.gitignore b/.gitignore index 9491a2f..61ca05f 100644 --- a/.gitignore +++ b/.gitignore @@ -360,4 +360,13 @@ MigrationBackup/ .ionide/ # Fody - auto-generated XML schema -FodyWeavers.xsd \ No newline at end of file +FodyWeavers.xsd + +## +## Visual Studio Code +## +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json \ No newline at end of file diff --git a/.vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.API_FabTimeController.html b/.vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.API_FabTimeController.html deleted file mode 100644 index f4d7b1d..0000000 --- a/.vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.API_FabTimeController.html +++ /dev/null @@ -1,219 +0,0 @@ - - - - - - - -ReportingServices.API.Controllers.FabTimeController - Coverage Report - -
-

< Summary

-
-
-
Information
-
-
- - - - - - - - - - - - - -
Class:ReportingServices.API.Controllers.FabTimeController
Assembly:ReportingServices.API
File(s):C:\Users\wathen\source\repos\ReportingServices\ReportingServicesAPIs\Controllers\FabTimeController.cs
-
-
-
-
-
-
-
Line coverage
-
-
0%
-
- - - - - - - - - - - - - - - - - - - - - -
Covered lines:0
Uncovered lines:20
Coverable lines:20
Total lines:46
Line coverage:0%
-
-
-
-
-
Branch coverage
-
-
N/A
-
- - - - - - - - - - - - - -
Covered branches:0
Total branches:0
Branch coverage:N/A
-
-
-
-
-
Method coverage
-
-
-

Method coverage is only available for sponsors.

-Upgrade to PRO version -
-
-
-
-

Metrics

-
- - - - - - - - -
MethodBranch coverage Cyclomatic complexity Line coverage
.ctor(...)100%10%
GetReactorOuts()100%10%
GetToolStateTrendData()100%10%
GetToolStateData()100%10%
-
-

File(s)

-

C:\Users\wathen\source\repos\ReportingServices\ReportingServicesAPIs\Controllers\FabTimeController.cs

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#LineLine coverage
 1using Microsoft.AspNetCore.Http;
 2using Microsoft.AspNetCore.Mvc;
 3using ReportingServices.Shared.Models.ProductionReport;
 4using ReportingServices.Shared.Repositories;
 5
 6namespace ReportingServices.API.Controllers
 7{
 8    [Route("api/[controller]")]
 9    [ApiController]
 10    public class FabTimeController : ControllerBase
 11    {
 12        private readonly IFabTimeReportingRepository _fabTimeReportingRepository;
 13        private readonly IScrapeDatabaseRepository _scrapeDBRepository;
 14
 015        public FabTimeController(IFabTimeReportingRepository fabTimeReportingRepository, IScrapeDatabaseRepository scrap
 016        {
 017            _fabTimeReportingRepository = fabTimeReportingRepository;
 018            _scrapeDBRepository = scrapeDBRepository;
 019        }
 20
 21        [HttpGet("ReactorOuts")]
 22        public async Task<YieldInformation> GetReactorOuts(string startDate, string endDate)
 023        {
 024            List<ReactorOutsByRDS> outs = await _fabTimeReportingRepository.GetMovesTrendData(startDate, endDate);
 025            YieldInformation yieldInformation = new()
 026            {
 027                Outs = outs,
 028                Scrap = _scrapeDBRepository.GetScrapByDay(outs)
 029            };
 30
 031            return yieldInformation;
 032        }
 33
 34        [HttpGet("ToolStateTrend")]
 35        public async Task<List<EquipmentStateByDay>> GetToolStateTrendData(string toolType)
 036        {
 037            return await _fabTimeReportingRepository.GetToolStateTrendData(toolType);
 038        }
 39
 40        [HttpGet("ToolState")]
 41        public async Task<List<ToolStateCurrent>> GetToolStateData(string toolType)
 042        {
 043            return await _fabTimeReportingRepository.GetToolStateData(toolType);
 044        }
 45    }
 46}
-
-
-
- - \ No newline at end of file diff --git a/.vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.API_Program.html b/.vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.API_Program.html deleted file mode 100644 index ff444a0..0000000 --- a/.vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.API_Program.html +++ /dev/null @@ -1,195 +0,0 @@ - - - - - - - -Program - Coverage Report - -
-

< Summary

-
-
-
Information
-
-
- - - - - - - - - - - - - -
Class:Program
Assembly:ReportingServices.API
File(s):C:\Users\wathen\source\repos\ReportingServices\ReportingServicesAPIs\Program.cs
-
-
-
-
-
-
-
Line coverage
-
-
0%
-
- - - - - - - - - - - - - - - - - - - - - -
Covered lines:0
Uncovered lines:16
Coverable lines:16
Total lines:28
Line coverage:0%
-
-
-
-
-
Branch coverage
-
-
0%
-
- - - - - - - - - - - - - -
Covered branches:0
Total branches:2
Branch coverage:0%
-
-
-
-
-
Method coverage
-
-
-

Method coverage is only available for sponsors.

-Upgrade to PRO version -
-
-
-
-

Metrics

-
- - - - - -
MethodBranch coverage Cyclomatic complexity Line coverage
<Main>$(...)0%20%
-
-

File(s)

-

C:\Users\wathen\source\repos\ReportingServices\ReportingServicesAPIs\Program.cs

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#LineLine coverage
 1using ReportingServices.Shared.Repositories;
 2
 03var builder = WebApplication.CreateBuilder(args);
 4
 5// Add services to the container.
 06builder.Services.AddControllers();
 7// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
 08builder.Services.AddEndpointsApiExplorer();
 09builder.Services.AddSwaggerGen();
 010builder.Services.AddScoped<IFabTimeReportingRepository, FabTimeReportingRepository>();
 011builder.Services.AddScoped<IScrapeDatabaseRepository, ScrapeDatabaseRepository>();
 12
 013var app = builder.Build();
 14
 15// Configure the HTTP request pipeline.
 016if (app.Environment.IsDevelopment())
 017{
 018    app.UseSwagger();
 019    app.UseSwaggerUI();
 020}
 21
 022app.UseHttpsRedirection();
 23
 024app.UseAuthorization();
 25
 026app.MapControllers();
 27
 028app.Run();
-
-
-
-
-

Methods/Properties

-<Main>$(System.String[])
-
-
- - \ No newline at end of file diff --git a/.vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.API_ScrapeDBController.html b/.vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.API_ScrapeDBController.html deleted file mode 100644 index 573043f..0000000 --- a/.vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.API_ScrapeDBController.html +++ /dev/null @@ -1,227 +0,0 @@ - - - - - - - -ReportingServices.API.Controllers.ScrapeDBController - Coverage Report - -
-

< Summary

-
-
-
Information
-
-
- - - - - - - - - - - - - -
Class:ReportingServices.API.Controllers.ScrapeDBController
Assembly:ReportingServices.API
File(s):C:\Users\wathen\source\repos\ReportingServices\ReportingServicesAPIs\Controllers\ScrapeDBController.cs
-
-
-
-
-
-
-
Line coverage
-
-
0%
-
- - - - - - - - - - - - - - - - - - - - - -
Covered lines:0
Uncovered lines:19
Coverable lines:19
Total lines:50
Line coverage:0%
-
-
-
-
-
Branch coverage
-
-
N/A
-
- - - - - - - - - - - - - -
Covered branches:0
Total branches:0
Branch coverage:N/A
-
-
-
-
-
Method coverage
-
-
-

Method coverage is only available for sponsors.

-Upgrade to PRO version -
-
-
-
-

Metrics

-
- - - - - - - - - - -
MethodBranch coverage Cyclomatic complexity Line coverage
.ctor(...)100%10%
GetReactorPSNWORuns(...)100%10%
GetNumberOfPartChanges(...)100%10%
GetQuarterlyTargets()100%10%
GetReactors()100%10%
GetRDSForLastDay(...)100%10%
-
-

File(s)

-

C:\Users\wathen\source\repos\ReportingServices\ReportingServicesAPIs\Controllers\ScrapeDBController.cs

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#LineLine coverage
 1using Microsoft.AspNetCore.Http;
 2using Microsoft.AspNetCore.Mvc;
 3using ReportingServices.Shared.Models.PlanningReport;
 4using ReportingServices.Shared.Models.ProductionReport;
 5using ReportingServices.Shared.Repositories;
 6
 7namespace ReportingServices.API.Controllers
 8{
 9    [Route("api/[controller]")]
 10    [ApiController]
 11    public class ScrapeDBController : ControllerBase
 12    {
 13        private readonly IScrapeDatabaseRepository _scrapeDBRepository;
 14
 015        public ScrapeDBController(IScrapeDatabaseRepository scrapeDBRepository)
 016        {
 017            _scrapeDBRepository = scrapeDBRepository;
 018        }
 19
 20        [HttpGet("PSNWO")]
 21        public List<ReactorPSNWORuns> GetReactorPSNWORuns(string startDate, string endDate)
 022        {
 023            return _scrapeDBRepository.GetReactorPSNWORuns(startDate, endDate);
 024        }
 25
 26        [HttpGet("PartChanges")]
 27        public int GetNumberOfPartChanges(string startDate, string endDate)
 028        {
 029            return _scrapeDBRepository.GetNumberOfPartChanges(startDate, endDate);
 030        }
 31
 32        [HttpGet("Targets")]
 33        public QuarterlyTargets GetQuarterlyTargets()
 034        {
 035            return _scrapeDBRepository.GetQuarterlyTargets();
 036        }
 37
 38        [HttpGet("Reactors")]
 39        public List<Reactor> GetReactors()
 040        {
 041            return _scrapeDBRepository.GetReactors();
 042        }
 43
 44        [HttpGet("RDS")]
 45        public List<RDS> GetRDSForLastDay(string date)
 046        {
 047            return _scrapeDBRepository.GetRDSForLastDay(date);
 048        }
 49    }
 50}
-
-
-
- - \ No newline at end of file diff --git a/.vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.Shared_APIHelperFunctions.html b/.vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.Shared_APIHelperFunctions.html deleted file mode 100644 index bab6fd8..0000000 --- a/.vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.Shared_APIHelperFunctions.html +++ /dev/null @@ -1,290 +0,0 @@ - - - - - - - -ReportingServices.Shared.HelperClasses.APIHelperFunctions - Coverage Report - -
-

< Summary

-
-
-
Information
-
-
- - - - - - - - - - - - - -
Class:ReportingServices.Shared.HelperClasses.APIHelperFunctions
Assembly:ReportingServices.Shared
File(s):C:\Users\wathen\source\repos\ReportingServices\ReportingServices.Shared\HelperClasses\APIHelperFunctions.cs
-
-
-
-
-
-
-
Line coverage
-
-
31%
-
- - - - - - - - - - - - - - - - - - - - - -
Covered lines:21
Uncovered lines:46
Coverable lines:67
Total lines:109
Line coverage:31.3%
-
-
-
-
-
Branch coverage
-
-
20%
-
- - - - - - - - - - - - - -
Covered branches:4
Total branches:20
Branch coverage:20%
-
-
-
-
-
Method coverage
-
-
-

Method coverage is only available for sponsors.

-Upgrade to PRO version -
-
-
-
-

Metrics

-
- - - - - - - - - - - - -
MethodBranch coverage Cyclomatic complexity Line coverage
.cctor()100%10%
GetBeginningOfWeekAsAPIString()50%481.81%
GetDateWithOffsetAsAPIString(...)100%1100%
GetDateTimeAsAPIString(...)100%2100%
SetParameters(...)0%40%
GenerateURL(...)0%80%
GenerateURLWithParameters(...)100%10%
ReverseList(...)0%20%
-
-

File(s)

-

C:\Users\wathen\source\repos\ReportingServices\ReportingServices.Shared\HelperClasses\APIHelperFunctions.cs

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#LineLine coverage
 1using System.Web;
 2
 3namespace ReportingServices.Shared.HelperClasses
 4{
 5    public static class APIHelperFunctions
 6    {
 07        private readonly static string fabTimeServer = "http://messa004.infineon.com/fabtime717service/GetChartData.aspx
 8
 9        public static string GetBeginningOfWeekAsAPIString()
 110        {
 111            DateTime date = DateTime.Now;
 12
 113            int dayOfWeek = (int)date.DayOfWeek;
 14
 115            date = dayOfWeek switch
 116            {
 017                0 => date.AddDays(-6),
 018                1 => date,
 119                _ => date.AddDays(1 - dayOfWeek)
 120            };
 21
 122            return GetDateTimeAsAPIString(date.ToString(), false);
 123        }
 24
 25        public static string GetDateWithOffsetAsAPIString(string dateString, float offset)
 126        {
 127            DateTime date = DateTime.Parse(dateString);
 28
 129            date = date.AddHours(offset);
 30
 131            return GetDateTimeAsAPIString(date.ToString(), true);
 132        }
 33
 34        public static string GetDateTimeAsAPIString(string dateString, bool fullDateTime)
 435        {
 436            DateTime date = DateTime.Parse(dateString);
 37
 438            if (fullDateTime)
 239                dateString = date.ToString("yyyy-M-d HH:mm:ss");
 40            else
 241                dateString = date.Year + "-" + date.Month + "-" + date.Day + " 0:0:0";
 42
 443            return dateString;
 444        }
 45
 46        public static Dictionary<string, string> SetParameters(string startDate = "", string endDate = "", string chart 
 47            string areasLike = "", string toolsLike = "", string operationsLike = "", string capacityTypesLike = "")
 048        {
 049            Dictionary<string, string> parameters = new();
 50
 051            startDate = startDate == "" ? HttpUtility.UrlEncode(GetBeginningOfWeekAsAPIString()) : startDate;
 052            endDate = endDate == "" ? HttpUtility.UrlEncode(GetDateTimeAsAPIString(DateTime.Now.ToString(), true)) : end
 53
 054            parameters.Add("chart", chart);
 055            parameters.Add("starttime", startDate);
 056            parameters.Add("endtime", endDate);
 057            parameters.Add("periodlen", periodLen);
 058            parameters.Add("areaslike", areasLike);
 059            parameters.Add("toolslike", toolsLike);
 060            parameters.Add("operationslike", operationsLike);
 061            parameters.Add("capacitytypeslike", capacityTypesLike);
 062            parameters.Add("login", "administrator");
 063            parameters.Add("password", "admin");
 064            parameters.Add("fabtimeauthentication", "1");
 65
 066            return parameters;
 067        }
 68
 69        public static string GenerateURL(Dictionary<string, string> parameters)
 070        {
 071            int count = 0;
 072            string url = fabTimeServer;
 73
 074            foreach (KeyValuePair<string, string> pair in parameters)
 075            {
 076                if (pair.Value != "")
 077                    url = url + pair.Key + "=" + pair.Value;
 78
 079                if (count != parameters.Count - 1 && !string.IsNullOrEmpty(pair.Value))
 080                    url += "&";
 81
 082                count++;
 083            }
 84
 085            return url;
 086        }
 87
 88        public static string GenerateURLWithParameters(string startDate = "", string endDate = "", string chart = "", st
 89            string areasLike = "", string toolsLike = "", string operationsLike = "", string capacityTypesLike = "")
 090        {
 091            Dictionary<string, string> parameters = SetParameters(startDate, endDate, chart,
 092                periodLen, areasLike, toolsLike, operationsLike, capacityTypesLike);
 93
 094            return GenerateURL(parameters);
 095        }
 96
 97        public static List<T> ReverseList<T>(List<T> inputList)
 098        {
 099            List<T> temp = new();
 100
 0101            for (int i = inputList.Count - 1; i >= 0; i--)
 0102            {
 0103                temp.Add(inputList[i]);
 0104            }
 105
 0106            return temp;
 0107        }
 108    }
 109}
-
-
-
- - \ No newline at end of file diff --git a/.vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.Shared_ApiCaller.html b/.vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.Shared_ApiCaller.html deleted file mode 100644 index 064a400..0000000 --- a/.vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.Shared_ApiCaller.html +++ /dev/null @@ -1,189 +0,0 @@ - - - - - - - -ReportingServices.Shared.HelperClasses.ApiCaller - Coverage Report - -
-

< Summary

-
-
-
Information
-
-
- - - - - - - - - - - - - -
Class:ReportingServices.Shared.HelperClasses.ApiCaller
Assembly:ReportingServices.Shared
File(s):C:\Users\wathen\source\repos\ReportingServices\ReportingServices.Shared\HelperClasses\ApiCaller.cs
-
-
-
-
-
-
-
Line coverage
-
-
0%
-
- - - - - - - - - - - - - - - - - - - - - -
Covered lines:0
Uncovered lines:8
Coverable lines:8
Total lines:22
Line coverage:0%
-
-
-
-
-
Branch coverage
-
-
N/A
-
- - - - - - - - - - - - - -
Covered branches:0
Total branches:0
Branch coverage:N/A
-
-
-
-
-
Method coverage
-
-
-

Method coverage is only available for sponsors.

-Upgrade to PRO version -
-
-
-
-

Metrics

-
- - - - - -
MethodBranch coverage Cyclomatic complexity Line coverage
GetApi()100%10%
-
-

File(s)

-

C:\Users\wathen\source\repos\ReportingServices\ReportingServices.Shared\HelperClasses\ApiCaller.cs

-
- - - - - - - - - - - - - - - - - - - - - - - - - - -
#LineLine coverage
 1using ReportingServices.Shared.Models.ProductionReport;
 2using System.Net.Http.Json;
 3using System.Text.Json;
 4
 5namespace ReportingServices.Shared.HelperClasses
 6{
 7    public static class ApiCaller
 8    {
 9        public static async Task<T> GetApi<T>(string url)
 010        {
 11            T deserializedJson;
 12
 013            using (HttpClient client = new())
 014            {
 015                string apiResponse = await client.GetStringAsync(url);
 016                deserializedJson = JsonSerializer.Deserialize<T>(apiResponse);
 017            }
 18
 019            return deserializedJson;
 020        }
 21    }
 22}
-
-
-
-
-

Methods/Properties

-GetApi()
-
-
- - \ No newline at end of file diff --git a/.vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.Shared_DailyReport.html b/.vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.Shared_DailyReport.html deleted file mode 100644 index c41f12a..0000000 --- a/.vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.Shared_DailyReport.html +++ /dev/null @@ -1,360 +0,0 @@ - - - - - - - -ReportingServices.Shared.ViewModels.ProductionReport.DailyReport - Coverage Report - -
-

< Summary

-
-
-
Information
-
-
- - - - - - - - - - - - - -
Class:ReportingServices.Shared.ViewModels.ProductionReport.DailyReport
Assembly:ReportingServices.Shared
File(s):C:\Users\wathen\source\repos\ReportingServices\ReportingServices.Shared\ViewModels\ProductionReport\DailyReport.cs
-
-
-
-
-
-
-
Line coverage
-
-
0%
-
- - - - - - - - - - - - - - - - - - - - - -
Covered lines:0
Uncovered lines:107
Coverable lines:107
Total lines:145
Line coverage:0%
-
-
-
-
-
Branch coverage
-
-
0%
-
- - - - - - - - - - - - - -
Covered branches:0
Total branches:12
Branch coverage:0%
-
-
-
-
-
Method coverage
-
-
-

Method coverage is only available for sponsors.

-Upgrade to PRO version -
-
-
-
-

Metrics

- -

File(s)

-

C:\Users\wathen\source\repos\ReportingServices\ReportingServices.Shared\ViewModels\ProductionReport\DailyReport.cs

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#LineLine coverage
 1using ReportingServices.Shared.HelperClasses;
 2using ReportingServices.Shared.Models.ProductionReport;
 3using ReportingServices.Shared.ViewModels.ProductionReport;
 4
 5namespace ReportingServices.Shared.ViewModels.ProductionReport
 6{
 7    public class DailyReport
 8    {
 09        public DateTime StartDate { get; set; }
 010        public YieldStatistics CurrentWeek { get; set; }
 011        public YieldStatistics PreviousWeek { get; set; }
 012        public Dictionary<string, List<EquipmentStateByDay>> ToolAvailibilityByType { get; set; }
 013        public Dictionary<string, ToolStateByType> ToolStateByType { get; set; }
 014        public Dictionary<string, List<string>> ToolStatesByOwner { get; set; }
 015        public Dictionary<string, List<int>> DualLayerReactors { get; set; }
 016        public ManualReportEntries ManualReportEntries { get; set; }
 017        public List<UnloadTempsByDay> UnloadTempsByDay { get; set; }
 018        public List<SLLTool> SLLTools { get; set; }
 019        public int NumberOfToolsWaferSize6IN { get; set; }
 020        public int NumberOfToolsWaferSize8IN { get; set; }
 021        public int NumberOfToolsWaferSize6INScheduled { get; set; }
 022        public int NumberOfToolsWaferSize8INScheduled { get; set; }
 023        public QuarterlyTargets QuarterlyTargets { get; set; }
 24
 025        public DailyReport()
 026        {
 027            ToolAvailibilityByType = new();
 028            ToolStateByType = new();
 029            DualLayerReactors = new();
 030            UnloadTempsByDay = new();
 031            StartDate = DateTime.Parse(APIHelperFunctions.GetBeginningOfWeekAsAPIString());
 032            CurrentWeek = new(StartDate, true);
 033            PreviousWeek = new(StartDate.AddDays(-7), false);
 034        }
 35
 36        public void AddToolAvailibilityByType(string key, List<EquipmentStateByDay> states)
 037        {
 038            ToolAvailibilityByType.Add(key, states);
 039        }
 40
 41        public void AddToolStateByType(string key, List<ToolStateCurrent> states)
 042        {
 043            ToolStateByType state = new(states);
 44
 045            ToolStateByType.Add(key, state);
 046        }
 47
 48        public void SetReactorInfo(List<Reactor> reactors, List<int> unscheduledReactors)
 049        {
 050            SetToolsByPocketSize(reactors, unscheduledReactors);
 051            SetDisabledLoadlocks(reactors);
 052        }
 53
 54        public void SetRDSInfo(List<RDS> rdsList)
 055        {
 056            SetDualLayerReactors(rdsList);
 057            SetUnloadTempsLessThan700(rdsList);
 058        }
 59
 60        private void SetToolsByPocketSize(List<Reactor> reactors, List<int> unscheduledReactors)
 061        {
 062            NumberOfToolsWaferSize6IN = reactors.Where(react => react.PocketSize.Contains("150")).Count();
 063            NumberOfToolsWaferSize8IN = reactors.Where(react => react.PocketSize.Contains("200")).Count();
 64
 065            NumberOfToolsWaferSize6INScheduled =
 066                reactors.Where(react => !unscheduledReactors.Contains(react.ReactorNumber)
 067                && react.PocketSize.Contains("150")).Count();
 068            NumberOfToolsWaferSize8INScheduled =
 069                reactors.Where(react => !unscheduledReactors.Contains(react.ReactorNumber)
 070                && react.PocketSize.Contains("200")).Count();
 071        }
 72
 73        private void SetDisabledLoadlocks(List<Reactor> reactors)
 074        {
 075            List<Reactor> reactorsWithDisabledLoadlocks = reactors.Where(react => react.HasDisabledLoadlock).ToList();
 76
 077            int singleLoadlockASM = reactorsWithDisabledLoadlocks.Where(react => react.Type.Contains("ASM")).Count();
 078            int singleLoadlockHTR = reactorsWithDisabledLoadlocks.Where(react => react.Type.Contains("HTR")).Count();
 79
 080            foreach (SLLTool sll in SLLTools)
 081            {
 082                if (sll.Date.Date == DateTime.Now.Date)
 083                {
 084                    sll.ASM = singleLoadlockASM;
 085                    sll.HTR = singleLoadlockHTR;
 086                    return;
 87                }
 088            }
 89
 090            SLLTools.Add(new SLLTool
 091            {
 092                Date = DateTime.Now.Date,
 093                ASM = singleLoadlockASM,
 094                HTR = singleLoadlockHTR
 095            });
 096        }
 97
 98        private void SetDualLayerReactors(List<RDS> rdsList)
 099        {
 0100            DateTime compareDate = DateTime.Now.Date;
 0101            List<RDS> rdsWithDualLayerPSN = rdsList.Where(rds => rds.LayerType.Contains("2 Layer") && rds.DateOut == com
 102
 0103            DualLayerReactors.Add("ASM", rdsWithDualLayerPSN.
 0104                Where(rds => rds.ReactorType.Contains("ASM")).
 0105                OrderBy(rds => rds.Reactor).
 0106                Select(rds => rds.Reactor).
 0107                Distinct().ToList());
 0108            DualLayerReactors.Add("HTR", rdsWithDualLayerPSN.
 0109                Where(rds => rds.ReactorType.Contains("HTR")).
 0110                OrderBy(rds => rds.Reactor).
 0111                Select(rds => rds.Reactor).
 0112                Distinct().ToList());
 0113            DualLayerReactors.Add("EPP", rdsWithDualLayerPSN.
 0114                Where(rds => rds.ReactorType.Contains("EPP")).
 0115                OrderBy(rds => rds.Reactor).
 0116                Select(rds => rds.Reactor).
 0117                Distinct().ToList());
 0118        }
 119
 120        private void SetUnloadTempsLessThan700(List<RDS> rdsList)
 0121        {
 0122            var rdsWithTempsLessThan700 = rdsList.Where(rds => rds.UnloadTemp < 700).GroupBy(rds => rds.DateOut);
 123
 0124            foreach (var group in rdsWithTempsLessThan700)
 0125            {
 0126                UnloadTempsByDay.Add(new UnloadTempsByDay
 0127                {
 0128                    Date = group.Key,
 0129                    ASMUnloadsBelow700 = group.Where(rds => rds.ReactorType.Contains("ASM")).Select(rds => rds.Reactor).
 0130                    HTRUnloadsBelow700 = group.Where(rds => rds.ReactorType.Contains("HTR")).Select(rds => rds.Reactor).
 0131                });
 0132            }
 0133        }
 134
 135        public void ReverseLists()
 0136        {
 0137            CurrentWeek.ScrapByDay = APIHelperFunctions.ReverseList(CurrentWeek.ScrapByDay);
 0138            PreviousWeek.ScrapByDay = APIHelperFunctions.ReverseList(PreviousWeek.ScrapByDay);
 139
 0140            ToolAvailibilityByType["ASM"] = APIHelperFunctions.ReverseList(ToolAvailibilityByType["ASM"]);
 0141            ToolAvailibilityByType["EPP"] = APIHelperFunctions.ReverseList(ToolAvailibilityByType["EPP"]);
 0142            ToolAvailibilityByType["HTR"] = APIHelperFunctions.ReverseList(ToolAvailibilityByType["HTR"]);
 0143        }
 144    }
 145}
-
-
-
- - \ No newline at end of file diff --git a/.vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.Shared_DailyReportHelper.html b/.vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.Shared_DailyReportHelper.html deleted file mode 100644 index 30ae947..0000000 --- a/.vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.Shared_DailyReportHelper.html +++ /dev/null @@ -1,261 +0,0 @@ - - - - - - - -ReportingServices.Shared.HelperClasses.DailyReportHelper - Coverage Report - -
-

< Summary

-
-
-
Information
-
-
- - - - - - - - - - - - - -
Class:ReportingServices.Shared.HelperClasses.DailyReportHelper
Assembly:ReportingServices.Shared
File(s):C:\Users\wathen\source\repos\ReportingServices\ReportingServices.Shared\HelperClasses\DailyReportHelper.cs
-
-
-
-
-
-
-
Line coverage
-
-
0%
-
- - - - - - - - - - - - - - - - - - - - - -
Covered lines:0
Uncovered lines:62
Coverable lines:62
Total lines:90
Line coverage:0%
-
-
-
-
-
Branch coverage
-
-
0%
-
- - - - - - - - - - - - - -
Covered branches:0
Total branches:12
Branch coverage:0%
-
-
-
-
-
Method coverage
-
-
-

Method coverage is only available for sponsors.

-Upgrade to PRO version -
-
-
-
-

Metrics

-
- - - - - - - -
MethodBranch coverage Cyclomatic complexity Line coverage
.cctor()100%10%
SetUpDailyReport()100%10%
GetUnscheduledReactors(...)0%120%
-
-

File(s)

-

C:\Users\wathen\source\repos\ReportingServices\ReportingServices.Shared\HelperClasses\DailyReportHelper.cs

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#LineLine coverage
 1using ReportingServices.Shared.Repositories;
 2using ReportingServices.Shared.Models.ProductionReport;
 3using ReportingServices.Shared.ViewModels.ProductionReport;
 4
 5namespace ReportingServices.Shared.HelperClasses
 6{
 7    public static class DailyReportHelper
 8    {
 09        private static readonly string _dailyRptFilePath = "wwwroot/Assets/DailyReportInfo.json";
 010        private static readonly string _SLLFilePath = "wwwroot/Assets/SLLTools.json";
 011        private static readonly string _baseUrlFabtime = "https://localhost:7196/api/FabTime/";
 012        private static readonly string _baseUrlScrapeDb = "https://localhost:7196/api/ScrapeDB/";
 13
 14        public static DailyReport SetUpDailyReport()
 015        {
 016            List<Task<List<EquipmentStateByDay>>> tasksEQState = new();
 017            List<Task<List<ToolStateCurrent>>> tasksState = new();
 018            DailyReport report = new()
 019            {
 020                SLLTools = JsonFileHandler.LoadJSONFile<List<SLLTool>>(_SLLFilePath),
 021                ManualReportEntries = JsonFileHandler.LoadJSONFile<ManualReportEntries>(_dailyRptFilePath)
 022            };
 23
 024            Task<YieldInformation> task1 = ApiCaller.GetApi<YieldInformation>(_baseUrlFabtime + "ReactorOuts?startDate="
 025            Task<YieldInformation> task2 = ApiCaller.GetApi<YieldInformation>(_baseUrlFabtime + "ReactorOuts?startDate="
 26
 027            tasksEQState.Add(ApiCaller.GetApi<List<EquipmentStateByDay>>(_baseUrlFabtime + "ToolStateTrend?toolType=ASM"
 028            tasksEQState.Add(ApiCaller.GetApi<List<EquipmentStateByDay>>(_baseUrlFabtime + "ToolStateTrend?toolType=EPP"
 029            tasksEQState.Add(ApiCaller.GetApi<List<EquipmentStateByDay>>(_baseUrlFabtime + "ToolStateTrend?toolType=HTR"
 030            tasksState.Add(ApiCaller.GetApi<List<ToolStateCurrent>>(_baseUrlFabtime + "ToolState?toolType=ASM"));
 031            tasksState.Add(ApiCaller.GetApi<List<ToolStateCurrent>>(_baseUrlFabtime + "ToolState?toolType=EPP"));
 032            tasksState.Add(ApiCaller.GetApi<List<ToolStateCurrent>>(_baseUrlFabtime + "ToolState?toolType=HTR"));
 033            tasksState.Add(ApiCaller.GetApi<List<ToolStateCurrent>>(_baseUrlFabtime + "ToolState?toolType=Metrology"));
 034            tasksState.Add(ApiCaller.GetApi<List<ToolStateCurrent>>(_baseUrlFabtime + "ToolState?toolType=Cleans"));
 35
 036            Task<QuarterlyTargets> targets = ApiCaller.GetApi<QuarterlyTargets>(_baseUrlScrapeDb + "Targets");
 037            Task<List<RDS>> rds = ApiCaller.GetApi<List<RDS>>(_baseUrlScrapeDb + "RDS?date=" + report.StartDate.ToString
 038            Task<List<Reactor>> reactors = ApiCaller.GetApi<List<Reactor>>(_baseUrlScrapeDb + "Reactors");
 39
 040            report.AddToolAvailibilityByType("ASM", tasksEQState[0].Result);
 041            report.AddToolAvailibilityByType("EPP", tasksEQState[1].Result);
 042            report.AddToolAvailibilityByType("HTR", tasksEQState[2].Result);
 43
 044            report.AddToolStateByType("ASM", tasksState[0].Result);
 045            report.AddToolStateByType("EPP", tasksState[1].Result);
 046            report.AddToolStateByType("HTR", tasksState[2].Result);
 047            report.AddToolStateByType("Metrology", tasksState[3].Result);
 048            report.AddToolStateByType("Cleans", tasksState[4].Result);
 49
 050            report.QuarterlyTargets = targets.Result;
 51
 052            report.SetRDSInfo(rds.Result);
 053            report.SetReactorInfo(reactors.Result, GetUnscheduledReactors(report));
 54
 055            report.CurrentWeek.SetYieldInformation(task1.Result, report.QuarterlyTargets);
 056            report.PreviousWeek.SetYieldInformation(task2.Result, report.QuarterlyTargets);
 57
 058            report.ReverseLists();
 59
 060            ManualReportEntries entries = report.ManualReportEntries;
 061            List<SLLTool> sll = report.SLLTools;
 62
 063            JsonFileHandler.SaveJSONFile(entries, _dailyRptFilePath);
 064            JsonFileHandler.SaveJSONFile(sll, _SLLFilePath);
 65
 066            return report;
 067        }
 68
 69        public static List<int> GetUnscheduledReactors(DailyReport report)
 070        {
 071            List<int> reactors = new();
 72
 073            foreach (KeyValuePair<string, ToolStateByType> keyValuePairs in report.ToolStateByType)
 074            {
 075                if (keyValuePairs.Key != "Metrology" && keyValuePairs.Key != "Cleans")
 076                {
 077                    foreach (ToolStateCurrent tool in keyValuePairs.Value.ToolStateCurrents)
 078                    {
 079                        if (tool.BasicStateDescription != "Productive" && tool.ReactorStatus != "Out of Service")
 080                        {
 081                            reactors.Add(int.Parse(tool.Tool.Substring(1)));
 082                        }
 083                    }
 084                }
 085            }
 86
 087            return reactors;
 088        }
 89    }
 90}
-
-
-
- - \ No newline at end of file diff --git a/.vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.Shared_EquipmentStateByDay.html b/.vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.Shared_EquipmentStateByDay.html deleted file mode 100644 index f2a1df2..0000000 --- a/.vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.Shared_EquipmentStateByDay.html +++ /dev/null @@ -1,181 +0,0 @@ - - - - - - - -ReportingServices.Shared.Models.ProductionReport.EquipmentStateByDay - Coverage Report - -
-

< Summary

-
-
-
Information
-
-
- - - - - - - - - - - - - -
Class:ReportingServices.Shared.Models.ProductionReport.EquipmentStateByDay
Assembly:ReportingServices.Shared
File(s):C:\Users\wathen\source\repos\ReportingServices\ReportingServices.Shared\Models\ProductionReport\EquipmentStateByDay.cs
-
-
-
-
-
-
-
Line coverage
-
-
0%
-
- - - - - - - - - - - - - - - - - - - - - -
Covered lines:0
Uncovered lines:2
Coverable lines:2
Total lines:12
Line coverage:0%
-
-
-
-
-
Branch coverage
-
-
N/A
-
- - - - - - - - - - - - - -
Covered branches:0
Total branches:0
Branch coverage:N/A
-
-
-
-
-
Method coverage
-
-
-

Method coverage is only available for sponsors.

-Upgrade to PRO version -
-
-
-
-

Metrics

-
- - - - - - -
MethodBranch coverage Cyclomatic complexity Line coverage
get_StartTime()100%10%
get_AvailablePct()100%10%
-
-

File(s)

-

C:\Users\wathen\source\repos\ReportingServices\ReportingServices.Shared\Models\ProductionReport\EquipmentStateByDay.cs

-
- - - - - - - - - - - - - - - - -
#LineLine coverage
 1using System.Text.Json.Serialization;
 2
 3namespace ReportingServices.Shared.Models.ProductionReport
 4{
 5    public class EquipmentStateByDay
 6    {
 7        [JsonPropertyName("StartTime")]
 08        public string StartTime { get; set; }
 9        [JsonPropertyName("AvailablePct")]
 010        public string AvailablePct { get; set; }
 11    }
 12}
-
-
-
-
-

Methods/Properties

-get_StartTime()
-get_AvailablePct()
-
-
- - \ No newline at end of file diff --git a/.vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.Shared_FabTimeReportingRepository.html b/.vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.Shared_FabTimeReportingRepository.html deleted file mode 100644 index 66f20b6..0000000 --- a/.vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.Shared_FabTimeReportingRepository.html +++ /dev/null @@ -1,231 +0,0 @@ - - - - - - - -ReportingServices.Shared.Repositories.FabTimeReportingRepository - Coverage Report - -
-

< Summary

-
-
-
Information
-
-
- - - - - - - - - - - - - -
Class:ReportingServices.Shared.Repositories.FabTimeReportingRepository
Assembly:ReportingServices.Shared
File(s):C:\Users\wathen\source\repos\ReportingServices\ReportingServices.Shared\Repositories\Implementations\FabTimeReportingRepository.cs
-
-
-
-
-
-
-
Line coverage
-
-
0%
-
- - - - - - - - - - - - - - - - - - - - - -
Covered lines:0
Uncovered lines:27
Coverable lines:27
Total lines:56
Line coverage:0%
-
-
-
-
-
Branch coverage
-
-
0%
-
- - - - - - - - - - - - - -
Covered branches:0
Total branches:2
Branch coverage:0%
-
-
-
-
-
Method coverage
-
-
-

Method coverage is only available for sponsors.

-Upgrade to PRO version -
-
-
-
-

Metrics

-
- - - - - - - - - -
MethodBranch coverage Cyclomatic complexity Line coverage
.ctor()100%10%
GetMovesTrendData()100%10%
GetToolStateTrendData()100%10%
GetToolStateData()0%20%
GetJsonData()100%10%
-
-

File(s)

-

C:\Users\wathen\source\repos\ReportingServices\ReportingServices.Shared\Repositories\Implementations\FabTimeReportingRepository.cs

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#LineLine coverage
 1using ReportingServices.Shared.HelperClasses;
 2using ReportingServices.Shared.Models.ProductionReport;
 3using ReportingServices.Shared.ViewModels.ProductionReport;
 4using System.Text.Json;
 5using System.Web;
 6
 7namespace ReportingServices.Shared.Repositories
 8{
 9    public class FabTimeReportingRepository : IFabTimeReportingRepository
 10    {
 011        private readonly string _toolFilter = "~R76%2C%20~R78%2C%20~R25%2C%20~R67%2C%20~R69%2C%20~R71%2C%20~R47%2C%20~R5
 12
 13        public async Task<List<ReactorOutsByRDS>> GetMovesTrendData(string startDate = "", string endDate = "")
 014        {
 015            string url = APIHelperFunctions.GenerateURLWithParameters(startDate: startDate, endDate: endDate, chart: "MO
 16
 017            return await GetJsonData<List<ReactorOutsByRDS>>(url);
 018        }
 19
 20        public async Task<List<EquipmentStateByDay>> GetToolStateTrendData(string toolType)
 021        {
 022            string url = APIHelperFunctions.GenerateURLWithParameters(chart: "TOOLSTATE", periodLen: "24", capacityTypes
 23
 024            return await GetJsonData<List<EquipmentStateByDay>>(url);
 025        }
 26
 27        public async Task<List<ToolStateCurrent>> GetToolStateData(string toolType)
 028        {
 029            string capacityFilter = toolType == "ASM" ? toolType + "%2CASM%2B" : toolType;
 030            string startDate = HttpUtility.UrlEncode(APIHelperFunctions.GetDateWithOffsetAsAPIString(DateTime.Now.ToStri
 31
 032            string url = APIHelperFunctions.GenerateURLWithParameters(chart: "ToolStateGantt", periodLen: "24",
 033                capacityTypesLike: capacityFilter, toolsLike: _toolFilter, startDate: startDate);
 34
 035            return await GetJsonData<List<ToolStateCurrent>>(url);
 036        }
 37
 38        public async Task<T> GetJsonData<T>(string url)
 039        {
 40            T deserializedJson;
 41
 042            using (var client = new HttpClient())
 043            {
 044                using (HttpResponseMessage response = await client.GetAsync(url))
 045                {
 046                    string apiResponse = await response.Content.ReadAsStringAsync();
 047                    deserializedJson = JsonSerializer.Deserialize<T>(apiResponse);
 048                }
 049            }
 50
 051            return deserializedJson;
 052        }
 53
 54
 55    }
 56}
-
-
-
- - \ No newline at end of file diff --git a/.vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.Shared_JsonFileHandler.html b/.vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.Shared_JsonFileHandler.html deleted file mode 100644 index b21b698..0000000 --- a/.vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.Shared_JsonFileHandler.html +++ /dev/null @@ -1,188 +0,0 @@ - - - - - - - -ReportingServices.Shared.HelperClasses.JsonFileHandler - Coverage Report - -
-

< Summary

-
-
-
Information
-
-
- - - - - - - - - - - - - -
Class:ReportingServices.Shared.HelperClasses.JsonFileHandler
Assembly:ReportingServices.Shared
File(s):C:\Users\wathen\source\repos\ReportingServices\ReportingServices.Shared\HelperClasses\JsonFileHandler.cs
-
-
-
-
-
-
-
Line coverage
-
-
0%
-
- - - - - - - - - - - - - - - - - - - - - -
Covered lines:0
Uncovered lines:8
Coverable lines:8
Total lines:19
Line coverage:0%
-
-
-
-
-
Branch coverage
-
-
N/A
-
- - - - - - - - - - - - - -
Covered branches:0
Total branches:0
Branch coverage:N/A
-
-
-
-
-
Method coverage
-
-
-

Method coverage is only available for sponsors.

-Upgrade to PRO version -
-
-
-
-

Metrics

-
- - - - - - -
MethodBranch coverage Cyclomatic complexity Line coverage
LoadJSONFile(...)100%10%
SaveJSONFile(...)100%10%
-
-

File(s)

-

C:\Users\wathen\source\repos\ReportingServices\ReportingServices.Shared\HelperClasses\JsonFileHandler.cs

-
- - - - - - - - - - - - - - - - - - - - - - - -
#LineLine coverage
 1using System.Text.Json;
 2
 3namespace ReportingServices.Shared.HelperClasses
 4{
 5    public static class JsonFileHandler
 6    {
 7        public static T LoadJSONFile<T>(string file)
 08        {
 09            string json = File.ReadAllText(file);
 010            return JsonSerializer.Deserialize<T>(json);
 011        }
 12
 13        public static void SaveJSONFile<T>(T obj, string file)
 014        {
 015            string json = JsonSerializer.Serialize(obj);
 016            File.WriteAllText(file, json);
 017        }
 18    }
 19}
-
-
-
- - \ No newline at end of file diff --git a/.vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.Shared_ManualReportEntries.html b/.vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.Shared_ManualReportEntries.html deleted file mode 100644 index a4c2355..0000000 --- a/.vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.Shared_ManualReportEntries.html +++ /dev/null @@ -1,216 +0,0 @@ - - - - - - - -ReportingServices.Shared.Models.ProductionReport.ManualReportEntries - Coverage Report - -
-

< Summary

-
-
-
Information
-
-
- - - - - - - - - - - - - -
Class:ReportingServices.Shared.Models.ProductionReport.ManualReportEntries
Assembly:ReportingServices.Shared
File(s):C:\Users\wathen\source\repos\ReportingServices\ReportingServices.Shared\Models\ProductionReport\ManualReportEntries.cs
-
-
-
-
-
-
-
Line coverage
-
-
0%
-
- - - - - - - - - - - - - - - - - - - - - -
Covered lines:0
Uncovered lines:15
Coverable lines:15
Total lines:21
Line coverage:0%
-
-
-
-
-
Branch coverage
-
-
N/A
-
- - - - - - - - - - - - - -
Covered branches:0
Total branches:0
Branch coverage:N/A
-
-
-
-
-
Method coverage
-
-
-

Method coverage is only available for sponsors.

-Upgrade to PRO version -
-
-
-
-

Metrics

- -

File(s)

-

C:\Users\wathen\source\repos\ReportingServices\ReportingServices.Shared\Models\ProductionReport\ManualReportEntries.cs

-
- - - - - - - - - - - - - - - - - - - - - - - - - -
#LineLine coverage
 1namespace ReportingServices.Shared.Models.ProductionReport
 2{
 3    public class ManualReportEntries
 4    {
 05        public int OperatorHeadcountDays { get; set; }
 06        public int OperatorHeadcountNights { get; set; }
 07        public int OperatorCallOutsDays { get; set; }
 08        public int OperatorCallOutsNights { get; set; }
 09        public int EngineeringHeadcountDays { get; set; }
 010        public int EngineeringHeadcountNights { get; set; }
 011        public int EngineeringCallOutsDays { get; set; }
 012        public int EngineeringCallOutsNights { get; set; }
 013        public int MaintenanceHeadcountDays { get; set; }
 014        public int MaintenanceHeadcountNights { get; set; }
 015        public int MaintenanceCallOutsDays { get; set; }
 016        public int MaintenanceCallOutsNights { get; set; }
 017        public string BottleChanges { get; set; }
 018        public string DailyPartChanges { get; set; }
 019        public string WeeklyPartChanges { get; set; }
 20    }
 21}
-
-
-
- - \ No newline at end of file diff --git a/.vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.Shared_QuarterlyTargets.html b/.vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.Shared_QuarterlyTargets.html deleted file mode 100644 index 827dad6..0000000 --- a/.vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.Shared_QuarterlyTargets.html +++ /dev/null @@ -1,193 +0,0 @@ - - - - - - - -ReportingServices.Shared.Models.ProductionReport.QuarterlyTargets - Coverage Report - -
-

< Summary

-
-
-
Information
-
-
- - - - - - - - - - - - - -
Class:ReportingServices.Shared.Models.ProductionReport.QuarterlyTargets
Assembly:ReportingServices.Shared
File(s):C:\Users\wathen\source\repos\ReportingServices\ReportingServices.Shared\Models\ProductionReport\QuarterlyTargets.cs
-
-
-
-
-
-
-
Line coverage
-
-
0%
-
- - - - - - - - - - - - - - - - - - - - - -
Covered lines:0
Uncovered lines:5
Coverable lines:5
Total lines:18
Line coverage:0%
-
-
-
-
-
Branch coverage
-
-
N/A
-
- - - - - - - - - - - - - -
Covered branches:0
Total branches:0
Branch coverage:N/A
-
-
-
-
-
Method coverage
-
-
-

Method coverage is only available for sponsors.

-Upgrade to PRO version -
-
-
-
-

Metrics

-
- - - - - - - - - -
MethodBranch coverage Cyclomatic complexity Line coverage
get_Reactor_Outs()100%10%
get_Yield_Outs()100%10%
get_IFX_Scrap()100%10%
get_Yield()100%10%
get_PlanWorkingDays()100%10%
-
-

File(s)

-

C:\Users\wathen\source\repos\ReportingServices\ReportingServices.Shared\Models\ProductionReport\QuarterlyTargets.cs

-
- - - - - - - - - - - - - - - - - - - - - - -
#LineLine coverage
 1using System.Text.Json.Serialization;
 2
 3namespace ReportingServices.Shared.Models.ProductionReport
 4{
 5    public class QuarterlyTargets
 6    {
 7        [JsonPropertyName("Reactor_Outs")]
 08        public int Reactor_Outs { get; set; }
 9        [JsonPropertyName("Yield_Outs")]
 010        public int Yield_Outs { get; set; }
 11        [JsonPropertyName("IFX_Scrap")]
 012        public int IFX_Scrap { get; set; }
 13        [JsonPropertyName("Yield")]
 014        public float Yield { get; set; }
 15        [JsonPropertyName("PlanWorkingDays")]
 016        public int PlanWorkingDays { get; set; }
 17    }
 18}
-
-
-
- - \ No newline at end of file diff --git a/.vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.Shared_RDS.html b/.vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.Shared_RDS.html deleted file mode 100644 index 6b64dcc..0000000 --- a/.vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.Shared_RDS.html +++ /dev/null @@ -1,193 +0,0 @@ - - - - - - - -ReportingServices.Shared.Models.ProductionReport.RDS - Coverage Report - -
-

< Summary

-
-
-
Information
-
-
- - - - - - - - - - - - - -
Class:ReportingServices.Shared.Models.ProductionReport.RDS
Assembly:ReportingServices.Shared
File(s):C:\Users\wathen\source\repos\ReportingServices\ReportingServices.Shared\Models\ProductionReport\RDS.cs
-
-
-
-
-
-
-
Line coverage
-
-
0%
-
- - - - - - - - - - - - - - - - - - - - - -
Covered lines:0
Uncovered lines:5
Coverable lines:5
Total lines:18
Line coverage:0%
-
-
-
-
-
Branch coverage
-
-
N/A
-
- - - - - - - - - - - - - -
Covered branches:0
Total branches:0
Branch coverage:N/A
-
-
-
-
-
Method coverage
-
-
-

Method coverage is only available for sponsors.

-Upgrade to PRO version -
-
-
-
-

Metrics

-
- - - - - - - - - -
MethodBranch coverage Cyclomatic complexity Line coverage
get_Reactor()100%10%
get_ReactorType()100%10%
get_DateOut()100%10%
get_UnloadTemp()100%10%
get_LayerType()100%10%
-
-

File(s)

-

C:\Users\wathen\source\repos\ReportingServices\ReportingServices.Shared\Models\ProductionReport\RDS.cs

-
- - - - - - - - - - - - - - - - - - - - - - -
#LineLine coverage
 1using System.Text.Json.Serialization;
 2
 3namespace ReportingServices.Shared.Models.ProductionReport
 4{
 5    public class RDS
 6    {
 7        [JsonPropertyName("Reactor")]
 08        public int Reactor { get; set; }
 9        [JsonPropertyName("ReactorType")]
 010        public string ReactorType { get; set; }
 11        [JsonPropertyName("DateOut")]
 012        public DateTime DateOut { get; set; }
 13        [JsonPropertyName("UnloadTemp")]
 014        public int UnloadTemp { get; set; }
 15        [JsonPropertyName("LayerType")]
 016        public string LayerType { get; set; }
 17    }
 18}
-
-
-
- - \ No newline at end of file diff --git a/.vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.Shared_Reactor.html b/.vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.Shared_Reactor.html deleted file mode 100644 index 83660eb..0000000 --- a/.vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.Shared_Reactor.html +++ /dev/null @@ -1,189 +0,0 @@ - - - - - - - -ReportingServices.Shared.Models.ProductionReport.Reactor - Coverage Report - -
-

< Summary

-
-
-
Information
-
-
- - - - - - - - - - - - - -
Class:ReportingServices.Shared.Models.ProductionReport.Reactor
Assembly:ReportingServices.Shared
File(s):C:\Users\wathen\source\repos\ReportingServices\ReportingServices.Shared\Models\ProductionReport\Reactor.cs
-
-
-
-
-
-
-
Line coverage
-
-
0%
-
- - - - - - - - - - - - - - - - - - - - - -
Covered lines:0
Uncovered lines:4
Coverable lines:4
Total lines:16
Line coverage:0%
-
-
-
-
-
Branch coverage
-
-
N/A
-
- - - - - - - - - - - - - -
Covered branches:0
Total branches:0
Branch coverage:N/A
-
-
-
-
-
Method coverage
-
-
-

Method coverage is only available for sponsors.

-Upgrade to PRO version -
-
-
-
-

Metrics

-
- - - - - - - - -
MethodBranch coverage Cyclomatic complexity Line coverage
get_ReactorNumber()100%10%
get_Type()100%10%
get_PocketSize()100%10%
get_HasDisabledLoadlock()100%10%
-
-

File(s)

-

C:\Users\wathen\source\repos\ReportingServices\ReportingServices.Shared\Models\ProductionReport\Reactor.cs

-
- - - - - - - - - - - - - - - - - - - - -
#LineLine coverage
 1using System.Text.Json.Serialization;
 2
 3namespace ReportingServices.Shared.Models.ProductionReport
 4{
 5    public class Reactor
 6    {
 7        [JsonPropertyName("ReactorNumber")]
 08        public int ReactorNumber { get; set; }
 9        [JsonPropertyName("Type")]
 010        public string Type { get; set; }
 11        [JsonPropertyName("PocketSize")]
 012        public string PocketSize { get; set; }
 13        [JsonPropertyName("HasDisabledLoadLock")]
 014        public bool HasDisabledLoadlock { get; set; }
 15    }
 16}
-
-
-
- - \ No newline at end of file diff --git a/.vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.Shared_ReactorOutsByDay.html b/.vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.Shared_ReactorOutsByDay.html deleted file mode 100644 index 8a4faab..0000000 --- a/.vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.Shared_ReactorOutsByDay.html +++ /dev/null @@ -1,177 +0,0 @@ - - - - - - - -ReportingServices.Shared.Models.ProductionReport.ReactorOutsByDay - Coverage Report - -
-

< Summary

-
-
-
Information
-
-
- - - - - - - - - - - - - -
Class:ReportingServices.Shared.Models.ProductionReport.ReactorOutsByDay
Assembly:ReportingServices.Shared
File(s):C:\Users\wathen\source\repos\ReportingServices\ReportingServices.Shared\Models\ProductionReport\ReactorOutsByDay.cs
-
-
-
-
-
-
-
Line coverage
-
-
0%
-
- - - - - - - - - - - - - - - - - - - - - -
Covered lines:0
Uncovered lines:2
Coverable lines:2
Total lines:8
Line coverage:0%
-
-
-
-
-
Branch coverage
-
-
N/A
-
- - - - - - - - - - - - - -
Covered branches:0
Total branches:0
Branch coverage:N/A
-
-
-
-
-
Method coverage
-
-
-

Method coverage is only available for sponsors.

-Upgrade to PRO version -
-
-
-
-

Metrics

-
- - - - - - -
MethodBranch coverage Cyclomatic complexity Line coverage
get_StartDate()100%10%
get_TotalWafers()100%10%
-
-

File(s)

-

C:\Users\wathen\source\repos\ReportingServices\ReportingServices.Shared\Models\ProductionReport\ReactorOutsByDay.cs

-
- - - - - - - - - - - - -
#LineLine coverage
 1namespace ReportingServices.Shared.Models.ProductionReport
 2{
 3    public class ReactorOutsByDay
 4    {
 05        public string StartDate { get; set; }
 06        public int TotalWafers { get; set; }
 7    }
 8}
-
-
-
-
-

Methods/Properties

-get_StartDate()
-get_TotalWafers()
-
-
- - \ No newline at end of file diff --git a/.vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.Shared_ReactorOutsByRDS.html b/.vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.Shared_ReactorOutsByRDS.html deleted file mode 100644 index 8c8baf0..0000000 --- a/.vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.Shared_ReactorOutsByRDS.html +++ /dev/null @@ -1,185 +0,0 @@ - - - - - - - -ReportingServices.Shared.Models.ProductionReport.ReactorOutsByRDS - Coverage Report - -
-

< Summary

-
-
-
Information
-
-
- - - - - - - - - - - - - -
Class:ReportingServices.Shared.Models.ProductionReport.ReactorOutsByRDS
Assembly:ReportingServices.Shared
File(s):C:\Users\wathen\source\repos\ReportingServices\ReportingServices.Shared\Models\ProductionReport\ReactorOutsByRDS.cs
-
-
-
-
-
-
-
Line coverage
-
-
0%
-
- - - - - - - - - - - - - - - - - - - - - -
Covered lines:0
Uncovered lines:3
Coverable lines:3
Total lines:14
Line coverage:0%
-
-
-
-
-
Branch coverage
-
-
N/A
-
- - - - - - - - - - - - - -
Covered branches:0
Total branches:0
Branch coverage:N/A
-
-
-
-
-
Method coverage
-
-
-

Method coverage is only available for sponsors.

-Upgrade to PRO version -
-
-
-
-

Metrics

-
- - - - - - - -
MethodBranch coverage Cyclomatic complexity Line coverage
get_RDS_NO()100%10%
get_Units()100%10%
get_EndProcessTime()100%10%
-
-

File(s)

-

C:\Users\wathen\source\repos\ReportingServices\ReportingServices.Shared\Models\ProductionReport\ReactorOutsByRDS.cs

-
- - - - - - - - - - - - - - - - - - -
#LineLine coverage
 1using System.Text.Json.Serialization;
 2
 3namespace ReportingServices.Shared.Models.ProductionReport
 4{
 5    public class ReactorOutsByRDS
 6    {
 7        [JsonPropertyName("RDS_NO")]
 08        public string RDS_NO { get; set; }
 9        [JsonPropertyName("Units")]
 010        public string Units { get; set; }
 11        [JsonPropertyName("EndProcessTime")]
 012        public string EndProcessTime { get; set; }
 13    }
 14}
-
-
-
- -
- - \ No newline at end of file diff --git a/.vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.Shared_ReactorPSNWORuns.html b/.vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.Shared_ReactorPSNWORuns.html deleted file mode 100644 index 93e1e24..0000000 --- a/.vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.Shared_ReactorPSNWORuns.html +++ /dev/null @@ -1,185 +0,0 @@ - - - - - - - -ReportingServices.Shared.Models.PlanningReport.ReactorPSNWORuns - Coverage Report - -
-

< Summary

-
-
-
Information
-
-
- - - - - - - - - - - - - -
Class:ReportingServices.Shared.Models.PlanningReport.ReactorPSNWORuns
Assembly:ReportingServices.Shared
File(s):C:\Users\wathen\source\repos\ReportingServices\ReportingServices.Shared\Models\PlanningReport\ReactorPSNWORuns.cs
-
-
-
-
-
-
-
Line coverage
-
-
0%
-
- - - - - - - - - - - - - - - - - - - - - -
Covered lines:0
Uncovered lines:3
Coverable lines:3
Total lines:14
Line coverage:0%
-
-
-
-
-
Branch coverage
-
-
N/A
-
- - - - - - - - - - - - - -
Covered branches:0
Total branches:0
Branch coverage:N/A
-
-
-
-
-
Method coverage
-
-
-

Method coverage is only available for sponsors.

-Upgrade to PRO version -
-
-
-
-

Metrics

-
- - - - - - - -
MethodBranch coverage Cyclomatic complexity Line coverage
get_REACTOR()100%10%
get_PSN()100%10%
get_WO_COUNT()100%10%
-
-

File(s)

-

C:\Users\wathen\source\repos\ReportingServices\ReportingServices.Shared\Models\PlanningReport\ReactorPSNWORuns.cs

-
- - - - - - - - - - - - - - - - - - -
#LineLine coverage
 1using System.Text.Json.Serialization;
 2
 3namespace ReportingServices.Shared.Models.PlanningReport
 4{
 5    public class ReactorPSNWORuns
 6    {
 7        [JsonPropertyName("REACTOR")]
 08        public string REACTOR { get; set; }
 9        [JsonPropertyName("PSN")]
 010        public string PSN { get; set; }
 11        [JsonPropertyName("WO_COUNT")]
 012        public int WO_COUNT { get; set; }
 13    }
 14}
-
-
-
-
-

Methods/Properties

-get_REACTOR()
-get_PSN()
-get_WO_COUNT()
-
-
- - \ No newline at end of file diff --git a/.vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.Shared_SLLTool.html b/.vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.Shared_SLLTool.html deleted file mode 100644 index 6039b77..0000000 --- a/.vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.Shared_SLLTool.html +++ /dev/null @@ -1,180 +0,0 @@ - - - - - - - -ReportingServices.Shared.ViewModels.ProductionReport.SLLTool - Coverage Report - -
-

< Summary

-
-
-
Information
-
-
- - - - - - - - - - - - - -
Class:ReportingServices.Shared.ViewModels.ProductionReport.SLLTool
Assembly:ReportingServices.Shared
File(s):C:\Users\wathen\source\repos\ReportingServices\ReportingServices.Shared\ViewModels\ProductionReport\SLLTool.cs
-
-
-
-
-
-
-
Line coverage
-
-
0%
-
- - - - - - - - - - - - - - - - - - - - - -
Covered lines:0
Uncovered lines:3
Coverable lines:3
Total lines:9
Line coverage:0%
-
-
-
-
-
Branch coverage
-
-
N/A
-
- - - - - - - - - - - - - -
Covered branches:0
Total branches:0
Branch coverage:N/A
-
-
-
-
-
Method coverage
-
-
-

Method coverage is only available for sponsors.

-Upgrade to PRO version -
-
-
-
-

Metrics

-
- - - - - - - -
MethodBranch coverage Cyclomatic complexity Line coverage
get_Date()100%10%
get_ASM()100%10%
get_HTR()100%10%
-
-

File(s)

-

C:\Users\wathen\source\repos\ReportingServices\ReportingServices.Shared\ViewModels\ProductionReport\SLLTool.cs

-
- - - - - - - - - - - - - -
#LineLine coverage
 1namespace ReportingServices.Shared.ViewModels.ProductionReport
 2{
 3    public class SLLTool
 4    {
 05        public DateTime Date { get; set; }
 06        public int ASM { get; set; }
 07        public int HTR { get; set; }
 8    }
 9}
-
-
-
-
-

Methods/Properties

-get_Date()
-get_ASM()
-get_HTR()
-
-
- - \ No newline at end of file diff --git a/.vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.Shared_ScrapByDay.html b/.vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.Shared_ScrapByDay.html deleted file mode 100644 index ce81ad6..0000000 --- a/.vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.Shared_ScrapByDay.html +++ /dev/null @@ -1,193 +0,0 @@ - - - - - - - -ReportingServices.Shared.Models.ProductionReport.ScrapByDay - Coverage Report - -
-

< Summary

-
-
-
Information
-
-
- - - - - - - - - - - - - -
Class:ReportingServices.Shared.Models.ProductionReport.ScrapByDay
Assembly:ReportingServices.Shared
File(s):C:\Users\wathen\source\repos\ReportingServices\ReportingServices.Shared\Models\ProductionReport\ScrapByDay.cs
-
-
-
-
-
-
-
Line coverage
-
-
0%
-
- - - - - - - - - - - - - - - - - - - - - -
Covered lines:0
Uncovered lines:5
Coverable lines:5
Total lines:18
Line coverage:0%
-
-
-
-
-
Branch coverage
-
-
N/A
-
- - - - - - - - - - - - - -
Covered branches:0
Total branches:0
Branch coverage:N/A
-
-
-
-
-
Method coverage
-
-
-

Method coverage is only available for sponsors.

-Upgrade to PRO version -
-
-
-
-

Metrics

-
- - - - - - - - - -
MethodBranch coverage Cyclomatic complexity Line coverage
get_StartDate()100%10%
get_TW_PROD()100%10%
get_TOT_REJ_CUST()100%10%
get_TOT_REJ_MANU()100%10%
get_TOT_REJ_WFRS()100%10%
-
-

File(s)

-

C:\Users\wathen\source\repos\ReportingServices\ReportingServices.Shared\Models\ProductionReport\ScrapByDay.cs

-
- - - - - - - - - - - - - - - - - - - - - - -
#LineLine coverage
 1using System.Text.Json.Serialization;
 2
 3namespace ReportingServices.Shared.Models.ProductionReport
 4{
 5    public class ScrapByDay
 6    {
 7        [JsonPropertyName("StartDate")]
 08        public string StartDate { get; set; }
 9        [JsonPropertyName("TW_PROD")]
 010        public int TW_PROD { get; set; }
 11        [JsonPropertyName("TOT_REJ_CUST")]
 012        public int TOT_REJ_CUST { get; set; }
 13        [JsonPropertyName("TOT_REJ_MANU")]
 014        public int TOT_REJ_MANU { get; set; }
 15        [JsonPropertyName("TOT_REJ_WFRS")]
 016        public int TOT_REJ_WFRS { get; set; }
 17    }
 18}
-
-
-
- - \ No newline at end of file diff --git a/.vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.Shared_ScrapeDatabaseRepository.html b/.vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.Shared_ScrapeDatabaseRepository.html deleted file mode 100644 index 767f456..0000000 --- a/.vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.Shared_ScrapeDatabaseRepository.html +++ /dev/null @@ -1,456 +0,0 @@ - - - - - - - -ReportingServices.Shared.Repositories.ScrapeDatabaseRepository - Coverage Report - -
-

< Summary

-
-
-
Information
-
-
- - - - - - - - - - - - - -
Class:ReportingServices.Shared.Repositories.ScrapeDatabaseRepository
Assembly:ReportingServices.Shared
File(s):C:\Users\wathen\source\repos\ReportingServices\ReportingServices.Shared\Repositories\Implementations\ScrapeDatabaseRepository.cs
-
-
-
-
-
-
-
Line coverage
-
-
0%
-
- - - - - - - - - - - - - - - - - - - - - -
Covered lines:0
Uncovered lines:190
Coverable lines:190
Total lines:273
Line coverage:0%
-
-
-
-
-
Branch coverage
-
-
0%
-
- - - - - - - - - - - - - -
Covered branches:0
Total branches:24
Branch coverage:0%
-
-
-
-
-
Method coverage
-
-
-

Method coverage is only available for sponsors.

-Upgrade to PRO version -
-
-
-
-

Metrics

-
- - - - - - - - - - - - - -
MethodBranch coverage Cyclomatic complexity Line coverage
.ctor()100%10%
OpenConnection()0%40%
CloseConnection()0%20%
GetNumberOfPartChanges(...)100%10%
GetScrapByDay(...)0%60%
GetReactorPSNWORuns(...)0%20%
GetQuarterlyTargets()0%60%
GetReactors()0%20%
GetRDSForLastDay(...)0%20%
-
-

File(s)

-

C:\Users\wathen\source\repos\ReportingServices\ReportingServices.Shared\Repositories\Implementations\ScrapeDatabaseRepository.cs

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#LineLine coverage
 1using Microsoft.Data.SqlClient;
 2using ReportingServices.Shared.Models.PlanningReport;
 3using ReportingServices.Shared.Models.ProductionReport;
 4using System.Data;
 5
 6namespace ReportingServices.Shared.Repositories
 7{
 8    public class ScrapeDatabaseRepository : IScrapeDatabaseRepository
 9    {
 10        private SqlConnection _connection;
 11        private readonly string _connectionString;
 12
 013        public ScrapeDatabaseRepository()
 014        {
 015            _connectionString = "Server=MESSV01EC.EC.LOCAL\\PROD1,53959;Database=LSL2SQL;User Id=srpadmin;Password=0okm9
 016        }
 17
 18        public void OpenConnection()
 019        {
 020            if (_connection == null)
 021                _connection = new SqlConnection(_connectionString);
 22
 023            if (_connection.State != ConnectionState.Open)
 024                _connection.Open();
 025        }
 26
 27        public void CloseConnection()
 028        {
 029            if (_connection.State != ConnectionState.Closed)
 030                _connection.Close();
 031        }
 32
 33        public int GetNumberOfPartChanges(string startDate, string endDate)
 034        {
 035            int result = 0;
 36
 037            OpenConnection();
 38
 039            SqlCommand cmd = _connection.CreateCommand();
 40
 041            string query = "SELECT COUNT(*) FROM " +
 042                           "(SELECT REACTOR, COUNT(PROD_SPEC_ID) - 1 AS PCHANGE FROM " +
 043                           "(SELECT REACTOR, PROD_SPEC_ID, COUNT(WO) AS PSN_COUNT FROM RDS WHERE DATE_OUT BETWEEN @start
 044                           "GROUP BY REACTOR) AS l WHERE PCHANGE > 0";
 45
 046            cmd.CommandText = query;
 047            cmd.Parameters.AddWithValue("@startDate", startDate);
 048            cmd.Parameters.AddWithValue("@endDate", endDate);
 49
 050            using (SqlDataReader reader = cmd.ExecuteReader())
 051            {
 052                reader.Read();
 53
 054                result = int.Parse(reader[0].ToString());
 055            }
 56
 057            cmd.Dispose();
 58
 059            CloseConnection();
 60
 061            return result;
 062        }
 63
 64        public List<ScrapByDay> GetScrapByDay(List<ReactorOutsByRDS> outs)
 065        {
 066            List<ScrapByDay> scrap = new();
 067            string rdsNumbers = "";
 68
 069            foreach (ReactorOutsByRDS rout in outs)
 070                rdsNumbers = rdsNumbers + "'" + rout.RDS_NO + "', ";
 71
 072            rdsNumbers = rdsNumbers.Substring(0, rdsNumbers.Length - 2);
 73
 074            OpenConnection();
 75
 076            SqlCommand cmd = _connection.CreateCommand();
 77
 078            string query = "SELECT " +
 079                            "  DATE_OUT," +
 080                            "  SUM(CUST_TOT_REJ) AS TOT_REJ_CUST," +
 081                            "  SUM(LSL_TOT_REJ) AS TOT_REJ_MANU," +
 082                            "  SUM(TW_PROD) AS TW_PROD " +
 083                            "FROM RDS " +
 084                            "WHERE SEQ IN (" + rdsNumbers + ") " +
 085                            "GROUP BY DATE_OUT " +
 086                            "ORDER BY 1 DESC";
 87
 088            cmd.CommandText = query;
 89
 090            using (SqlDataReader reader = cmd.ExecuteReader())
 091            {
 092                while (reader.Read() && reader[0].ToString() != "1/1/1900 12:00:00 AM")
 093                    scrap.Add(new ScrapByDay
 094                    {
 095                        StartDate = reader[0].ToString(),
 096                        TW_PROD = int.Parse(reader[3].ToString()),
 097                        TOT_REJ_CUST = int.Parse(reader[1].ToString()),
 098                        TOT_REJ_MANU = int.Parse(reader[2].ToString()),
 099                        TOT_REJ_WFRS =
 0100                        int.Parse(reader[1].ToString()) + int.Parse(reader[2].ToString())
 0101                    });
 0102            }
 103
 0104            cmd.Dispose();
 105
 0106            CloseConnection();
 107
 0108            return scrap;
 0109        }
 110
 111        public List<ReactorPSNWORuns> GetReactorPSNWORuns(string startDate, string endDate)
 0112        {
 0113            List<ReactorPSNWORuns> weeklyPartChanges = new();
 114
 0115            OpenConnection();
 116
 0117            SqlCommand cmd = _connection.CreateCommand();
 118
 0119            string query = "SELECT REACTOR, PROD_SPEC_ID, COUNT(WO) FROM RDS " +
 0120                            "WHERE DATE_OUT BETWEEN @startDate AND @endDate " +
 0121                            "GROUP BY REACTOR, PROD_SPEC_ID " +
 0122                            "ORDER BY 1";
 123
 0124            cmd.CommandText = query;
 0125            cmd.Parameters.AddWithValue("@startDate", startDate);
 0126            cmd.Parameters.AddWithValue("@endDate", endDate);
 127
 0128            using (SqlDataReader reader = cmd.ExecuteReader())
 0129            {
 0130                while (reader.Read())
 0131                    weeklyPartChanges.Add(new ReactorPSNWORuns
 0132                    {
 0133                        REACTOR = reader[0].ToString(),
 0134                        PSN = reader[1].ToString(),
 0135                        WO_COUNT = int.Parse(reader[2].ToString())
 0136                    });
 0137            }
 138
 0139            cmd.Dispose();
 140
 0141            CloseConnection();
 142
 0143            return weeklyPartChanges;
 0144        }
 145
 146        public QuarterlyTargets GetQuarterlyTargets()
 0147        {
 0148            Dictionary<string, float> targets = new();
 149
 0150            OpenConnection();
 151
 0152            SqlCommand cmd = _connection.CreateCommand();
 153
 0154            string query = "SELECT THRU_TARGET, THRU_QTY, THRU_PCNT FROM FISCAL_QTR_TARGETS " +
 0155                           " WHERE THRU_GROUP = 'TOT' " +
 0156                           "   AND FISCAL_YR = " +
 0157                           "    (SELECT FISCAL_YR FROM FISCAL_QTR " +
 0158                           "      WHERE START_DT < SYSDATETIME() " +
 0159                           "        AND END_DT > SYSDATETIME()) " +
 0160                           "   AND FISCAL_QTR = " +
 0161                           "    (SELECT FISCAL_QTR FROM FISCAL_QTR " +
 0162                           "      WHERE START_DT < SYSDATETIME() " +
 0163                           "        AND END_DT > SYSDATETIME()) " +
 0164                           "UNION " +
 0165                           "SELECT 'PlanWorkingDays' As THRU_TARGET," +
 0166                           "       PLAN_WORKING_DAYS AS THRU_QTY," +
 0167                           "       NULL AS THRU_PCNT" +
 0168                           "  FROM FISCAL_QTR " +
 0169                           " WHERE SYSDATETIME() BETWEEN START_DT AND END_DT";
 170
 0171            cmd.CommandText = query;
 172
 0173            using (SqlDataReader reader = cmd.ExecuteReader())
 0174            {
 0175                while(reader.Read())
 0176                {
 0177                    if (reader[0].ToString().ToUpper() == "YIELD")
 0178                        targets.Add(reader[0].ToString(), float.Parse(reader[2].ToString()));
 0179                    else if (!string.IsNullOrEmpty(reader[1].ToString()))
 0180                        targets.Add(reader[0].ToString(), int.Parse(reader[1].ToString()));
 0181                }
 0182            }
 183
 0184            cmd.Dispose();
 185
 0186            CloseConnection();
 187
 0188            QuarterlyTargets quarterlyTargets = new()
 0189            {
 0190                Reactor_Outs = (int)targets["Reactor_Outs"],
 0191                Yield_Outs = (int)targets["Yield_Outs"],
 0192                IFX_Scrap = (int)targets["IFX_Scrap"],
 0193                Yield = targets["Yield"],
 0194                PlanWorkingDays = (int)targets["PlanWorkingDays"]
 0195            };
 196
 0197            return quarterlyTargets;
 0198        }
 199
 200        public List<Reactor> GetReactors()
 0201        {
 0202            List<Reactor> reactors = new();
 203
 0204            OpenConnection();
 205
 0206            SqlCommand cmd = _connection.CreateCommand();
 207
 0208            string query = "SELECT " +
 0209                           "   REACT_NO, REACT_TYPE, SUSC_POCKET_SIZE, CASE WHEN ACTIVE_LL_DISABLED <> '' THEN 'TRUE' EL
 0210                           "  FROM REACTOR " +
 0211                           " WHERE REACT_ASSIGNMENT IS NOT NULL " +
 0212                           "   AND REACT_ASSIGNMENT <> 'Out of Service' " +
 0213                           "   AND REACT_ASSIGNMENT<> ''";
 214
 0215            cmd.CommandText = query;
 216
 0217            using (SqlDataReader reader = cmd.ExecuteReader())
 0218            {
 0219                while (reader.Read())
 0220                    reactors.Add(new Reactor
 0221                    {
 0222                        ReactorNumber = int.Parse(reader[0].ToString()),
 0223                        Type = reader[1].ToString(),
 0224                        PocketSize = reader[2].ToString(),
 0225                        HasDisabledLoadlock = bool.Parse(reader[3].ToString())
 0226                    });
 0227            }
 228
 0229            cmd.Dispose();
 230
 0231            CloseConnection();
 232
 0233            return reactors;
 0234        }
 235
 236        public List<RDS> GetRDSForLastDay(string date)
 0237        {
 0238            List<RDS> rdsList = new();
 239
 0240            OpenConnection();
 241
 0242            SqlCommand cmd = _connection.CreateCommand();
 243
 0244            string query = "SELECT rds.REACTOR, rds.REACTOR_TYPE, rds.DATE_OUT, " +
 0245                           "CASE WHEN lay.UL_TEMP IS NULL THEN '1000' ELSE lay.UL_TEMP END, psn.LAYER_TYPE FROM RDS " +
 0246                           "INNER JOIN RDS_LAYER lay ON lay.RDS_NO = SEQ " +
 0247                           "INNER JOIN PROD_SPEC psn ON rds.PROD_SPEC_ID = psn.SEQ " +
 0248                           "WHERE DATE_OUT >= @date";
 249
 0250            cmd.CommandText = query;
 0251            cmd.Parameters.AddWithValue("@date", date);
 252
 0253            using (SqlDataReader reader = cmd.ExecuteReader())
 0254            {
 0255                while (reader.Read())
 0256                    rdsList.Add(new RDS
 0257                    {
 0258                        Reactor = int.Parse(reader[0].ToString()),
 0259                        ReactorType = reader[1].ToString(),
 0260                        DateOut = DateTime.Parse(reader[2].ToString()),
 0261                        UnloadTemp = int.Parse(reader[3].ToString()),
 0262                        LayerType = reader[4].ToString()
 0263                    });
 0264            }
 265
 0266            cmd.Dispose();
 267
 0268            CloseConnection();
 269
 0270            return rdsList;
 0271        }
 272    }
 273}
-
-
-
- - \ No newline at end of file diff --git a/.vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.Shared_ToolStateByType.html b/.vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.Shared_ToolStateByType.html deleted file mode 100644 index a085051..0000000 --- a/.vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.Shared_ToolStateByType.html +++ /dev/null @@ -1,252 +0,0 @@ - - - - - - - -ReportingServices.Shared.ViewModels.ProductionReport.ToolStateByType - Coverage Report - -
-

< Summary

-
-
-
Information
-
-
- - - - - - - - - - - - - -
Class:ReportingServices.Shared.ViewModels.ProductionReport.ToolStateByType
Assembly:ReportingServices.Shared
File(s):C:\Users\wathen\source\repos\ReportingServices\ReportingServices.Shared\ViewModels\ProductionReport\ToolStateByType.cs
-
-
-
-
-
-
-
Line coverage
-
-
0%
-
- - - - - - - - - - - - - - - - - - - - - -
Covered lines:0
Uncovered lines:50
Coverable lines:50
Total lines:71
Line coverage:0%
-
-
-
-
-
Branch coverage
-
-
0%
-
- - - - - - - - - - - - - -
Covered branches:0
Total branches:28
Branch coverage:0%
-
-
-
-
-
Method coverage
-
-
-

Method coverage is only available for sponsors.

-Upgrade to PRO version -
-
-
-
-

Metrics

-
- - - - - - - - - - - - -
MethodBranch coverage Cyclomatic complexity Line coverage
get_DownTools()100%10%
get_UpTools()100%10%
get_ToolStateCurrents()100%10%
get_ToolsDownGreaterThan12Hours()100%10%
.ctor(...)100%10%
GetMostRecentTransactions()0%40%
GetToolsDownGreaterThan12Hours()0%180%
DetermineUpAndDownTools()0%60%
-
-

File(s)

-

C:\Users\wathen\source\repos\ReportingServices\ReportingServices.Shared\ViewModels\ProductionReport\ToolStateByType.cs

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#LineLine coverage
 1using ReportingServices.Shared.Models.ProductionReport;
 2
 3namespace ReportingServices.Shared.ViewModels.ProductionReport
 4{
 5    public class ToolStateByType
 6    {
 07        public int DownTools { get; set; }
 08        public int UpTools { get; set; }
 09        public List<ToolStateCurrent> ToolStateCurrents { get; set; }
 010        public List<string> ToolsDownGreaterThan12Hours { get; set; }
 11
 012        public ToolStateByType(List<ToolStateCurrent> toolStateCurrents)
 013        {
 014            ToolStateCurrents = toolStateCurrents;
 015            ToolsDownGreaterThan12Hours = new List<string>();
 016            UpTools = 0;
 017            DownTools = 0;
 18
 019            GetToolsDownGreaterThan12Hours();
 020            GetMostRecentTransactions();
 021            DetermineUpAndDownTools();
 022        }
 23
 24        public void GetMostRecentTransactions()
 025        {
 026            for (int i = ToolStateCurrents.Count - 2; i >= 0; i--)
 027            {
 028                if (ToolStateCurrents[i].Tool == ToolStateCurrents[i + 1].Tool)
 029                    ToolStateCurrents.RemoveAt(i);
 030            }
 031        }
 32
 33        public void GetToolsDownGreaterThan12Hours()
 034        {
 035            float elapsedTime = 0f;
 36
 037            if (ToolStateCurrents[^1].BasicStateDescription.ToUpper() is not "PRODUCTIVE" and not "OUT OF SERVICE")
 038                float.Parse(ToolStateCurrents[^1].GanttElapsedHours);
 39
 040            for (int i = ToolStateCurrents.Count - 2; i >= 0; i--)
 041            {
 042                if (ToolStateCurrents[i].Tool == ToolStateCurrents[i + 1].Tool)
 043                {
 044                    if (ToolStateCurrents[i].BasicStateDescription.ToUpper() != "PRODUCTIVE" && ToolStateCurrents[^1].Ba
 045                        elapsedTime += float.Parse(ToolStateCurrents[i].GanttElapsedHours);
 046                }
 47                else
 048                {
 049                    if (elapsedTime >= 12)
 050                        ToolsDownGreaterThan12Hours.Add(ToolStateCurrents[i + 1].Tool);
 51
 052                    if (ToolStateCurrents[i].BasicStateDescription.ToUpper() != "PRODUCTIVE" && ToolStateCurrents[^1].Ba
 053                        elapsedTime = float.Parse(ToolStateCurrents[i].GanttElapsedHours);
 54                    else
 055                        elapsedTime = 0;
 056                }
 057            }
 058        }
 59
 60        public void DetermineUpAndDownTools()
 061        {
 062            foreach (ToolStateCurrent tools in ToolStateCurrents)
 063            {
 064                if (tools.BasicStateDescription == "Productive")
 065                    UpTools++;
 066                else if (tools.ReactorStatus != "Out of Service")
 067                    DownTools++;
 068            }
 069        }
 70    }
 71}
-
-
-
- - \ No newline at end of file diff --git a/.vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.Shared_ToolStateCurrent.html b/.vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.Shared_ToolStateCurrent.html deleted file mode 100644 index 0597d9e..0000000 --- a/.vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.Shared_ToolStateCurrent.html +++ /dev/null @@ -1,206 +0,0 @@ - - - - - - - -ReportingServices.Shared.Models.ProductionReport.ToolStateCurrent - Coverage Report - -
-

< Summary

-
-
-
Information
-
-
- - - - - - - - - - - - - -
Class:ReportingServices.Shared.Models.ProductionReport.ToolStateCurrent
Assembly:ReportingServices.Shared
File(s):C:\Users\wathen\source\repos\ReportingServices\ReportingServices.Shared\Models\ProductionReport\ToolStateCurrent.cs
-
-
-
-
-
-
-
Line coverage
-
-
0%
-
- - - - - - - - - - - - - - - - - - - - - -
Covered lines:0
Uncovered lines:8
Coverable lines:8
Total lines:25
Line coverage:0%
-
-
-
-
-
Branch coverage
-
-
N/A
-
- - - - - - - - - - - - - -
Covered branches:0
Total branches:0
Branch coverage:N/A
-
-
-
-
-
Method coverage
-
-
-

Method coverage is only available for sponsors.

-Upgrade to PRO version -
-
-
-
-

Metrics

-
- - - - - - - - - - - - -
MethodBranch coverage Cyclomatic complexity Line coverage
get_Tool()100%10%
get_TranTime()100%10%
get_GanttEndTime()100%10%
get_GanttElapsedHours()100%10%
get_BasicStateDescription()100%10%
get_SubState()100%10%
get_ReactorStatus()100%10%
get_Comment()100%10%
-
-

File(s)

-

C:\Users\wathen\source\repos\ReportingServices\ReportingServices.Shared\Models\ProductionReport\ToolStateCurrent.cs

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#LineLine coverage
 1using System.Text.Json.Serialization;
 2
 3namespace ReportingServices.Shared.Models.ProductionReport
 4{
 5    public class ToolStateCurrent
 6    {
 7        [JsonPropertyName("Tool")]
 08        public string Tool { get; set; }
 9        [JsonPropertyName("TranTime")]
 010        public string TranTime { get; set; }
 11        [JsonPropertyName("GanttEndTime")]
 012        public string GanttEndTime { get; set; }
 13        [JsonPropertyName("GanttElapsedHours")]
 014        public string GanttElapsedHours { get; set; }
 15        [JsonPropertyName("BasicStateDescription")]
 016        public string BasicStateDescription { get; set; }
 17        [JsonPropertyName("SubState")]
 018        public string SubState { get; set; }
 19        [JsonPropertyName("ReactorStatus")]
 020        public string ReactorStatus { get; set; }
 21        [JsonPropertyName("Comment")]
 022        public string Comment { get; set; }
 23
 24    }
 25}
-
-
-
- - \ No newline at end of file diff --git a/.vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.Shared_UnloadTempsByDay.html b/.vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.Shared_UnloadTempsByDay.html deleted file mode 100644 index 37b7994..0000000 --- a/.vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.Shared_UnloadTempsByDay.html +++ /dev/null @@ -1,180 +0,0 @@ - - - - - - - -ReportingServices.Shared.ViewModels.ProductionReport.UnloadTempsByDay - Coverage Report - -
-

< Summary

-
-
-
Information
-
-
- - - - - - - - - - - - - -
Class:ReportingServices.Shared.ViewModels.ProductionReport.UnloadTempsByDay
Assembly:ReportingServices.Shared
File(s):C:\Users\wathen\source\repos\ReportingServices\ReportingServices.Shared\ViewModels\ProductionReport\UnloadTempsByDay.cs
-
-
-
-
-
-
-
Line coverage
-
-
0%
-
- - - - - - - - - - - - - - - - - - - - - -
Covered lines:0
Uncovered lines:3
Coverable lines:3
Total lines:9
Line coverage:0%
-
-
-
-
-
Branch coverage
-
-
N/A
-
- - - - - - - - - - - - - -
Covered branches:0
Total branches:0
Branch coverage:N/A
-
-
-
-
-
Method coverage
-
-
-

Method coverage is only available for sponsors.

-Upgrade to PRO version -
-
-
-
-

Metrics

-
- - - - - - - -
MethodBranch coverage Cyclomatic complexity Line coverage
get_Date()100%10%
get_ASMUnloadsBelow700()100%10%
get_HTRUnloadsBelow700()100%10%
-
-

File(s)

-

C:\Users\wathen\source\repos\ReportingServices\ReportingServices.Shared\ViewModels\ProductionReport\UnloadTempsByDay.cs

-
- - - - - - - - - - - - - -
#LineLine coverage
 1namespace ReportingServices.Shared.ViewModels.ProductionReport
 2{
 3    public class UnloadTempsByDay
 4    {
 05        public DateTime Date { get; set; }
 06        public int ASMUnloadsBelow700 { get; set; }
 07        public int HTRUnloadsBelow700 { get; set; }
 8    }
 9}
-
-
-
- - \ No newline at end of file diff --git a/.vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.Shared_WeeklyPartChanges.html b/.vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.Shared_WeeklyPartChanges.html deleted file mode 100644 index 075d402..0000000 --- a/.vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.Shared_WeeklyPartChanges.html +++ /dev/null @@ -1,183 +0,0 @@ - - - - - - - -ReportingServices.Shared.Models.PlanningReport.WeeklyPartChanges - Coverage Report - -
-

< Summary

-
-
-
Information
-
-
- - - - - - - - - - - - - -
Class:ReportingServices.Shared.Models.PlanningReport.WeeklyPartChanges
Assembly:ReportingServices.Shared
File(s):C:\Users\wathen\source\repos\ReportingServices\ReportingServices.Shared\Models\PlanningReport\WeeklyPartChanges.cs
-
-
-
-
-
-
-
Line coverage
-
-
0%
-
- - - - - - - - - - - - - - - - - - - - - -
Covered lines:0
Uncovered lines:4
Coverable lines:4
Total lines:10
Line coverage:0%
-
-
-
-
-
Branch coverage
-
-
N/A
-
- - - - - - - - - - - - - -
Covered branches:0
Total branches:0
Branch coverage:N/A
-
-
-
-
-
Method coverage
-
-
-

Method coverage is only available for sponsors.

-Upgrade to PRO version -
-
-
-
-

Metrics

-
- - - - - - - - -
MethodBranch coverage Cyclomatic complexity Line coverage
get_TotalPartChanges()100%10%
get_StartDate()100%10%
get_EndDate()100%10%
get_ReactorPSNWORuns()100%10%
-
-

File(s)

-

C:\Users\wathen\source\repos\ReportingServices\ReportingServices.Shared\Models\PlanningReport\WeeklyPartChanges.cs

-
- - - - - - - - - - - - - - -
#LineLine coverage
 1namespace ReportingServices.Shared.Models.PlanningReport
 2{
 3    public class WeeklyPartChanges
 4    {
 05        public int TotalPartChanges { get; set; }
 06        public string StartDate { get; set; }
 07        public string EndDate { get; set; }
 08        public List<ReactorPSNWORuns> ReactorPSNWORuns { get; set; }
 9    }
 10}
-
-
-
- - \ No newline at end of file diff --git a/.vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.Shared_YieldInformation.html b/.vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.Shared_YieldInformation.html deleted file mode 100644 index b0988f3..0000000 --- a/.vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.Shared_YieldInformation.html +++ /dev/null @@ -1,186 +0,0 @@ - - - - - - - -ReportingServices.Shared.Models.ProductionReport.YieldInformation - Coverage Report - -
-

< Summary

-
-
-
Information
-
-
- - - - - - - - - - - - - -
Class:ReportingServices.Shared.Models.ProductionReport.YieldInformation
Assembly:ReportingServices.Shared
File(s):C:\Users\wathen\source\repos\ReportingServices\ReportingServices.Shared\Models\ProductionReport\YieldInformation.cs
-
-
-
-
-
-
-
Line coverage
-
-
0%
-
- - - - - - - - - - - - - - - - - - - - - -
Covered lines:0
Uncovered lines:2
Coverable lines:2
Total lines:17
Line coverage:0%
-
-
-
-
-
Branch coverage
-
-
N/A
-
- - - - - - - - - - - - - -
Covered branches:0
Total branches:0
Branch coverage:N/A
-
-
-
-
-
Method coverage
-
-
-

Method coverage is only available for sponsors.

-Upgrade to PRO version -
-
-
-
-

Metrics

-
- - - - - - -
MethodBranch coverage Cyclomatic complexity Line coverage
get_Outs()100%10%
get_Scrap()100%10%
-
-

File(s)

-

C:\Users\wathen\source\repos\ReportingServices\ReportingServices.Shared\Models\ProductionReport\YieldInformation.cs

-
- - - - - - - - - - - - - - - - - - - - - -
#LineLine coverage
 1using System;
 2using System.Collections.Generic;
 3using System.Linq;
 4using System.Text;
 5using System.Text.Json.Serialization;
 6using System.Threading.Tasks;
 7
 8namespace ReportingServices.Shared.Models.ProductionReport
 9{
 10    public class YieldInformation
 11    {
 12        [JsonPropertyName("Outs")]
 013        public List<ReactorOutsByRDS> Outs { get; set; }
 14        [JsonPropertyName("Scrap")]
 015        public List<ScrapByDay> Scrap { get; set; }
 16    }
 17}
-
-
-
-
-

Methods/Properties

-get_Outs()
-get_Scrap()
-
-
- - \ No newline at end of file diff --git a/.vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.Shared_YieldStatistics.html b/.vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.Shared_YieldStatistics.html deleted file mode 100644 index 9a12615..0000000 --- a/.vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.Shared_YieldStatistics.html +++ /dev/null @@ -1,244 +0,0 @@ - - - - - - - -ReportingServices.Shared.ViewModels.ProductionReport.YieldStatistics - Coverage Report - -
-

< Summary

-
-
-
Information
-
-
- - - - - - - - - - - - - -
Class:ReportingServices.Shared.ViewModels.ProductionReport.YieldStatistics
Assembly:ReportingServices.Shared
File(s):C:\Users\wathen\source\repos\ReportingServices\ReportingServices.Shared\ViewModels\ProductionReport\YieldStatistics.cs
-
-
-
-
-
-
-
Line coverage
-
-
0%
-
- - - - - - - - - - - - - - - - - - - - - -
Covered lines:0
Uncovered lines:39
Coverable lines:39
Total lines:61
Line coverage:0%
-
-
-
-
-
Branch coverage
-
-
0%
-
- - - - - - - - - - - - - -
Covered branches:0
Total branches:10
Branch coverage:0%
-
-
-
-
-
Method coverage
-
-
-

Method coverage is only available for sponsors.

-Upgrade to PRO version -
-
-
-
-

Metrics

-
- - - - - - - - - - - - - -
MethodBranch coverage Cyclomatic complexity Line coverage
get_StartDate()100%10%
get_OutsByDay()100%10%
get_ScrapByDay()100%10%
get_DailyPlanWafers()100%10%
get_IsCurrentWeek()100%10%
.ctor(...)100%10%
SetYieldInformation(...)100%10%
GetDistinctDatesFromReactorOuts(...)0%40%
GetReactorOutsByDay(...)0%60%
-
-

File(s)

-

C:\Users\wathen\source\repos\ReportingServices\ReportingServices.Shared\ViewModels\ProductionReport\YieldStatistics.cs

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#LineLine coverage
 1using ReportingServices.Shared.Models.ProductionReport;
 2
 3namespace ReportingServices.Shared.ViewModels.ProductionReport
 4{
 5    public class YieldStatistics
 6    {
 07        public DateTime StartDate { get; set; }
 08        public List<ReactorOutsByDay> OutsByDay { get; set; }
 09        public List<ScrapByDay> ScrapByDay { get; set; }
 010        public int DailyPlanWafers { get; set; }
 011        public bool IsCurrentWeek { get; set; }
 12
 013        public YieldStatistics(DateTime startDate, bool isCurrentWeek)
 014        {
 015            StartDate = startDate;
 016            IsCurrentWeek = isCurrentWeek;
 017        }
 18
 19        public void SetYieldInformation(YieldInformation yieldInformation, QuarterlyTargets targets)
 020        {
 021            OutsByDay = GetReactorOutsByDay(yieldInformation.Outs);
 022            ScrapByDay = yieldInformation.Scrap;
 023            DailyPlanWafers = targets.Yield_Outs / targets.PlanWorkingDays;
 024        }
 25
 26        public static List<string> GetDistinctDatesFromReactorOuts(List<ReactorOutsByRDS> outs)
 027        {
 028            List<string> dates = new();
 29
 030            foreach (ReactorOutsByRDS rout in outs)
 031            {
 032                if (!dates.Contains(DateTime.Parse(rout.EndProcessTime).Date.ToString()))
 033                    dates.Add(DateTime.Parse(rout.EndProcessTime).Date.ToString());
 034            }
 35
 036            return dates;
 037        }
 38
 39        public static List<ReactorOutsByDay> GetReactorOutsByDay(List<ReactorOutsByRDS> outs)
 040        {
 041            List<ReactorOutsByDay> outsByDay = new();
 42
 043            List<string> dates = GetDistinctDatesFromReactorOuts(outs);
 44
 045            foreach (string date in dates)
 046            {
 047                int waferCount = 0;
 48
 049                foreach (ReactorOutsByRDS rout in outs)
 050                {
 051                    if (DateTime.Parse(rout.EndProcessTime).Date.ToString() == date)
 052                        waferCount += (int)float.Parse(rout.Units);
 053                }
 54
 055                outsByDay.Add(new ReactorOutsByDay { StartDate = date, TotalWafers = waferCount });
 056            }
 57
 058            return outsByDay;
 059        }
 60    }
 61}
-
-
-
- - \ No newline at end of file diff --git a/.vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.UI_ErrorViewModel.html b/.vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.UI_ErrorViewModel.html deleted file mode 100644 index 3aa8f2f..0000000 --- a/.vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.UI_ErrorViewModel.html +++ /dev/null @@ -1,178 +0,0 @@ - - - - - - - -ReportingServices.UI.Models.ErrorViewModel - Coverage Report - -
-

< Summary

-
-
-
Information
-
-
- - - - - - - - - - - - - -
Class:ReportingServices.UI.Models.ErrorViewModel
Assembly:ReportingServices.UI
File(s):C:\Users\wathen\source\repos\ReportingServices\ReportingServices.UI\Models\ErrorViewModel.cs
-
-
-
-
-
-
-
Line coverage
-
-
0%
-
- - - - - - - - - - - - - - - - - - - - - -
Covered lines:0
Uncovered lines:2
Coverable lines:2
Total lines:9
Line coverage:0%
-
-
-
-
-
Branch coverage
-
-
N/A
-
- - - - - - - - - - - - - -
Covered branches:0
Total branches:0
Branch coverage:N/A
-
-
-
-
-
Method coverage
-
-
-

Method coverage is only available for sponsors.

-Upgrade to PRO version -
-
-
-
-

Metrics

-
- - - - - - -
MethodBranch coverage Cyclomatic complexity Line coverage
get_RequestId()100%10%
get_ShowRequestId()100%10%
-
-

File(s)

-

C:\Users\wathen\source\repos\ReportingServices\ReportingServices.UI\Models\ErrorViewModel.cs

-
- - - - - - - - - - - - - -
#LineLine coverage
 1namespace ReportingServices.UI.Models
 2{
 3    public class ErrorViewModel
 4    {
 05        public string RequestId { get; set; }
 6
 07        public bool ShowRequestId => !string.IsNullOrEmpty(RequestId);
 8    }
 9}
-
-
-
-
-

Methods/Properties

-get_RequestId()
-get_ShowRequestId()
-
-
- - \ No newline at end of file diff --git a/.vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.UI_HomeController.html b/.vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.UI_HomeController.html deleted file mode 100644 index bde9251..0000000 --- a/.vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.UI_HomeController.html +++ /dev/null @@ -1,199 +0,0 @@ - - - - - - - -ReportingServices.UI.Controllers.HomeController - Coverage Report - -
-

< Summary

-
-
-
Information
-
-
- - - - - - - - - - - - - -
Class:ReportingServices.UI.Controllers.HomeController
Assembly:ReportingServices.UI
File(s):C:\Users\wathen\source\repos\ReportingServices\ReportingServices.UI\Controllers\HomeController.cs
-
-
-
-
-
-
-
Line coverage
-
-
0%
-
- - - - - - - - - - - - - - - - - - - - - -
Covered lines:0
Uncovered lines:11
Coverable lines:11
Total lines:28
Line coverage:0%
-
-
-
-
-
Branch coverage
-
-
0%
-
- - - - - - - - - - - - - -
Covered branches:0
Total branches:4
Branch coverage:0%
-
-
-
-
-
Method coverage
-
-
-

Method coverage is only available for sponsors.

-Upgrade to PRO version -
-
-
-
-

Metrics

-
- - - - - - - -
MethodBranch coverage Cyclomatic complexity Line coverage
.ctor(...)100%10%
Index()100%10%
Error()0%40%
-
-

File(s)

-

C:\Users\wathen\source\repos\ReportingServices\ReportingServices.UI\Controllers\HomeController.cs

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#LineLine coverage
 1using Microsoft.AspNetCore.Mvc;
 2using ReportingServices.UI.Models;
 3using System.Diagnostics;
 4
 5namespace ReportingServices.UI.Controllers
 6{
 7    public class HomeController : Controller
 8    {
 9        private readonly ILogger<HomeController> _logger;
 10
 011        public HomeController(ILogger<HomeController> logger)
 012        {
 013            _logger = logger;
 014        }
 15
 16        public IActionResult Index()
 017        {
 018            _logger.LogInformation("Starting Index Page");
 019            return View();
 020        }
 21
 22        [ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]
 23        public IActionResult Error()
 024        {
 025            return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier });
 026        }
 27    }
 28}
-
-
-
- - \ No newline at end of file diff --git a/.vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.UI_PlanningReportController.html b/.vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.UI_PlanningReportController.html deleted file mode 100644 index a36f818..0000000 --- a/.vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.UI_PlanningReportController.html +++ /dev/null @@ -1,206 +0,0 @@ - - - - - - - -ReportingServices.UI.Controllers.PlanningReportController - Coverage Report - -
-

< Summary

-
-
-
Information
-
-
- - - - - - - - - - - - - -
Class:ReportingServices.UI.Controllers.PlanningReportController
Assembly:ReportingServices.UI
File(s):C:\Users\wathen\source\repos\ReportingServices\ReportingServices.UI\Controllers\PlanningReportController.cs
-
-
-
-
-
-
-
Line coverage
-
-
0%
-
- - - - - - - - - - - - - - - - - - - - - -
Covered lines:0
Uncovered lines:18
Coverable lines:18
Total lines:35
Line coverage:0%
-
-
-
-
-
Branch coverage
-
-
N/A
-
- - - - - - - - - - - - - -
Covered branches:0
Total branches:0
Branch coverage:N/A
-
-
-
-
-
Method coverage
-
-
-

Method coverage is only available for sponsors.

-Upgrade to PRO version -
-
-
-
-

Metrics

-
- - - - - - - -
MethodBranch coverage Cyclomatic complexity Line coverage
.ctor()100%10%
Index()100%10%
WeeklyPartChangesReport()100%10%
-
-

File(s)

-

C:\Users\wathen\source\repos\ReportingServices\ReportingServices.UI\Controllers\PlanningReportController.cs

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#LineLine coverage
 1using Microsoft.AspNetCore.Mvc;
 2using ReportingServices.Shared.Models.PlanningReport;
 3using ReportingServices.Shared.HelperClasses;
 4
 5namespace ReportingServices.UI.Controllers
 6{
 7    public class PlanningReportController : Controller
 8    {
 09        private readonly string _baseUrl = "https://localhost:7196/api/ScrapeDB/";
 10
 11        public IActionResult Index()
 012        {
 013            return View();
 014        }
 15
 16        public async Task<IActionResult> WeeklyPartChangesReport(DateTime startDate, DateTime endDate)
 017        {
 018            string partChangeUrl = _baseUrl + "PartChanges?startDate=" + startDate.ToString() + "&endDate=" + endDate.To
 019            string psnwoRunsUrl = _baseUrl + "PSNWO?startDate=" + startDate.ToString() + "&endDate=" + endDate.ToString(
 20
 021            int numberOfPartChanges = await ApiCaller.GetApi<int>(partChangeUrl);
 022            List<ReactorPSNWORuns> reactorPSNWORuns = await ApiCaller.GetApi<List<ReactorPSNWORuns>>(psnwoRunsUrl);
 23
 024            WeeklyPartChanges weeklyPartChanges = new()
 025            {
 026                TotalPartChanges = numberOfPartChanges,
 027                StartDate = startDate.ToShortDateString(),
 028                EndDate = endDate.ToShortDateString(),
 029                ReactorPSNWORuns = reactorPSNWORuns
 030            };
 31
 032            return View(weeklyPartChanges);
 033        }
 34    }
 35}
-
-
-
-
-

Methods/Properties

-.ctor()
-Index()
-WeeklyPartChangesReport()
-
-
- - \ No newline at end of file diff --git a/.vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.UI_ProductionReportController.html b/.vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.UI_ProductionReportController.html deleted file mode 100644 index d139e09..0000000 --- a/.vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.UI_ProductionReportController.html +++ /dev/null @@ -1,233 +0,0 @@ - - - - - - - -ReportingServices.UI.Controllers.ProductionReportController - Coverage Report - -
-

< Summary

-
-
-
Information
-
-
- - - - - - - - - - - - - -
Class:ReportingServices.UI.Controllers.ProductionReportController
Assembly:ReportingServices.UI
File(s):C:\Users\wathen\source\repos\ReportingServices\ReportingServices.UI\Controllers\ProductionReportController.cs
-
-
-
-
-
-
-
Line coverage
-
-
0%
-
- - - - - - - - - - - - - - - - - - - - - -
Covered lines:0
Uncovered lines:28
Coverable lines:28
Total lines:58
Line coverage:0%
-
-
-
-
-
Branch coverage
-
-
N/A
-
- - - - - - - - - - - - - -
Covered branches:0
Total branches:0
Branch coverage:N/A
-
-
-
-
-
Method coverage
-
-
-

Method coverage is only available for sponsors.

-Upgrade to PRO version -
-
-
-
-

Metrics

-
- - - - - - - - - -
MethodBranch coverage Cyclomatic complexity Line coverage
.ctor(...)100%10%
Index()100%10%
DailyReport()100%10%
EditDailyReport()100%10%
EditDailyReport(...)100%10%
-
-

File(s)

-

C:\Users\wathen\source\repos\ReportingServices\ReportingServices.UI\Controllers\ProductionReportController.cs

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#LineLine coverage
 1using Microsoft.AspNetCore.Mvc;
 2using ReportingServices.Shared.HelperClasses;
 3using ReportingServices.Shared.Models.ProductionReport;
 4using ReportingServices.Shared.ViewModels.ProductionReport;
 5
 6namespace ReportingServices.UI.Controllers
 7{
 8    public class ProductionReportController : Controller
 9    {
 10        private readonly ILogger<ProductionReportController> _logger;
 011        private readonly string _dailyRptFilePath = "wwwroot/Assets/DailyReportInfo.json";
 012        private readonly string _toolStateOwnerFilePath = "wwwroot/Assets/ToolStates.json";
 13
 014        public ProductionReportController(ILogger<ProductionReportController> logger)
 015        {
 016            _logger = logger;
 017        }
 18
 19
 20        public IActionResult Index()
 021        {
 022            return View();
 023        }
 24
 25        public IActionResult DailyReport()
 026        {
 27            try
 028            {
 029                DailyReport dailyReport = DailyReportHelper.SetUpDailyReport();
 030                Dictionary<string, List<string>> toolStateOwners = JsonFileHandler.LoadJSONFile<Dictionary<string, List<
 31
 032                dailyReport.ToolStatesByOwner = toolStateOwners;
 33
 034                return View(dailyReport);
 35            }
 036            catch (Exception ex)
 037            {
 038                _logger.LogCritical(ex, "Failed to load report");
 039                return View();
 40            }
 041        }
 42
 43        public IActionResult EditDailyReport()
 044        {
 045            ManualReportEntries entries = JsonFileHandler.LoadJSONFile<ManualReportEntries>(_dailyRptFilePath);
 46
 047            return View(entries);
 048        }
 49
 50        [HttpPost]
 51        public IActionResult EditDailyReport(ManualReportEntries rpt)
 052        {
 053            JsonFileHandler.SaveJSONFile(rpt, _dailyRptFilePath);
 54
 055            return RedirectToAction("DailyReport");
 056        }
 57    }
 58}
-
-
-
- - \ No newline at end of file diff --git a/.vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.UI_Program.html b/.vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.UI_Program.html deleted file mode 100644 index 3e05dca..0000000 --- a/.vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.UI_Program.html +++ /dev/null @@ -1,219 +0,0 @@ - - - - - - - -Program - Coverage Report - -
-

< Summary

-
-
-
Information
-
-
- - - - - - - - - - - - - -
Class:Program
Assembly:ReportingServices.UI
File(s):C:\Users\wathen\source\repos\ReportingServices\ReportingServices.UI\Program.cs
-
-
-
-
-
-
-
Line coverage
-
-
0%
-
- - - - - - - - - - - - - - - - - - - - - -
Covered lines:0
Uncovered lines:35
Coverable lines:35
Total lines:52
Line coverage:0%
-
-
-
-
-
Branch coverage
-
-
0%
-
- - - - - - - - - - - - - -
Covered branches:0
Total branches:2
Branch coverage:0%
-
-
-
-
-
Method coverage
-
-
-

Method coverage is only available for sponsors.

-Upgrade to PRO version -
-
-
-
-

Metrics

-
- - - - - -
MethodBranch coverage Cyclomatic complexity Line coverage
<Main>$(...)0%20%
-
-

File(s)

-

C:\Users\wathen\source\repos\ReportingServices\ReportingServices.UI\Program.cs

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#LineLine coverage
 1using ReportingServices.Shared.Repositories;
 2using Serilog;
 3
 04LoggerConfiguration loggerConfiguration = new();
 5
 06var builder = WebApplication.CreateBuilder(args);
 07Environment.SetEnvironmentVariable("workingDirectory", "C:/tmp/logging");
 08_ = ConfigurationLoggerConfigurationExtensions.Configuration(loggerConfiguration.ReadFrom, builder.Configuration);
 09_ = SerilogHostBuilderExtensions.UseSerilog(builder.Host);
 010Log.Logger = loggerConfiguration.CreateLogger();
 011Serilog.ILogger log = Log.ForContext<Program>();
 12
 13
 14// Add services to the container.
 015builder.Services.AddControllersWithViews();
 016builder.Services.AddScoped<IScrapeDatabaseRepository, ScrapeDatabaseRepository>();
 017builder.Services.AddScoped<IFabTimeReportingRepository, FabTimeReportingRepository>();
 18
 019var app = builder.Build();
 20
 21// Configure the HTTP request pipeline.
 022if (!app.Environment.IsDevelopment())
 023{
 024    app.UseExceptionHandler("/Home/Error");
 25    // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspne
 026    app.UseHsts();
 027}
 28
 029app.UseHttpsRedirection();
 030app.UseStaticFiles();
 31
 032app.UseRouting();
 33
 034app.UseAuthorization();
 35
 036app.MapControllerRoute(
 037    name: "default",
 038    pattern: "{controller=Home}/{action=Index}/{id?}");
 039_ = app.Lifetime.ApplicationStopped.Register(Log.CloseAndFlush);
 040log.Information("Starting Web Application");
 41try
 042{
 043    app.Run();
 044}
 045catch (Exception ex)
 046{
 047    log.Fatal(ex, "Host terminated unexpectedly");
 048}
 49finally
 050{
 051    Log.CloseAndFlush();
 052}
-
-
-
-
-

Methods/Properties

-<Main>$(System.String[])
-
-
- - \ No newline at end of file diff --git a/.vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.UI_Views_Home_Index.html b/.vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.UI_Views_Home_Index.html deleted file mode 100644 index a506e5e..0000000 --- a/.vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.UI_Views_Home_Index.html +++ /dev/null @@ -1,186 +0,0 @@ - - - - - - - -AspNetCoreGeneratedDocument.Views_Home_Index - Coverage Report - -
-

< Summary

-
-
-
Information
-
-
- - - - - - - - - - - - - -
Class:AspNetCoreGeneratedDocument.Views_Home_Index
Assembly:ReportingServices.UI
File(s):C:\Users\wathen\source\repos\ReportingServices\ReportingServices.UI\Views\Home\Index.cshtml
-
-
-
-
-
-
-
Line coverage
-
-
0%
-
- - - - - - - - - - - - - - - - - - - - - -
Covered lines:0
Uncovered lines:1
Coverable lines:1
Total lines:19
Line coverage:0%
-
-
-
-
-
Branch coverage
-
-
0%
-
- - - - - - - - - - - - - -
Covered branches:0
Total branches:4
Branch coverage:0%
-
-
-
-
-
Method coverage
-
-
-

Method coverage is only available for sponsors.

-Upgrade to PRO version -
-
-
-
-

Metrics

-
- - - - - -
MethodBranch coverage Cyclomatic complexity Line coverage
ExecuteAsync()0%40%
-
-

File(s)

-

C:\Users\wathen\source\repos\ReportingServices\ReportingServices.UI\Views\Home\Index.cshtml

-
- - - - - - - - - - - - - - - - - - - - - - - -
#LineLine coverage
 1@{
 02    ViewData["Title"] = "Home Page | Mesa Reporting Services";
 3}
 4
 5<div aria-label="breadcrumb">
 6    <ol class="breadcrumb">
 7        <li class="breadcrumb-item active" aria-current="page">Home</li>
 8    </ol>
 9</div>
 10<br />
 11
 12<div class="row">
 13    <div class="col-3 d-grid">
 14        <a class="btn btn-outline-secondary text-start" asp-area="" asp-controller="ProductionReport" asp-action="Index"
 15    </div>
 16    <div class="col-3 d-grid">
 17        <a class="btn btn-outline-secondary text-start" asp-area="" asp-controller="PlanningReport" asp-action="Index"><
 18    </div>
 19</div>
-
-
-
-
-

Methods/Properties

-ExecuteAsync()
-
-
- - \ No newline at end of file diff --git a/.vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.UI_Views_PlanningReport_Index.html b/.vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.UI_Views_PlanningReport_Index.html deleted file mode 100644 index 51edde7..0000000 --- a/.vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.UI_Views_PlanningReport_Index.html +++ /dev/null @@ -1,214 +0,0 @@ - - - - - - - -AspNetCoreGeneratedDocument.Views_PlanningReport_Index - Coverage Report - -
-

< Summary

-
-
-
Information
-
-
- - - - - - - - - - - - - -
Class:AspNetCoreGeneratedDocument.Views_PlanningReport_Index
Assembly:ReportingServices.UI
File(s):C:\Users\wathen\source\repos\ReportingServices\ReportingServices.UI\Views\PlanningReport\Index.cshtml
-
-
-
-
-
-
-
Line coverage
-
-
0%
-
- - - - - - - - - - - - - - - - - - - - - -
Covered lines:0
Uncovered lines:1
Coverable lines:1
Total lines:47
Line coverage:0%
-
-
-
-
-
Branch coverage
-
-
0%
-
- - - - - - - - - - - - - -
Covered branches:0
Total branches:8
Branch coverage:0%
-
-
-
-
-
Method coverage
-
-
-

Method coverage is only available for sponsors.

-Upgrade to PRO version -
-
-
-
-

Metrics

-
- - - - - -
MethodBranch coverage Cyclomatic complexity Line coverage
ExecuteAsync()0%80%
-
-

File(s)

-

C:\Users\wathen\source\repos\ReportingServices\ReportingServices.UI\Views\PlanningReport\Index.cshtml

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#LineLine coverage
 1@{
 02    ViewData["Title"] = "Planning Reports | Mesa Reporting Services";
 3}
 4
 5<div aria-label="breadcrumb">
 6    <ol class="breadcrumb">
 7        <li class="breadcrumb-item"><a asp-area="" asp-controller="Home" asp-action="Index">Home</a></li>
 8        <li class="breadcrumb-item active" aria-current="page">Planning Reports</li>
 9    </ol>
 10</div>
 11<br />
 12
 13<div class="row">
 14    <div class="col-3 d-grid">
 15        <button class="btn btn-outline-secondary text-start" data-bs-toggle="modal" data-bs-target="#chooseDateRange"><i
 16    </div>
 17</div>
 18
 19<div class="modal fade" id="chooseDateRange" tabindex="-1" aria-labelledby="chooseDateRangeLabel" aria-hidden="true">
 20    <div class="modal-dialog modal-dialog-centered">
 21        <div class="modal-content">
 22            <div class="modal-header">
 23                <h1 class="modal-title fs-5" id="exampleModalLabel">Choose Date Range</h1>
 24                <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
 25            </div>
 26            <form method="post" action="PlanningReport/WeeklyPartChangesReport" autocomplete="off">
 27                <div class="modal-body" style="padding-top: 15px; padding-bottom: 10px">
 28                    <div class="row">
 29                        <div class="col-6">Start Date:</div>
 30                        <div class="col-6"><input type="text" name="startDate" id="StartDate" /></div>
 31                    </div>
 32                    <div class="row" style="padding-top: 10px; padding-bottom: 10px">
 33                        <div class="col-6">End Date:</div>
 34                        <div class="col-6"><input type="text" name="endDate" id="EndDate" /></div>
 35                    </div>
 36                    <div class="row" style="padding-top: 10px; padding-bottom: 10px">
 37                        <div class="col text-center">
 38                            <button class="btn btn-outline-secondary" onclick="displayBusyIndicator()" data-bs-dismiss="
 39                        </div>
 40                    </div>
 41                </div>
 42            </form>
 43        </div>
 44    </div>
 45</div>
 46
 47<partial name="_LoadingPartial" />
-
-
-
-
-

Methods/Properties

-ExecuteAsync()
-
-
- - \ No newline at end of file diff --git a/.vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.UI_Views_PlanningReport_WeeklyPartChangesReport.html b/.vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.UI_Views_PlanningReport_WeeklyPartChangesReport.html deleted file mode 100644 index 502e53a..0000000 --- a/.vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.UI_Views_PlanningReport_WeeklyPartChangesReport.html +++ /dev/null @@ -1,247 +0,0 @@ - - - - - - - -AspNetCoreGeneratedDocument.Views_PlanningReport_WeeklyPartChangesReport - Coverage Report - -
-

< Summary

-
-
-
Information
-
-
- - - - - - - - - - - - - -
Class:AspNetCoreGeneratedDocument.Views_PlanningReport_WeeklyPartChangesReport
Assembly:ReportingServices.UI
File(s):C:\Users\wathen\source\repos\ReportingServices\ReportingServices.UI\Views\PlanningReport\WeeklyPartChangesReport.cshtml
-
-
-
-
-
-
-
Line coverage
-
-
0%
-
- - - - - - - - - - - - - - - - - - - - - -
Covered lines:0
Uncovered lines:35
Coverable lines:35
Total lines:80
Line coverage:0%
-
-
-
-
-
Branch coverage
-
-
0%
-
- - - - - - - - - - - - - -
Covered branches:0
Total branches:18
Branch coverage:0%
-
-
-
-
-
Method coverage
-
-
-

Method coverage is only available for sponsors.

-Upgrade to PRO version -
-
-
-
-

Metrics

-
- - - - - -
MethodBranch coverage Cyclomatic complexity Line coverage
ExecuteAsync()0%180%
-
-

File(s)

-

C:\Users\wathen\source\repos\ReportingServices\ReportingServices.UI\Views\PlanningReport\WeeklyPartChangesReport.cshtml

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#LineLine coverage
 1@model WeeklyPartChanges
 2
 3@{
 04    ViewData["Title"] = "Weekly Part Changes | Mesa Reporting Services";
 5}
 6
 7<div aria-label="breadcrumb">
 8    <ol class="breadcrumb">
 9        <li class="breadcrumb-item"><a asp-area="" asp-controller="Home" asp-action="Index">Home</a></li>
 10        <li class="breadcrumb-item"><a asp-area="" asp-controller="PlanningReport" asp-action="Index">Planning Reports</
 11        <li class="breadcrumb-item active" aria-current="page">Weekly Part Changes Report</li>
 12    </ol>
 13</div>
 14<br />
 15
 16<h1 class="text-center">Weekly Part Changes</h1>
 17
 18<div>
 19    <div class="row">
 20        <div class="col-6">
 021            <p>Number of Part Changes: @Model.TotalPartChanges</p>
 22        </div>
 23        <div class="col-6">
 024            <p class="text-end">@Model.StartDate - @Model.EndDate</p>
 25        </div>
 26    </div>
 27    <div>
 28        <table class="table">
 29            <thead>
 30                <tr>
 31                    <th scope="col">Reactor</th>
 32                    <th scope="col">PSN</th>
 33                    <th scope="col">WO_COUNT</th>
 34                </tr>
 35            </thead>
 36            <tbody>
 037                @for (int i = 0; i < Model.ReactorPSNWORuns.Count; i++)
 038                {
 039                    int count = 1;
 040                    bool doesMatch = false;
 41
 042                    if (i + count < Model.ReactorPSNWORuns.Count)
 043                        doesMatch = Model.ReactorPSNWORuns[i].REACTOR == Model.ReactorPSNWORuns[i + count].REACTOR;
 44
 045                    while (doesMatch)
 046                    {
 047                        count++;
 048                        if (i + count < Model.ReactorPSNWORuns.Count)
 049                            doesMatch = Model.ReactorPSNWORuns[i].REACTOR == Model.ReactorPSNWORuns[i + count].REACTOR;
 50                        else
 051                            doesMatch = false;
 052                    }
 53
 054                    for (int j = 0; j < count; j++)
 055                    {
 056                        string tableColor = "";
 57
 058                        if (count > 1)
 059                            tableColor = "table-info";
 60
 061                        <tr class="align-middle @tableColor">
 062                            @if (j == 0)
 063                            {
 064                                <td rowspan="@(count)">@Model.ReactorPSNWORuns[i].REACTOR</td>
 065                                <td>@Model.ReactorPSNWORuns[i].PSN</td>
 066                                <td>@Model.ReactorPSNWORuns[i].WO_COUNT</td>
 067                            }
 68                            else
 069                            {
 070                                <td>@Model.ReactorPSNWORuns[i + j].PSN</td>
 071                                <td>@Model.ReactorPSNWORuns[i + j].WO_COUNT</td>
 072                            }
 73                        </tr>
 074                    }
 075                    i = i + (count - 1);
 076                }
 77            </tbody>
 78        </table>
 79    </div>
 80</div>
-
-
-
-
-

Methods/Properties

-ExecuteAsync()
-
-
- - \ No newline at end of file diff --git a/.vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.UI_Views_ProductionReport_DailyReport.html b/.vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.UI_Views_ProductionReport_DailyReport.html deleted file mode 100644 index 89dc992..0000000 --- a/.vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.UI_Views_ProductionReport_DailyReport.html +++ /dev/null @@ -1,590 +0,0 @@ - - - - - - - -AspNetCoreGeneratedDocument.Views_ProductionReport_DailyReport - Coverage Report - -
-

< Summary

-
-
-
Information
-
-
- - - - - - - - - - - - - -
Class:AspNetCoreGeneratedDocument.Views_ProductionReport_DailyReport
Assembly:ReportingServices.UI
File(s):C:\Users\wathen\source\repos\ReportingServices\ReportingServices.UI\Views\ProductionReport\DailyReport.cshtml
-
-
-
-
-
-
-
Line coverage
-
-
0%
-
- - - - - - - - - - - - - - - - - - - - - -
Covered lines:0
Uncovered lines:204
Coverable lines:204
Total lines:423
Line coverage:0%
-
-
-
-
-
Branch coverage
-
-
0%
-
- - - - - - - - - - - - - -
Covered branches:0
Total branches:100
Branch coverage:0%
-
-
-
-
-
Method coverage
-
-
-

Method coverage is only available for sponsors.

-Upgrade to PRO version -
-
-
-
-

Metrics

-
- - - - - -
MethodBranch coverage Cyclomatic complexity Line coverage
ExecuteAsync()0%1000%
-
-

File(s)

-

C:\Users\wathen\source\repos\ReportingServices\ReportingServices.UI\Views\ProductionReport\DailyReport.cshtml

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#LineLine coverage
 1@model DailyReport
 2@{
 03    int ASMAvailablePct = 0;
 04    int EPPAvailablePct = 0;
 05    int HTRAvailablePct = 0;
 6
 07    int ASMSLL = 0;
 08    int HTRSLL = 0;
 9
 010    int ASMUnloadTemps = 0;
 011    int HTRUnloadTemps = 0;
 12
 013    int reportIndex = (int)DateTime.Now.DayOfWeek;
 14
 015    int numberOfDaysInWeek = Model.CurrentWeek.OutsByDay.Count;
 16
 017    ManualReportEntries rpt = Model.ManualReportEntries;
 18
 19    string myClass;
 020    List<string> toolsDownGreaterThan12Hours = new();
 21
 022    foreach (KeyValuePair<string, ToolStateByType> state in Model.ToolStateByType)
 023    {
 024        if (state.Key != "Metrology" && state.Key != "Cleans")
 025            toolsDownGreaterThan12Hours.AddRange(state.Value.ToolsDownGreaterThan12Hours);
 026    }
 27
 028    toolsDownGreaterThan12Hours.Sort();
 29}
 30
 31@{
 032    ViewData["Title"] = "Daily Passdown | Mesa Reporting Services";
 33}
 34
 35<div aria-label="breadcrumb">
 36    <ol class="breadcrumb">
 37        <li class="breadcrumb-item"><a asp-area="" asp-controller="Home" asp-action="Index">Home</a></li>
 38        <li class="breadcrumb-item"><a asp-area="" asp-controller="ProductionReport" asp-action="Index">Production Repor
 39        <li class="breadcrumb-item active" aria-current="page">Production Passdown Report</li>
 40    </ol>
 41</div>
 42<br />
 43
 44<div class="text-center">
 45    <h2>Daily Report</h2>
 46    <br /><br />
 47</div>
 48
 49<button class="btn btn-outline-dark float-start dailyReportTable" onclick="toggleWeek()">View Previous Week</button>
 50<button class="btn btn-outline-dark float-end dailyReportTable hidden" onclick="toggleWeek()">View Current Week</button>
 51<br /><br />
 52
 53<div class="table-responsive dailyReportTable">
 054    <partial name="_DailyReportPartial" model="@Model.CurrentWeek"/>
 55</div>
 56
 57<div class="table-responsive dailyReportTable hidden">
 058    <partial name="_DailyReportPartial" model="@Model.PreviousWeek" />
 59</div>
 60
 61<br />
 62<h5>Daily Target Summary</h5>
 63<ul>
 064    <li>Operator HC: (Days/Nights) @rpt.OperatorHeadcountDays/@rpt.OperatorHeadcountNights</li>
 065    <li>Total Call Outs: (Days/Nights) @rpt.OperatorCallOutsDays/@rpt.OperatorCallOutsNights</li>
 066    <li>Engineering HC: @rpt.EngineeringHeadcountDays/@rpt.EngineeringHeadcountNights</li>
 067    <li>Total Call Outs: (Days/Nights) @rpt.EngineeringCallOutsDays/@rpt.EngineeringCallOutsNights</li>
 068    <li>Maintenance HC: @rpt.MaintenanceHeadcountDays/@rpt.MaintenanceHeadcountNights</li>
 069    <li>Total Call Outs: (Days/Nights) @rpt.MaintenanceCallOutsDays/@rpt.MaintenanceCallOutsNights</li>
 70</ul>
 71<br />
 72<ul>
 073    <li>Bottle Change (@rpt.BottleChanges.Split(',').Length): @string.Join(", ", rpt.BottleChanges.Split(','))</li>
 074    <li>Daily Part Changes (@rpt.DailyPartChanges.Split(',').Length): @string.Join(", ", rpt.DailyPartChanges.Split(',')
 075    <li>Weekly Part Changes (@rpt.WeeklyPartChanges.Split(',').Length): @string.Join(", ", rpt.WeeklyPartChanges.Split('
 76</ul>
 77<br />
 78<a class="btn btn-light" asp-controller="ProductionReport" asp-action="EditDailyReport">Edit</a>
 79<br /><br />
 080<h5>Current Reactors Down(@(Model.ToolStateByType["ASM"].DownTools + Model.ToolStateByType["EPP"].DownTools + Model.Tool
 81<div class="row">
 82    <div class="col-lg-4">
 083        ASM(@Model.ToolStateByType["ASM"].DownTools)
 84        <table class="table table-sm">
 85            <thead>
 86                <tr>
 87                    <th scope="col">Reactor</th>
 88                    <th scope="col">Owner</th>
 89                    <th scope="col">Issue</th>
 90                </tr>
 91            </thead>
 92            <tbody>
 093                @foreach (ToolStateCurrent tool in Model.ToolStateByType["ASM"].ToolStateCurrents)
 094                {
 095                    if (tool.BasicStateDescription != "Productive" && tool.ReactorStatus != "Out of Service")
 096                    {
 097                        string owner = "";
 98
 099                        if (Model.ToolStatesByOwner["Maintenance"].Contains(tool.ReactorStatus))
 0100                            owner = "Maint";
 0101                        else if (Model.ToolStatesByOwner["Engineering"].Contains(tool.ReactorStatus))
 0102                            owner = "Eng";
 103                        else
 0104                            owner = "Prod";
 105
 106                        <tr>
 0107                            <td>@tool.Tool</td>
 0108                            <td>@owner</td>
 0109                            <td>@tool.Comment</td>
 110                        </tr>
 0111                    }
 0112                }
 113            </tbody>
 114        </table>
 115    </div>
 116</div>
 117<div class="row">
 118    <div class="col-lg-4">
 0119        EPP(@Model.ToolStateByType["EPP"].DownTools)
 120        <table class="table table-sm">
 121            <thead>
 122                <tr>
 123                    <th scope="col">Reactor</th>
 124                    <th scope="col">Owner</th>
 125                    <th scope="col">Issue</th>
 126                </tr>
 127            </thead>
 128            <tbody>
 0129                @foreach (ToolStateCurrent tool in Model.ToolStateByType["EPP"].ToolStateCurrents)
 0130                {
 0131                    if (tool.BasicStateDescription != "Productive" && tool.ReactorStatus != "Out of Service")
 0132                    {
 0133                        string owner = "";
 134
 0135                        if (Model.ToolStatesByOwner["Maintenance"].Contains(tool.ReactorStatus))
 0136                            owner = "Maint";
 0137                        else if (Model.ToolStatesByOwner["Engineering"].Contains(tool.ReactorStatus))
 0138                            owner = "Eng";
 139                        else
 0140                            owner = "Prod";
 141
 142                        <tr>
 0143                            <td>@tool.Tool</td>
 0144                            <td>@owner</td>
 0145                            <td>@tool.Comment</td>
 146                        </tr>
 0147                    }
 0148                }
 149            </tbody>
 150        </table>
 151    </div>
 152</div>
 153<div class="row">
 154    <div class="col-lg-4">
 0155        HTR(@Model.ToolStateByType["HTR"].DownTools)
 156        <table class="table table-sm">
 157            <thead>
 158                <tr>
 159                    <th scope="col">Reactor</th>
 160                    <th scope="col">Owner</th>
 161                    <th scope="col">Issue</th>
 162                </tr>
 163            </thead>
 164            <tbody>
 0165                @foreach (ToolStateCurrent tool in Model.ToolStateByType["HTR"].ToolStateCurrents)
 0166                {
 0167                    if (tool.BasicStateDescription != "Productive" && tool.ReactorStatus != "Out of Service")
 0168                    {
 0169                        string owner = "";
 170
 0171                        if (Model.ToolStatesByOwner["Maintenance"].Contains(tool.ReactorStatus))
 0172                            owner = "Maint";
 0173                        else if (Model.ToolStatesByOwner["Engineering"].Contains(tool.ReactorStatus))
 0174                            owner = "Eng";
 175                        else
 0176                            owner = "Prod";
 177
 178                        <tr>
 0179                            <td>@tool.Tool</td>
 0180                            <td>@owner</td>
 0181                            <td>@tool.Comment</td>
 182                        </tr>
 0183                    }
 0184                }
 185            </tbody>
 186        </table>
 187    </div>
 188</div>
 189<ul>
 190    <li>Application ENG (0):</li>
 0191    <li>Reactors (Capacity @(Model.NumberOfToolsWaferSize6IN + Model.NumberOfToolsWaferSize8IN))
 192        <ul>
 0193            <li>150mm - @Model.NumberOfToolsWaferSize6IN</li>
 0194            <li>200mm - @Model.NumberOfToolsWaferSize8IN</li>
 195        </ul>
 196    </li>
 0197    <li>Scheduled Reactors (@(Model.NumberOfToolsWaferSize6INScheduled + Model.NumberOfToolsWaferSize8INScheduled)):
 198        <ul>
 0199            <li>150mm - @Model.NumberOfToolsWaferSize6INScheduled</li>
 0200            <li>200mm - @Model.NumberOfToolsWaferSize8INScheduled</li>
 201        </ul>
 202    </li>
 203    <li>Dual Layer Reactors
 204        <ul>
 0205            <li>ASM - @(string.Join(',', Model.DualLayerReactors["ASM"]))</li>
 0206            <li>HTR - @(string.Join(',', Model.DualLayerReactors["HTR"]))</li>
 0207            <li>EpiPro - @(string.Join(',', Model.DualLayerReactors["EPP"]))</li>
 208        </ul>
 209    </li>
 210    <li>Engineering Focus Tools (Down > 12 hours)
 211        <ul>
 0212            <li>@string.Join(",", toolsDownGreaterThan12Hours)</li>
 213        </ul>
 214    </li>
 0215    <li>Metrology Down (@Model.ToolStateByType["Metrology"].DownTools):
 0216        @if (Model.ToolStateByType["Metrology"].DownTools > 0)
 0217        {
 218            <ul>
 0219                @foreach (ToolStateCurrent tool in Model.ToolStateByType["Metrology"].ToolStateCurrents)
 0220                {
 0221                    if (tool.BasicStateDescription != "Productive" && tool.ReactorStatus != "Out of Service")
 0222                    {
 0223                        <li>@tool.Tool</li>
 0224                    }
 0225                }
 226            </ul>
 0227        }
 228    </li>
 229    <li>
 0230        Cleans (@Model.ToolStateByType["Cleans"].DownTools):
 0231        @if (Model.ToolStateByType["Cleans"].DownTools > 0)
 0232        {
 233            <ul>
 0234                @foreach (ToolStateCurrent tool in Model.ToolStateByType["Cleans"].ToolStateCurrents)
 0235                {
 0236                    if (tool.BasicStateDescription != "Productive" && tool.ReactorStatus != "Out of Service")
 0237                    {
 0238                        <li>@tool.Tool</li>
 0239                    }
 0240                }
 241            </ul>
 0242        }
 243    </li>
 244</ul>
 245<br /><br />
 246<div class="table-responsive">
 247    <table class="table">
 248        <thead>
 249            <tr>
 250                <th scope="col"></th>
 251                <th scope="col">Monday</th>
 252                <th scope="col">Tuesday</th>
 253                <th scope="col">Wednesday</th>
 254                <th scope="col">Thursday</th>
 255                <th scope="col">Friday</th>
 256                <th scope="col">Saturday</th>
 257                <th scope="col">Sunday</th>
 258                <th scope="col">WTD</th>
 259                <th scope="col">Daily / Weekly</th>
 260            </tr>
 261            <tr>
 262                <th scope="col"></th>
 0263                @for (int i = 0; i < 7; i++)
 0264                {
 0265                    <th scope="col">@Model.StartDate.AddDays(i).ToString("MM/dd/yyyy")</th>
 0266                }
 267                <th scope="col">Actual</th>
 268                <th scope="col">Target</th>
 269            </tr>
 270        </thead>
 271        <tbody>
 272            <tr>
 273                <td scope="row">ASMs Uptime</td>
 0274                @for (int i = 0; i < 7; i++)
 0275                {
 0276                    if (i < Model.ToolAvailibilityByType["ASM"].Count)
 0277                    {
 0278                        int availiblePct = (int)Math.Round(float.Parse(Model.ToolAvailibilityByType["ASM"][i].AvailableP
 279
 0280                        if (availiblePct < 82)
 0281                            myClass = "table-danger text-danger";
 282                        else
 0283                            myClass = "";
 284
 0285                        <td class="@myClass">@(availiblePct + "%")</td>
 286
 0287                        ASMAvailablePct += availiblePct;
 0288                    }
 289                    else
 0290                    {
 291                        <td></td>
 0292                    }
 0293                }
 0294                <td>@(ASMAvailablePct / numberOfDaysInWeek + "%")</td>
 295                <td>82%</td>
 296            </tr>
 297            <tr>
 298                <td scope="row">EPPs Uptime</td>
 0299                @for (int i = 0; i < 7; i++)
 0300                {
 0301                    if (i < Model.ToolAvailibilityByType["EPP"].Count)
 0302                    {
 0303                        int availiblePct = (int)Math.Round(float.Parse(Model.ToolAvailibilityByType["EPP"][i].AvailableP
 304
 0305                        if (availiblePct < 60)
 0306                            myClass = "table-danger text-danger";
 307                        else
 0308                            myClass = "";
 309
 0310                        <td class="@myClass">@(availiblePct + "%")</td>
 311
 0312                        EPPAvailablePct += availiblePct;
 0313                    }
 314                    else
 0315                    {
 316                        <td></td>
 0317                    }
 0318                }
 0319                <td>@(EPPAvailablePct / numberOfDaysInWeek + "%")</td>
 320                <td>60%</td>
 321            </tr>
 322            <tr>
 323                <td scope="row">HTRs Uptime</td>
 0324                @for (int i = 0; i < 7; i++)
 0325                {
 0326                    if (i < Model.ToolAvailibilityByType["HTR"].Count)
 0327                    {
 0328                        int availiblePct = (int)Math.Round(float.Parse(Model.ToolAvailibilityByType["HTR"][i].AvailableP
 329
 0330                        if (availiblePct < 78)
 0331                            myClass = "table-danger text-danger";
 332                        else
 0333                            myClass = "";
 334
 0335                        <td class="@myClass">@(availiblePct + "%")</td>
 336
 0337                HTRAvailablePct += availiblePct;
 0338                    }
 339                    else
 0340                    {
 341                        <td></td>
 0342                    }
 0343                }
 0344                <td>@(HTRAvailablePct / numberOfDaysInWeek + "%")</td>
 345                <td>78%</td>
 346            </tr>
 347            <tr>
 348                <td scope="row">ASMs SLL Tool Count</td>
 0349                @for (int i = 0; i < 7; i++)
 0350                {
 0351                    if (i < Model.SLLTools.Count())
 0352                    {
 0353                        <td>@Model.SLLTools[i].ASM</td>
 354
 0355                        ASMSLL += @Model.SLLTools[i].ASM;
 0356                    }
 357                    else
 0358                    {
 359                        <td></td>
 0360                    }
 0361                }
 0362                <td>@(ASMSLL / numberOfDaysInWeek)</td>
 363                <td>0</td>
 364            </tr>
 365            <tr>
 366                <td scope="row">HTRs SLL Tool Count</td>
 0367                @for (int i = 0; i < 7; i++)
 0368                {
 0369                    int index = i == 6 ? 0 : i + 1;
 370
 0371                    if (i < Model.SLLTools.Count())
 0372                    {
 0373                        <td>@Model.SLLTools[i].HTR</td>
 374
 0375                        HTRSLL += @Model.SLLTools[i].HTR;
 0376                    }
 377                    else
 0378                    {
 379                        <td></td>
 0380                    }
 0381                }
 0382                <td>@(HTRSLL / numberOfDaysInWeek)</td>
 383                <td>0</td>
 384            </tr>
 385            <tr>
 386                <td scope="row">ASMs &lt;700C (Unload Temps)</td>
 0387                @for (int i = 0; i < 7; i++)
 0388                {
 0389                    if (i < Model.UnloadTempsByDay.Count())
 0390                    {
 0391                        <td>@Model.UnloadTempsByDay[i].ASMUnloadsBelow700</td>
 392
 0393                        ASMUnloadTemps += @Model.UnloadTempsByDay[i].ASMUnloadsBelow700;
 0394                    }
 395                    else
 0396                    {
 397                        <td></td>
 0398                    }
 0399                }
 0400                <td>@(ASMUnloadTemps / numberOfDaysInWeek)</td>
 401                <td>0</td>
 402            </tr>
 403            <tr>
 404                <td scope="row">HTRs &lt;700C (Unload Temps)</td>
 0405                @for (int i = 0; i < 7; i++)
 0406                {
 0407                    if (i < Model.UnloadTempsByDay.Count())
 0408                    {
 0409                        <td>@Model.UnloadTempsByDay[i].HTRUnloadsBelow700</td>
 410
 0411                        HTRUnloadTemps += @Model.UnloadTempsByDay[i].HTRUnloadsBelow700;
 0412                    }
 413                    else
 0414                    {
 415                        <td></td>
 0416                    }
 0417                }
 0418                <td>@(HTRUnloadTemps / numberOfDaysInWeek)</td>
 419                <td>0</td>
 420            </tr>
 421        </tbody>
 422    </table>
 423</div>
-
-
-
-
-

Methods/Properties

-ExecuteAsync()
-
-
- - \ No newline at end of file diff --git a/.vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.UI_Views_ProductionReport_EditDailyReport.html b/.vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.UI_Views_ProductionReport_EditDailyReport.html deleted file mode 100644 index 3c8902d..0000000 --- a/.vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.UI_Views_ProductionReport_EditDailyReport.html +++ /dev/null @@ -1,413 +0,0 @@ - - - - - - - -AspNetCoreGeneratedDocument.Views_ProductionReport_EditDailyReport - Coverage Report - -
-

< Summary

-
-
-
Information
-
-
- - - - - - - - - - - - - -
Class:AspNetCoreGeneratedDocument.Views_ProductionReport_EditDailyReport
Assembly:ReportingServices.UI
File(s):C:\Users\wathen\source\repos\ReportingServices\ReportingServices.UI\Views\ProductionReport\EditDailyReport.cshtml
-
-
-
-
-
-
-
Line coverage
-
-
0%
-
- - - - - - - - - - - - - - - - - - - - - -
Covered lines:0
Uncovered lines:82
Coverable lines:82
Total lines:244
Line coverage:0%
-
-
-
-
-
Branch coverage
-
-
0%
-
- - - - - - - - - - - - - -
Covered branches:0
Total branches:78
Branch coverage:0%
-
-
-
-
-
Method coverage
-
-
-

Method coverage is only available for sponsors.

-Upgrade to PRO version -
-
-
-
-

Metrics

-
- - - - - - -
MethodBranch coverage Cyclomatic complexity Line coverage
ExecuteAsync()0%60%
<ExecuteAsync()0%720%
-
-

File(s)

-

C:\Users\wathen\source\repos\ReportingServices\ReportingServices.UI\Views\ProductionReport\EditDailyReport.cshtml

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#LineLine coverage
 1@model ManualReportEntries
 2
 3@{
 04    ViewData["Title"] = "Edit Daily Passdown | Mesa Reporting Services";
 5}
 6
 7<div aria-label="breadcrumb">
 8    <ol class="breadcrumb">
 9        <li class="breadcrumb-item"><a asp-area="" asp-controller="Home" asp-action="Index">Home</a></li>
 10        <li class="breadcrumb-item"><a asp-area="" asp-controller="ProductionReport" asp-action="Index">Production Repor
 11        <li class="breadcrumb-item active" aria-current="page">Edit Passdown</li>
 12    </ol>
 13</div>
 14<br />
 15
 16<div class="container">
 17
 18    <h1 class="text-center">Edit Daily Targets</h1>
 19
 20    <form method="post" action="EditDailyReport">
 21        <div class="row" style="padding-top: 5px; padding-bottom: 5px;">
 22            <div class="col-lg-3 col-6">
 23                <h6 style="padding-top: 10px;">Operator Headcount:</h6>
 24            </div>
 25            <div class="col-lg-2 col-3">
 26                <select class="form-control" id="OperatorHeadcountDays" name="OperatorHeadcountDays">
 027                    @for (int i = 0; i <= 15; i++)
 028                    {
 029                        <option selected="@(i == Model.OperatorHeadcountDays)">@i</option>
 030                    }
 31                </select>
 32            </div>
 33            <div class="col-lg-2 col-3">
 34                <select class="form-control" id="OperatorHeadcountNights" name="OperatorHeadcountNights">
 035                    @for (int i = 0; i <= 15; i++)
 036                    {
 037                        <option selected="@(i == Model.OperatorHeadcountNights)">@i</option>
 038                    }
 39                </select>
 40            </div>
 41        </div>
 42        <div class="row" style="padding-top: 5px; padding-bottom: 5px;">
 43            <div class="col-lg-3 col-6">
 44                <h6 style="padding-top: 10px;">Total Call Outs (Operators):</h6>
 45            </div>
 46            <div class="col-lg-2 col-3">
 47                <select class="form-control" id="OperatorCallOutsDays" name="OperatorCallOutsDays">
 048                    @for (int i = 0; i <= 5; i++)
 049                    {
 050                        <option selected="@(i == Model.OperatorCallOutsDays)">@i</option>
 051                    }
 52                </select>
 53            </div>
 54            <div class="col-lg-2 col-3">
 55                <select class="form-control" id="OperatorCallOutsNights" name="OperatorCallOutsNights">
 056                    @for (int i = 0; i <= 5; i++)
 057                    {
 058                        <option selected="@(i == Model.OperatorCallOutsNights)">@i</option>
 059                    }
 60                </select>
 61            </div>
 62        </div>
 63        <div class="row" style="padding-top: 5px; padding-bottom: 5px;">
 64            <div class="col-lg-3 col-6">
 65                <h6 style="padding-top: 10px;">Engineering Headcount:</h6>
 66            </div>
 67            <div class="col-lg-2 col-3">
 68                <select class="form-control" id="EngineeringHeadcountDays" name="EngineeringHeadcountDays">
 069                    @for (int i = 0; i <= 5; i++)
 070                    {
 071                        <option selected="@(i == Model.EngineeringHeadcountDays)">@i</option>
 072                    }
 73                </select>
 74            </div>
 75            <div class="col-lg-2 col-3">
 76                <select class="form-control" id="EngineeringHeadcountNights" name="EngineeringHeadcountNights">
 077                    @for (int i = 0; i <= 5; i++)
 078                    {
 079                        <option selected="@(i == Model.EngineeringHeadcountNights)">@i</option>
 080                    }
 81                </select>
 82            </div>
 83        </div>
 84        <div class="row" style="padding-top: 5px; padding-bottom: 5px;">
 85            <div class="col-lg-3 col-6">
 86                <h6 style="padding-top: 10px;">Total Call Outs (Engineers):</h6>
 87            </div>
 88            <div class="col-lg-2 col-3">
 89                <select class="form-control" id="EngineerCallOutsDays" name="EngineeringCallOutsDays">
 090                    @for (int i = 0; i <= 5; i++)
 091                    {
 092                        <option selected="@(i == Model.EngineeringCallOutsDays)">@i</option>
 093                    }
 94                </select>
 95            </div>
 96            <div class="col-lg-2 col-3">
 97                <select class="form-control" id="EngineerCallOutsNights" name="EngineeringCallOutsNights">
 098                    @for (int i = 0; i <= 5; i++)
 099                    {
 0100                        <option selected="@(i == Model.EngineeringCallOutsNights)">@i</option>
 0101                    }
 102                </select>
 103            </div>
 104        </div>
 105        <div class="row" style="padding-top: 5px; padding-bottom: 5px;">
 106            <div class="col-lg-3 col-6">
 107                <h6 style="padding-top: 10px;">Maintenance Headcount:</h6>
 108            </div>
 109            <div class="col-lg-2 col-3">
 110                <select class="form-control" id="MaintenanceHeadcountDays" name="MaintenanceHeadcountDays">
 0111                    @for (int i = 0; i <= 5; i++)
 0112                    {
 0113                        <option selected="@(i == Model.MaintenanceHeadcountDays)">@i</option>
 0114                    }
 115                </select>
 116            </div>
 117            <div class="col-lg-2 col-3">
 118                <select class="form-control" id="MaintenanceHeadcountNights" name="MaintenanceHeadcountNights">
 0119                    @for (int i = 0; i <= 5; i++)
 0120                    {
 0121                        <option selected="@(i == Model.MaintenanceHeadcountNights)">@i</option>
 0122                    }
 123                </select>
 124            </div>
 125        </div>
 126        <div class="row" style="padding-top: 5px; padding-bottom: 5px;">
 127            <div class="col-lg-3 col-6">
 128                <h6 style="padding-top: 10px;">Total Call Outs (Maintenance):</h6>
 129            </div>
 130            <div class="col-lg-2 col-3">
 131                <select class="form-control" id="MaintenanceCallOutsDays" name="MaintenanceCallOutsDays">
 0132                    @for (int i = 0; i <= 5; i++)
 0133                    {
 0134                        <option selected="@(i == Model.MaintenanceCallOutsDays)">@i</option>
 0135                    }
 136                </select>
 137            </div>
 138            <div class="col-lg-2 col-3">
 139                <select class="form-control" id="MaintenanceCallOutsNights" name="MaintenanceCallOutsNights">
 0140                    @for (int i = 0; i <= 5; i++)
 0141                    {
 0142                        <option selected="@(i == Model.MaintenanceCallOutsNights)">@i</option>
 0143                    }
 144                </select>
 145            </div>
 146        </div>
 147        <br /><br />
 148        <div id="bottleChanges" class="row myMultiselect" style="padding-top: 5px; padding-bottom: 5px;">
 149            <div class="col-lg-3 col-md-4">
 150                <h6>Bottle Changes:</h6>
 151            </div>
 152            <div class="form-group col-lg-4 col-md-5">
 153                <div class="mySelectLabel selectBox" onclick="toggleCheckboxArea()">
 154                    <select class="form-select" name="BottleChanges">
 155                        <option>somevalue</option>
 156                    </select>
 157                    <div class="overSelect"></div>
 158                </div>
 159                <div class="mySelectOptions">
 0160                    @for (int i = 20; i < 80; i++)
 0161                    {
 0162                        string isMatching = "";
 0163                        string[] bottleChanges = Model.BottleChanges.Split(',');
 164
 0165                        for (int j = 0; j < bottleChanges.Length; j++)
 0166                        {
 0167                            if (bottleChanges[j] == "R" + i)
 0168                                isMatching = "checked";
 0169                        }
 170
 0171                        <label><input type="checkbox" onchange="checkboxStatusChange()" value="@("R" + i)" @isMatching /
 0172                    }
 173                </div>
 174            </div>
 175            <div class="col-lg-2 col-md-3">
 176                <button class="btn btn-info" type="button" onclick="clearList()">Clear List</button>
 177            </div>
 178        </div>
 179        <div id="dailyPartChanges" class="row myMultiselect" style="padding-top: 5px; padding-bottom: 5px;">
 180            <div class="col-lg-3 col-md-4">
 181                <h6>Daily Part Changes:</h6>
 182            </div>
 183            <div class="form-group col-lg-4 col-md-5">
 184                <div class="mySelectLabel selectBox" onclick="toggleCheckboxArea()">
 185                    <select class="form-select" name="DailyPartChanges">
 186                        <option>somevalue</option>
 187                    </select>
 188                    <div class="overSelect"></div>
 189                </div>
 190                <div class="mySelectOptions">
 0191                    @for (int i = 20; i < 80; i++)
 0192                    {
 0193                        string isMatching = "";
 0194                        string[] dailyPartChanges = Model.DailyPartChanges.Split(',');
 195
 0196                        for (int j = 0; j < dailyPartChanges.Length; j++)
 0197                        {
 0198                            if (dailyPartChanges[j] == "R" + i)
 0199                                isMatching = "checked";
 0200                        }
 201
 0202                        <label><input type="checkbox" onchange="checkboxStatusChange()" value="@("R" + i)" @isMatching /
 0203                    }
 204                </div>
 205            </div>
 206            <div class="col-lg-2 col-md-3">
 207                <button class="btn btn-info" type="button" onclick="clearList()">Clear List</button>
 208            </div>
 209        </div>
 210        <div id="weeklyPartChanges" class="row myMultiselect" style="padding-top: 5px; padding-bottom: 5px;">
 211            <div class="col-lg-3 col-md-4">
 212                <h6>Weekly Part Changes:</h6>
 213            </div>
 214            <div class="form-group col-lg-4 col-md-5">
 215                <div class="mySelectLabel selectBox" onclick="toggleCheckboxArea()">
 216                    <select class="form-select" name="WeeklyPartChanges">
 217                        <option>somevalue</option>
 218                    </select>
 219                    <div class="overSelect"></div>
 220                </div>
 221                <div class="mySelectOptions">
 0222                    @for (int i = 20; i < 80; i++)
 0223                    {
 0224                        string isMatching = "";
 0225                        string[] weeklyPartChanges = Model.WeeklyPartChanges.Split(',');
 226
 0227                        for (int j = 0; j < weeklyPartChanges.Length; j++)
 0228                        {
 0229                            if (weeklyPartChanges[j] == "R" + i)
 0230                                isMatching = "checked";
 0231                        }
 232
 0233                        <label><input type="checkbox" onchange="checkboxStatusChange()" value="@("R" + i)" @isMatching /
 0234                    }
 235                </div>
 236            </div>
 237            <div class="col-lg-2 col-md-3">
 238                <button class="btn btn-info" type="button" onclick="clearList()">Clear List</button>
 239            </div>
 240        </div>
 241        <button type="submit" value="Submit" class="btn btn-light" style="margin-top: 5px;">Submit</button>
 242    </form>
 243
 244</div>
-
-
-
-
-

Methods/Properties

-ExecuteAsync()
-<ExecuteAsync()
-
-
- - \ No newline at end of file diff --git a/.vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.UI_Views_ProductionReport_Index.html b/.vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.UI_Views_ProductionReport_Index.html deleted file mode 100644 index afef4cf..0000000 --- a/.vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.UI_Views_ProductionReport_Index.html +++ /dev/null @@ -1,186 +0,0 @@ - - - - - - - -AspNetCoreGeneratedDocument.Views_ProductionReport_Index - Coverage Report - -
-

< Summary

-
-
-
Information
-
-
- - - - - - - - - - - - - -
Class:AspNetCoreGeneratedDocument.Views_ProductionReport_Index
Assembly:ReportingServices.UI
File(s):C:\Users\wathen\source\repos\ReportingServices\ReportingServices.UI\Views\ProductionReport\Index.cshtml
-
-
-
-
-
-
-
Line coverage
-
-
0%
-
- - - - - - - - - - - - - - - - - - - - - -
Covered lines:0
Uncovered lines:1
Coverable lines:1
Total lines:19
Line coverage:0%
-
-
-
-
-
Branch coverage
-
-
0%
-
- - - - - - - - - - - - - -
Covered branches:0
Total branches:6
Branch coverage:0%
-
-
-
-
-
Method coverage
-
-
-

Method coverage is only available for sponsors.

-Upgrade to PRO version -
-
-
-
-

Metrics

-
- - - - - -
MethodBranch coverage Cyclomatic complexity Line coverage
ExecuteAsync()0%60%
-
-

File(s)

-

C:\Users\wathen\source\repos\ReportingServices\ReportingServices.UI\Views\ProductionReport\Index.cshtml

-
- - - - - - - - - - - - - - - - - - - - - - - -
#LineLine coverage
 1@{
 02    ViewData["Title"] = "Production Reports | Mesa Reporting Services";
 3}
 4
 5<div aria-label="breadcrumb">
 6    <ol class="breadcrumb">
 7        <li class="breadcrumb-item"><a asp-area="" asp-controller="Home" asp-action="Index">Home</a></li>
 8        <li class="breadcrumb-item active" aria-current="page">Production Reports</li>
 9    </ol>
 10</div>
 11<br />
 12
 13<div class="row">
 14    <div class="col-3 d-grid">
 15        <a class="btn btn-outline-secondary text-start" asp-area="" asp-controller="ProductionReport" asp-action="DailyR
 16    </div>
 17</div>
 18
 19<partial name="_LoadingPartial" />
-
-
-
-
-

Methods/Properties

-ExecuteAsync()
-
-
- - \ No newline at end of file diff --git a/.vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.UI_Views_Shared_Error.html b/.vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.UI_Views_Shared_Error.html deleted file mode 100644 index f3590d3..0000000 --- a/.vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.UI_Views_Shared_Error.html +++ /dev/null @@ -1,192 +0,0 @@ - - - - - - - -AspNetCoreGeneratedDocument.Views_Shared_Error - Coverage Report - -
-

< Summary

-
-
-
Information
-
-
- - - - - - - - - - - - - -
Class:AspNetCoreGeneratedDocument.Views_Shared_Error
Assembly:ReportingServices.UI
File(s):C:\Users\wathen\source\repos\ReportingServices\ReportingServices.UI\Views\Shared\Error.cshtml
-
-
-
-
-
-
-
Line coverage
-
-
0%
-
- - - - - - - - - - - - - - - - - - - - - -
Covered lines:0
Uncovered lines:5
Coverable lines:5
Total lines:25
Line coverage:0%
-
-
-
-
-
Branch coverage
-
-
0%
-
- - - - - - - - - - - - - -
Covered branches:0
Total branches:2
Branch coverage:0%
-
-
-
-
-
Method coverage
-
-
-

Method coverage is only available for sponsors.

-Upgrade to PRO version -
-
-
-
-

Metrics

-
- - - - - -
MethodBranch coverage Cyclomatic complexity Line coverage
ExecuteAsync()0%20%
-
-

File(s)

-

C:\Users\wathen\source\repos\ReportingServices\ReportingServices.UI\Views\Shared\Error.cshtml

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#LineLine coverage
 1@model ErrorViewModel
 2@{
 03    ViewData["Title"] = "Error";
 4}
 5
 6<h1 class="text-danger">Error.</h1>
 7<h2 class="text-danger">An error occurred while processing your request.</h2>
 8
 09@if (Model.ShowRequestId)
 010{
 11    <p>
 012        <strong>Request ID:</strong> <code>@Model.RequestId</code>
 13    </p>
 014}
 15
 16<h3>Development Mode</h3>
 17<p>
 18    Swapping to <strong>Development</strong> environment will display more detailed information about the error that occ
 19</p>
 20<p>
 21    <strong>The Development environment shouldn't be enabled for deployed applications.</strong>
 22    It can result in displaying sensitive information from exceptions to end users.
 23    For local debugging, enable the <strong>Development</strong> environment by setting the <strong>ASPNETCORE_ENVIRONME
 24    and restarting the app.
 25</p>
-
-
-
-
-

Methods/Properties

-ExecuteAsync()
-
-
- - \ No newline at end of file diff --git a/.vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.UI_Views_Shared__DailyReportPartial.html b/.vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.UI_Views_Shared__DailyReportPartial.html deleted file mode 100644 index 19ea85b..0000000 --- a/.vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.UI_Views_Shared__DailyReportPartial.html +++ /dev/null @@ -1,423 +0,0 @@ - - - - - - - -AspNetCoreGeneratedDocument.Views_Shared__DailyReportPartial - Coverage Report - -
-

< Summary

-
-
-
Information
-
-
- - - - - - - - - - - - - -
Class:AspNetCoreGeneratedDocument.Views_Shared__DailyReportPartial
Assembly:ReportingServices.UI
File(s):C:\Users\wathen\source\repos\ReportingServices\ReportingServices.UI\Views\Shared\_DailyReportPartial.cshtml
-
-
-
-
-
-
-
Line coverage
-
-
0%
-
- - - - - - - - - - - - - - - - - - - - - -
Covered lines:0
Uncovered lines:131
Coverable lines:131
Total lines:256
Line coverage:0%
-
-
-
-
-
Branch coverage
-
-
0%
-
- - - - - - - - - - - - - -
Covered branches:0
Total branches:46
Branch coverage:0%
-
-
-
-
-
Method coverage
-
-
-

Method coverage is only available for sponsors.

-Upgrade to PRO version -
-
-
-
-

Metrics

-
- - - - - -
MethodBranch coverage Cyclomatic complexity Line coverage
ExecuteAsync()0%460%
-
-

File(s)

-

C:\Users\wathen\source\repos\ReportingServices\ReportingServices.UI\Views\Shared\_DailyReportPartial.cshtml

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#LineLine coverage
 1@model YieldStatistics
 2
 3@{
 04    int totalWafersOut = 0;
 05    int totalCustomerScrap = 0;
 06    int totalManufacturingScrap = 0;
 07    int totalProdScrap = 0;
 08    int totalYieldedWafersOut = 0;
 09    int deltaToCommit = 0;
 010    int deltaToPlan = 0;
 011    float totalYield = 0f;
 12
 13    string myClass;
 14
 015    int numberOfDaysInWeek = Model.OutsByDay.Count;
 016    int yieldOutDays = Model.IsCurrentWeek ? Model.OutsByDay.Count - 1 : Model.OutsByDay.Count;
 17}
 18
 19
 20<table class="table table-bordered">
 21    <thead>
 22        <tr>
 23            <th scope="col" rowspan="2" class="text-center align-middle">SI Operations</th>
 024            @for (int i = 0; i < 7; i++)
 025            {
 026                <th scope="col" class="text-center">@Model.StartDate.AddDays(i).ToString("MM/dd/yyyy")</th>
 027            }
 28            <th scope="col" rowspan="2" class="text-center align-middle">Weekly Total</th>
 29            <th scope="col" rowspan="2" class="text-center align-middle">Comment</th>
 30        </tr>
 31        <tr>
 32            <th scope="col" class="text-center">Monday</th>
 33            <th scope="col" class="text-center">Tuesday</th>
 34            <th scope="col" class="text-center">Wednesday</th>
 35            <th scope="col" class="text-center">Thursday</th>
 36            <th scope="col" class="text-center">Friday</th>
 37            <th scope="col" class="text-center">Saturday</th>
 38            <th scope="col" class="text-center">Sunday</th>
 39        </tr>
 40    </thead>
 41    <tbody>
 42        <tr>
 43            <td scope="row">Commited Target to meet Shipment Requirements</td>
 044            <td class="text-center">@string.Format("{0:#,###}", Model.DailyPlanWafers)</td>
 045            <td class="text-center">@string.Format("{0:#,###}", Model.DailyPlanWafers)</td>
 046            <td class="text-center">@string.Format("{0:#,###}", Model.DailyPlanWafers)</td>
 047            <td class="text-center">@string.Format("{0:#,###}", Model.DailyPlanWafers)</td>
 048            <td class="text-center">@string.Format("{0:#,###}", Model.DailyPlanWafers)</td>
 049            <td class="text-center">@string.Format("{0:#,###}", Model.DailyPlanWafers)</td>
 050            <td class="text-center">@string.Format("{0:#,###}", Model.DailyPlanWafers)</td>
 051            <td class="text-center">@string.Format("{0:##,###}", Model.DailyPlanWafers * 7)</td>
 52            <td>Number updated quarterly</td>
 53        </tr>
 54        <tr>
 55            <td scope="row">Actual Reactor Out</td>
 056            @for (int i = 0; i < 7; i++)
 057            {
 58
 059                if (i < numberOfDaysInWeek)
 060                {
 061                    int reactorMoves = Model.OutsByDay[i].TotalWafers;
 62
 063                    <td class="text-center">@reactorMoves</td>
 64
 065                    totalWafersOut += reactorMoves;
 066                }
 67                else
 068                {
 69                    <td></td>
 070                }
 071            }
 072            <td class="text-center">@totalWafersOut</td>
 73            <td>Before Scrap</td>
 74        </tr>
 75        <tr>
 76            <td scope="row" id="expandYield">
 77                Actual Yielded Wafers Out &nbsp;&nbsp;&nbsp;
 78                <button class="btn btn-default" onclick="expandYield()">
 79                    <img src="~/Images/plusIcon.png" width="20" style="padding-bottom: 3px" id="yieldImage" />
 80                </button>
 81            </td>
 082            @for (int i = 0; i < 7; i++)
 083            {
 084                if (i < numberOfDaysInWeek)
 085                {
 086                    int yieldedOuts = Model.OutsByDay[i].TotalWafers - Model.ScrapByDay[i].TOT_REJ_WFRS - Model.ScrapByD
 87
 088                    <td class="text-center">@yieldedOuts</td>
 89
 090                    totalYieldedWafersOut += yieldedOuts;
 091                }
 92                else
 093                {
 94                    <td></td>
 095                }
 096            }
 097            <td class="text-center">@totalYieldedWafersOut</td>
 98            <td>After Scrap</td>
 99        </tr>
 100        <tr class="yield hidden">
 101            @{
 0102                int index = numberOfDaysInWeek - 1;
 0103                int modifiedYieldedOuts = 0;
 0104                if (Model.IsCurrentWeek)
 0105                    modifiedYieldedOuts = totalYieldedWafersOut - (Model.OutsByDay[index].TotalWafers - Model.ScrapByDay
 106                else
 0107                    modifiedYieldedOuts = totalYieldedWafersOut;
 108
 0109                int averageYieldedOuts = yieldOutDays == 0 ? 0 : modifiedYieldedOuts / yieldOutDays;
 110            }
 0111            <td scope="row" colspan="10" id="expandYield" class="text-center">Yielded Wafers Out Daily Average: @(averag
 112        </tr>
 113        <tr class="yield hidden">
 114            <td scope="row">Customer Scrap</td>
 0115            @for (int i = 0; i < 7; i++)
 0116            {
 0117                if (i < numberOfDaysInWeek)
 0118                {
 0119                    int custScrap = Model.ScrapByDay[i].TOT_REJ_CUST;
 120
 0121                    <td class="text-center">@custScrap</td>
 122
 0123                    totalCustomerScrap += custScrap;
 0124                }
 125                else
 0126                {
 127                    <td></td>
 0128                }
 0129            }
 0130            <td class="text-center">@totalCustomerScrap</td>
 131            <td></td>
 132        </tr>
 133        <tr class="yield hidden">
 134            <td scope="row">Manufacturing Scrap</td>
 0135            @for (int i = 0; i < 7; i++)
 0136            {
 0137                if (i < numberOfDaysInWeek)
 0138                {
 0139                    int manuScrap = Model.ScrapByDay[i].TOT_REJ_MANU;
 140
 0141                    <td class="text-center">@manuScrap</td>
 142
 0143                    totalManufacturingScrap += manuScrap;
 0144                }
 145                else
 0146                {
 147                    <td></td>
 0148                }
 0149            }
 0150            <td class="text-center">@totalManufacturingScrap</td>
 151            <td></td>
 152        </tr>
 153        <tr class="yield hidden">
 154            <td scope="row">Production Scrap</td>
 0155            @for (int i = 0; i < 7; i++)
 0156            {
 0157                if (i < numberOfDaysInWeek)
 0158                {
 0159                    int prodScrap = Model.ScrapByDay[i].TW_PROD;
 160
 0161                    <td class="text-center">@prodScrap</td>
 162
 0163                    totalProdScrap += prodScrap;
 0164                }
 165                else
 0166                {
 167                    <td></td>
 0168                }
 0169            }
 0170            <td class="text-center">@totalProdScrap</td>
 171            <td></td>
 172        </tr>
 173        <tr class="yield hidden">
 174            <td scope="row">Yield</td>
 0175            @for (int i = 0; i < 7; i++)
 0176            {
 0177                if (i < numberOfDaysInWeek)
 0178                {
 0179                    float yield = ((float)Model.OutsByDay[i].TotalWafers - (float)Model.ScrapByDay[i].TOT_REJ_WFRS) / (f
 180
 0181                    <td class="text-center">@(string.Format("{0:P2}", yield))</td>
 182
 0183                    totalYield += yield;
 0184                }
 185                else
 0186                {
 187                    <td></td>
 0188                }
 0189            }
 0190            <td class="text-center">@(string.Format("{0:P2}", totalYield / numberOfDaysInWeek))</td>
 191            <td>After Scrap</td>
 192        </tr>
 193        <tr>
 194            <td scope="row">Delta to commit</td>
 0195            @for (int i = 0; i < 7; i++)
 0196            {
 0197                if (i < numberOfDaysInWeek)
 0198                {
 0199                    int dayDelta = Model.OutsByDay[i].TotalWafers - Model.ScrapByDay[i].TOT_REJ_WFRS - 4500;
 200
 0201                    if (dayDelta < 0)
 0202                        myClass = "table-danger text-danger";
 203                    else
 0204                        myClass = "";
 205
 0206                    <td class="text-center @myClass">@dayDelta</td>
 207
 0208                    deltaToCommit += dayDelta;
 0209                }
 210                else
 0211                {
 212                    <td></td>
 0213                }
 0214            }
 0215            <td class="text-center">@deltaToCommit</td>
 216            <td>Difference to commitment</td>
 217        </tr>
 218        <tr>
 219            <td scope="row">Delta to the Plan</td>
 0220            @for (int i = 0; i < 7; i++)
 0221            {
 0222                if (i < numberOfDaysInWeek)
 0223                {
 0224                    int dayDelta = Model.OutsByDay[i].TotalWafers - Model.ScrapByDay[i].TOT_REJ_WFRS - 4500;
 225
 0226                    if (dayDelta < 0)
 0227                        myClass = "table-danger text-danger";
 228                    else
 0229                        myClass = "";
 230
 0231                    <td class="text-center @myClass">@dayDelta</td>
 232
 0233                    deltaToPlan += dayDelta;
 0234                }
 235                else
 0236                {
 237                    <td></td>
 0238                }
 0239            }
 0240            <td class="text-center">@deltaToPlan</td>
 241            <td>Difference to target</td>
 242        </tr>
 243        <tr>
 244            <td scope="row">Wafers Needed to make QTR</td>
 245            <td class="text-center">3,640</td>
 246            <td class="text-center">3,640</td>
 247            <td class="text-center">3,640</td>
 248            <td class="text-center">3,640</td>
 249            <td class="text-center">3,640</td>
 250            <td class="text-center">3,640</td>
 251            <td class="text-center">3,640</td>
 252            <td class="text-center">25,480</td>
 253            <td>Number updated weekly</td>
 254        </tr>
 255    </tbody>
 256</table>
-
-
-
-
-

Methods/Properties

-ExecuteAsync()
-
-
- - \ No newline at end of file diff --git a/.vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.UI_Views_Shared__Layout.html b/.vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.UI_Views_Shared__Layout.html deleted file mode 100644 index 05d96e7..0000000 --- a/.vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.UI_Views_Shared__Layout.html +++ /dev/null @@ -1,230 +0,0 @@ - - - - - - - -AspNetCoreGeneratedDocument.Views_Shared__Layout - Coverage Report - -
-

< Summary

-
-
-
Information
-
-
- - - - - - - - - - - - - -
Class:AspNetCoreGeneratedDocument.Views_Shared__Layout
Assembly:ReportingServices.UI
File(s):C:\Users\wathen\source\repos\ReportingServices\ReportingServices.UI\Views\Shared\_Layout.cshtml
-
-
-
-
-
-
-
Line coverage
-
-
0%
-
- - - - - - - - - - - - - - - - - - - - - -
Covered lines:0
Uncovered lines:6
Coverable lines:6
Total lines:61
Line coverage:0%
-
-
-
-
-
Branch coverage
-
-
0%
-
- - - - - - - - - - - - - -
Covered branches:0
Total branches:16
Branch coverage:0%
-
-
-
-
-
Method coverage
-
-
-

Method coverage is only available for sponsors.

-Upgrade to PRO version -
-
-
-
-

Metrics

-
- - - - - - -
MethodBranch coverage Cyclomatic complexity Line coverage
<ExecuteAsync()0%60%
<ExecuteAsync()0%100%
-
-

File(s)

-

C:\Users\wathen\source\repos\ReportingServices\ReportingServices.UI\Views\Shared\_Layout.cshtml

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#LineLine coverage
 1<!DOCTYPE html>
 2<html lang="en">
 3<head>
 4    <meta charset="utf-8" />
 5    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
 06    <title>@ViewData["Title"] - ReportingServices</title>
 7    <link rel="stylesheet" href="~/lib/bootstrap/dist/css/bootstrap.min.css" />
 08    <link rel="stylesheet" href="~/css/site.css" asp-append-version="true" />
 09    <link rel="stylesheet" href="~/ReportingServices.styles.css" asp-append-version="true" />
 10    <link href="https://code.jquery.com/ui/1.13.2/themes/ui-lightness/jquery-ui.css"
 11          rel="stylesheet">
 12    <script src="https://code.jquery.com/jquery-3.6.1.js"></script>
 13    <script src="https://code.jquery.com/ui/1.13.2/jquery-ui.js"></script>
 14    <script>
 15        $(function () {
 16            $("#StartDate").datepicker();
 17        })
 18        $(function () {
 19            $("#EndDate").datepicker();
 20        })
 21    </script>
 22</head>
 23<body>
 24    <header>
 25        <nav class="navbar navbar-expand-sm navbar-toggleable-sm navbar-dark bg-dark border-bottom box-shadow mb-3" styl
 26            <div class="container-fluid">
 27                <a class="navbar-brand" asp-area="" asp-controller="Home" asp-action="Index">Mesa Reporting Services</a>
 28                <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target=".navbar-collapse"
 29                        aria-expanded="false" aria-label="Toggle navigation">
 30                    <span class="navbar-toggler-icon"></span>
 31                </button>
 32                <div class="navbar-collapse collapse d-sm-inline-flex justify-content-between">
 33                    <ul class="navbar-nav flex-grow-1">
 34                        <li class="nav-item">
 35                            <a class="nav-link text-light" asp-area="" asp-controller="Home" asp-action="Index">Home</a>
 36                        </li>
 37                    </ul>
 38                    <form class="d-flex" role="search">
 39                        <input class="form-control me-2" type="search" placeholder="Search" aria-label="Search" />
 40                        <button class="btn btn-outline-success my-2 my-sm-0" type="submit">Search</button>
 41                    </form>
 42                </div>
 43            </div>
 44        </nav>
 45    </header>
 46    <div class="container">
 47        <main role="main" class="pb-3">
 048            @RenderBody()
 49        </main>
 50    </div>
 51
 52    <footer class="border-top footer text-muted">
 53        <div class="container">
 54            &copy; 2022 - Mesa Reporting Services
 55        </div>
 56    </footer>
 57    <script src="~/lib/bootstrap/dist/js/bootstrap.bundle.min.js"></script>
 058    <script src="~/js/site.js" asp-append-version="true"></script>
 059    @await RenderSectionAsync("Scripts", required: false)
 60</body>
 61</html>
-
-
-
-
-

Methods/Properties

-<ExecuteAsync()
-<ExecuteAsync()
-
-
- - \ No newline at end of file diff --git a/.vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.UI_Views__ViewStart.html b/.vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.UI_Views__ViewStart.html deleted file mode 100644 index f3614cb..0000000 --- a/.vscode/ReportGenerator/Html_Dark/1d194f36/ReportingServices.UI_Views__ViewStart.html +++ /dev/null @@ -1,170 +0,0 @@ - - - - - - - -AspNetCoreGeneratedDocument.Views__ViewStart - Coverage Report - -
-

< Summary

-
-
-
Information
-
-
- - - - - - - - - - - - - -
Class:AspNetCoreGeneratedDocument.Views__ViewStart
Assembly:ReportingServices.UI
File(s):C:\Users\wathen\source\repos\ReportingServices\ReportingServices.UI\Views\_ViewStart.cshtml
-
-
-
-
-
-
-
Line coverage
-
-
0%
-
- - - - - - - - - - - - - - - - - - - - - -
Covered lines:0
Uncovered lines:1
Coverable lines:1
Total lines:3
Line coverage:0%
-
-
-
-
-
Branch coverage
-
-
N/A
-
- - - - - - - - - - - - - -
Covered branches:0
Total branches:0
Branch coverage:N/A
-
-
-
-
-
Method coverage
-
-
-

Method coverage is only available for sponsors.

-Upgrade to PRO version -
-
-
-
-

Metrics

-
- - - - - -
MethodBranch coverage Cyclomatic complexity Line coverage
ExecuteAsync()100%10%
-
-

File(s)

-

C:\Users\wathen\source\repos\ReportingServices\ReportingServices.UI\Views\_ViewStart.cshtml

-
- - - - - - - -
#LineLine coverage
 1@{
 02    Layout = "_Layout";
 3}
-
-
-
-
-

Methods/Properties

-ExecuteAsync()
-
-
- - \ No newline at end of file diff --git a/.vscode/ReportGenerator/Html_Dark/1d194f36/class.js b/.vscode/ReportGenerator/Html_Dark/1d194f36/class.js deleted file mode 100644 index b7a43b2..0000000 --- a/.vscode/ReportGenerator/Html_Dark/1d194f36/class.js +++ /dev/null @@ -1,218 +0,0 @@ -/* Chartist.js 0.11.4 - * Copyright © 2019 Gion Kunz - * Free to use under either the WTFPL license or the MIT license. - * https://raw.githubusercontent.com/gionkunz/chartist-js/master/LICENSE-WTFPL - * https://raw.githubusercontent.com/gionkunz/chartist-js/master/LICENSE-MIT - */ - -!function (a, b) { "function" == typeof define && define.amd ? define("Chartist", [], function () { return a.Chartist = b() }) : "object" == typeof module && module.exports ? module.exports = b() : a.Chartist = b() }(this, function () { - var a = { version: "0.11.4" }; return function (a, b) { "use strict"; var c = a.window, d = a.document; b.namespaces = { svg: "http://www.w3.org/2000/svg", xmlns: "http://www.w3.org/2000/xmlns/", xhtml: "http://www.w3.org/1999/xhtml", xlink: "http://www.w3.org/1999/xlink", ct: "http://gionkunz.github.com/chartist-js/ct" }, b.noop = function (a) { return a }, b.alphaNumerate = function (a) { return String.fromCharCode(97 + a % 26) }, b.extend = function (a) { var c, d, e; for (a = a || {}, c = 1; c < arguments.length; c++) { d = arguments[c]; for (var f in d) e = d[f], "object" != typeof e || null === e || e instanceof Array ? a[f] = e : a[f] = b.extend(a[f], e) } return a }, b.replaceAll = function (a, b, c) { return a.replace(new RegExp(b, "g"), c) }, b.ensureUnit = function (a, b) { return "number" == typeof a && (a += b), a }, b.quantity = function (a) { if ("string" == typeof a) { var b = /^(\d+)\s*(.*)$/g.exec(a); return { value: +b[1], unit: b[2] || void 0 } } return { value: a } }, b.querySelector = function (a) { return a instanceof Node ? a : d.querySelector(a) }, b.times = function (a) { return Array.apply(null, new Array(a)) }, b.sum = function (a, b) { return a + (b ? b : 0) }, b.mapMultiply = function (a) { return function (b) { return b * a } }, b.mapAdd = function (a) { return function (b) { return b + a } }, b.serialMap = function (a, c) { var d = [], e = Math.max.apply(null, a.map(function (a) { return a.length })); return b.times(e).forEach(function (b, e) { var f = a.map(function (a) { return a[e] }); d[e] = c.apply(null, f) }), d }, b.roundWithPrecision = function (a, c) { var d = Math.pow(10, c || b.precision); return Math.round(a * d) / d }, b.precision = 8, b.escapingMap = { "&": "&", "<": "<", ">": ">", '"': """, "'": "'" }, b.serialize = function (a) { return null === a || void 0 === a ? a : ("number" == typeof a ? a = "" + a : "object" == typeof a && (a = JSON.stringify({ data: a })), Object.keys(b.escapingMap).reduce(function (a, c) { return b.replaceAll(a, c, b.escapingMap[c]) }, a)) }, b.deserialize = function (a) { if ("string" != typeof a) return a; a = Object.keys(b.escapingMap).reduce(function (a, c) { return b.replaceAll(a, b.escapingMap[c], c) }, a); try { a = JSON.parse(a), a = void 0 !== a.data ? a.data : a } catch (c) { } return a }, b.createSvg = function (a, c, d, e) { var f; return c = c || "100%", d = d || "100%", Array.prototype.slice.call(a.querySelectorAll("svg")).filter(function (a) { return a.getAttributeNS(b.namespaces.xmlns, "ct") }).forEach(function (b) { a.removeChild(b) }), f = new b.Svg("svg").attr({ width: c, height: d }).addClass(e), f._node.style.width = c, f._node.style.height = d, a.appendChild(f._node), f }, b.normalizeData = function (a, c, d) { var e, f = { raw: a, normalized: {} }; return f.normalized.series = b.getDataArray({ series: a.series || [] }, c, d), e = f.normalized.series.every(function (a) { return a instanceof Array }) ? Math.max.apply(null, f.normalized.series.map(function (a) { return a.length })) : f.normalized.series.length, f.normalized.labels = (a.labels || []).slice(), Array.prototype.push.apply(f.normalized.labels, b.times(Math.max(0, e - f.normalized.labels.length)).map(function () { return "" })), c && b.reverseData(f.normalized), f }, b.safeHasProperty = function (a, b) { return null !== a && "object" == typeof a && a.hasOwnProperty(b) }, b.isDataHoleValue = function (a) { return null === a || void 0 === a || "number" == typeof a && isNaN(a) }, b.reverseData = function (a) { a.labels.reverse(), a.series.reverse(); for (var b = 0; b < a.series.length; b++)"object" == typeof a.series[b] && void 0 !== a.series[b].data ? a.series[b].data.reverse() : a.series[b] instanceof Array && a.series[b].reverse() }, b.getDataArray = function (a, c, d) { function e(a) { if (b.safeHasProperty(a, "value")) return e(a.value); if (b.safeHasProperty(a, "data")) return e(a.data); if (a instanceof Array) return a.map(e); if (!b.isDataHoleValue(a)) { if (d) { var c = {}; return "string" == typeof d ? c[d] = b.getNumberOrUndefined(a) : c.y = b.getNumberOrUndefined(a), c.x = a.hasOwnProperty("x") ? b.getNumberOrUndefined(a.x) : c.x, c.y = a.hasOwnProperty("y") ? b.getNumberOrUndefined(a.y) : c.y, c } return b.getNumberOrUndefined(a) } } return a.series.map(e) }, b.normalizePadding = function (a, b) { return b = b || 0, "number" == typeof a ? { top: a, right: a, bottom: a, left: a } : { top: "number" == typeof a.top ? a.top : b, right: "number" == typeof a.right ? a.right : b, bottom: "number" == typeof a.bottom ? a.bottom : b, left: "number" == typeof a.left ? a.left : b } }, b.getMetaData = function (a, b) { var c = a.data ? a.data[b] : a[b]; return c ? c.meta : void 0 }, b.orderOfMagnitude = function (a) { return Math.floor(Math.log(Math.abs(a)) / Math.LN10) }, b.projectLength = function (a, b, c) { return b / c.range * a }, b.getAvailableHeight = function (a, c) { return Math.max((b.quantity(c.height).value || a.height()) - (c.chartPadding.top + c.chartPadding.bottom) - c.axisX.offset, 0) }, b.getHighLow = function (a, c, d) { function e(a) { if (void 0 !== a) if (a instanceof Array) for (var b = 0; b < a.length; b++)e(a[b]); else { var c = d ? +a[d] : +a; g && c > f.high && (f.high = c), h && c < f.low && (f.low = c) } } c = b.extend({}, c, d ? c["axis" + d.toUpperCase()] : {}); var f = { high: void 0 === c.high ? -Number.MAX_VALUE : +c.high, low: void 0 === c.low ? Number.MAX_VALUE : +c.low }, g = void 0 === c.high, h = void 0 === c.low; return (g || h) && e(a), (c.referenceValue || 0 === c.referenceValue) && (f.high = Math.max(c.referenceValue, f.high), f.low = Math.min(c.referenceValue, f.low)), f.high <= f.low && (0 === f.low ? f.high = 1 : f.low < 0 ? f.high = 0 : f.high > 0 ? f.low = 0 : (f.high = 1, f.low = 0)), f }, b.isNumeric = function (a) { return null !== a && isFinite(a) }, b.isFalseyButZero = function (a) { return !a && 0 !== a }, b.getNumberOrUndefined = function (a) { return b.isNumeric(a) ? +a : void 0 }, b.isMultiValue = function (a) { return "object" == typeof a && ("x" in a || "y" in a) }, b.getMultiValue = function (a, c) { return b.isMultiValue(a) ? b.getNumberOrUndefined(a[c || "y"]) : b.getNumberOrUndefined(a) }, b.rho = function (a) { function b(a, c) { return a % c === 0 ? c : b(c, a % c) } function c(a) { return a * a + 1 } if (1 === a) return a; var d, e = 2, f = 2; if (a % 2 === 0) return 2; do e = c(e) % a, f = c(c(f)) % a, d = b(Math.abs(e - f), a); while (1 === d); return d }, b.getBounds = function (a, c, d, e) { function f(a, b) { return a === (a += b) && (a *= 1 + (b > 0 ? o : -o)), a } var g, h, i, j = 0, k = { high: c.high, low: c.low }; k.valueRange = k.high - k.low, k.oom = b.orderOfMagnitude(k.valueRange), k.step = Math.pow(10, k.oom), k.min = Math.floor(k.low / k.step) * k.step, k.max = Math.ceil(k.high / k.step) * k.step, k.range = k.max - k.min, k.numberOfSteps = Math.round(k.range / k.step); var l = b.projectLength(a, k.step, k), m = l < d, n = e ? b.rho(k.range) : 0; if (e && b.projectLength(a, 1, k) >= d) k.step = 1; else if (e && n < k.step && b.projectLength(a, n, k) >= d) k.step = n; else for (; ;) { if (m && b.projectLength(a, k.step, k) <= d) k.step *= 2; else { if (m || !(b.projectLength(a, k.step / 2, k) >= d)) break; if (k.step /= 2, e && k.step % 1 !== 0) { k.step *= 2; break } } if (j++ > 1e3) throw new Error("Exceeded maximum number of iterations while optimizing scale step!") } var o = 2.221e-16; for (k.step = Math.max(k.step, o), h = k.min, i = k.max; h + k.step <= k.low;)h = f(h, k.step); for (; i - k.step >= k.high;)i = f(i, -k.step); k.min = h, k.max = i, k.range = k.max - k.min; var p = []; for (g = k.min; g <= k.max; g = f(g, k.step)) { var q = b.roundWithPrecision(g); q !== p[p.length - 1] && p.push(q) } return k.values = p, k }, b.polarToCartesian = function (a, b, c, d) { var e = (d - 90) * Math.PI / 180; return { x: a + c * Math.cos(e), y: b + c * Math.sin(e) } }, b.createChartRect = function (a, c, d) { var e = !(!c.axisX && !c.axisY), f = e ? c.axisY.offset : 0, g = e ? c.axisX.offset : 0, h = a.width() || b.quantity(c.width).value || 0, i = a.height() || b.quantity(c.height).value || 0, j = b.normalizePadding(c.chartPadding, d); h = Math.max(h, f + j.left + j.right), i = Math.max(i, g + j.top + j.bottom); var k = { padding: j, width: function () { return this.x2 - this.x1 }, height: function () { return this.y1 - this.y2 } }; return e ? ("start" === c.axisX.position ? (k.y2 = j.top + g, k.y1 = Math.max(i - j.bottom, k.y2 + 1)) : (k.y2 = j.top, k.y1 = Math.max(i - j.bottom - g, k.y2 + 1)), "start" === c.axisY.position ? (k.x1 = j.left + f, k.x2 = Math.max(h - j.right, k.x1 + 1)) : (k.x1 = j.left, k.x2 = Math.max(h - j.right - f, k.x1 + 1))) : (k.x1 = j.left, k.x2 = Math.max(h - j.right, k.x1 + 1), k.y2 = j.top, k.y1 = Math.max(i - j.bottom, k.y2 + 1)), k }, b.createGrid = function (a, c, d, e, f, g, h, i) { var j = {}; j[d.units.pos + "1"] = a, j[d.units.pos + "2"] = a, j[d.counterUnits.pos + "1"] = e, j[d.counterUnits.pos + "2"] = e + f; var k = g.elem("line", j, h.join(" ")); i.emit("draw", b.extend({ type: "grid", axis: d, index: c, group: g, element: k }, j)) }, b.createGridBackground = function (a, b, c, d) { var e = a.elem("rect", { x: b.x1, y: b.y2, width: b.width(), height: b.height() }, c, !0); d.emit("draw", { type: "gridBackground", group: a, element: e }) }, b.createLabel = function (a, c, e, f, g, h, i, j, k, l, m) { var n, o = {}; if (o[g.units.pos] = a + i[g.units.pos], o[g.counterUnits.pos] = i[g.counterUnits.pos], o[g.units.len] = c, o[g.counterUnits.len] = Math.max(0, h - 10), l) { var p = d.createElement("span"); p.className = k.join(" "), p.setAttribute("xmlns", b.namespaces.xhtml), p.innerText = f[e], p.style[g.units.len] = Math.round(o[g.units.len]) + "px", p.style[g.counterUnits.len] = Math.round(o[g.counterUnits.len]) + "px", n = j.foreignObject(p, b.extend({ style: "overflow: visible;" }, o)) } else n = j.elem("text", o, k.join(" ")).text(f[e]); m.emit("draw", b.extend({ type: "label", axis: g, index: e, group: j, element: n, text: f[e] }, o)) }, b.getSeriesOption = function (a, b, c) { if (a.name && b.series && b.series[a.name]) { var d = b.series[a.name]; return d.hasOwnProperty(c) ? d[c] : b[c] } return b[c] }, b.optionsProvider = function (a, d, e) { function f(a) { var f = h; if (h = b.extend({}, j), d) for (i = 0; i < d.length; i++) { var g = c.matchMedia(d[i][0]); g.matches && (h = b.extend(h, d[i][1])) } e && a && e.emit("optionsChanged", { previousOptions: f, currentOptions: h }) } function g() { k.forEach(function (a) { a.removeListener(f) }) } var h, i, j = b.extend({}, a), k = []; if (!c.matchMedia) throw "window.matchMedia not found! Make sure you're using a polyfill."; if (d) for (i = 0; i < d.length; i++) { var l = c.matchMedia(d[i][0]); l.addListener(f), k.push(l) } return f(), { removeMediaQueryListeners: g, getCurrentOptions: function () { return b.extend({}, h) } } }, b.splitIntoSegments = function (a, c, d) { var e = { increasingX: !1, fillHoles: !1 }; d = b.extend({}, e, d); for (var f = [], g = !0, h = 0; h < a.length; h += 2)void 0 === b.getMultiValue(c[h / 2].value) ? d.fillHoles || (g = !0) : (d.increasingX && h >= 2 && a[h] <= a[h - 2] && (g = !0), g && (f.push({ pathCoordinates: [], valueData: [] }), g = !1), f[f.length - 1].pathCoordinates.push(a[h], a[h + 1]), f[f.length - 1].valueData.push(c[h / 2])); return f } }(this || global, a), function (a, b) { "use strict"; b.Interpolation = {}, b.Interpolation.none = function (a) { var c = { fillHoles: !1 }; return a = b.extend({}, c, a), function (c, d) { for (var e = new b.Svg.Path, f = !0, g = 0; g < c.length; g += 2) { var h = c[g], i = c[g + 1], j = d[g / 2]; void 0 !== b.getMultiValue(j.value) ? (f ? e.move(h, i, !1, j) : e.line(h, i, !1, j), f = !1) : a.fillHoles || (f = !0) } return e } }, b.Interpolation.simple = function (a) { var c = { divisor: 2, fillHoles: !1 }; a = b.extend({}, c, a); var d = 1 / Math.max(1, a.divisor); return function (c, e) { for (var f, g, h, i = new b.Svg.Path, j = 0; j < c.length; j += 2) { var k = c[j], l = c[j + 1], m = (k - f) * d, n = e[j / 2]; void 0 !== n.value ? (void 0 === h ? i.move(k, l, !1, n) : i.curve(f + m, g, k - m, l, k, l, !1, n), f = k, g = l, h = n) : a.fillHoles || (f = k = h = void 0) } return i } }, b.Interpolation.cardinal = function (a) { var c = { tension: 1, fillHoles: !1 }; a = b.extend({}, c, a); var d = Math.min(1, Math.max(0, a.tension)), e = 1 - d; return function f(c, g) { var h = b.splitIntoSegments(c, g, { fillHoles: a.fillHoles }); if (h.length) { if (h.length > 1) { var i = []; return h.forEach(function (a) { i.push(f(a.pathCoordinates, a.valueData)) }), b.Svg.Path.join(i) } if (c = h[0].pathCoordinates, g = h[0].valueData, c.length <= 4) return b.Interpolation.none()(c, g); for (var j, k = (new b.Svg.Path).move(c[0], c[1], !1, g[0]), l = 0, m = c.length; m - 2 * !j > l; l += 2) { var n = [{ x: +c[l - 2], y: +c[l - 1] }, { x: +c[l], y: +c[l + 1] }, { x: +c[l + 2], y: +c[l + 3] }, { x: +c[l + 4], y: +c[l + 5] }]; j ? l ? m - 4 === l ? n[3] = { x: +c[0], y: +c[1] } : m - 2 === l && (n[2] = { x: +c[0], y: +c[1] }, n[3] = { x: +c[2], y: +c[3] }) : n[0] = { x: +c[m - 2], y: +c[m - 1] } : m - 4 === l ? n[3] = n[2] : l || (n[0] = { x: +c[l], y: +c[l + 1] }), k.curve(d * (-n[0].x + 6 * n[1].x + n[2].x) / 6 + e * n[2].x, d * (-n[0].y + 6 * n[1].y + n[2].y) / 6 + e * n[2].y, d * (n[1].x + 6 * n[2].x - n[3].x) / 6 + e * n[2].x, d * (n[1].y + 6 * n[2].y - n[3].y) / 6 + e * n[2].y, n[2].x, n[2].y, !1, g[(l + 2) / 2]) } return k } return b.Interpolation.none()([]) } }, b.Interpolation.monotoneCubic = function (a) { var c = { fillHoles: !1 }; return a = b.extend({}, c, a), function d(c, e) { var f = b.splitIntoSegments(c, e, { fillHoles: a.fillHoles, increasingX: !0 }); if (f.length) { if (f.length > 1) { var g = []; return f.forEach(function (a) { g.push(d(a.pathCoordinates, a.valueData)) }), b.Svg.Path.join(g) } if (c = f[0].pathCoordinates, e = f[0].valueData, c.length <= 4) return b.Interpolation.none()(c, e); var h, i, j = [], k = [], l = c.length / 2, m = [], n = [], o = [], p = []; for (h = 0; h < l; h++)j[h] = c[2 * h], k[h] = c[2 * h + 1]; for (h = 0; h < l - 1; h++)o[h] = k[h + 1] - k[h], p[h] = j[h + 1] - j[h], n[h] = o[h] / p[h]; for (m[0] = n[0], m[l - 1] = n[l - 2], h = 1; h < l - 1; h++)0 === n[h] || 0 === n[h - 1] || n[h - 1] > 0 != n[h] > 0 ? m[h] = 0 : (m[h] = 3 * (p[h - 1] + p[h]) / ((2 * p[h] + p[h - 1]) / n[h - 1] + (p[h] + 2 * p[h - 1]) / n[h]), isFinite(m[h]) || (m[h] = 0)); for (i = (new b.Svg.Path).move(j[0], k[0], !1, e[0]), h = 0; h < l - 1; h++)i.curve(j[h] + p[h] / 3, k[h] + m[h] * p[h] / 3, j[h + 1] - p[h] / 3, k[h + 1] - m[h + 1] * p[h] / 3, j[h + 1], k[h + 1], !1, e[h + 1]); return i } return b.Interpolation.none()([]) } }, b.Interpolation.step = function (a) { var c = { postpone: !0, fillHoles: !1 }; return a = b.extend({}, c, a), function (c, d) { for (var e, f, g, h = new b.Svg.Path, i = 0; i < c.length; i += 2) { var j = c[i], k = c[i + 1], l = d[i / 2]; void 0 !== l.value ? (void 0 === g ? h.move(j, k, !1, l) : (a.postpone ? h.line(j, f, !1, g) : h.line(e, k, !1, l), h.line(j, k, !1, l)), e = j, f = k, g = l) : a.fillHoles || (e = f = g = void 0) } return h } } }(this || global, a), function (a, b) { "use strict"; b.EventEmitter = function () { function a(a, b) { d[a] = d[a] || [], d[a].push(b) } function b(a, b) { d[a] && (b ? (d[a].splice(d[a].indexOf(b), 1), 0 === d[a].length && delete d[a]) : delete d[a]) } function c(a, b) { d[a] && d[a].forEach(function (a) { a(b) }), d["*"] && d["*"].forEach(function (c) { c(a, b) }) } var d = []; return { addEventHandler: a, removeEventHandler: b, emit: c } } }(this || global, a), function (a, b) { "use strict"; function c(a) { var b = []; if (a.length) for (var c = 0; c < a.length; c++)b.push(a[c]); return b } function d(a, c) { var d = c || this.prototype || b.Class, e = Object.create(d); b.Class.cloneDefinitions(e, a); var f = function () { var a, c = e.constructor || function () { }; return a = this === b ? Object.create(e) : this, c.apply(a, Array.prototype.slice.call(arguments, 0)), a }; return f.prototype = e, f["super"] = d, f.extend = this.extend, f } function e() { var a = c(arguments), b = a[0]; return a.splice(1, a.length - 1).forEach(function (a) { Object.getOwnPropertyNames(a).forEach(function (c) { delete b[c], Object.defineProperty(b, c, Object.getOwnPropertyDescriptor(a, c)) }) }), b } b.Class = { extend: d, cloneDefinitions: e } }(this || global, a), function (a, b) { "use strict"; function c(a, c, d) { return a && (this.data = a || {}, this.data.labels = this.data.labels || [], this.data.series = this.data.series || [], this.eventEmitter.emit("data", { type: "update", data: this.data })), c && (this.options = b.extend({}, d ? this.options : this.defaultOptions, c), this.initializeTimeoutId || (this.optionsProvider.removeMediaQueryListeners(), this.optionsProvider = b.optionsProvider(this.options, this.responsiveOptions, this.eventEmitter))), this.initializeTimeoutId || this.createChart(this.optionsProvider.getCurrentOptions()), this } function d() { return this.initializeTimeoutId ? i.clearTimeout(this.initializeTimeoutId) : (i.removeEventListener("resize", this.resizeListener), this.optionsProvider.removeMediaQueryListeners()), this } function e(a, b) { return this.eventEmitter.addEventHandler(a, b), this } function f(a, b) { return this.eventEmitter.removeEventHandler(a, b), this } function g() { i.addEventListener("resize", this.resizeListener), this.optionsProvider = b.optionsProvider(this.options, this.responsiveOptions, this.eventEmitter), this.eventEmitter.addEventHandler("optionsChanged", function () { this.update() }.bind(this)), this.options.plugins && this.options.plugins.forEach(function (a) { a instanceof Array ? a[0](this, a[1]) : a(this) }.bind(this)), this.eventEmitter.emit("data", { type: "initial", data: this.data }), this.createChart(this.optionsProvider.getCurrentOptions()), this.initializeTimeoutId = void 0 } function h(a, c, d, e, f) { this.container = b.querySelector(a), this.data = c || {}, this.data.labels = this.data.labels || [], this.data.series = this.data.series || [], this.defaultOptions = d, this.options = e, this.responsiveOptions = f, this.eventEmitter = b.EventEmitter(), this.supportsForeignObject = b.Svg.isSupported("Extensibility"), this.supportsAnimations = b.Svg.isSupported("AnimationEventsAttribute"), this.resizeListener = function () { this.update() }.bind(this), this.container && (this.container.__chartist__ && this.container.__chartist__.detach(), this.container.__chartist__ = this), this.initializeTimeoutId = setTimeout(g.bind(this), 0) } var i = a.window; b.Base = b.Class.extend({ constructor: h, optionsProvider: void 0, container: void 0, svg: void 0, eventEmitter: void 0, createChart: function () { throw new Error("Base chart type can't be instantiated!") }, update: c, detach: d, on: e, off: f, version: b.version, supportsForeignObject: !1 }) }(this || global, a), function (a, b) { "use strict"; function c(a, c, d, e, f) { a instanceof Element ? this._node = a : (this._node = y.createElementNS(b.namespaces.svg, a), "svg" === a && this.attr({ "xmlns:ct": b.namespaces.ct })), c && this.attr(c), d && this.addClass(d), e && (f && e._node.firstChild ? e._node.insertBefore(this._node, e._node.firstChild) : e._node.appendChild(this._node)) } function d(a, c) { return "string" == typeof a ? c ? this._node.getAttributeNS(c, a) : this._node.getAttribute(a) : (Object.keys(a).forEach(function (c) { if (void 0 !== a[c]) if (c.indexOf(":") !== -1) { var d = c.split(":"); this._node.setAttributeNS(b.namespaces[d[0]], c, a[c]) } else this._node.setAttribute(c, a[c]) }.bind(this)), this) } function e(a, c, d, e) { return new b.Svg(a, c, d, this, e) } function f() { return this._node.parentNode instanceof SVGElement ? new b.Svg(this._node.parentNode) : null } function g() { for (var a = this._node; "svg" !== a.nodeName;)a = a.parentNode; return new b.Svg(a) } function h(a) { var c = this._node.querySelector(a); return c ? new b.Svg(c) : null } function i(a) { var c = this._node.querySelectorAll(a); return c.length ? new b.Svg.List(c) : null } function j() { return this._node } function k(a, c, d, e) { if ("string" == typeof a) { var f = y.createElement("div"); f.innerHTML = a, a = f.firstChild } a.setAttribute("xmlns", b.namespaces.xmlns); var g = this.elem("foreignObject", c, d, e); return g._node.appendChild(a), g } function l(a) { return this._node.appendChild(y.createTextNode(a)), this } function m() { for (; this._node.firstChild;)this._node.removeChild(this._node.firstChild); return this } function n() { return this._node.parentNode.removeChild(this._node), this.parent() } function o(a) { return this._node.parentNode.replaceChild(a._node, this._node), a } function p(a, b) { return b && this._node.firstChild ? this._node.insertBefore(a._node, this._node.firstChild) : this._node.appendChild(a._node), this } function q() { return this._node.getAttribute("class") ? this._node.getAttribute("class").trim().split(/\s+/) : [] } function r(a) { return this._node.setAttribute("class", this.classes(this._node).concat(a.trim().split(/\s+/)).filter(function (a, b, c) { return c.indexOf(a) === b }).join(" ")), this } function s(a) { var b = a.trim().split(/\s+/); return this._node.setAttribute("class", this.classes(this._node).filter(function (a) { return b.indexOf(a) === -1 }).join(" ")), this } function t() { return this._node.setAttribute("class", ""), this } function u() { return this._node.getBoundingClientRect().height } function v() { return this._node.getBoundingClientRect().width } function w(a, c, d) { return void 0 === c && (c = !0), Object.keys(a).forEach(function (e) { function f(a, c) { var f, g, h, i = {}; a.easing && (h = a.easing instanceof Array ? a.easing : b.Svg.Easing[a.easing], delete a.easing), a.begin = b.ensureUnit(a.begin, "ms"), a.dur = b.ensureUnit(a.dur, "ms"), h && (a.calcMode = "spline", a.keySplines = h.join(" "), a.keyTimes = "0;1"), c && (a.fill = "freeze", i[e] = a.from, this.attr(i), g = b.quantity(a.begin || 0).value, a.begin = "indefinite"), f = this.elem("animate", b.extend({ attributeName: e }, a)), c && setTimeout(function () { try { f._node.beginElement() } catch (b) { i[e] = a.to, this.attr(i), f.remove() } }.bind(this), g), d && f._node.addEventListener("beginEvent", function () { d.emit("animationBegin", { element: this, animate: f._node, params: a }) }.bind(this)), f._node.addEventListener("endEvent", function () { d && d.emit("animationEnd", { element: this, animate: f._node, params: a }), c && (i[e] = a.to, this.attr(i), f.remove()) }.bind(this)) } a[e] instanceof Array ? a[e].forEach(function (a) { f.bind(this)(a, !1) }.bind(this)) : f.bind(this)(a[e], c) }.bind(this)), this } function x(a) { var c = this; this.svgElements = []; for (var d = 0; d < a.length; d++)this.svgElements.push(new b.Svg(a[d])); Object.keys(b.Svg.prototype).filter(function (a) { return ["constructor", "parent", "querySelector", "querySelectorAll", "replace", "append", "classes", "height", "width"].indexOf(a) === -1 }).forEach(function (a) { c[a] = function () { var d = Array.prototype.slice.call(arguments, 0); return c.svgElements.forEach(function (c) { b.Svg.prototype[a].apply(c, d) }), c } }) } var y = a.document; b.Svg = b.Class.extend({ constructor: c, attr: d, elem: e, parent: f, root: g, querySelector: h, querySelectorAll: i, getNode: j, foreignObject: k, text: l, empty: m, remove: n, replace: o, append: p, classes: q, addClass: r, removeClass: s, removeAllClasses: t, height: u, width: v, animate: w }), b.Svg.isSupported = function (a) { return y.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#" + a, "1.1") }; var z = { easeInSine: [.47, 0, .745, .715], easeOutSine: [.39, .575, .565, 1], easeInOutSine: [.445, .05, .55, .95], easeInQuad: [.55, .085, .68, .53], easeOutQuad: [.25, .46, .45, .94], easeInOutQuad: [.455, .03, .515, .955], easeInCubic: [.55, .055, .675, .19], easeOutCubic: [.215, .61, .355, 1], easeInOutCubic: [.645, .045, .355, 1], easeInQuart: [.895, .03, .685, .22], easeOutQuart: [.165, .84, .44, 1], easeInOutQuart: [.77, 0, .175, 1], easeInQuint: [.755, .05, .855, .06], easeOutQuint: [.23, 1, .32, 1], easeInOutQuint: [.86, 0, .07, 1], easeInExpo: [.95, .05, .795, .035], easeOutExpo: [.19, 1, .22, 1], easeInOutExpo: [1, 0, 0, 1], easeInCirc: [.6, .04, .98, .335], easeOutCirc: [.075, .82, .165, 1], easeInOutCirc: [.785, .135, .15, .86], easeInBack: [.6, -.28, .735, .045], easeOutBack: [.175, .885, .32, 1.275], easeInOutBack: [.68, -.55, .265, 1.55] }; b.Svg.Easing = z, b.Svg.List = b.Class.extend({ constructor: x }) }(this || global, a), function (a, b) { "use strict"; function c(a, c, d, e, f, g) { var h = b.extend({ command: f ? a.toLowerCase() : a.toUpperCase() }, c, g ? { data: g } : {}); d.splice(e, 0, h) } function d(a, b) { a.forEach(function (c, d) { t[c.command.toLowerCase()].forEach(function (e, f) { b(c, e, d, f, a) }) }) } function e(a, c) { this.pathElements = [], this.pos = 0, this.close = a, this.options = b.extend({}, u, c) } function f(a) { return void 0 !== a ? (this.pos = Math.max(0, Math.min(this.pathElements.length, a)), this) : this.pos } function g(a) { return this.pathElements.splice(this.pos, a), this } function h(a, b, d, e) { return c("M", { x: +a, y: +b }, this.pathElements, this.pos++, d, e), this } function i(a, b, d, e) { return c("L", { x: +a, y: +b }, this.pathElements, this.pos++, d, e), this } function j(a, b, d, e, f, g, h, i) { return c("C", { x1: +a, y1: +b, x2: +d, y2: +e, x: +f, y: +g }, this.pathElements, this.pos++, h, i), this } function k(a, b, d, e, f, g, h, i, j) { return c("A", { rx: +a, ry: +b, xAr: +d, lAf: +e, sf: +f, x: +g, y: +h }, this.pathElements, this.pos++, i, j), this } function l(a) { var c = a.replace(/([A-Za-z])([0-9])/g, "$1 $2").replace(/([0-9])([A-Za-z])/g, "$1 $2").split(/[\s,]+/).reduce(function (a, b) { return b.match(/[A-Za-z]/) && a.push([]), a[a.length - 1].push(b), a }, []); "Z" === c[c.length - 1][0].toUpperCase() && c.pop(); var d = c.map(function (a) { var c = a.shift(), d = t[c.toLowerCase()]; return b.extend({ command: c }, d.reduce(function (b, c, d) { return b[c] = +a[d], b }, {})) }), e = [this.pos, 0]; return Array.prototype.push.apply(e, d), Array.prototype.splice.apply(this.pathElements, e), this.pos += d.length, this } function m() { var a = Math.pow(10, this.options.accuracy); return this.pathElements.reduce(function (b, c) { var d = t[c.command.toLowerCase()].map(function (b) { return this.options.accuracy ? Math.round(c[b] * a) / a : c[b] }.bind(this)); return b + c.command + d.join(",") }.bind(this), "") + (this.close ? "Z" : "") } function n(a, b) { return d(this.pathElements, function (c, d) { c[d] *= "x" === d[0] ? a : b }), this } function o(a, b) { return d(this.pathElements, function (c, d) { c[d] += "x" === d[0] ? a : b }), this } function p(a) { return d(this.pathElements, function (b, c, d, e, f) { var g = a(b, c, d, e, f); (g || 0 === g) && (b[c] = g) }), this } function q(a) { var c = new b.Svg.Path(a || this.close); return c.pos = this.pos, c.pathElements = this.pathElements.slice().map(function (a) { return b.extend({}, a) }), c.options = b.extend({}, this.options), c } function r(a) { var c = [new b.Svg.Path]; return this.pathElements.forEach(function (d) { d.command === a.toUpperCase() && 0 !== c[c.length - 1].pathElements.length && c.push(new b.Svg.Path), c[c.length - 1].pathElements.push(d) }), c } function s(a, c, d) { for (var e = new b.Svg.Path(c, d), f = 0; f < a.length; f++)for (var g = a[f], h = 0; h < g.pathElements.length; h++)e.pathElements.push(g.pathElements[h]); return e } var t = { m: ["x", "y"], l: ["x", "y"], c: ["x1", "y1", "x2", "y2", "x", "y"], a: ["rx", "ry", "xAr", "lAf", "sf", "x", "y"] }, u = { accuracy: 3 }; b.Svg.Path = b.Class.extend({ constructor: e, position: f, remove: g, move: h, line: i, curve: j, arc: k, scale: n, translate: o, transform: p, parse: l, stringify: m, clone: q, splitByCommand: r }), b.Svg.Path.elementDescriptions = t, b.Svg.Path.join = s }(this || global, a), function (a, b) { "use strict"; function c(a, b, c, d) { this.units = a, this.counterUnits = a === e.x ? e.y : e.x, this.chartRect = b, this.axisLength = b[a.rectEnd] - b[a.rectStart], this.gridOffset = b[a.rectOffset], this.ticks = c, this.options = d } function d(a, c, d, e, f) { var g = e["axis" + this.units.pos.toUpperCase()], h = this.ticks.map(this.projectValue.bind(this)), i = this.ticks.map(g.labelInterpolationFnc); h.forEach(function (j, k) { var l, m = { x: 0, y: 0 }; l = h[k + 1] ? h[k + 1] - j : Math.max(this.axisLength - j, 30), b.isFalseyButZero(i[k]) && "" !== i[k] || ("x" === this.units.pos ? (j = this.chartRect.x1 + j, m.x = e.axisX.labelOffset.x, "start" === e.axisX.position ? m.y = this.chartRect.padding.top + e.axisX.labelOffset.y + (d ? 5 : 20) : m.y = this.chartRect.y1 + e.axisX.labelOffset.y + (d ? 5 : 20)) : (j = this.chartRect.y1 - j, m.y = e.axisY.labelOffset.y - (d ? l : 0), "start" === e.axisY.position ? m.x = d ? this.chartRect.padding.left + e.axisY.labelOffset.x : this.chartRect.x1 - 10 : m.x = this.chartRect.x2 + e.axisY.labelOffset.x + 10), g.showGrid && b.createGrid(j, k, this, this.gridOffset, this.chartRect[this.counterUnits.len](), a, [e.classNames.grid, e.classNames[this.units.dir]], f), g.showLabel && b.createLabel(j, l, k, i, this, g.offset, m, c, [e.classNames.label, e.classNames[this.units.dir], "start" === g.position ? e.classNames[g.position] : e.classNames.end], d, f)) }.bind(this)) } var e = (a.window, a.document, { x: { pos: "x", len: "width", dir: "horizontal", rectStart: "x1", rectEnd: "x2", rectOffset: "y2" }, y: { pos: "y", len: "height", dir: "vertical", rectStart: "y2", rectEnd: "y1", rectOffset: "x1" } }); b.Axis = b.Class.extend({ constructor: c, createGridAndLabels: d, projectValue: function (a, b, c) { throw new Error("Base axis can't be instantiated!") } }), b.Axis.units = e }(this || global, a), function (a, b) { "use strict"; function c(a, c, d, e) { var f = e.highLow || b.getHighLow(c, e, a.pos); this.bounds = b.getBounds(d[a.rectEnd] - d[a.rectStart], f, e.scaleMinSpace || 20, e.onlyInteger), this.range = { min: this.bounds.min, max: this.bounds.max }, b.AutoScaleAxis["super"].constructor.call(this, a, d, this.bounds.values, e) } function d(a) { return this.axisLength * (+b.getMultiValue(a, this.units.pos) - this.bounds.min) / this.bounds.range } a.window, a.document; b.AutoScaleAxis = b.Axis.extend({ constructor: c, projectValue: d }) }(this || global, a), function (a, b) { "use strict"; function c(a, c, d, e) { var f = e.highLow || b.getHighLow(c, e, a.pos); this.divisor = e.divisor || 1, this.ticks = e.ticks || b.times(this.divisor).map(function (a, b) { return f.low + (f.high - f.low) / this.divisor * b }.bind(this)), this.ticks.sort(function (a, b) { return a - b }), this.range = { min: f.low, max: f.high }, b.FixedScaleAxis["super"].constructor.call(this, a, d, this.ticks, e), this.stepLength = this.axisLength / this.divisor } function d(a) { return this.axisLength * (+b.getMultiValue(a, this.units.pos) - this.range.min) / (this.range.max - this.range.min) } a.window, a.document; b.FixedScaleAxis = b.Axis.extend({ constructor: c, projectValue: d }) }(this || global, a), function (a, b) { "use strict"; function c(a, c, d, e) { b.StepAxis["super"].constructor.call(this, a, d, e.ticks, e); var f = Math.max(1, e.ticks.length - (e.stretch ? 1 : 0)); this.stepLength = this.axisLength / f } function d(a, b) { return this.stepLength * b } a.window, a.document; b.StepAxis = b.Axis.extend({ constructor: c, projectValue: d }) }(this || global, a), function (a, b) { "use strict"; function c(a) { var c = b.normalizeData(this.data, a.reverseData, !0); this.svg = b.createSvg(this.container, a.width, a.height, a.classNames.chart); var d, f, g = this.svg.elem("g").addClass(a.classNames.gridGroup), h = this.svg.elem("g"), i = this.svg.elem("g").addClass(a.classNames.labelGroup), j = b.createChartRect(this.svg, a, e.padding); d = void 0 === a.axisX.type ? new b.StepAxis(b.Axis.units.x, c.normalized.series, j, b.extend({}, a.axisX, { ticks: c.normalized.labels, stretch: a.fullWidth })) : a.axisX.type.call(b, b.Axis.units.x, c.normalized.series, j, a.axisX), f = void 0 === a.axisY.type ? new b.AutoScaleAxis(b.Axis.units.y, c.normalized.series, j, b.extend({}, a.axisY, { high: b.isNumeric(a.high) ? a.high : a.axisY.high, low: b.isNumeric(a.low) ? a.low : a.axisY.low })) : a.axisY.type.call(b, b.Axis.units.y, c.normalized.series, j, a.axisY), d.createGridAndLabels(g, i, this.supportsForeignObject, a, this.eventEmitter), f.createGridAndLabels(g, i, this.supportsForeignObject, a, this.eventEmitter), a.showGridBackground && b.createGridBackground(g, j, a.classNames.gridBackground, this.eventEmitter), c.raw.series.forEach(function (e, g) { var i = h.elem("g"); i.attr({ "ct:series-name": e.name, "ct:meta": b.serialize(e.meta) }), i.addClass([a.classNames.series, e.className || a.classNames.series + "-" + b.alphaNumerate(g)].join(" ")); var k = [], l = []; c.normalized.series[g].forEach(function (a, h) { var i = { x: j.x1 + d.projectValue(a, h, c.normalized.series[g]), y: j.y1 - f.projectValue(a, h, c.normalized.series[g]) }; k.push(i.x, i.y), l.push({ value: a, valueIndex: h, meta: b.getMetaData(e, h) }) }.bind(this)); var m = { lineSmooth: b.getSeriesOption(e, a, "lineSmooth"), showPoint: b.getSeriesOption(e, a, "showPoint"), showLine: b.getSeriesOption(e, a, "showLine"), showArea: b.getSeriesOption(e, a, "showArea"), areaBase: b.getSeriesOption(e, a, "areaBase") }, n = "function" == typeof m.lineSmooth ? m.lineSmooth : m.lineSmooth ? b.Interpolation.monotoneCubic() : b.Interpolation.none(), o = n(k, l); if (m.showPoint && o.pathElements.forEach(function (c) { var h = i.elem("line", { x1: c.x, y1: c.y, x2: c.x + .01, y2: c.y }, a.classNames.point).attr({ "ct:value": [c.data.value.x, c.data.value.y].filter(b.isNumeric).join(","), "ct:meta": b.serialize(c.data.meta) }); this.eventEmitter.emit("draw", { type: "point", value: c.data.value, index: c.data.valueIndex, meta: c.data.meta, series: e, seriesIndex: g, axisX: d, axisY: f, group: i, element: h, x: c.x, y: c.y }) }.bind(this)), m.showLine) { var p = i.elem("path", { d: o.stringify() }, a.classNames.line, !0); this.eventEmitter.emit("draw", { type: "line", values: c.normalized.series[g], path: o.clone(), chartRect: j, index: g, series: e, seriesIndex: g, seriesMeta: e.meta, axisX: d, axisY: f, group: i, element: p }) } if (m.showArea && f.range) { var q = Math.max(Math.min(m.areaBase, f.range.max), f.range.min), r = j.y1 - f.projectValue(q); o.splitByCommand("M").filter(function (a) { return a.pathElements.length > 1 }).map(function (a) { var b = a.pathElements[0], c = a.pathElements[a.pathElements.length - 1]; return a.clone(!0).position(0).remove(1).move(b.x, r).line(b.x, b.y).position(a.pathElements.length + 1).line(c.x, r) }).forEach(function (b) { var h = i.elem("path", { d: b.stringify() }, a.classNames.area, !0); this.eventEmitter.emit("draw", { type: "area", values: c.normalized.series[g], path: b.clone(), series: e, seriesIndex: g, axisX: d, axisY: f, chartRect: j, index: g, group: i, element: h }) }.bind(this)) } }.bind(this)), this.eventEmitter.emit("created", { bounds: f.bounds, chartRect: j, axisX: d, axisY: f, svg: this.svg, options: a }) } function d(a, c, d, f) { b.Line["super"].constructor.call(this, a, c, e, b.extend({}, e, d), f) } var e = (a.window, a.document, { axisX: { offset: 30, position: "end", labelOffset: { x: 0, y: 0 }, showLabel: !0, showGrid: !0, labelInterpolationFnc: b.noop, type: void 0 }, axisY: { offset: 40, position: "start", labelOffset: { x: 0, y: 0 }, showLabel: !0, showGrid: !0, labelInterpolationFnc: b.noop, type: void 0, scaleMinSpace: 20, onlyInteger: !1 }, width: void 0, height: void 0, showLine: !0, showPoint: !0, showArea: !1, areaBase: 0, lineSmooth: !0, showGridBackground: !1, low: void 0, high: void 0, chartPadding: { top: 15, right: 15, bottom: 5, left: 10 }, fullWidth: !1, reverseData: !1, classNames: { chart: "ct-chart-line", label: "ct-label", labelGroup: "ct-labels", series: "ct-series", line: "ct-line", point: "ct-point", area: "ct-area", grid: "ct-grid", gridGroup: "ct-grids", gridBackground: "ct-grid-background", vertical: "ct-vertical", horizontal: "ct-horizontal", start: "ct-start", end: "ct-end" } }); b.Line = b.Base.extend({ constructor: d, createChart: c }) }(this || global, a), function (a, b) { - "use strict"; function c(a) { - var c, d; a.distributeSeries ? (c = b.normalizeData(this.data, a.reverseData, a.horizontalBars ? "x" : "y"), c.normalized.series = c.normalized.series.map(function (a) { return [a] })) : c = b.normalizeData(this.data, a.reverseData, a.horizontalBars ? "x" : "y"), this.svg = b.createSvg(this.container, a.width, a.height, a.classNames.chart + (a.horizontalBars ? " " + a.classNames.horizontalBars : "")); var f = this.svg.elem("g").addClass(a.classNames.gridGroup), g = this.svg.elem("g"), h = this.svg.elem("g").addClass(a.classNames.labelGroup); - if (a.stackBars && 0 !== c.normalized.series.length) { var i = b.serialMap(c.normalized.series, function () { return Array.prototype.slice.call(arguments).map(function (a) { return a }).reduce(function (a, b) { return { x: a.x + (b && b.x) || 0, y: a.y + (b && b.y) || 0 } }, { x: 0, y: 0 }) }); d = b.getHighLow([i], a, a.horizontalBars ? "x" : "y") } else d = b.getHighLow(c.normalized.series, a, a.horizontalBars ? "x" : "y"); d.high = +a.high || (0 === a.high ? 0 : d.high), d.low = +a.low || (0 === a.low ? 0 : d.low); var j, k, l, m, n, o = b.createChartRect(this.svg, a, e.padding); k = a.distributeSeries && a.stackBars ? c.normalized.labels.slice(0, 1) : c.normalized.labels, a.horizontalBars ? (j = m = void 0 === a.axisX.type ? new b.AutoScaleAxis(b.Axis.units.x, c.normalized.series, o, b.extend({}, a.axisX, { highLow: d, referenceValue: 0 })) : a.axisX.type.call(b, b.Axis.units.x, c.normalized.series, o, b.extend({}, a.axisX, { highLow: d, referenceValue: 0 })), l = n = void 0 === a.axisY.type ? new b.StepAxis(b.Axis.units.y, c.normalized.series, o, { ticks: k }) : a.axisY.type.call(b, b.Axis.units.y, c.normalized.series, o, a.axisY)) : (l = m = void 0 === a.axisX.type ? new b.StepAxis(b.Axis.units.x, c.normalized.series, o, { ticks: k }) : a.axisX.type.call(b, b.Axis.units.x, c.normalized.series, o, a.axisX), j = n = void 0 === a.axisY.type ? new b.AutoScaleAxis(b.Axis.units.y, c.normalized.series, o, b.extend({}, a.axisY, { highLow: d, referenceValue: 0 })) : a.axisY.type.call(b, b.Axis.units.y, c.normalized.series, o, b.extend({}, a.axisY, { highLow: d, referenceValue: 0 }))); var p = a.horizontalBars ? o.x1 + j.projectValue(0) : o.y1 - j.projectValue(0), q = []; l.createGridAndLabels(f, h, this.supportsForeignObject, a, this.eventEmitter), j.createGridAndLabels(f, h, this.supportsForeignObject, a, this.eventEmitter), a.showGridBackground && b.createGridBackground(f, o, a.classNames.gridBackground, this.eventEmitter), c.raw.series.forEach(function (d, e) { var f, h, i = e - (c.raw.series.length - 1) / 2; f = a.distributeSeries && !a.stackBars ? l.axisLength / c.normalized.series.length / 2 : a.distributeSeries && a.stackBars ? l.axisLength / 2 : l.axisLength / c.normalized.series[e].length / 2, h = g.elem("g"), h.attr({ "ct:series-name": d.name, "ct:meta": b.serialize(d.meta) }), h.addClass([a.classNames.series, d.className || a.classNames.series + "-" + b.alphaNumerate(e)].join(" ")), c.normalized.series[e].forEach(function (g, k) { var r, s, t, u; if (u = a.distributeSeries && !a.stackBars ? e : a.distributeSeries && a.stackBars ? 0 : k, r = a.horizontalBars ? { x: o.x1 + j.projectValue(g && g.x ? g.x : 0, k, c.normalized.series[e]), y: o.y1 - l.projectValue(g && g.y ? g.y : 0, u, c.normalized.series[e]) } : { x: o.x1 + l.projectValue(g && g.x ? g.x : 0, u, c.normalized.series[e]), y: o.y1 - j.projectValue(g && g.y ? g.y : 0, k, c.normalized.series[e]) }, l instanceof b.StepAxis && (l.options.stretch || (r[l.units.pos] += f * (a.horizontalBars ? -1 : 1)), r[l.units.pos] += a.stackBars || a.distributeSeries ? 0 : i * a.seriesBarDistance * (a.horizontalBars ? -1 : 1)), t = q[k] || p, q[k] = t - (p - r[l.counterUnits.pos]), void 0 !== g) { var v = {}; v[l.units.pos + "1"] = r[l.units.pos], v[l.units.pos + "2"] = r[l.units.pos], !a.stackBars || "accumulate" !== a.stackMode && a.stackMode ? (v[l.counterUnits.pos + "1"] = p, v[l.counterUnits.pos + "2"] = r[l.counterUnits.pos]) : (v[l.counterUnits.pos + "1"] = t, v[l.counterUnits.pos + "2"] = q[k]), v.x1 = Math.min(Math.max(v.x1, o.x1), o.x2), v.x2 = Math.min(Math.max(v.x2, o.x1), o.x2), v.y1 = Math.min(Math.max(v.y1, o.y2), o.y1), v.y2 = Math.min(Math.max(v.y2, o.y2), o.y1); var w = b.getMetaData(d, k); s = h.elem("line", v, a.classNames.bar).attr({ "ct:value": [g.x, g.y].filter(b.isNumeric).join(","), "ct:meta": b.serialize(w) }), this.eventEmitter.emit("draw", b.extend({ type: "bar", value: g, index: k, meta: w, series: d, seriesIndex: e, axisX: m, axisY: n, chartRect: o, group: h, element: s }, v)) } }.bind(this)) }.bind(this)), this.eventEmitter.emit("created", { bounds: j.bounds, chartRect: o, axisX: m, axisY: n, svg: this.svg, options: a }) - } function d(a, c, d, f) { b.Bar["super"].constructor.call(this, a, c, e, b.extend({}, e, d), f) } var e = (a.window, a.document, { axisX: { offset: 30, position: "end", labelOffset: { x: 0, y: 0 }, showLabel: !0, showGrid: !0, labelInterpolationFnc: b.noop, scaleMinSpace: 30, onlyInteger: !1 }, axisY: { offset: 40, position: "start", labelOffset: { x: 0, y: 0 }, showLabel: !0, showGrid: !0, labelInterpolationFnc: b.noop, scaleMinSpace: 20, onlyInteger: !1 }, width: void 0, height: void 0, high: void 0, low: void 0, referenceValue: 0, chartPadding: { top: 15, right: 15, bottom: 5, left: 10 }, seriesBarDistance: 15, stackBars: !1, stackMode: "accumulate", horizontalBars: !1, distributeSeries: !1, reverseData: !1, showGridBackground: !1, classNames: { chart: "ct-chart-bar", horizontalBars: "ct-horizontal-bars", label: "ct-label", labelGroup: "ct-labels", series: "ct-series", bar: "ct-bar", grid: "ct-grid", gridGroup: "ct-grids", gridBackground: "ct-grid-background", vertical: "ct-vertical", horizontal: "ct-horizontal", start: "ct-start", end: "ct-end" } }); b.Bar = b.Base.extend({ constructor: d, createChart: c }) - }(this || global, a), function (a, b) { "use strict"; function c(a, b, c) { var d = b.x > a.x; return d && "explode" === c || !d && "implode" === c ? "start" : d && "implode" === c || !d && "explode" === c ? "end" : "middle" } function d(a) { var d, e, g, h, i, j = b.normalizeData(this.data), k = [], l = a.startAngle; this.svg = b.createSvg(this.container, a.width, a.height, a.donut ? a.classNames.chartDonut : a.classNames.chartPie), e = b.createChartRect(this.svg, a, f.padding), g = Math.min(e.width() / 2, e.height() / 2), i = a.total || j.normalized.series.reduce(function (a, b) { return a + b }, 0); var m = b.quantity(a.donutWidth); "%" === m.unit && (m.value *= g / 100), g -= a.donut && !a.donutSolid ? m.value / 2 : 0, h = "outside" === a.labelPosition || a.donut && !a.donutSolid ? g : "center" === a.labelPosition ? 0 : a.donutSolid ? g - m.value / 2 : g / 2, h += a.labelOffset; var n = { x: e.x1 + e.width() / 2, y: e.y2 + e.height() / 2 }, o = 1 === j.raw.series.filter(function (a) { return a.hasOwnProperty("value") ? 0 !== a.value : 0 !== a }).length; j.raw.series.forEach(function (a, b) { k[b] = this.svg.elem("g", null, null) }.bind(this)), a.showLabel && (d = this.svg.elem("g", null, null)), j.raw.series.forEach(function (e, f) { if (0 !== j.normalized.series[f] || !a.ignoreEmptyValues) { k[f].attr({ "ct:series-name": e.name }), k[f].addClass([a.classNames.series, e.className || a.classNames.series + "-" + b.alphaNumerate(f)].join(" ")); var p = i > 0 ? l + j.normalized.series[f] / i * 360 : 0, q = Math.max(0, l - (0 === f || o ? 0 : .2)); p - q >= 359.99 && (p = q + 359.99); var r, s, t, u = b.polarToCartesian(n.x, n.y, g, q), v = b.polarToCartesian(n.x, n.y, g, p), w = new b.Svg.Path(!a.donut || a.donutSolid).move(v.x, v.y).arc(g, g, 0, p - l > 180, 0, u.x, u.y); a.donut ? a.donutSolid && (t = g - m.value, r = b.polarToCartesian(n.x, n.y, t, l - (0 === f || o ? 0 : .2)), s = b.polarToCartesian(n.x, n.y, t, p), w.line(r.x, r.y), w.arc(t, t, 0, p - l > 180, 1, s.x, s.y)) : w.line(n.x, n.y); var x = a.classNames.slicePie; a.donut && (x = a.classNames.sliceDonut, a.donutSolid && (x = a.classNames.sliceDonutSolid)); var y = k[f].elem("path", { d: w.stringify() }, x); if (y.attr({ "ct:value": j.normalized.series[f], "ct:meta": b.serialize(e.meta) }), a.donut && !a.donutSolid && (y._node.style.strokeWidth = m.value + "px"), this.eventEmitter.emit("draw", { type: "slice", value: j.normalized.series[f], totalDataSum: i, index: f, meta: e.meta, series: e, group: k[f], element: y, path: w.clone(), center: n, radius: g, startAngle: l, endAngle: p }), a.showLabel) { var z; z = 1 === j.raw.series.length ? { x: n.x, y: n.y } : b.polarToCartesian(n.x, n.y, h, l + (p - l) / 2); var A; A = j.normalized.labels && !b.isFalseyButZero(j.normalized.labels[f]) ? j.normalized.labels[f] : j.normalized.series[f]; var B = a.labelInterpolationFnc(A, f); if (B || 0 === B) { var C = d.elem("text", { dx: z.x, dy: z.y, "text-anchor": c(n, z, a.labelDirection) }, a.classNames.label).text("" + B); this.eventEmitter.emit("draw", { type: "label", index: f, group: d, element: C, text: "" + B, x: z.x, y: z.y }) } } l = p } }.bind(this)), this.eventEmitter.emit("created", { chartRect: e, svg: this.svg, options: a }) } function e(a, c, d, e) { b.Pie["super"].constructor.call(this, a, c, f, b.extend({}, f, d), e) } var f = (a.window, a.document, { width: void 0, height: void 0, chartPadding: 5, classNames: { chartPie: "ct-chart-pie", chartDonut: "ct-chart-donut", series: "ct-series", slicePie: "ct-slice-pie", sliceDonut: "ct-slice-donut", sliceDonutSolid: "ct-slice-donut-solid", label: "ct-label" }, startAngle: 0, total: void 0, donut: !1, donutSolid: !1, donutWidth: 60, showLabel: !0, labelOffset: 0, labelPosition: "inside", labelInterpolationFnc: b.noop, labelDirection: "neutral", reverseData: !1, ignoreEmptyValues: !1 }); b.Pie = b.Base.extend({ constructor: e, createChart: d, determineAnchorPosition: c }) }(this || global, a), a -}); -//# sourceMappingURL=chartist.min.js.map - -var i, l, selectedLine = null; - -/* Navigate to hash without browser history entry */ -var navigateToHash = function () { - if (window.history !== undefined && window.history.replaceState !== undefined) { - window.history.replaceState(undefined, undefined, this.getAttribute("href")); - } -}; - -var hashLinks = document.getElementsByClassName('navigatetohash'); -for (i = 0, l = hashLinks.length; i < l; i++) { - hashLinks[i].addEventListener('click', navigateToHash); -} - -/* Switch test method */ -var switchTestMethod = function () { - var method = this.getAttribute("value"); - console.log("Selected test method: " + method); - - var lines, i, l, coverageData, lineAnalysis, cells; - - lines = document.querySelectorAll('.lineAnalysis tr'); - - for (i = 1, l = lines.length; i < l; i++) { - coverageData = JSON.parse(lines[i].getAttribute('data-coverage').replace(/'/g, '"')); - lineAnalysis = coverageData[method]; - cells = lines[i].querySelectorAll('td'); - if (lineAnalysis === undefined) { - lineAnalysis = coverageData.AllTestMethods; - if (lineAnalysis.LVS !== 'gray') { - cells[0].setAttribute('class', 'red'); - cells[1].innerText = cells[1].textContent = '0'; - cells[4].setAttribute('class', 'lightred'); - } - } else { - cells[0].setAttribute('class', lineAnalysis.LVS); - cells[1].innerText = cells[1].textContent = lineAnalysis.VC; - cells[4].setAttribute('class', 'light' + lineAnalysis.LVS); - } - } -}; - -var testMethods = document.getElementsByClassName('switchtestmethod'); -for (i = 0, l = testMethods.length; i < l; i++) { - testMethods[i].addEventListener('change', switchTestMethod); -} - -/* Highlight test method by line */ -var toggleLine = function () { - if (selectedLine === this) { - selectedLine = null; - } else { - selectedLine = null; - unhighlightTestMethods(); - highlightTestMethods.call(this); - selectedLine = this; - } - -}; -var highlightTestMethods = function () { - if (selectedLine !== null) { - return; - } - - var lineAnalysis; - var coverageData = JSON.parse(this.getAttribute('data-coverage').replace(/'/g, '"')); - var testMethods = document.getElementsByClassName('testmethod'); - - for (i = 0, l = testMethods.length; i < l; i++) { - lineAnalysis = coverageData[testMethods[i].id]; - if (lineAnalysis === undefined) { - testMethods[i].className = testMethods[i].className.replace(/\s*light.+/g, ""); - } else { - testMethods[i].className += ' light' + lineAnalysis.LVS; - } - } -}; -var unhighlightTestMethods = function () { - if (selectedLine !== null) { - return; - } - - var testMethods = document.getElementsByClassName('testmethod'); - for (i = 0, l = testMethods.length; i < l; i++) { - testMethods[i].className = testMethods[i].className.replace(/\s*light.+/g, ""); - } -}; -var coverableLines = document.getElementsByClassName('coverableline'); -for (i = 0, l = coverableLines.length; i < l; i++) { - coverableLines[i].addEventListener('click', toggleLine); - coverableLines[i].addEventListener('mouseenter', highlightTestMethods); - coverableLines[i].addEventListener('mouseleave', unhighlightTestMethods); -} - -/* History charts */ -var renderChart = function (chart) { - // Remove current children (e.g. PNG placeholder) - while (chart.firstChild) { - chart.firstChild.remove(); - } - - var chartData = window[chart.getAttribute('data-data')]; - var options = { - axisY: { - type: undefined, - onlyInteger: true - }, - lineSmooth: false, - low: 0, - high: 100, - scaleMinSpace: 20, - onlyInteger: true, - fullWidth: true - }; - var lineChart = new Chartist.Line(chart, { - labels: [], - series: chartData.series - }, options); - - /* Zoom */ - var zoomButtonDiv = document.createElement("div"); - zoomButtonDiv.className = "toggleZoom"; - var zoomButtonLink = document.createElement("a"); - zoomButtonLink.setAttribute("href", ""); - var zoomButtonText = document.createElement("i"); - zoomButtonText.className = "icon-search-plus"; - - zoomButtonLink.appendChild(zoomButtonText); - zoomButtonDiv.appendChild(zoomButtonLink); - - chart.appendChild(zoomButtonDiv); - - zoomButtonDiv.addEventListener('click', function (event) { - event.preventDefault(); - - if (options.axisY.type === undefined) { - options.axisY.type = Chartist.AutoScaleAxis; - zoomButtonText.className = "icon-search-minus"; - } else { - options.axisY.type = undefined; - zoomButtonText.className = "icon-search-plus"; - } - - lineChart.update(null, options); - }); - - var tooltip = document.createElement("div"); - tooltip.className = "tooltip"; - - chart.appendChild(tooltip); - - /* Tooltips */ - var showToolTip = function () { - var index = this.getAttribute('ct:meta'); - - tooltip.innerHTML = chartData.tooltips[index]; - tooltip.style.display = 'block'; - }; - - var moveToolTip = function (event) { - var box = chart.getBoundingClientRect(); - var left = event.pageX - box.left - window.pageXOffset; - var top = event.pageY - box.top - window.pageYOffset; - - left = left + 20; - top = top - tooltip.offsetHeight / 2; - - if (left + tooltip.offsetWidth > box.width) { - left -= tooltip.offsetWidth + 40; - } - - if (top < 0) { - top = 0; - } - - if (top + tooltip.offsetHeight > box.height) { - top = box.height - tooltip.offsetHeight; - } - - tooltip.style.left = left + 'px'; - tooltip.style.top = top + 'px'; - }; - - var hideToolTip = function () { - tooltip.style.display = 'none'; - }; - chart.addEventListener('mousemove', moveToolTip); - - lineChart.on('created', function () { - var chartPoints = chart.getElementsByClassName('ct-point'); - for (i = 0, l = chartPoints.length; i < l; i++) { - chartPoints[i].addEventListener('mousemove', showToolTip); - chartPoints[i].addEventListener('mouseout', hideToolTip); - } - }); -}; - -var charts = document.getElementsByClassName('historychart'); -for (i = 0, l = charts.length; i < l; i++) { - renderChart(charts[i]); -} \ No newline at end of file diff --git a/.vscode/ReportGenerator/Html_Dark/1d194f36/icon_cube.svg b/.vscode/ReportGenerator/Html_Dark/1d194f36/icon_cube.svg deleted file mode 100644 index 3302443..0000000 --- a/.vscode/ReportGenerator/Html_Dark/1d194f36/icon_cube.svg +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/.vscode/ReportGenerator/Html_Dark/1d194f36/icon_cube_dark.svg b/.vscode/ReportGenerator/Html_Dark/1d194f36/icon_cube_dark.svg deleted file mode 100644 index 3e7f0fa..0000000 --- a/.vscode/ReportGenerator/Html_Dark/1d194f36/icon_cube_dark.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/.vscode/ReportGenerator/Html_Dark/1d194f36/icon_down-dir_active.svg b/.vscode/ReportGenerator/Html_Dark/1d194f36/icon_down-dir_active.svg deleted file mode 100644 index d11cf04..0000000 --- a/.vscode/ReportGenerator/Html_Dark/1d194f36/icon_down-dir_active.svg +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/.vscode/ReportGenerator/Html_Dark/1d194f36/icon_down-dir_active_dark.svg b/.vscode/ReportGenerator/Html_Dark/1d194f36/icon_down-dir_active_dark.svg deleted file mode 100644 index fa34aeb..0000000 --- a/.vscode/ReportGenerator/Html_Dark/1d194f36/icon_down-dir_active_dark.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/.vscode/ReportGenerator/Html_Dark/1d194f36/icon_fork.svg b/.vscode/ReportGenerator/Html_Dark/1d194f36/icon_fork.svg deleted file mode 100644 index f0148b3..0000000 --- a/.vscode/ReportGenerator/Html_Dark/1d194f36/icon_fork.svg +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/.vscode/ReportGenerator/Html_Dark/1d194f36/icon_fork_dark.svg b/.vscode/ReportGenerator/Html_Dark/1d194f36/icon_fork_dark.svg deleted file mode 100644 index 11930c9..0000000 --- a/.vscode/ReportGenerator/Html_Dark/1d194f36/icon_fork_dark.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/.vscode/ReportGenerator/Html_Dark/1d194f36/icon_info-circled.svg b/.vscode/ReportGenerator/Html_Dark/1d194f36/icon_info-circled.svg deleted file mode 100644 index 252166b..0000000 --- a/.vscode/ReportGenerator/Html_Dark/1d194f36/icon_info-circled.svg +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/.vscode/ReportGenerator/Html_Dark/1d194f36/icon_info-circled_dark.svg b/.vscode/ReportGenerator/Html_Dark/1d194f36/icon_info-circled_dark.svg deleted file mode 100644 index 252166b..0000000 --- a/.vscode/ReportGenerator/Html_Dark/1d194f36/icon_info-circled_dark.svg +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/.vscode/ReportGenerator/Html_Dark/1d194f36/icon_minus.svg b/.vscode/ReportGenerator/Html_Dark/1d194f36/icon_minus.svg deleted file mode 100644 index 3c30c36..0000000 --- a/.vscode/ReportGenerator/Html_Dark/1d194f36/icon_minus.svg +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/.vscode/ReportGenerator/Html_Dark/1d194f36/icon_minus_dark.svg b/.vscode/ReportGenerator/Html_Dark/1d194f36/icon_minus_dark.svg deleted file mode 100644 index 2516b6f..0000000 --- a/.vscode/ReportGenerator/Html_Dark/1d194f36/icon_minus_dark.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/.vscode/ReportGenerator/Html_Dark/1d194f36/icon_plus.svg b/.vscode/ReportGenerator/Html_Dark/1d194f36/icon_plus.svg deleted file mode 100644 index 7932723..0000000 --- a/.vscode/ReportGenerator/Html_Dark/1d194f36/icon_plus.svg +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/.vscode/ReportGenerator/Html_Dark/1d194f36/icon_plus_dark.svg b/.vscode/ReportGenerator/Html_Dark/1d194f36/icon_plus_dark.svg deleted file mode 100644 index 6ed4edd..0000000 --- a/.vscode/ReportGenerator/Html_Dark/1d194f36/icon_plus_dark.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/.vscode/ReportGenerator/Html_Dark/1d194f36/icon_search-minus.svg b/.vscode/ReportGenerator/Html_Dark/1d194f36/icon_search-minus.svg deleted file mode 100644 index c174eb5..0000000 --- a/.vscode/ReportGenerator/Html_Dark/1d194f36/icon_search-minus.svg +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/.vscode/ReportGenerator/Html_Dark/1d194f36/icon_search-minus_dark.svg b/.vscode/ReportGenerator/Html_Dark/1d194f36/icon_search-minus_dark.svg deleted file mode 100644 index 9caaffb..0000000 --- a/.vscode/ReportGenerator/Html_Dark/1d194f36/icon_search-minus_dark.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/.vscode/ReportGenerator/Html_Dark/1d194f36/icon_search-plus.svg b/.vscode/ReportGenerator/Html_Dark/1d194f36/icon_search-plus.svg deleted file mode 100644 index 04b24ec..0000000 --- a/.vscode/ReportGenerator/Html_Dark/1d194f36/icon_search-plus.svg +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/.vscode/ReportGenerator/Html_Dark/1d194f36/icon_search-plus_dark.svg b/.vscode/ReportGenerator/Html_Dark/1d194f36/icon_search-plus_dark.svg deleted file mode 100644 index 5324194..0000000 --- a/.vscode/ReportGenerator/Html_Dark/1d194f36/icon_search-plus_dark.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/.vscode/ReportGenerator/Html_Dark/1d194f36/icon_sponsor.svg b/.vscode/ReportGenerator/Html_Dark/1d194f36/icon_sponsor.svg deleted file mode 100644 index bf6d959..0000000 --- a/.vscode/ReportGenerator/Html_Dark/1d194f36/icon_sponsor.svg +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/.vscode/ReportGenerator/Html_Dark/1d194f36/icon_star.svg b/.vscode/ReportGenerator/Html_Dark/1d194f36/icon_star.svg deleted file mode 100644 index b23c54e..0000000 --- a/.vscode/ReportGenerator/Html_Dark/1d194f36/icon_star.svg +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/.vscode/ReportGenerator/Html_Dark/1d194f36/icon_star_dark.svg b/.vscode/ReportGenerator/Html_Dark/1d194f36/icon_star_dark.svg deleted file mode 100644 index 49c0d03..0000000 --- a/.vscode/ReportGenerator/Html_Dark/1d194f36/icon_star_dark.svg +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/.vscode/ReportGenerator/Html_Dark/1d194f36/icon_up-dir.svg b/.vscode/ReportGenerator/Html_Dark/1d194f36/icon_up-dir.svg deleted file mode 100644 index 567c11f..0000000 --- a/.vscode/ReportGenerator/Html_Dark/1d194f36/icon_up-dir.svg +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/.vscode/ReportGenerator/Html_Dark/1d194f36/icon_up-dir_active.svg b/.vscode/ReportGenerator/Html_Dark/1d194f36/icon_up-dir_active.svg deleted file mode 100644 index bb22554..0000000 --- a/.vscode/ReportGenerator/Html_Dark/1d194f36/icon_up-dir_active.svg +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/.vscode/ReportGenerator/Html_Dark/1d194f36/icon_wrench.svg b/.vscode/ReportGenerator/Html_Dark/1d194f36/icon_wrench.svg deleted file mode 100644 index b6aa318..0000000 --- a/.vscode/ReportGenerator/Html_Dark/1d194f36/icon_wrench.svg +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/.vscode/ReportGenerator/Html_Dark/1d194f36/icon_wrench_dark.svg b/.vscode/ReportGenerator/Html_Dark/1d194f36/icon_wrench_dark.svg deleted file mode 100644 index 5c77a9c..0000000 --- a/.vscode/ReportGenerator/Html_Dark/1d194f36/icon_wrench_dark.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/.vscode/ReportGenerator/Html_Dark/1d194f36/index.htm b/.vscode/ReportGenerator/Html_Dark/1d194f36/index.htm deleted file mode 100644 index ddca833..0000000 --- a/.vscode/ReportGenerator/Html_Dark/1d194f36/index.htm +++ /dev/null @@ -1,253 +0,0 @@ - - - - - - - -Summary - Coverage Report - -
-

SummaryStarSponsor

-
-
-
Information
-
-
- - - - - - - - - - - - - - - - - - - - - -
Parser:Cobertura
Assemblies:3
Classes:41
Files:41
Coverage date:1/5/2023 - 9:46:59 AM
-
-
-
-
-
Line coverage
-
-
1%
-
- - - - - - - - - - - - - - - - - - - - - -
Covered lines:21
Uncovered lines:1217
Coverable lines:1238
Total lines:2538
Line coverage:1.6%
-
-
-
-
-
Branch coverage
-
-
1%
-
- - - - - - - - - - - - - -
Covered branches:4
Total branches:394
Branch coverage:1%
-
-
-
-
-
Method coverage
-
-
-

Method coverage is only available for sponsors.

-Upgrade to PRO version -
-
-
-
-

Risk Hotspots

- -
- ------ - - - - - - - - - - - - - - - - - - - - - - -
AssemblyClassMethodCyclomatic complexity
ReportingServices.UIAspNetCoreGeneratedDocument.Views_ProductionReport_DailyReportExecuteAsync()100
ReportingServices.UIAspNetCoreGeneratedDocument.Views_ProductionReport_EditDailyReport<ExecuteAsync()72
ReportingServices.UIAspNetCoreGeneratedDocument.Views_Shared__DailyReportPartialExecuteAsync()46
-
-
-

Coverage

- -
- ------------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Line coverageBranch coverage
NameCoveredUncoveredCoverableTotalPercentageCoveredTotalPercentage
ReportingServices.API055551240%
 
020%
 
Program01616280%
 
020%
 
ReportingServices.API.Controllers.FabTimeController02020460%
 
00
 
ReportingServices.API.Controllers.ScrapeDBController01919500%
 
00
 
ReportingServices.Shared2160162210553.3%
  
41083.7%
  
ReportingServices.Shared.HelperClasses.ApiCaller088220%
 
00
 
ReportingServices.Shared.HelperClasses.APIHelperFunctions21466710931.3%
  
42020%
  
ReportingServices.Shared.HelperClasses.DailyReportHelper06262900%
 
0120%
 
ReportingServices.Shared.HelperClasses.JsonFileHandler088190%
 
00
 
ReportingServices.Shared.Models.PlanningReport.ReactorPSNWORuns033140%
 
00
 
ReportingServices.Shared.Models.PlanningReport.WeeklyPartChanges044100%
 
00
 
ReportingServices.Shared.Models.ProductionReport.EquipmentStateByDay022120%
 
00
 
ReportingServices.Shared.Models.ProductionReport.ManualReportEntries01515210%
 
00
 
ReportingServices.Shared.Models.ProductionReport.QuarterlyTargets055180%
 
00
 
ReportingServices.Shared.Models.ProductionReport.RDS055180%
 
00
 
ReportingServices.Shared.Models.ProductionReport.Reactor044160%
 
00
 
ReportingServices.Shared.Models.ProductionReport.ReactorOutsByDay02280%
 
00
 
ReportingServices.Shared.Models.ProductionReport.ReactorOutsByRDS033140%
 
00
 
ReportingServices.Shared.Models.ProductionReport.ScrapByDay055180%
 
00
 
ReportingServices.Shared.Models.ProductionReport.ToolStateCurrent088250%
 
00
 
ReportingServices.Shared.Models.ProductionReport.YieldInformation022170%
 
00
 
ReportingServices.Shared.Repositories.FabTimeReportingRepository02727560%
 
020%
 
ReportingServices.Shared.Repositories.ScrapeDatabaseRepository01901902730%
 
0240%
 
ReportingServices.Shared.ViewModels.ProductionReport.DailyReport01071071450%
 
0120%
 
ReportingServices.Shared.ViewModels.ProductionReport.SLLTool03390%
 
00
 
ReportingServices.Shared.ViewModels.ProductionReport.ToolStateByType05050710%
 
0280%
 
ReportingServices.Shared.ViewModels.ProductionReport.UnloadTempsByDay03390%
 
00
 
ReportingServices.Shared.ViewModels.ProductionReport.YieldStatistics03939610%
 
0100%
 
ReportingServices.UI056156113590%
 
02840%
 
AspNetCoreGeneratedDocument.Views__ViewStart01130%
 
00
 
AspNetCoreGeneratedDocument.Views_Home_Index011190%
 
040%
 
AspNetCoreGeneratedDocument.Views_PlanningReport_Index011470%
 
080%
 
AspNetCoreGeneratedDocument.Views_PlanningReport_WeeklyPartChangesReport03535800%
 
0180%
 
AspNetCoreGeneratedDocument.Views_ProductionReport_DailyReport02042044230%
 
01000%
 
AspNetCoreGeneratedDocument.Views_ProductionReport_EditDailyReport082822440%
 
0780%
 
AspNetCoreGeneratedDocument.Views_ProductionReport_Index011190%
 
060%
 
AspNetCoreGeneratedDocument.Views_Shared__DailyReportPartial01311312560%
 
0460%
 
AspNetCoreGeneratedDocument.Views_Shared__Layout066610%
 
0160%
 
AspNetCoreGeneratedDocument.Views_Shared_Error055250%
 
020%
 
Program03535520%
 
020%
 
ReportingServices.UI.Controllers.HomeController01111280%
 
040%
 
ReportingServices.UI.Controllers.PlanningReportController01818350%
 
00
 
ReportingServices.UI.Controllers.ProductionReportController02828580%
 
00
 
ReportingServices.UI.Models.ErrorViewModel02290%
 
00
 
-
-
-
- - \ No newline at end of file diff --git a/.vscode/ReportGenerator/Html_Dark/1d194f36/index.html b/.vscode/ReportGenerator/Html_Dark/1d194f36/index.html deleted file mode 100644 index ddca833..0000000 --- a/.vscode/ReportGenerator/Html_Dark/1d194f36/index.html +++ /dev/null @@ -1,253 +0,0 @@ - - - - - - - -Summary - Coverage Report - -
-

SummaryStarSponsor

-
-
-
Information
-
-
- - - - - - - - - - - - - - - - - - - - - -
Parser:Cobertura
Assemblies:3
Classes:41
Files:41
Coverage date:1/5/2023 - 9:46:59 AM
-
-
-
-
-
Line coverage
-
-
1%
-
- - - - - - - - - - - - - - - - - - - - - -
Covered lines:21
Uncovered lines:1217
Coverable lines:1238
Total lines:2538
Line coverage:1.6%
-
-
-
-
-
Branch coverage
-
-
1%
-
- - - - - - - - - - - - - -
Covered branches:4
Total branches:394
Branch coverage:1%
-
-
-
-
-
Method coverage
-
-
-

Method coverage is only available for sponsors.

-Upgrade to PRO version -
-
-
-
-

Risk Hotspots

- -
- ------ - - - - - - - - - - - - - - - - - - - - - - -
AssemblyClassMethodCyclomatic complexity
ReportingServices.UIAspNetCoreGeneratedDocument.Views_ProductionReport_DailyReportExecuteAsync()100
ReportingServices.UIAspNetCoreGeneratedDocument.Views_ProductionReport_EditDailyReport<ExecuteAsync()72
ReportingServices.UIAspNetCoreGeneratedDocument.Views_Shared__DailyReportPartialExecuteAsync()46
-
-
-

Coverage

- -
- ------------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Line coverageBranch coverage
NameCoveredUncoveredCoverableTotalPercentageCoveredTotalPercentage
ReportingServices.API055551240%
 
020%
 
Program01616280%
 
020%
 
ReportingServices.API.Controllers.FabTimeController02020460%
 
00
 
ReportingServices.API.Controllers.ScrapeDBController01919500%
 
00
 
ReportingServices.Shared2160162210553.3%
  
41083.7%
  
ReportingServices.Shared.HelperClasses.ApiCaller088220%
 
00
 
ReportingServices.Shared.HelperClasses.APIHelperFunctions21466710931.3%
  
42020%
  
ReportingServices.Shared.HelperClasses.DailyReportHelper06262900%
 
0120%
 
ReportingServices.Shared.HelperClasses.JsonFileHandler088190%
 
00
 
ReportingServices.Shared.Models.PlanningReport.ReactorPSNWORuns033140%
 
00
 
ReportingServices.Shared.Models.PlanningReport.WeeklyPartChanges044100%
 
00
 
ReportingServices.Shared.Models.ProductionReport.EquipmentStateByDay022120%
 
00
 
ReportingServices.Shared.Models.ProductionReport.ManualReportEntries01515210%
 
00
 
ReportingServices.Shared.Models.ProductionReport.QuarterlyTargets055180%
 
00
 
ReportingServices.Shared.Models.ProductionReport.RDS055180%
 
00
 
ReportingServices.Shared.Models.ProductionReport.Reactor044160%
 
00
 
ReportingServices.Shared.Models.ProductionReport.ReactorOutsByDay02280%
 
00
 
ReportingServices.Shared.Models.ProductionReport.ReactorOutsByRDS033140%
 
00
 
ReportingServices.Shared.Models.ProductionReport.ScrapByDay055180%
 
00
 
ReportingServices.Shared.Models.ProductionReport.ToolStateCurrent088250%
 
00
 
ReportingServices.Shared.Models.ProductionReport.YieldInformation022170%
 
00
 
ReportingServices.Shared.Repositories.FabTimeReportingRepository02727560%
 
020%
 
ReportingServices.Shared.Repositories.ScrapeDatabaseRepository01901902730%
 
0240%
 
ReportingServices.Shared.ViewModels.ProductionReport.DailyReport01071071450%
 
0120%
 
ReportingServices.Shared.ViewModels.ProductionReport.SLLTool03390%
 
00
 
ReportingServices.Shared.ViewModels.ProductionReport.ToolStateByType05050710%
 
0280%
 
ReportingServices.Shared.ViewModels.ProductionReport.UnloadTempsByDay03390%
 
00
 
ReportingServices.Shared.ViewModels.ProductionReport.YieldStatistics03939610%
 
0100%
 
ReportingServices.UI056156113590%
 
02840%
 
AspNetCoreGeneratedDocument.Views__ViewStart01130%
 
00
 
AspNetCoreGeneratedDocument.Views_Home_Index011190%
 
040%
 
AspNetCoreGeneratedDocument.Views_PlanningReport_Index011470%
 
080%
 
AspNetCoreGeneratedDocument.Views_PlanningReport_WeeklyPartChangesReport03535800%
 
0180%
 
AspNetCoreGeneratedDocument.Views_ProductionReport_DailyReport02042044230%
 
01000%
 
AspNetCoreGeneratedDocument.Views_ProductionReport_EditDailyReport082822440%
 
0780%
 
AspNetCoreGeneratedDocument.Views_ProductionReport_Index011190%
 
060%
 
AspNetCoreGeneratedDocument.Views_Shared__DailyReportPartial01311312560%
 
0460%
 
AspNetCoreGeneratedDocument.Views_Shared__Layout066610%
 
0160%
 
AspNetCoreGeneratedDocument.Views_Shared_Error055250%
 
020%
 
Program03535520%
 
020%
 
ReportingServices.UI.Controllers.HomeController01111280%
 
040%
 
ReportingServices.UI.Controllers.PlanningReportController01818350%
 
00
 
ReportingServices.UI.Controllers.ProductionReportController02828580%
 
00
 
ReportingServices.UI.Models.ErrorViewModel02290%
 
00
 
-
-
-
- - \ No newline at end of file diff --git a/.vscode/ReportGenerator/Html_Dark/1d194f36/main.js b/.vscode/ReportGenerator/Html_Dark/1d194f36/main.js deleted file mode 100644 index aa6864d..0000000 --- a/.vscode/ReportGenerator/Html_Dark/1d194f36/main.js +++ /dev/null @@ -1,344 +0,0 @@ -/* Chartist.js 0.11.4 - * Copyright © 2019 Gion Kunz - * Free to use under either the WTFPL license or the MIT license. - * https://raw.githubusercontent.com/gionkunz/chartist-js/master/LICENSE-WTFPL - * https://raw.githubusercontent.com/gionkunz/chartist-js/master/LICENSE-MIT - */ - -!function (a, b) { "function" == typeof define && define.amd ? define("Chartist", [], function () { return a.Chartist = b() }) : "object" == typeof module && module.exports ? module.exports = b() : a.Chartist = b() }(this, function () { - var a = { version: "0.11.4" }; return function (a, b) { "use strict"; var c = a.window, d = a.document; b.namespaces = { svg: "http://www.w3.org/2000/svg", xmlns: "http://www.w3.org/2000/xmlns/", xhtml: "http://www.w3.org/1999/xhtml", xlink: "http://www.w3.org/1999/xlink", ct: "http://gionkunz.github.com/chartist-js/ct" }, b.noop = function (a) { return a }, b.alphaNumerate = function (a) { return String.fromCharCode(97 + a % 26) }, b.extend = function (a) { var c, d, e; for (a = a || {}, c = 1; c < arguments.length; c++) { d = arguments[c]; for (var f in d) e = d[f], "object" != typeof e || null === e || e instanceof Array ? a[f] = e : a[f] = b.extend(a[f], e) } return a }, b.replaceAll = function (a, b, c) { return a.replace(new RegExp(b, "g"), c) }, b.ensureUnit = function (a, b) { return "number" == typeof a && (a += b), a }, b.quantity = function (a) { if ("string" == typeof a) { var b = /^(\d+)\s*(.*)$/g.exec(a); return { value: +b[1], unit: b[2] || void 0 } } return { value: a } }, b.querySelector = function (a) { return a instanceof Node ? a : d.querySelector(a) }, b.times = function (a) { return Array.apply(null, new Array(a)) }, b.sum = function (a, b) { return a + (b ? b : 0) }, b.mapMultiply = function (a) { return function (b) { return b * a } }, b.mapAdd = function (a) { return function (b) { return b + a } }, b.serialMap = function (a, c) { var d = [], e = Math.max.apply(null, a.map(function (a) { return a.length })); return b.times(e).forEach(function (b, e) { var f = a.map(function (a) { return a[e] }); d[e] = c.apply(null, f) }), d }, b.roundWithPrecision = function (a, c) { var d = Math.pow(10, c || b.precision); return Math.round(a * d) / d }, b.precision = 8, b.escapingMap = { "&": "&", "<": "<", ">": ">", '"': """, "'": "'" }, b.serialize = function (a) { return null === a || void 0 === a ? a : ("number" == typeof a ? a = "" + a : "object" == typeof a && (a = JSON.stringify({ data: a })), Object.keys(b.escapingMap).reduce(function (a, c) { return b.replaceAll(a, c, b.escapingMap[c]) }, a)) }, b.deserialize = function (a) { if ("string" != typeof a) return a; a = Object.keys(b.escapingMap).reduce(function (a, c) { return b.replaceAll(a, b.escapingMap[c], c) }, a); try { a = JSON.parse(a), a = void 0 !== a.data ? a.data : a } catch (c) { } return a }, b.createSvg = function (a, c, d, e) { var f; return c = c || "100%", d = d || "100%", Array.prototype.slice.call(a.querySelectorAll("svg")).filter(function (a) { return a.getAttributeNS(b.namespaces.xmlns, "ct") }).forEach(function (b) { a.removeChild(b) }), f = new b.Svg("svg").attr({ width: c, height: d }).addClass(e), f._node.style.width = c, f._node.style.height = d, a.appendChild(f._node), f }, b.normalizeData = function (a, c, d) { var e, f = { raw: a, normalized: {} }; return f.normalized.series = b.getDataArray({ series: a.series || [] }, c, d), e = f.normalized.series.every(function (a) { return a instanceof Array }) ? Math.max.apply(null, f.normalized.series.map(function (a) { return a.length })) : f.normalized.series.length, f.normalized.labels = (a.labels || []).slice(), Array.prototype.push.apply(f.normalized.labels, b.times(Math.max(0, e - f.normalized.labels.length)).map(function () { return "" })), c && b.reverseData(f.normalized), f }, b.safeHasProperty = function (a, b) { return null !== a && "object" == typeof a && a.hasOwnProperty(b) }, b.isDataHoleValue = function (a) { return null === a || void 0 === a || "number" == typeof a && isNaN(a) }, b.reverseData = function (a) { a.labels.reverse(), a.series.reverse(); for (var b = 0; b < a.series.length; b++)"object" == typeof a.series[b] && void 0 !== a.series[b].data ? a.series[b].data.reverse() : a.series[b] instanceof Array && a.series[b].reverse() }, b.getDataArray = function (a, c, d) { function e(a) { if (b.safeHasProperty(a, "value")) return e(a.value); if (b.safeHasProperty(a, "data")) return e(a.data); if (a instanceof Array) return a.map(e); if (!b.isDataHoleValue(a)) { if (d) { var c = {}; return "string" == typeof d ? c[d] = b.getNumberOrUndefined(a) : c.y = b.getNumberOrUndefined(a), c.x = a.hasOwnProperty("x") ? b.getNumberOrUndefined(a.x) : c.x, c.y = a.hasOwnProperty("y") ? b.getNumberOrUndefined(a.y) : c.y, c } return b.getNumberOrUndefined(a) } } return a.series.map(e) }, b.normalizePadding = function (a, b) { return b = b || 0, "number" == typeof a ? { top: a, right: a, bottom: a, left: a } : { top: "number" == typeof a.top ? a.top : b, right: "number" == typeof a.right ? a.right : b, bottom: "number" == typeof a.bottom ? a.bottom : b, left: "number" == typeof a.left ? a.left : b } }, b.getMetaData = function (a, b) { var c = a.data ? a.data[b] : a[b]; return c ? c.meta : void 0 }, b.orderOfMagnitude = function (a) { return Math.floor(Math.log(Math.abs(a)) / Math.LN10) }, b.projectLength = function (a, b, c) { return b / c.range * a }, b.getAvailableHeight = function (a, c) { return Math.max((b.quantity(c.height).value || a.height()) - (c.chartPadding.top + c.chartPadding.bottom) - c.axisX.offset, 0) }, b.getHighLow = function (a, c, d) { function e(a) { if (void 0 !== a) if (a instanceof Array) for (var b = 0; b < a.length; b++)e(a[b]); else { var c = d ? +a[d] : +a; g && c > f.high && (f.high = c), h && c < f.low && (f.low = c) } } c = b.extend({}, c, d ? c["axis" + d.toUpperCase()] : {}); var f = { high: void 0 === c.high ? -Number.MAX_VALUE : +c.high, low: void 0 === c.low ? Number.MAX_VALUE : +c.low }, g = void 0 === c.high, h = void 0 === c.low; return (g || h) && e(a), (c.referenceValue || 0 === c.referenceValue) && (f.high = Math.max(c.referenceValue, f.high), f.low = Math.min(c.referenceValue, f.low)), f.high <= f.low && (0 === f.low ? f.high = 1 : f.low < 0 ? f.high = 0 : f.high > 0 ? f.low = 0 : (f.high = 1, f.low = 0)), f }, b.isNumeric = function (a) { return null !== a && isFinite(a) }, b.isFalseyButZero = function (a) { return !a && 0 !== a }, b.getNumberOrUndefined = function (a) { return b.isNumeric(a) ? +a : void 0 }, b.isMultiValue = function (a) { return "object" == typeof a && ("x" in a || "y" in a) }, b.getMultiValue = function (a, c) { return b.isMultiValue(a) ? b.getNumberOrUndefined(a[c || "y"]) : b.getNumberOrUndefined(a) }, b.rho = function (a) { function b(a, c) { return a % c === 0 ? c : b(c, a % c) } function c(a) { return a * a + 1 } if (1 === a) return a; var d, e = 2, f = 2; if (a % 2 === 0) return 2; do e = c(e) % a, f = c(c(f)) % a, d = b(Math.abs(e - f), a); while (1 === d); return d }, b.getBounds = function (a, c, d, e) { function f(a, b) { return a === (a += b) && (a *= 1 + (b > 0 ? o : -o)), a } var g, h, i, j = 0, k = { high: c.high, low: c.low }; k.valueRange = k.high - k.low, k.oom = b.orderOfMagnitude(k.valueRange), k.step = Math.pow(10, k.oom), k.min = Math.floor(k.low / k.step) * k.step, k.max = Math.ceil(k.high / k.step) * k.step, k.range = k.max - k.min, k.numberOfSteps = Math.round(k.range / k.step); var l = b.projectLength(a, k.step, k), m = l < d, n = e ? b.rho(k.range) : 0; if (e && b.projectLength(a, 1, k) >= d) k.step = 1; else if (e && n < k.step && b.projectLength(a, n, k) >= d) k.step = n; else for (; ;) { if (m && b.projectLength(a, k.step, k) <= d) k.step *= 2; else { if (m || !(b.projectLength(a, k.step / 2, k) >= d)) break; if (k.step /= 2, e && k.step % 1 !== 0) { k.step *= 2; break } } if (j++ > 1e3) throw new Error("Exceeded maximum number of iterations while optimizing scale step!") } var o = 2.221e-16; for (k.step = Math.max(k.step, o), h = k.min, i = k.max; h + k.step <= k.low;)h = f(h, k.step); for (; i - k.step >= k.high;)i = f(i, -k.step); k.min = h, k.max = i, k.range = k.max - k.min; var p = []; for (g = k.min; g <= k.max; g = f(g, k.step)) { var q = b.roundWithPrecision(g); q !== p[p.length - 1] && p.push(q) } return k.values = p, k }, b.polarToCartesian = function (a, b, c, d) { var e = (d - 90) * Math.PI / 180; return { x: a + c * Math.cos(e), y: b + c * Math.sin(e) } }, b.createChartRect = function (a, c, d) { var e = !(!c.axisX && !c.axisY), f = e ? c.axisY.offset : 0, g = e ? c.axisX.offset : 0, h = a.width() || b.quantity(c.width).value || 0, i = a.height() || b.quantity(c.height).value || 0, j = b.normalizePadding(c.chartPadding, d); h = Math.max(h, f + j.left + j.right), i = Math.max(i, g + j.top + j.bottom); var k = { padding: j, width: function () { return this.x2 - this.x1 }, height: function () { return this.y1 - this.y2 } }; return e ? ("start" === c.axisX.position ? (k.y2 = j.top + g, k.y1 = Math.max(i - j.bottom, k.y2 + 1)) : (k.y2 = j.top, k.y1 = Math.max(i - j.bottom - g, k.y2 + 1)), "start" === c.axisY.position ? (k.x1 = j.left + f, k.x2 = Math.max(h - j.right, k.x1 + 1)) : (k.x1 = j.left, k.x2 = Math.max(h - j.right - f, k.x1 + 1))) : (k.x1 = j.left, k.x2 = Math.max(h - j.right, k.x1 + 1), k.y2 = j.top, k.y1 = Math.max(i - j.bottom, k.y2 + 1)), k }, b.createGrid = function (a, c, d, e, f, g, h, i) { var j = {}; j[d.units.pos + "1"] = a, j[d.units.pos + "2"] = a, j[d.counterUnits.pos + "1"] = e, j[d.counterUnits.pos + "2"] = e + f; var k = g.elem("line", j, h.join(" ")); i.emit("draw", b.extend({ type: "grid", axis: d, index: c, group: g, element: k }, j)) }, b.createGridBackground = function (a, b, c, d) { var e = a.elem("rect", { x: b.x1, y: b.y2, width: b.width(), height: b.height() }, c, !0); d.emit("draw", { type: "gridBackground", group: a, element: e }) }, b.createLabel = function (a, c, e, f, g, h, i, j, k, l, m) { var n, o = {}; if (o[g.units.pos] = a + i[g.units.pos], o[g.counterUnits.pos] = i[g.counterUnits.pos], o[g.units.len] = c, o[g.counterUnits.len] = Math.max(0, h - 10), l) { var p = d.createElement("span"); p.className = k.join(" "), p.setAttribute("xmlns", b.namespaces.xhtml), p.innerText = f[e], p.style[g.units.len] = Math.round(o[g.units.len]) + "px", p.style[g.counterUnits.len] = Math.round(o[g.counterUnits.len]) + "px", n = j.foreignObject(p, b.extend({ style: "overflow: visible;" }, o)) } else n = j.elem("text", o, k.join(" ")).text(f[e]); m.emit("draw", b.extend({ type: "label", axis: g, index: e, group: j, element: n, text: f[e] }, o)) }, b.getSeriesOption = function (a, b, c) { if (a.name && b.series && b.series[a.name]) { var d = b.series[a.name]; return d.hasOwnProperty(c) ? d[c] : b[c] } return b[c] }, b.optionsProvider = function (a, d, e) { function f(a) { var f = h; if (h = b.extend({}, j), d) for (i = 0; i < d.length; i++) { var g = c.matchMedia(d[i][0]); g.matches && (h = b.extend(h, d[i][1])) } e && a && e.emit("optionsChanged", { previousOptions: f, currentOptions: h }) } function g() { k.forEach(function (a) { a.removeListener(f) }) } var h, i, j = b.extend({}, a), k = []; if (!c.matchMedia) throw "window.matchMedia not found! Make sure you're using a polyfill."; if (d) for (i = 0; i < d.length; i++) { var l = c.matchMedia(d[i][0]); l.addListener(f), k.push(l) } return f(), { removeMediaQueryListeners: g, getCurrentOptions: function () { return b.extend({}, h) } } }, b.splitIntoSegments = function (a, c, d) { var e = { increasingX: !1, fillHoles: !1 }; d = b.extend({}, e, d); for (var f = [], g = !0, h = 0; h < a.length; h += 2)void 0 === b.getMultiValue(c[h / 2].value) ? d.fillHoles || (g = !0) : (d.increasingX && h >= 2 && a[h] <= a[h - 2] && (g = !0), g && (f.push({ pathCoordinates: [], valueData: [] }), g = !1), f[f.length - 1].pathCoordinates.push(a[h], a[h + 1]), f[f.length - 1].valueData.push(c[h / 2])); return f } }(this || global, a), function (a, b) { "use strict"; b.Interpolation = {}, b.Interpolation.none = function (a) { var c = { fillHoles: !1 }; return a = b.extend({}, c, a), function (c, d) { for (var e = new b.Svg.Path, f = !0, g = 0; g < c.length; g += 2) { var h = c[g], i = c[g + 1], j = d[g / 2]; void 0 !== b.getMultiValue(j.value) ? (f ? e.move(h, i, !1, j) : e.line(h, i, !1, j), f = !1) : a.fillHoles || (f = !0) } return e } }, b.Interpolation.simple = function (a) { var c = { divisor: 2, fillHoles: !1 }; a = b.extend({}, c, a); var d = 1 / Math.max(1, a.divisor); return function (c, e) { for (var f, g, h, i = new b.Svg.Path, j = 0; j < c.length; j += 2) { var k = c[j], l = c[j + 1], m = (k - f) * d, n = e[j / 2]; void 0 !== n.value ? (void 0 === h ? i.move(k, l, !1, n) : i.curve(f + m, g, k - m, l, k, l, !1, n), f = k, g = l, h = n) : a.fillHoles || (f = k = h = void 0) } return i } }, b.Interpolation.cardinal = function (a) { var c = { tension: 1, fillHoles: !1 }; a = b.extend({}, c, a); var d = Math.min(1, Math.max(0, a.tension)), e = 1 - d; return function f(c, g) { var h = b.splitIntoSegments(c, g, { fillHoles: a.fillHoles }); if (h.length) { if (h.length > 1) { var i = []; return h.forEach(function (a) { i.push(f(a.pathCoordinates, a.valueData)) }), b.Svg.Path.join(i) } if (c = h[0].pathCoordinates, g = h[0].valueData, c.length <= 4) return b.Interpolation.none()(c, g); for (var j, k = (new b.Svg.Path).move(c[0], c[1], !1, g[0]), l = 0, m = c.length; m - 2 * !j > l; l += 2) { var n = [{ x: +c[l - 2], y: +c[l - 1] }, { x: +c[l], y: +c[l + 1] }, { x: +c[l + 2], y: +c[l + 3] }, { x: +c[l + 4], y: +c[l + 5] }]; j ? l ? m - 4 === l ? n[3] = { x: +c[0], y: +c[1] } : m - 2 === l && (n[2] = { x: +c[0], y: +c[1] }, n[3] = { x: +c[2], y: +c[3] }) : n[0] = { x: +c[m - 2], y: +c[m - 1] } : m - 4 === l ? n[3] = n[2] : l || (n[0] = { x: +c[l], y: +c[l + 1] }), k.curve(d * (-n[0].x + 6 * n[1].x + n[2].x) / 6 + e * n[2].x, d * (-n[0].y + 6 * n[1].y + n[2].y) / 6 + e * n[2].y, d * (n[1].x + 6 * n[2].x - n[3].x) / 6 + e * n[2].x, d * (n[1].y + 6 * n[2].y - n[3].y) / 6 + e * n[2].y, n[2].x, n[2].y, !1, g[(l + 2) / 2]) } return k } return b.Interpolation.none()([]) } }, b.Interpolation.monotoneCubic = function (a) { var c = { fillHoles: !1 }; return a = b.extend({}, c, a), function d(c, e) { var f = b.splitIntoSegments(c, e, { fillHoles: a.fillHoles, increasingX: !0 }); if (f.length) { if (f.length > 1) { var g = []; return f.forEach(function (a) { g.push(d(a.pathCoordinates, a.valueData)) }), b.Svg.Path.join(g) } if (c = f[0].pathCoordinates, e = f[0].valueData, c.length <= 4) return b.Interpolation.none()(c, e); var h, i, j = [], k = [], l = c.length / 2, m = [], n = [], o = [], p = []; for (h = 0; h < l; h++)j[h] = c[2 * h], k[h] = c[2 * h + 1]; for (h = 0; h < l - 1; h++)o[h] = k[h + 1] - k[h], p[h] = j[h + 1] - j[h], n[h] = o[h] / p[h]; for (m[0] = n[0], m[l - 1] = n[l - 2], h = 1; h < l - 1; h++)0 === n[h] || 0 === n[h - 1] || n[h - 1] > 0 != n[h] > 0 ? m[h] = 0 : (m[h] = 3 * (p[h - 1] + p[h]) / ((2 * p[h] + p[h - 1]) / n[h - 1] + (p[h] + 2 * p[h - 1]) / n[h]), isFinite(m[h]) || (m[h] = 0)); for (i = (new b.Svg.Path).move(j[0], k[0], !1, e[0]), h = 0; h < l - 1; h++)i.curve(j[h] + p[h] / 3, k[h] + m[h] * p[h] / 3, j[h + 1] - p[h] / 3, k[h + 1] - m[h + 1] * p[h] / 3, j[h + 1], k[h + 1], !1, e[h + 1]); return i } return b.Interpolation.none()([]) } }, b.Interpolation.step = function (a) { var c = { postpone: !0, fillHoles: !1 }; return a = b.extend({}, c, a), function (c, d) { for (var e, f, g, h = new b.Svg.Path, i = 0; i < c.length; i += 2) { var j = c[i], k = c[i + 1], l = d[i / 2]; void 0 !== l.value ? (void 0 === g ? h.move(j, k, !1, l) : (a.postpone ? h.line(j, f, !1, g) : h.line(e, k, !1, l), h.line(j, k, !1, l)), e = j, f = k, g = l) : a.fillHoles || (e = f = g = void 0) } return h } } }(this || global, a), function (a, b) { "use strict"; b.EventEmitter = function () { function a(a, b) { d[a] = d[a] || [], d[a].push(b) } function b(a, b) { d[a] && (b ? (d[a].splice(d[a].indexOf(b), 1), 0 === d[a].length && delete d[a]) : delete d[a]) } function c(a, b) { d[a] && d[a].forEach(function (a) { a(b) }), d["*"] && d["*"].forEach(function (c) { c(a, b) }) } var d = []; return { addEventHandler: a, removeEventHandler: b, emit: c } } }(this || global, a), function (a, b) { "use strict"; function c(a) { var b = []; if (a.length) for (var c = 0; c < a.length; c++)b.push(a[c]); return b } function d(a, c) { var d = c || this.prototype || b.Class, e = Object.create(d); b.Class.cloneDefinitions(e, a); var f = function () { var a, c = e.constructor || function () { }; return a = this === b ? Object.create(e) : this, c.apply(a, Array.prototype.slice.call(arguments, 0)), a }; return f.prototype = e, f["super"] = d, f.extend = this.extend, f } function e() { var a = c(arguments), b = a[0]; return a.splice(1, a.length - 1).forEach(function (a) { Object.getOwnPropertyNames(a).forEach(function (c) { delete b[c], Object.defineProperty(b, c, Object.getOwnPropertyDescriptor(a, c)) }) }), b } b.Class = { extend: d, cloneDefinitions: e } }(this || global, a), function (a, b) { "use strict"; function c(a, c, d) { return a && (this.data = a || {}, this.data.labels = this.data.labels || [], this.data.series = this.data.series || [], this.eventEmitter.emit("data", { type: "update", data: this.data })), c && (this.options = b.extend({}, d ? this.options : this.defaultOptions, c), this.initializeTimeoutId || (this.optionsProvider.removeMediaQueryListeners(), this.optionsProvider = b.optionsProvider(this.options, this.responsiveOptions, this.eventEmitter))), this.initializeTimeoutId || this.createChart(this.optionsProvider.getCurrentOptions()), this } function d() { return this.initializeTimeoutId ? i.clearTimeout(this.initializeTimeoutId) : (i.removeEventListener("resize", this.resizeListener), this.optionsProvider.removeMediaQueryListeners()), this } function e(a, b) { return this.eventEmitter.addEventHandler(a, b), this } function f(a, b) { return this.eventEmitter.removeEventHandler(a, b), this } function g() { i.addEventListener("resize", this.resizeListener), this.optionsProvider = b.optionsProvider(this.options, this.responsiveOptions, this.eventEmitter), this.eventEmitter.addEventHandler("optionsChanged", function () { this.update() }.bind(this)), this.options.plugins && this.options.plugins.forEach(function (a) { a instanceof Array ? a[0](this, a[1]) : a(this) }.bind(this)), this.eventEmitter.emit("data", { type: "initial", data: this.data }), this.createChart(this.optionsProvider.getCurrentOptions()), this.initializeTimeoutId = void 0 } function h(a, c, d, e, f) { this.container = b.querySelector(a), this.data = c || {}, this.data.labels = this.data.labels || [], this.data.series = this.data.series || [], this.defaultOptions = d, this.options = e, this.responsiveOptions = f, this.eventEmitter = b.EventEmitter(), this.supportsForeignObject = b.Svg.isSupported("Extensibility"), this.supportsAnimations = b.Svg.isSupported("AnimationEventsAttribute"), this.resizeListener = function () { this.update() }.bind(this), this.container && (this.container.__chartist__ && this.container.__chartist__.detach(), this.container.__chartist__ = this), this.initializeTimeoutId = setTimeout(g.bind(this), 0) } var i = a.window; b.Base = b.Class.extend({ constructor: h, optionsProvider: void 0, container: void 0, svg: void 0, eventEmitter: void 0, createChart: function () { throw new Error("Base chart type can't be instantiated!") }, update: c, detach: d, on: e, off: f, version: b.version, supportsForeignObject: !1 }) }(this || global, a), function (a, b) { "use strict"; function c(a, c, d, e, f) { a instanceof Element ? this._node = a : (this._node = y.createElementNS(b.namespaces.svg, a), "svg" === a && this.attr({ "xmlns:ct": b.namespaces.ct })), c && this.attr(c), d && this.addClass(d), e && (f && e._node.firstChild ? e._node.insertBefore(this._node, e._node.firstChild) : e._node.appendChild(this._node)) } function d(a, c) { return "string" == typeof a ? c ? this._node.getAttributeNS(c, a) : this._node.getAttribute(a) : (Object.keys(a).forEach(function (c) { if (void 0 !== a[c]) if (c.indexOf(":") !== -1) { var d = c.split(":"); this._node.setAttributeNS(b.namespaces[d[0]], c, a[c]) } else this._node.setAttribute(c, a[c]) }.bind(this)), this) } function e(a, c, d, e) { return new b.Svg(a, c, d, this, e) } function f() { return this._node.parentNode instanceof SVGElement ? new b.Svg(this._node.parentNode) : null } function g() { for (var a = this._node; "svg" !== a.nodeName;)a = a.parentNode; return new b.Svg(a) } function h(a) { var c = this._node.querySelector(a); return c ? new b.Svg(c) : null } function i(a) { var c = this._node.querySelectorAll(a); return c.length ? new b.Svg.List(c) : null } function j() { return this._node } function k(a, c, d, e) { if ("string" == typeof a) { var f = y.createElement("div"); f.innerHTML = a, a = f.firstChild } a.setAttribute("xmlns", b.namespaces.xmlns); var g = this.elem("foreignObject", c, d, e); return g._node.appendChild(a), g } function l(a) { return this._node.appendChild(y.createTextNode(a)), this } function m() { for (; this._node.firstChild;)this._node.removeChild(this._node.firstChild); return this } function n() { return this._node.parentNode.removeChild(this._node), this.parent() } function o(a) { return this._node.parentNode.replaceChild(a._node, this._node), a } function p(a, b) { return b && this._node.firstChild ? this._node.insertBefore(a._node, this._node.firstChild) : this._node.appendChild(a._node), this } function q() { return this._node.getAttribute("class") ? this._node.getAttribute("class").trim().split(/\s+/) : [] } function r(a) { return this._node.setAttribute("class", this.classes(this._node).concat(a.trim().split(/\s+/)).filter(function (a, b, c) { return c.indexOf(a) === b }).join(" ")), this } function s(a) { var b = a.trim().split(/\s+/); return this._node.setAttribute("class", this.classes(this._node).filter(function (a) { return b.indexOf(a) === -1 }).join(" ")), this } function t() { return this._node.setAttribute("class", ""), this } function u() { return this._node.getBoundingClientRect().height } function v() { return this._node.getBoundingClientRect().width } function w(a, c, d) { return void 0 === c && (c = !0), Object.keys(a).forEach(function (e) { function f(a, c) { var f, g, h, i = {}; a.easing && (h = a.easing instanceof Array ? a.easing : b.Svg.Easing[a.easing], delete a.easing), a.begin = b.ensureUnit(a.begin, "ms"), a.dur = b.ensureUnit(a.dur, "ms"), h && (a.calcMode = "spline", a.keySplines = h.join(" "), a.keyTimes = "0;1"), c && (a.fill = "freeze", i[e] = a.from, this.attr(i), g = b.quantity(a.begin || 0).value, a.begin = "indefinite"), f = this.elem("animate", b.extend({ attributeName: e }, a)), c && setTimeout(function () { try { f._node.beginElement() } catch (b) { i[e] = a.to, this.attr(i), f.remove() } }.bind(this), g), d && f._node.addEventListener("beginEvent", function () { d.emit("animationBegin", { element: this, animate: f._node, params: a }) }.bind(this)), f._node.addEventListener("endEvent", function () { d && d.emit("animationEnd", { element: this, animate: f._node, params: a }), c && (i[e] = a.to, this.attr(i), f.remove()) }.bind(this)) } a[e] instanceof Array ? a[e].forEach(function (a) { f.bind(this)(a, !1) }.bind(this)) : f.bind(this)(a[e], c) }.bind(this)), this } function x(a) { var c = this; this.svgElements = []; for (var d = 0; d < a.length; d++)this.svgElements.push(new b.Svg(a[d])); Object.keys(b.Svg.prototype).filter(function (a) { return ["constructor", "parent", "querySelector", "querySelectorAll", "replace", "append", "classes", "height", "width"].indexOf(a) === -1 }).forEach(function (a) { c[a] = function () { var d = Array.prototype.slice.call(arguments, 0); return c.svgElements.forEach(function (c) { b.Svg.prototype[a].apply(c, d) }), c } }) } var y = a.document; b.Svg = b.Class.extend({ constructor: c, attr: d, elem: e, parent: f, root: g, querySelector: h, querySelectorAll: i, getNode: j, foreignObject: k, text: l, empty: m, remove: n, replace: o, append: p, classes: q, addClass: r, removeClass: s, removeAllClasses: t, height: u, width: v, animate: w }), b.Svg.isSupported = function (a) { return y.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#" + a, "1.1") }; var z = { easeInSine: [.47, 0, .745, .715], easeOutSine: [.39, .575, .565, 1], easeInOutSine: [.445, .05, .55, .95], easeInQuad: [.55, .085, .68, .53], easeOutQuad: [.25, .46, .45, .94], easeInOutQuad: [.455, .03, .515, .955], easeInCubic: [.55, .055, .675, .19], easeOutCubic: [.215, .61, .355, 1], easeInOutCubic: [.645, .045, .355, 1], easeInQuart: [.895, .03, .685, .22], easeOutQuart: [.165, .84, .44, 1], easeInOutQuart: [.77, 0, .175, 1], easeInQuint: [.755, .05, .855, .06], easeOutQuint: [.23, 1, .32, 1], easeInOutQuint: [.86, 0, .07, 1], easeInExpo: [.95, .05, .795, .035], easeOutExpo: [.19, 1, .22, 1], easeInOutExpo: [1, 0, 0, 1], easeInCirc: [.6, .04, .98, .335], easeOutCirc: [.075, .82, .165, 1], easeInOutCirc: [.785, .135, .15, .86], easeInBack: [.6, -.28, .735, .045], easeOutBack: [.175, .885, .32, 1.275], easeInOutBack: [.68, -.55, .265, 1.55] }; b.Svg.Easing = z, b.Svg.List = b.Class.extend({ constructor: x }) }(this || global, a), function (a, b) { "use strict"; function c(a, c, d, e, f, g) { var h = b.extend({ command: f ? a.toLowerCase() : a.toUpperCase() }, c, g ? { data: g } : {}); d.splice(e, 0, h) } function d(a, b) { a.forEach(function (c, d) { t[c.command.toLowerCase()].forEach(function (e, f) { b(c, e, d, f, a) }) }) } function e(a, c) { this.pathElements = [], this.pos = 0, this.close = a, this.options = b.extend({}, u, c) } function f(a) { return void 0 !== a ? (this.pos = Math.max(0, Math.min(this.pathElements.length, a)), this) : this.pos } function g(a) { return this.pathElements.splice(this.pos, a), this } function h(a, b, d, e) { return c("M", { x: +a, y: +b }, this.pathElements, this.pos++, d, e), this } function i(a, b, d, e) { return c("L", { x: +a, y: +b }, this.pathElements, this.pos++, d, e), this } function j(a, b, d, e, f, g, h, i) { return c("C", { x1: +a, y1: +b, x2: +d, y2: +e, x: +f, y: +g }, this.pathElements, this.pos++, h, i), this } function k(a, b, d, e, f, g, h, i, j) { return c("A", { rx: +a, ry: +b, xAr: +d, lAf: +e, sf: +f, x: +g, y: +h }, this.pathElements, this.pos++, i, j), this } function l(a) { var c = a.replace(/([A-Za-z])([0-9])/g, "$1 $2").replace(/([0-9])([A-Za-z])/g, "$1 $2").split(/[\s,]+/).reduce(function (a, b) { return b.match(/[A-Za-z]/) && a.push([]), a[a.length - 1].push(b), a }, []); "Z" === c[c.length - 1][0].toUpperCase() && c.pop(); var d = c.map(function (a) { var c = a.shift(), d = t[c.toLowerCase()]; return b.extend({ command: c }, d.reduce(function (b, c, d) { return b[c] = +a[d], b }, {})) }), e = [this.pos, 0]; return Array.prototype.push.apply(e, d), Array.prototype.splice.apply(this.pathElements, e), this.pos += d.length, this } function m() { var a = Math.pow(10, this.options.accuracy); return this.pathElements.reduce(function (b, c) { var d = t[c.command.toLowerCase()].map(function (b) { return this.options.accuracy ? Math.round(c[b] * a) / a : c[b] }.bind(this)); return b + c.command + d.join(",") }.bind(this), "") + (this.close ? "Z" : "") } function n(a, b) { return d(this.pathElements, function (c, d) { c[d] *= "x" === d[0] ? a : b }), this } function o(a, b) { return d(this.pathElements, function (c, d) { c[d] += "x" === d[0] ? a : b }), this } function p(a) { return d(this.pathElements, function (b, c, d, e, f) { var g = a(b, c, d, e, f); (g || 0 === g) && (b[c] = g) }), this } function q(a) { var c = new b.Svg.Path(a || this.close); return c.pos = this.pos, c.pathElements = this.pathElements.slice().map(function (a) { return b.extend({}, a) }), c.options = b.extend({}, this.options), c } function r(a) { var c = [new b.Svg.Path]; return this.pathElements.forEach(function (d) { d.command === a.toUpperCase() && 0 !== c[c.length - 1].pathElements.length && c.push(new b.Svg.Path), c[c.length - 1].pathElements.push(d) }), c } function s(a, c, d) { for (var e = new b.Svg.Path(c, d), f = 0; f < a.length; f++)for (var g = a[f], h = 0; h < g.pathElements.length; h++)e.pathElements.push(g.pathElements[h]); return e } var t = { m: ["x", "y"], l: ["x", "y"], c: ["x1", "y1", "x2", "y2", "x", "y"], a: ["rx", "ry", "xAr", "lAf", "sf", "x", "y"] }, u = { accuracy: 3 }; b.Svg.Path = b.Class.extend({ constructor: e, position: f, remove: g, move: h, line: i, curve: j, arc: k, scale: n, translate: o, transform: p, parse: l, stringify: m, clone: q, splitByCommand: r }), b.Svg.Path.elementDescriptions = t, b.Svg.Path.join = s }(this || global, a), function (a, b) { "use strict"; function c(a, b, c, d) { this.units = a, this.counterUnits = a === e.x ? e.y : e.x, this.chartRect = b, this.axisLength = b[a.rectEnd] - b[a.rectStart], this.gridOffset = b[a.rectOffset], this.ticks = c, this.options = d } function d(a, c, d, e, f) { var g = e["axis" + this.units.pos.toUpperCase()], h = this.ticks.map(this.projectValue.bind(this)), i = this.ticks.map(g.labelInterpolationFnc); h.forEach(function (j, k) { var l, m = { x: 0, y: 0 }; l = h[k + 1] ? h[k + 1] - j : Math.max(this.axisLength - j, 30), b.isFalseyButZero(i[k]) && "" !== i[k] || ("x" === this.units.pos ? (j = this.chartRect.x1 + j, m.x = e.axisX.labelOffset.x, "start" === e.axisX.position ? m.y = this.chartRect.padding.top + e.axisX.labelOffset.y + (d ? 5 : 20) : m.y = this.chartRect.y1 + e.axisX.labelOffset.y + (d ? 5 : 20)) : (j = this.chartRect.y1 - j, m.y = e.axisY.labelOffset.y - (d ? l : 0), "start" === e.axisY.position ? m.x = d ? this.chartRect.padding.left + e.axisY.labelOffset.x : this.chartRect.x1 - 10 : m.x = this.chartRect.x2 + e.axisY.labelOffset.x + 10), g.showGrid && b.createGrid(j, k, this, this.gridOffset, this.chartRect[this.counterUnits.len](), a, [e.classNames.grid, e.classNames[this.units.dir]], f), g.showLabel && b.createLabel(j, l, k, i, this, g.offset, m, c, [e.classNames.label, e.classNames[this.units.dir], "start" === g.position ? e.classNames[g.position] : e.classNames.end], d, f)) }.bind(this)) } var e = (a.window, a.document, { x: { pos: "x", len: "width", dir: "horizontal", rectStart: "x1", rectEnd: "x2", rectOffset: "y2" }, y: { pos: "y", len: "height", dir: "vertical", rectStart: "y2", rectEnd: "y1", rectOffset: "x1" } }); b.Axis = b.Class.extend({ constructor: c, createGridAndLabels: d, projectValue: function (a, b, c) { throw new Error("Base axis can't be instantiated!") } }), b.Axis.units = e }(this || global, a), function (a, b) { "use strict"; function c(a, c, d, e) { var f = e.highLow || b.getHighLow(c, e, a.pos); this.bounds = b.getBounds(d[a.rectEnd] - d[a.rectStart], f, e.scaleMinSpace || 20, e.onlyInteger), this.range = { min: this.bounds.min, max: this.bounds.max }, b.AutoScaleAxis["super"].constructor.call(this, a, d, this.bounds.values, e) } function d(a) { return this.axisLength * (+b.getMultiValue(a, this.units.pos) - this.bounds.min) / this.bounds.range } a.window, a.document; b.AutoScaleAxis = b.Axis.extend({ constructor: c, projectValue: d }) }(this || global, a), function (a, b) { "use strict"; function c(a, c, d, e) { var f = e.highLow || b.getHighLow(c, e, a.pos); this.divisor = e.divisor || 1, this.ticks = e.ticks || b.times(this.divisor).map(function (a, b) { return f.low + (f.high - f.low) / this.divisor * b }.bind(this)), this.ticks.sort(function (a, b) { return a - b }), this.range = { min: f.low, max: f.high }, b.FixedScaleAxis["super"].constructor.call(this, a, d, this.ticks, e), this.stepLength = this.axisLength / this.divisor } function d(a) { return this.axisLength * (+b.getMultiValue(a, this.units.pos) - this.range.min) / (this.range.max - this.range.min) } a.window, a.document; b.FixedScaleAxis = b.Axis.extend({ constructor: c, projectValue: d }) }(this || global, a), function (a, b) { "use strict"; function c(a, c, d, e) { b.StepAxis["super"].constructor.call(this, a, d, e.ticks, e); var f = Math.max(1, e.ticks.length - (e.stretch ? 1 : 0)); this.stepLength = this.axisLength / f } function d(a, b) { return this.stepLength * b } a.window, a.document; b.StepAxis = b.Axis.extend({ constructor: c, projectValue: d }) }(this || global, a), function (a, b) { "use strict"; function c(a) { var c = b.normalizeData(this.data, a.reverseData, !0); this.svg = b.createSvg(this.container, a.width, a.height, a.classNames.chart); var d, f, g = this.svg.elem("g").addClass(a.classNames.gridGroup), h = this.svg.elem("g"), i = this.svg.elem("g").addClass(a.classNames.labelGroup), j = b.createChartRect(this.svg, a, e.padding); d = void 0 === a.axisX.type ? new b.StepAxis(b.Axis.units.x, c.normalized.series, j, b.extend({}, a.axisX, { ticks: c.normalized.labels, stretch: a.fullWidth })) : a.axisX.type.call(b, b.Axis.units.x, c.normalized.series, j, a.axisX), f = void 0 === a.axisY.type ? new b.AutoScaleAxis(b.Axis.units.y, c.normalized.series, j, b.extend({}, a.axisY, { high: b.isNumeric(a.high) ? a.high : a.axisY.high, low: b.isNumeric(a.low) ? a.low : a.axisY.low })) : a.axisY.type.call(b, b.Axis.units.y, c.normalized.series, j, a.axisY), d.createGridAndLabels(g, i, this.supportsForeignObject, a, this.eventEmitter), f.createGridAndLabels(g, i, this.supportsForeignObject, a, this.eventEmitter), a.showGridBackground && b.createGridBackground(g, j, a.classNames.gridBackground, this.eventEmitter), c.raw.series.forEach(function (e, g) { var i = h.elem("g"); i.attr({ "ct:series-name": e.name, "ct:meta": b.serialize(e.meta) }), i.addClass([a.classNames.series, e.className || a.classNames.series + "-" + b.alphaNumerate(g)].join(" ")); var k = [], l = []; c.normalized.series[g].forEach(function (a, h) { var i = { x: j.x1 + d.projectValue(a, h, c.normalized.series[g]), y: j.y1 - f.projectValue(a, h, c.normalized.series[g]) }; k.push(i.x, i.y), l.push({ value: a, valueIndex: h, meta: b.getMetaData(e, h) }) }.bind(this)); var m = { lineSmooth: b.getSeriesOption(e, a, "lineSmooth"), showPoint: b.getSeriesOption(e, a, "showPoint"), showLine: b.getSeriesOption(e, a, "showLine"), showArea: b.getSeriesOption(e, a, "showArea"), areaBase: b.getSeriesOption(e, a, "areaBase") }, n = "function" == typeof m.lineSmooth ? m.lineSmooth : m.lineSmooth ? b.Interpolation.monotoneCubic() : b.Interpolation.none(), o = n(k, l); if (m.showPoint && o.pathElements.forEach(function (c) { var h = i.elem("line", { x1: c.x, y1: c.y, x2: c.x + .01, y2: c.y }, a.classNames.point).attr({ "ct:value": [c.data.value.x, c.data.value.y].filter(b.isNumeric).join(","), "ct:meta": b.serialize(c.data.meta) }); this.eventEmitter.emit("draw", { type: "point", value: c.data.value, index: c.data.valueIndex, meta: c.data.meta, series: e, seriesIndex: g, axisX: d, axisY: f, group: i, element: h, x: c.x, y: c.y }) }.bind(this)), m.showLine) { var p = i.elem("path", { d: o.stringify() }, a.classNames.line, !0); this.eventEmitter.emit("draw", { type: "line", values: c.normalized.series[g], path: o.clone(), chartRect: j, index: g, series: e, seriesIndex: g, seriesMeta: e.meta, axisX: d, axisY: f, group: i, element: p }) } if (m.showArea && f.range) { var q = Math.max(Math.min(m.areaBase, f.range.max), f.range.min), r = j.y1 - f.projectValue(q); o.splitByCommand("M").filter(function (a) { return a.pathElements.length > 1 }).map(function (a) { var b = a.pathElements[0], c = a.pathElements[a.pathElements.length - 1]; return a.clone(!0).position(0).remove(1).move(b.x, r).line(b.x, b.y).position(a.pathElements.length + 1).line(c.x, r) }).forEach(function (b) { var h = i.elem("path", { d: b.stringify() }, a.classNames.area, !0); this.eventEmitter.emit("draw", { type: "area", values: c.normalized.series[g], path: b.clone(), series: e, seriesIndex: g, axisX: d, axisY: f, chartRect: j, index: g, group: i, element: h }) }.bind(this)) } }.bind(this)), this.eventEmitter.emit("created", { bounds: f.bounds, chartRect: j, axisX: d, axisY: f, svg: this.svg, options: a }) } function d(a, c, d, f) { b.Line["super"].constructor.call(this, a, c, e, b.extend({}, e, d), f) } var e = (a.window, a.document, { axisX: { offset: 30, position: "end", labelOffset: { x: 0, y: 0 }, showLabel: !0, showGrid: !0, labelInterpolationFnc: b.noop, type: void 0 }, axisY: { offset: 40, position: "start", labelOffset: { x: 0, y: 0 }, showLabel: !0, showGrid: !0, labelInterpolationFnc: b.noop, type: void 0, scaleMinSpace: 20, onlyInteger: !1 }, width: void 0, height: void 0, showLine: !0, showPoint: !0, showArea: !1, areaBase: 0, lineSmooth: !0, showGridBackground: !1, low: void 0, high: void 0, chartPadding: { top: 15, right: 15, bottom: 5, left: 10 }, fullWidth: !1, reverseData: !1, classNames: { chart: "ct-chart-line", label: "ct-label", labelGroup: "ct-labels", series: "ct-series", line: "ct-line", point: "ct-point", area: "ct-area", grid: "ct-grid", gridGroup: "ct-grids", gridBackground: "ct-grid-background", vertical: "ct-vertical", horizontal: "ct-horizontal", start: "ct-start", end: "ct-end" } }); b.Line = b.Base.extend({ constructor: d, createChart: c }) }(this || global, a), function (a, b) { - "use strict"; function c(a) { - var c, d; a.distributeSeries ? (c = b.normalizeData(this.data, a.reverseData, a.horizontalBars ? "x" : "y"), c.normalized.series = c.normalized.series.map(function (a) { return [a] })) : c = b.normalizeData(this.data, a.reverseData, a.horizontalBars ? "x" : "y"), this.svg = b.createSvg(this.container, a.width, a.height, a.classNames.chart + (a.horizontalBars ? " " + a.classNames.horizontalBars : "")); var f = this.svg.elem("g").addClass(a.classNames.gridGroup), g = this.svg.elem("g"), h = this.svg.elem("g").addClass(a.classNames.labelGroup); - if (a.stackBars && 0 !== c.normalized.series.length) { var i = b.serialMap(c.normalized.series, function () { return Array.prototype.slice.call(arguments).map(function (a) { return a }).reduce(function (a, b) { return { x: a.x + (b && b.x) || 0, y: a.y + (b && b.y) || 0 } }, { x: 0, y: 0 }) }); d = b.getHighLow([i], a, a.horizontalBars ? "x" : "y") } else d = b.getHighLow(c.normalized.series, a, a.horizontalBars ? "x" : "y"); d.high = +a.high || (0 === a.high ? 0 : d.high), d.low = +a.low || (0 === a.low ? 0 : d.low); var j, k, l, m, n, o = b.createChartRect(this.svg, a, e.padding); k = a.distributeSeries && a.stackBars ? c.normalized.labels.slice(0, 1) : c.normalized.labels, a.horizontalBars ? (j = m = void 0 === a.axisX.type ? new b.AutoScaleAxis(b.Axis.units.x, c.normalized.series, o, b.extend({}, a.axisX, { highLow: d, referenceValue: 0 })) : a.axisX.type.call(b, b.Axis.units.x, c.normalized.series, o, b.extend({}, a.axisX, { highLow: d, referenceValue: 0 })), l = n = void 0 === a.axisY.type ? new b.StepAxis(b.Axis.units.y, c.normalized.series, o, { ticks: k }) : a.axisY.type.call(b, b.Axis.units.y, c.normalized.series, o, a.axisY)) : (l = m = void 0 === a.axisX.type ? new b.StepAxis(b.Axis.units.x, c.normalized.series, o, { ticks: k }) : a.axisX.type.call(b, b.Axis.units.x, c.normalized.series, o, a.axisX), j = n = void 0 === a.axisY.type ? new b.AutoScaleAxis(b.Axis.units.y, c.normalized.series, o, b.extend({}, a.axisY, { highLow: d, referenceValue: 0 })) : a.axisY.type.call(b, b.Axis.units.y, c.normalized.series, o, b.extend({}, a.axisY, { highLow: d, referenceValue: 0 }))); var p = a.horizontalBars ? o.x1 + j.projectValue(0) : o.y1 - j.projectValue(0), q = []; l.createGridAndLabels(f, h, this.supportsForeignObject, a, this.eventEmitter), j.createGridAndLabels(f, h, this.supportsForeignObject, a, this.eventEmitter), a.showGridBackground && b.createGridBackground(f, o, a.classNames.gridBackground, this.eventEmitter), c.raw.series.forEach(function (d, e) { var f, h, i = e - (c.raw.series.length - 1) / 2; f = a.distributeSeries && !a.stackBars ? l.axisLength / c.normalized.series.length / 2 : a.distributeSeries && a.stackBars ? l.axisLength / 2 : l.axisLength / c.normalized.series[e].length / 2, h = g.elem("g"), h.attr({ "ct:series-name": d.name, "ct:meta": b.serialize(d.meta) }), h.addClass([a.classNames.series, d.className || a.classNames.series + "-" + b.alphaNumerate(e)].join(" ")), c.normalized.series[e].forEach(function (g, k) { var r, s, t, u; if (u = a.distributeSeries && !a.stackBars ? e : a.distributeSeries && a.stackBars ? 0 : k, r = a.horizontalBars ? { x: o.x1 + j.projectValue(g && g.x ? g.x : 0, k, c.normalized.series[e]), y: o.y1 - l.projectValue(g && g.y ? g.y : 0, u, c.normalized.series[e]) } : { x: o.x1 + l.projectValue(g && g.x ? g.x : 0, u, c.normalized.series[e]), y: o.y1 - j.projectValue(g && g.y ? g.y : 0, k, c.normalized.series[e]) }, l instanceof b.StepAxis && (l.options.stretch || (r[l.units.pos] += f * (a.horizontalBars ? -1 : 1)), r[l.units.pos] += a.stackBars || a.distributeSeries ? 0 : i * a.seriesBarDistance * (a.horizontalBars ? -1 : 1)), t = q[k] || p, q[k] = t - (p - r[l.counterUnits.pos]), void 0 !== g) { var v = {}; v[l.units.pos + "1"] = r[l.units.pos], v[l.units.pos + "2"] = r[l.units.pos], !a.stackBars || "accumulate" !== a.stackMode && a.stackMode ? (v[l.counterUnits.pos + "1"] = p, v[l.counterUnits.pos + "2"] = r[l.counterUnits.pos]) : (v[l.counterUnits.pos + "1"] = t, v[l.counterUnits.pos + "2"] = q[k]), v.x1 = Math.min(Math.max(v.x1, o.x1), o.x2), v.x2 = Math.min(Math.max(v.x2, o.x1), o.x2), v.y1 = Math.min(Math.max(v.y1, o.y2), o.y1), v.y2 = Math.min(Math.max(v.y2, o.y2), o.y1); var w = b.getMetaData(d, k); s = h.elem("line", v, a.classNames.bar).attr({ "ct:value": [g.x, g.y].filter(b.isNumeric).join(","), "ct:meta": b.serialize(w) }), this.eventEmitter.emit("draw", b.extend({ type: "bar", value: g, index: k, meta: w, series: d, seriesIndex: e, axisX: m, axisY: n, chartRect: o, group: h, element: s }, v)) } }.bind(this)) }.bind(this)), this.eventEmitter.emit("created", { bounds: j.bounds, chartRect: o, axisX: m, axisY: n, svg: this.svg, options: a }) - } function d(a, c, d, f) { b.Bar["super"].constructor.call(this, a, c, e, b.extend({}, e, d), f) } var e = (a.window, a.document, { axisX: { offset: 30, position: "end", labelOffset: { x: 0, y: 0 }, showLabel: !0, showGrid: !0, labelInterpolationFnc: b.noop, scaleMinSpace: 30, onlyInteger: !1 }, axisY: { offset: 40, position: "start", labelOffset: { x: 0, y: 0 }, showLabel: !0, showGrid: !0, labelInterpolationFnc: b.noop, scaleMinSpace: 20, onlyInteger: !1 }, width: void 0, height: void 0, high: void 0, low: void 0, referenceValue: 0, chartPadding: { top: 15, right: 15, bottom: 5, left: 10 }, seriesBarDistance: 15, stackBars: !1, stackMode: "accumulate", horizontalBars: !1, distributeSeries: !1, reverseData: !1, showGridBackground: !1, classNames: { chart: "ct-chart-bar", horizontalBars: "ct-horizontal-bars", label: "ct-label", labelGroup: "ct-labels", series: "ct-series", bar: "ct-bar", grid: "ct-grid", gridGroup: "ct-grids", gridBackground: "ct-grid-background", vertical: "ct-vertical", horizontal: "ct-horizontal", start: "ct-start", end: "ct-end" } }); b.Bar = b.Base.extend({ constructor: d, createChart: c }) - }(this || global, a), function (a, b) { "use strict"; function c(a, b, c) { var d = b.x > a.x; return d && "explode" === c || !d && "implode" === c ? "start" : d && "implode" === c || !d && "explode" === c ? "end" : "middle" } function d(a) { var d, e, g, h, i, j = b.normalizeData(this.data), k = [], l = a.startAngle; this.svg = b.createSvg(this.container, a.width, a.height, a.donut ? a.classNames.chartDonut : a.classNames.chartPie), e = b.createChartRect(this.svg, a, f.padding), g = Math.min(e.width() / 2, e.height() / 2), i = a.total || j.normalized.series.reduce(function (a, b) { return a + b }, 0); var m = b.quantity(a.donutWidth); "%" === m.unit && (m.value *= g / 100), g -= a.donut && !a.donutSolid ? m.value / 2 : 0, h = "outside" === a.labelPosition || a.donut && !a.donutSolid ? g : "center" === a.labelPosition ? 0 : a.donutSolid ? g - m.value / 2 : g / 2, h += a.labelOffset; var n = { x: e.x1 + e.width() / 2, y: e.y2 + e.height() / 2 }, o = 1 === j.raw.series.filter(function (a) { return a.hasOwnProperty("value") ? 0 !== a.value : 0 !== a }).length; j.raw.series.forEach(function (a, b) { k[b] = this.svg.elem("g", null, null) }.bind(this)), a.showLabel && (d = this.svg.elem("g", null, null)), j.raw.series.forEach(function (e, f) { if (0 !== j.normalized.series[f] || !a.ignoreEmptyValues) { k[f].attr({ "ct:series-name": e.name }), k[f].addClass([a.classNames.series, e.className || a.classNames.series + "-" + b.alphaNumerate(f)].join(" ")); var p = i > 0 ? l + j.normalized.series[f] / i * 360 : 0, q = Math.max(0, l - (0 === f || o ? 0 : .2)); p - q >= 359.99 && (p = q + 359.99); var r, s, t, u = b.polarToCartesian(n.x, n.y, g, q), v = b.polarToCartesian(n.x, n.y, g, p), w = new b.Svg.Path(!a.donut || a.donutSolid).move(v.x, v.y).arc(g, g, 0, p - l > 180, 0, u.x, u.y); a.donut ? a.donutSolid && (t = g - m.value, r = b.polarToCartesian(n.x, n.y, t, l - (0 === f || o ? 0 : .2)), s = b.polarToCartesian(n.x, n.y, t, p), w.line(r.x, r.y), w.arc(t, t, 0, p - l > 180, 1, s.x, s.y)) : w.line(n.x, n.y); var x = a.classNames.slicePie; a.donut && (x = a.classNames.sliceDonut, a.donutSolid && (x = a.classNames.sliceDonutSolid)); var y = k[f].elem("path", { d: w.stringify() }, x); if (y.attr({ "ct:value": j.normalized.series[f], "ct:meta": b.serialize(e.meta) }), a.donut && !a.donutSolid && (y._node.style.strokeWidth = m.value + "px"), this.eventEmitter.emit("draw", { type: "slice", value: j.normalized.series[f], totalDataSum: i, index: f, meta: e.meta, series: e, group: k[f], element: y, path: w.clone(), center: n, radius: g, startAngle: l, endAngle: p }), a.showLabel) { var z; z = 1 === j.raw.series.length ? { x: n.x, y: n.y } : b.polarToCartesian(n.x, n.y, h, l + (p - l) / 2); var A; A = j.normalized.labels && !b.isFalseyButZero(j.normalized.labels[f]) ? j.normalized.labels[f] : j.normalized.series[f]; var B = a.labelInterpolationFnc(A, f); if (B || 0 === B) { var C = d.elem("text", { dx: z.x, dy: z.y, "text-anchor": c(n, z, a.labelDirection) }, a.classNames.label).text("" + B); this.eventEmitter.emit("draw", { type: "label", index: f, group: d, element: C, text: "" + B, x: z.x, y: z.y }) } } l = p } }.bind(this)), this.eventEmitter.emit("created", { chartRect: e, svg: this.svg, options: a }) } function e(a, c, d, e) { b.Pie["super"].constructor.call(this, a, c, f, b.extend({}, f, d), e) } var f = (a.window, a.document, { width: void 0, height: void 0, chartPadding: 5, classNames: { chartPie: "ct-chart-pie", chartDonut: "ct-chart-donut", series: "ct-series", slicePie: "ct-slice-pie", sliceDonut: "ct-slice-donut", sliceDonutSolid: "ct-slice-donut-solid", label: "ct-label" }, startAngle: 0, total: void 0, donut: !1, donutSolid: !1, donutWidth: 60, showLabel: !0, labelOffset: 0, labelPosition: "inside", labelInterpolationFnc: b.noop, labelDirection: "neutral", reverseData: !1, ignoreEmptyValues: !1 }); b.Pie = b.Base.extend({ constructor: e, createChart: d, determineAnchorPosition: c }) }(this || global, a), a -}); -//# sourceMappingURL=chartist.min.js.map - -var i, l, selectedLine = null; - -/* Navigate to hash without browser history entry */ -var navigateToHash = function () { - if (window.history !== undefined && window.history.replaceState !== undefined) { - window.history.replaceState(undefined, undefined, this.getAttribute("href")); - } -}; - -var hashLinks = document.getElementsByClassName('navigatetohash'); -for (i = 0, l = hashLinks.length; i < l; i++) { - hashLinks[i].addEventListener('click', navigateToHash); -} - -/* Switch test method */ -var switchTestMethod = function () { - var method = this.getAttribute("value"); - console.log("Selected test method: " + method); - - var lines, i, l, coverageData, lineAnalysis, cells; - - lines = document.querySelectorAll('.lineAnalysis tr'); - - for (i = 1, l = lines.length; i < l; i++) { - coverageData = JSON.parse(lines[i].getAttribute('data-coverage').replace(/'/g, '"')); - lineAnalysis = coverageData[method]; - cells = lines[i].querySelectorAll('td'); - if (lineAnalysis === undefined) { - lineAnalysis = coverageData.AllTestMethods; - if (lineAnalysis.LVS !== 'gray') { - cells[0].setAttribute('class', 'red'); - cells[1].innerText = cells[1].textContent = '0'; - cells[4].setAttribute('class', 'lightred'); - } - } else { - cells[0].setAttribute('class', lineAnalysis.LVS); - cells[1].innerText = cells[1].textContent = lineAnalysis.VC; - cells[4].setAttribute('class', 'light' + lineAnalysis.LVS); - } - } -}; - -var testMethods = document.getElementsByClassName('switchtestmethod'); -for (i = 0, l = testMethods.length; i < l; i++) { - testMethods[i].addEventListener('change', switchTestMethod); -} - -/* Highlight test method by line */ -var toggleLine = function () { - if (selectedLine === this) { - selectedLine = null; - } else { - selectedLine = null; - unhighlightTestMethods(); - highlightTestMethods.call(this); - selectedLine = this; - } - -}; -var highlightTestMethods = function () { - if (selectedLine !== null) { - return; - } - - var lineAnalysis; - var coverageData = JSON.parse(this.getAttribute('data-coverage').replace(/'/g, '"')); - var testMethods = document.getElementsByClassName('testmethod'); - - for (i = 0, l = testMethods.length; i < l; i++) { - lineAnalysis = coverageData[testMethods[i].id]; - if (lineAnalysis === undefined) { - testMethods[i].className = testMethods[i].className.replace(/\s*light.+/g, ""); - } else { - testMethods[i].className += ' light' + lineAnalysis.LVS; - } - } -}; -var unhighlightTestMethods = function () { - if (selectedLine !== null) { - return; - } - - var testMethods = document.getElementsByClassName('testmethod'); - for (i = 0, l = testMethods.length; i < l; i++) { - testMethods[i].className = testMethods[i].className.replace(/\s*light.+/g, ""); - } -}; -var coverableLines = document.getElementsByClassName('coverableline'); -for (i = 0, l = coverableLines.length; i < l; i++) { - coverableLines[i].addEventListener('click', toggleLine); - coverableLines[i].addEventListener('mouseenter', highlightTestMethods); - coverableLines[i].addEventListener('mouseleave', unhighlightTestMethods); -} - -/* History charts */ -var renderChart = function (chart) { - // Remove current children (e.g. PNG placeholder) - while (chart.firstChild) { - chart.firstChild.remove(); - } - - var chartData = window[chart.getAttribute('data-data')]; - var options = { - axisY: { - type: undefined, - onlyInteger: true - }, - lineSmooth: false, - low: 0, - high: 100, - scaleMinSpace: 20, - onlyInteger: true, - fullWidth: true - }; - var lineChart = new Chartist.Line(chart, { - labels: [], - series: chartData.series - }, options); - - /* Zoom */ - var zoomButtonDiv = document.createElement("div"); - zoomButtonDiv.className = "toggleZoom"; - var zoomButtonLink = document.createElement("a"); - zoomButtonLink.setAttribute("href", ""); - var zoomButtonText = document.createElement("i"); - zoomButtonText.className = "icon-search-plus"; - - zoomButtonLink.appendChild(zoomButtonText); - zoomButtonDiv.appendChild(zoomButtonLink); - - chart.appendChild(zoomButtonDiv); - - zoomButtonDiv.addEventListener('click', function (event) { - event.preventDefault(); - - if (options.axisY.type === undefined) { - options.axisY.type = Chartist.AutoScaleAxis; - zoomButtonText.className = "icon-search-minus"; - } else { - options.axisY.type = undefined; - zoomButtonText.className = "icon-search-plus"; - } - - lineChart.update(null, options); - }); - - var tooltip = document.createElement("div"); - tooltip.className = "tooltip"; - - chart.appendChild(tooltip); - - /* Tooltips */ - var showToolTip = function () { - var index = this.getAttribute('ct:meta'); - - tooltip.innerHTML = chartData.tooltips[index]; - tooltip.style.display = 'block'; - }; - - var moveToolTip = function (event) { - var box = chart.getBoundingClientRect(); - var left = event.pageX - box.left - window.pageXOffset; - var top = event.pageY - box.top - window.pageYOffset; - - left = left + 20; - top = top - tooltip.offsetHeight / 2; - - if (left + tooltip.offsetWidth > box.width) { - left -= tooltip.offsetWidth + 40; - } - - if (top < 0) { - top = 0; - } - - if (top + tooltip.offsetHeight > box.height) { - top = box.height - tooltip.offsetHeight; - } - - tooltip.style.left = left + 'px'; - tooltip.style.top = top + 'px'; - }; - - var hideToolTip = function () { - tooltip.style.display = 'none'; - }; - chart.addEventListener('mousemove', moveToolTip); - - lineChart.on('created', function () { - var chartPoints = chart.getElementsByClassName('ct-point'); - for (i = 0, l = chartPoints.length; i < l; i++) { - chartPoints[i].addEventListener('mousemove', showToolTip); - chartPoints[i].addEventListener('mouseout', hideToolTip); - } - }); -}; - -var charts = document.getElementsByClassName('historychart'); -for (i = 0, l = charts.length; i < l; i++) { - renderChart(charts[i]); -} - -var assemblies = [ - { - "name": "ReportingServices.API", - "classes": [ - { "name": "Program", "rp": "ReportingServices.API_Program.html", "cl": 0, "ucl": 16, "cal": 16, "tl": 28, "ct": "LineCoverage", "cbm": "-", "cb": 0, "tb": 2, "cm": 0, "tm": 0, "lch": [], "bch": [], "mch": [], "hc": [] }, - { "name": "ReportingServices.API.Controllers.FabTimeController", "rp": "ReportingServices.API_FabTimeController.html", "cl": 0, "ucl": 20, "cal": 20, "tl": 46, "ct": "LineCoverage", "cbm": "-", "cb": 0, "tb": 0, "cm": 0, "tm": 0, "lch": [], "bch": [], "mch": [], "hc": [] }, - { "name": "ReportingServices.API.Controllers.ScrapeDBController", "rp": "ReportingServices.API_ScrapeDBController.html", "cl": 0, "ucl": 19, "cal": 19, "tl": 50, "ct": "LineCoverage", "cbm": "-", "cb": 0, "tb": 0, "cm": 0, "tm": 0, "lch": [], "bch": [], "mch": [], "hc": [] }, - ]}, - { - "name": "ReportingServices.Shared", - "classes": [ - { "name": "ReportingServices.Shared.HelperClasses.ApiCaller", "rp": "ReportingServices.Shared_ApiCaller.html", "cl": 0, "ucl": 8, "cal": 8, "tl": 22, "ct": "LineCoverage", "cbm": "-", "cb": 0, "tb": 0, "cm": 0, "tm": 0, "lch": [], "bch": [], "mch": [], "hc": [] }, - { "name": "ReportingServices.Shared.HelperClasses.APIHelperFunctions", "rp": "ReportingServices.Shared_APIHelperFunctions.html", "cl": 21, "ucl": 46, "cal": 67, "tl": 109, "ct": "LineCoverage", "cbm": "-", "cb": 4, "tb": 20, "cm": 0, "tm": 0, "lch": [], "bch": [], "mch": [], "hc": [] }, - { "name": "ReportingServices.Shared.HelperClasses.DailyReportHelper", "rp": "ReportingServices.Shared_DailyReportHelper.html", "cl": 0, "ucl": 62, "cal": 62, "tl": 90, "ct": "LineCoverage", "cbm": "-", "cb": 0, "tb": 12, "cm": 0, "tm": 0, "lch": [], "bch": [], "mch": [], "hc": [] }, - { "name": "ReportingServices.Shared.HelperClasses.JsonFileHandler", "rp": "ReportingServices.Shared_JsonFileHandler.html", "cl": 0, "ucl": 8, "cal": 8, "tl": 19, "ct": "LineCoverage", "cbm": "-", "cb": 0, "tb": 0, "cm": 0, "tm": 0, "lch": [], "bch": [], "mch": [], "hc": [] }, - { "name": "ReportingServices.Shared.Models.PlanningReport.ReactorPSNWORuns", "rp": "ReportingServices.Shared_ReactorPSNWORuns.html", "cl": 0, "ucl": 3, "cal": 3, "tl": 14, "ct": "LineCoverage", "cbm": "-", "cb": 0, "tb": 0, "cm": 0, "tm": 0, "lch": [], "bch": [], "mch": [], "hc": [] }, - { "name": "ReportingServices.Shared.Models.PlanningReport.WeeklyPartChanges", "rp": "ReportingServices.Shared_WeeklyPartChanges.html", "cl": 0, "ucl": 4, "cal": 4, "tl": 10, "ct": "LineCoverage", "cbm": "-", "cb": 0, "tb": 0, "cm": 0, "tm": 0, "lch": [], "bch": [], "mch": [], "hc": [] }, - { "name": "ReportingServices.Shared.Models.ProductionReport.EquipmentStateByDay", "rp": "ReportingServices.Shared_EquipmentStateByDay.html", "cl": 0, "ucl": 2, "cal": 2, "tl": 12, "ct": "LineCoverage", "cbm": "-", "cb": 0, "tb": 0, "cm": 0, "tm": 0, "lch": [], "bch": [], "mch": [], "hc": [] }, - { "name": "ReportingServices.Shared.Models.ProductionReport.ManualReportEntries", "rp": "ReportingServices.Shared_ManualReportEntries.html", "cl": 0, "ucl": 15, "cal": 15, "tl": 21, "ct": "LineCoverage", "cbm": "-", "cb": 0, "tb": 0, "cm": 0, "tm": 0, "lch": [], "bch": [], "mch": [], "hc": [] }, - { "name": "ReportingServices.Shared.Models.ProductionReport.QuarterlyTargets", "rp": "ReportingServices.Shared_QuarterlyTargets.html", "cl": 0, "ucl": 5, "cal": 5, "tl": 18, "ct": "LineCoverage", "cbm": "-", "cb": 0, "tb": 0, "cm": 0, "tm": 0, "lch": [], "bch": [], "mch": [], "hc": [] }, - { "name": "ReportingServices.Shared.Models.ProductionReport.RDS", "rp": "ReportingServices.Shared_RDS.html", "cl": 0, "ucl": 5, "cal": 5, "tl": 18, "ct": "LineCoverage", "cbm": "-", "cb": 0, "tb": 0, "cm": 0, "tm": 0, "lch": [], "bch": [], "mch": [], "hc": [] }, - { "name": "ReportingServices.Shared.Models.ProductionReport.Reactor", "rp": "ReportingServices.Shared_Reactor.html", "cl": 0, "ucl": 4, "cal": 4, "tl": 16, "ct": "LineCoverage", "cbm": "-", "cb": 0, "tb": 0, "cm": 0, "tm": 0, "lch": [], "bch": [], "mch": [], "hc": [] }, - { "name": "ReportingServices.Shared.Models.ProductionReport.ReactorOutsByDay", "rp": "ReportingServices.Shared_ReactorOutsByDay.html", "cl": 0, "ucl": 2, "cal": 2, "tl": 8, "ct": "LineCoverage", "cbm": "-", "cb": 0, "tb": 0, "cm": 0, "tm": 0, "lch": [], "bch": [], "mch": [], "hc": [] }, - { "name": "ReportingServices.Shared.Models.ProductionReport.ReactorOutsByRDS", "rp": "ReportingServices.Shared_ReactorOutsByRDS.html", "cl": 0, "ucl": 3, "cal": 3, "tl": 14, "ct": "LineCoverage", "cbm": "-", "cb": 0, "tb": 0, "cm": 0, "tm": 0, "lch": [], "bch": [], "mch": [], "hc": [] }, - { "name": "ReportingServices.Shared.Models.ProductionReport.ScrapByDay", "rp": "ReportingServices.Shared_ScrapByDay.html", "cl": 0, "ucl": 5, "cal": 5, "tl": 18, "ct": "LineCoverage", "cbm": "-", "cb": 0, "tb": 0, "cm": 0, "tm": 0, "lch": [], "bch": [], "mch": [], "hc": [] }, - { "name": "ReportingServices.Shared.Models.ProductionReport.ToolStateCurrent", "rp": "ReportingServices.Shared_ToolStateCurrent.html", "cl": 0, "ucl": 8, "cal": 8, "tl": 25, "ct": "LineCoverage", "cbm": "-", "cb": 0, "tb": 0, "cm": 0, "tm": 0, "lch": [], "bch": [], "mch": [], "hc": [] }, - { "name": "ReportingServices.Shared.Models.ProductionReport.YieldInformation", "rp": "ReportingServices.Shared_YieldInformation.html", "cl": 0, "ucl": 2, "cal": 2, "tl": 17, "ct": "LineCoverage", "cbm": "-", "cb": 0, "tb": 0, "cm": 0, "tm": 0, "lch": [], "bch": [], "mch": [], "hc": [] }, - { "name": "ReportingServices.Shared.Repositories.FabTimeReportingRepository", "rp": "ReportingServices.Shared_FabTimeReportingRepository.html", "cl": 0, "ucl": 27, "cal": 27, "tl": 56, "ct": "LineCoverage", "cbm": "-", "cb": 0, "tb": 2, "cm": 0, "tm": 0, "lch": [], "bch": [], "mch": [], "hc": [] }, - { "name": "ReportingServices.Shared.Repositories.ScrapeDatabaseRepository", "rp": "ReportingServices.Shared_ScrapeDatabaseRepository.html", "cl": 0, "ucl": 190, "cal": 190, "tl": 273, "ct": "LineCoverage", "cbm": "-", "cb": 0, "tb": 24, "cm": 0, "tm": 0, "lch": [], "bch": [], "mch": [], "hc": [] }, - { "name": "ReportingServices.Shared.ViewModels.ProductionReport.DailyReport", "rp": "ReportingServices.Shared_DailyReport.html", "cl": 0, "ucl": 107, "cal": 107, "tl": 145, "ct": "LineCoverage", "cbm": "-", "cb": 0, "tb": 12, "cm": 0, "tm": 0, "lch": [], "bch": [], "mch": [], "hc": [] }, - { "name": "ReportingServices.Shared.ViewModels.ProductionReport.SLLTool", "rp": "ReportingServices.Shared_SLLTool.html", "cl": 0, "ucl": 3, "cal": 3, "tl": 9, "ct": "LineCoverage", "cbm": "-", "cb": 0, "tb": 0, "cm": 0, "tm": 0, "lch": [], "bch": [], "mch": [], "hc": [] }, - { "name": "ReportingServices.Shared.ViewModels.ProductionReport.ToolStateByType", "rp": "ReportingServices.Shared_ToolStateByType.html", "cl": 0, "ucl": 50, "cal": 50, "tl": 71, "ct": "LineCoverage", "cbm": "-", "cb": 0, "tb": 28, "cm": 0, "tm": 0, "lch": [], "bch": [], "mch": [], "hc": [] }, - { "name": "ReportingServices.Shared.ViewModels.ProductionReport.UnloadTempsByDay", "rp": "ReportingServices.Shared_UnloadTempsByDay.html", "cl": 0, "ucl": 3, "cal": 3, "tl": 9, "ct": "LineCoverage", "cbm": "-", "cb": 0, "tb": 0, "cm": 0, "tm": 0, "lch": [], "bch": [], "mch": [], "hc": [] }, - { "name": "ReportingServices.Shared.ViewModels.ProductionReport.YieldStatistics", "rp": "ReportingServices.Shared_YieldStatistics.html", "cl": 0, "ucl": 39, "cal": 39, "tl": 61, "ct": "LineCoverage", "cbm": "-", "cb": 0, "tb": 10, "cm": 0, "tm": 0, "lch": [], "bch": [], "mch": [], "hc": [] }, - ]}, - { - "name": "ReportingServices.UI", - "classes": [ - { "name": "AspNetCoreGeneratedDocument.Views__ViewStart", "rp": "ReportingServices.UI_Views__ViewStart.html", "cl": 0, "ucl": 1, "cal": 1, "tl": 3, "ct": "LineCoverage", "cbm": "-", "cb": 0, "tb": 0, "cm": 0, "tm": 0, "lch": [], "bch": [], "mch": [], "hc": [] }, - { "name": "AspNetCoreGeneratedDocument.Views_Home_Index", "rp": "ReportingServices.UI_Views_Home_Index.html", "cl": 0, "ucl": 1, "cal": 1, "tl": 19, "ct": "LineCoverage", "cbm": "-", "cb": 0, "tb": 4, "cm": 0, "tm": 0, "lch": [], "bch": [], "mch": [], "hc": [] }, - { "name": "AspNetCoreGeneratedDocument.Views_PlanningReport_Index", "rp": "ReportingServices.UI_Views_PlanningReport_Index.html", "cl": 0, "ucl": 1, "cal": 1, "tl": 47, "ct": "LineCoverage", "cbm": "-", "cb": 0, "tb": 8, "cm": 0, "tm": 0, "lch": [], "bch": [], "mch": [], "hc": [] }, - { "name": "AspNetCoreGeneratedDocument.Views_PlanningReport_WeeklyPartChangesReport", "rp": "ReportingServices.UI_Views_PlanningReport_WeeklyPartChangesReport.html", "cl": 0, "ucl": 35, "cal": 35, "tl": 80, "ct": "LineCoverage", "cbm": "-", "cb": 0, "tb": 18, "cm": 0, "tm": 0, "lch": [], "bch": [], "mch": [], "hc": [] }, - { "name": "AspNetCoreGeneratedDocument.Views_ProductionReport_DailyReport", "rp": "ReportingServices.UI_Views_ProductionReport_DailyReport.html", "cl": 0, "ucl": 204, "cal": 204, "tl": 423, "ct": "LineCoverage", "cbm": "-", "cb": 0, "tb": 100, "cm": 0, "tm": 0, "lch": [], "bch": [], "mch": [], "hc": [] }, - { "name": "AspNetCoreGeneratedDocument.Views_ProductionReport_EditDailyReport", "rp": "ReportingServices.UI_Views_ProductionReport_EditDailyReport.html", "cl": 0, "ucl": 82, "cal": 82, "tl": 244, "ct": "LineCoverage", "cbm": "-", "cb": 0, "tb": 78, "cm": 0, "tm": 0, "lch": [], "bch": [], "mch": [], "hc": [] }, - { "name": "AspNetCoreGeneratedDocument.Views_ProductionReport_Index", "rp": "ReportingServices.UI_Views_ProductionReport_Index.html", "cl": 0, "ucl": 1, "cal": 1, "tl": 19, "ct": "LineCoverage", "cbm": "-", "cb": 0, "tb": 6, "cm": 0, "tm": 0, "lch": [], "bch": [], "mch": [], "hc": [] }, - { "name": "AspNetCoreGeneratedDocument.Views_Shared__DailyReportPartial", "rp": "ReportingServices.UI_Views_Shared__DailyReportPartial.html", "cl": 0, "ucl": 131, "cal": 131, "tl": 256, "ct": "LineCoverage", "cbm": "-", "cb": 0, "tb": 46, "cm": 0, "tm": 0, "lch": [], "bch": [], "mch": [], "hc": [] }, - { "name": "AspNetCoreGeneratedDocument.Views_Shared__Layout", "rp": "ReportingServices.UI_Views_Shared__Layout.html", "cl": 0, "ucl": 6, "cal": 6, "tl": 61, "ct": "LineCoverage", "cbm": "-", "cb": 0, "tb": 16, "cm": 0, "tm": 0, "lch": [], "bch": [], "mch": [], "hc": [] }, - { "name": "AspNetCoreGeneratedDocument.Views_Shared_Error", "rp": "ReportingServices.UI_Views_Shared_Error.html", "cl": 0, "ucl": 5, "cal": 5, "tl": 25, "ct": "LineCoverage", "cbm": "-", "cb": 0, "tb": 2, "cm": 0, "tm": 0, "lch": [], "bch": [], "mch": [], "hc": [] }, - { "name": "Program", "rp": "ReportingServices.UI_Program.html", "cl": 0, "ucl": 35, "cal": 35, "tl": 52, "ct": "LineCoverage", "cbm": "-", "cb": 0, "tb": 2, "cm": 0, "tm": 0, "lch": [], "bch": [], "mch": [], "hc": [] }, - { "name": "ReportingServices.UI.Controllers.HomeController", "rp": "ReportingServices.UI_HomeController.html", "cl": 0, "ucl": 11, "cal": 11, "tl": 28, "ct": "LineCoverage", "cbm": "-", "cb": 0, "tb": 4, "cm": 0, "tm": 0, "lch": [], "bch": [], "mch": [], "hc": [] }, - { "name": "ReportingServices.UI.Controllers.PlanningReportController", "rp": "ReportingServices.UI_PlanningReportController.html", "cl": 0, "ucl": 18, "cal": 18, "tl": 35, "ct": "LineCoverage", "cbm": "-", "cb": 0, "tb": 0, "cm": 0, "tm": 0, "lch": [], "bch": [], "mch": [], "hc": [] }, - { "name": "ReportingServices.UI.Controllers.ProductionReportController", "rp": "ReportingServices.UI_ProductionReportController.html", "cl": 0, "ucl": 28, "cal": 28, "tl": 58, "ct": "LineCoverage", "cbm": "-", "cb": 0, "tb": 0, "cm": 0, "tm": 0, "lch": [], "bch": [], "mch": [], "hc": [] }, - { "name": "ReportingServices.UI.Models.ErrorViewModel", "rp": "ReportingServices.UI_ErrorViewModel.html", "cl": 0, "ucl": 2, "cal": 2, "tl": 9, "ct": "LineCoverage", "cbm": "-", "cb": 0, "tb": 0, "cm": 0, "tm": 0, "lch": [], "bch": [], "mch": [], "hc": [] }, - ]}, -]; - -var historicCoverageExecutionTimes = []; - -var riskHotspotMetrics = [ - { "name": "Cyclomatic complexity", "explanationUrl": "https://en.wikipedia.org/wiki/Cyclomatic_complexity" }, -]; - -var riskHotspots = [ - { - "assembly": "ReportingServices.UI", "class": "AspNetCoreGeneratedDocument.Views_ProductionReport_DailyReport", "reportPath": "ReportingServices.UI_Views_ProductionReport_DailyReport.html", "methodName": "ExecuteAsync()", "methodShortName": "ExecuteAsync()", "fileIndex": 0, "line": 3, - "metrics": [ - { "value": 100, "exceeded": true }, - ]}, - { - "assembly": "ReportingServices.UI", "class": "AspNetCoreGeneratedDocument.Views_ProductionReport_EditDailyReport", "reportPath": "ReportingServices.UI_Views_ProductionReport_EditDailyReport.html", "methodName": "{"use strict";var e,_={},p={};function n(e){var a=p[e];if(void 0!==a)return a.exports;var r=p[e]={exports:{}};return _[e](r,r.exports,n),r.exports}n.m=_,e=[],n.O=(a,r,u,l)=>{if(!r){var o=1/0;for(f=0;f=l)&&Object.keys(n.O).every(h=>n.O[h](r[t]))?r.splice(t--,1):(v=!1,l0&&e[f-1][2]>l;f--)e[f]=e[f-1];e[f]=[r,u,l]},n.n=e=>{var a=e&&e.__esModule?()=>e.default:()=>e;return n.d(a,{a}),a},n.d=(e,a)=>{for(var r in a)n.o(a,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:a[r]})},n.o=(e,a)=>Object.prototype.hasOwnProperty.call(e,a),(()=>{var e={666:0};n.O.j=u=>0===e[u];var a=(u,l)=>{var t,c,[f,o,v]=l,s=0;if(f.some(d=>0!==e[d])){for(t in o)n.o(o,t)&&(n.m[t]=o[t]);if(v)var b=v(n)}for(u&&u(l);s{he(583)},583:()=>{!function(e){const n=e.performance;function i(I){n&&n.mark&&n.mark(I)}function r(I,p){n&&n.measure&&n.measure(I,p)}i("Zone");const c=e.__Zone_symbol_prefix||"__zone_symbol__";function u(I){return c+I}const f=!0===e[u("forceDuplicateZoneCheck")];if(e.Zone){if(f||"function"!=typeof e.Zone.__symbol__)throw new Error("Zone already loaded.");return e.Zone}let _=(()=>{class I{constructor(t,o){this._parent=t,this._name=o?o.name||"unnamed":"",this._properties=o&&o.properties||{},this._zoneDelegate=new T(this,this._parent&&this._parent._zoneDelegate,o)}static assertZonePatched(){if(e.Promise!==J.ZoneAwarePromise)throw new Error("Zone.js has detected that ZoneAwarePromise `(window|global).Promise` has been overwritten.\nMost likely cause is that a Promise polyfill has been loaded after Zone.js (Polyfilling Promise api is not necessary when zone.js is loaded. If you must load one, do so before loading zone.js.)")}static get root(){let t=I.current;for(;t.parent;)t=t.parent;return t}static get current(){return G.zone}static get currentTask(){return te}static __load_patch(t,o,g=!1){if(J.hasOwnProperty(t)){if(!g&&f)throw Error("Already loaded patch: "+t)}else if(!e["__Zone_disable_"+t]){const P="Zone:"+t;i(P),J[t]=o(e,I,le),r(P,P)}}get parent(){return this._parent}get name(){return this._name}get(t){const o=this.getZoneWith(t);if(o)return o._properties[t]}getZoneWith(t){let o=this;for(;o;){if(o._properties.hasOwnProperty(t))return o;o=o._parent}return null}fork(t){if(!t)throw new Error("ZoneSpec required!");return this._zoneDelegate.fork(this,t)}wrap(t,o){if("function"!=typeof t)throw new Error("Expecting function got: "+t);const g=this._zoneDelegate.intercept(this,t,o),P=this;return function(){return P.runGuarded(g,this,arguments,o)}}run(t,o,g,P){G={parent:G,zone:this};try{return this._zoneDelegate.invoke(this,t,o,g,P)}finally{G=G.parent}}runGuarded(t,o=null,g,P){G={parent:G,zone:this};try{try{return this._zoneDelegate.invoke(this,t,o,g,P)}catch(K){if(this._zoneDelegate.handleError(this,K))throw K}}finally{G=G.parent}}runTask(t,o,g){if(t.zone!=this)throw new Error("A task can only be run in the zone of creation! (Creation: "+(t.zone||z).name+"; Execution: "+this.name+")");if(t.state===j&&(t.type===R||t.type===M))return;const P=t.state!=X;P&&t._transitionTo(X,O),t.runCount++;const K=te;te=t,G={parent:G,zone:this};try{t.type==M&&t.data&&!t.data.isPeriodic&&(t.cancelFn=void 0);try{return this._zoneDelegate.invokeTask(this,t,o,g)}catch(l){if(this._zoneDelegate.handleError(this,l))throw l}}finally{t.state!==j&&t.state!==Y&&(t.type==R||t.data&&t.data.isPeriodic?P&&t._transitionTo(O,X):(t.runCount=0,this._updateTaskCount(t,-1),P&&t._transitionTo(j,X,j))),G=G.parent,te=K}}scheduleTask(t){if(t.zone&&t.zone!==this){let g=this;for(;g;){if(g===t.zone)throw Error(`can not reschedule task to ${this.name} which is descendants of the original zone ${t.zone.name}`);g=g.parent}}t._transitionTo(q,j);const o=[];t._zoneDelegates=o,t._zone=this;try{t=this._zoneDelegate.scheduleTask(this,t)}catch(g){throw t._transitionTo(Y,q,j),this._zoneDelegate.handleError(this,g),g}return t._zoneDelegates===o&&this._updateTaskCount(t,1),t.state==q&&t._transitionTo(O,q),t}scheduleMicroTask(t,o,g,P){return this.scheduleTask(new m(v,t,o,g,P,void 0))}scheduleMacroTask(t,o,g,P,K){return this.scheduleTask(new m(M,t,o,g,P,K))}scheduleEventTask(t,o,g,P,K){return this.scheduleTask(new m(R,t,o,g,P,K))}cancelTask(t){if(t.zone!=this)throw new Error("A task can only be cancelled in the zone of creation! (Creation: "+(t.zone||z).name+"; Execution: "+this.name+")");t._transitionTo(A,O,X);try{this._zoneDelegate.cancelTask(this,t)}catch(o){throw t._transitionTo(Y,A),this._zoneDelegate.handleError(this,o),o}return this._updateTaskCount(t,-1),t._transitionTo(j,A),t.runCount=0,t}_updateTaskCount(t,o){const g=t._zoneDelegates;-1==o&&(t._zoneDelegates=null);for(let P=0;PI.hasTask(t,o),onScheduleTask:(I,p,t,o)=>I.scheduleTask(t,o),onInvokeTask:(I,p,t,o,g,P)=>I.invokeTask(t,o,g,P),onCancelTask:(I,p,t,o)=>I.cancelTask(t,o)};class T{constructor(p,t,o){this._taskCounts={microTask:0,macroTask:0,eventTask:0},this.zone=p,this._parentDelegate=t,this._forkZS=o&&(o&&o.onFork?o:t._forkZS),this._forkDlgt=o&&(o.onFork?t:t._forkDlgt),this._forkCurrZone=o&&(o.onFork?this.zone:t._forkCurrZone),this._interceptZS=o&&(o.onIntercept?o:t._interceptZS),this._interceptDlgt=o&&(o.onIntercept?t:t._interceptDlgt),this._interceptCurrZone=o&&(o.onIntercept?this.zone:t._interceptCurrZone),this._invokeZS=o&&(o.onInvoke?o:t._invokeZS),this._invokeDlgt=o&&(o.onInvoke?t:t._invokeDlgt),this._invokeCurrZone=o&&(o.onInvoke?this.zone:t._invokeCurrZone),this._handleErrorZS=o&&(o.onHandleError?o:t._handleErrorZS),this._handleErrorDlgt=o&&(o.onHandleError?t:t._handleErrorDlgt),this._handleErrorCurrZone=o&&(o.onHandleError?this.zone:t._handleErrorCurrZone),this._scheduleTaskZS=o&&(o.onScheduleTask?o:t._scheduleTaskZS),this._scheduleTaskDlgt=o&&(o.onScheduleTask?t:t._scheduleTaskDlgt),this._scheduleTaskCurrZone=o&&(o.onScheduleTask?this.zone:t._scheduleTaskCurrZone),this._invokeTaskZS=o&&(o.onInvokeTask?o:t._invokeTaskZS),this._invokeTaskDlgt=o&&(o.onInvokeTask?t:t._invokeTaskDlgt),this._invokeTaskCurrZone=o&&(o.onInvokeTask?this.zone:t._invokeTaskCurrZone),this._cancelTaskZS=o&&(o.onCancelTask?o:t._cancelTaskZS),this._cancelTaskDlgt=o&&(o.onCancelTask?t:t._cancelTaskDlgt),this._cancelTaskCurrZone=o&&(o.onCancelTask?this.zone:t._cancelTaskCurrZone),this._hasTaskZS=null,this._hasTaskDlgt=null,this._hasTaskDlgtOwner=null,this._hasTaskCurrZone=null;const g=o&&o.onHasTask;(g||t&&t._hasTaskZS)&&(this._hasTaskZS=g?o:y,this._hasTaskDlgt=t,this._hasTaskDlgtOwner=this,this._hasTaskCurrZone=p,o.onScheduleTask||(this._scheduleTaskZS=y,this._scheduleTaskDlgt=t,this._scheduleTaskCurrZone=this.zone),o.onInvokeTask||(this._invokeTaskZS=y,this._invokeTaskDlgt=t,this._invokeTaskCurrZone=this.zone),o.onCancelTask||(this._cancelTaskZS=y,this._cancelTaskDlgt=t,this._cancelTaskCurrZone=this.zone))}fork(p,t){return this._forkZS?this._forkZS.onFork(this._forkDlgt,this.zone,p,t):new _(p,t)}intercept(p,t,o){return this._interceptZS?this._interceptZS.onIntercept(this._interceptDlgt,this._interceptCurrZone,p,t,o):t}invoke(p,t,o,g,P){return this._invokeZS?this._invokeZS.onInvoke(this._invokeDlgt,this._invokeCurrZone,p,t,o,g,P):t.apply(o,g)}handleError(p,t){return!this._handleErrorZS||this._handleErrorZS.onHandleError(this._handleErrorDlgt,this._handleErrorCurrZone,p,t)}scheduleTask(p,t){let o=t;if(this._scheduleTaskZS)this._hasTaskZS&&o._zoneDelegates.push(this._hasTaskDlgtOwner),o=this._scheduleTaskZS.onScheduleTask(this._scheduleTaskDlgt,this._scheduleTaskCurrZone,p,t),o||(o=t);else if(t.scheduleFn)t.scheduleFn(t);else{if(t.type!=v)throw new Error("Task is missing scheduleFn.");d(t)}return o}invokeTask(p,t,o,g){return this._invokeTaskZS?this._invokeTaskZS.onInvokeTask(this._invokeTaskDlgt,this._invokeTaskCurrZone,p,t,o,g):t.callback.apply(o,g)}cancelTask(p,t){let o;if(this._cancelTaskZS)o=this._cancelTaskZS.onCancelTask(this._cancelTaskDlgt,this._cancelTaskCurrZone,p,t);else{if(!t.cancelFn)throw Error("Task is not cancelable");o=t.cancelFn(t)}return o}hasTask(p,t){try{this._hasTaskZS&&this._hasTaskZS.onHasTask(this._hasTaskDlgt,this._hasTaskCurrZone,p,t)}catch(o){this.handleError(p,o)}}_updateTaskCount(p,t){const o=this._taskCounts,g=o[p],P=o[p]=g+t;if(P<0)throw new Error("More tasks executed then were scheduled.");0!=g&&0!=P||this.hasTask(this.zone,{microTask:o.microTask>0,macroTask:o.macroTask>0,eventTask:o.eventTask>0,change:p})}}class m{constructor(p,t,o,g,P,K){if(this._zone=null,this.runCount=0,this._zoneDelegates=null,this._state="notScheduled",this.type=p,this.source=t,this.data=g,this.scheduleFn=P,this.cancelFn=K,!o)throw new Error("callback is not defined");this.callback=o;const l=this;this.invoke=p===R&&g&&g.useG?m.invokeTask:function(){return m.invokeTask.call(e,l,this,arguments)}}static invokeTask(p,t,o){p||(p=this),re++;try{return p.runCount++,p.zone.runTask(p,t,o)}finally{1==re&&L(),re--}}get zone(){return this._zone}get state(){return this._state}cancelScheduleRequest(){this._transitionTo(j,q)}_transitionTo(p,t,o){if(this._state!==t&&this._state!==o)throw new Error(`${this.type} '${this.source}': can not transition to '${p}', expecting state '${t}'${o?" or '"+o+"'":""}, was '${this._state}'.`);this._state=p,p==j&&(this._zoneDelegates=null)}toString(){return this.data&&typeof this.data.handleId<"u"?this.data.handleId.toString():Object.prototype.toString.call(this)}toJSON(){return{type:this.type,state:this.state,source:this.source,zone:this.zone.name,runCount:this.runCount}}}const S=u("setTimeout"),D=u("Promise"),Z=u("then");let E,B=[],V=!1;function d(I){if(0===re&&0===B.length)if(E||e[D]&&(E=e[D].resolve(0)),E){let p=E[Z];p||(p=E.then),p.call(E,L)}else e[S](L,0);I&&B.push(I)}function L(){if(!V){for(V=!0;B.length;){const I=B;B=[];for(let p=0;pG,onUnhandledError:F,microtaskDrainDone:F,scheduleMicroTask:d,showUncaughtError:()=>!_[u("ignoreConsoleErrorUncaughtError")],patchEventTarget:()=>[],patchOnProperties:F,patchMethod:()=>F,bindArguments:()=>[],patchThen:()=>F,patchMacroTask:()=>F,patchEventPrototype:()=>F,isIEOrEdge:()=>!1,getGlobalObjects:()=>{},ObjectDefineProperty:()=>F,ObjectGetOwnPropertyDescriptor:()=>{},ObjectCreate:()=>{},ArraySlice:()=>[],patchClass:()=>F,wrapWithCurrentZone:()=>F,filterProperties:()=>[],attachOriginToPatched:()=>F,_redefineProperty:()=>F,patchCallbacks:()=>F};let G={parent:null,zone:new _(null,null)},te=null,re=0;function F(){}r("Zone","Zone"),e.Zone=_}(typeof window<"u"&&window||typeof self<"u"&&self||global);const ue=Object.getOwnPropertyDescriptor,he=Object.defineProperty,de=Object.getPrototypeOf,Be=Object.create,ut=Array.prototype.slice,Se="addEventListener",Oe="removeEventListener",Ze=Zone.__symbol__(Se),Ie=Zone.__symbol__(Oe),se="true",ie="false",ke=Zone.__symbol__("");function Le(e,n){return Zone.current.wrap(e,n)}function Me(e,n,i,r,c){return Zone.current.scheduleMacroTask(e,n,i,r,c)}const x=Zone.__symbol__,Pe=typeof window<"u",pe=Pe?window:void 0,$=Pe&&pe||"object"==typeof self&&self||global,ht=[null];function Ae(e,n){for(let i=e.length-1;i>=0;i--)"function"==typeof e[i]&&(e[i]=Le(e[i],n+"_"+i));return e}function Fe(e){return!e||!1!==e.writable&&!("function"==typeof e.get&&typeof e.set>"u")}const Ue=typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope,Re=!("nw"in $)&&typeof $.process<"u"&&"[object process]"==={}.toString.call($.process),je=!Re&&!Ue&&!(!Pe||!pe.HTMLElement),We=typeof $.process<"u"&&"[object process]"==={}.toString.call($.process)&&!Ue&&!(!Pe||!pe.HTMLElement),Ce={},qe=function(e){if(!(e=e||$.event))return;let n=Ce[e.type];n||(n=Ce[e.type]=x("ON_PROPERTY"+e.type));const i=this||e.target||$,r=i[n];let c;if(je&&i===pe&&"error"===e.type){const u=e;c=r&&r.call(this,u.message,u.filename,u.lineno,u.colno,u.error),!0===c&&e.preventDefault()}else c=r&&r.apply(this,arguments),null!=c&&!c&&e.preventDefault();return c};function Xe(e,n,i){let r=ue(e,n);if(!r&&i&&ue(i,n)&&(r={enumerable:!0,configurable:!0}),!r||!r.configurable)return;const c=x("on"+n+"patched");if(e.hasOwnProperty(c)&&e[c])return;delete r.writable,delete r.value;const u=r.get,f=r.set,_=n.substr(2);let y=Ce[_];y||(y=Ce[_]=x("ON_PROPERTY"+_)),r.set=function(T){let m=this;!m&&e===$&&(m=$),m&&(m[y]&&m.removeEventListener(_,qe),f&&f.apply(m,ht),"function"==typeof T?(m[y]=T,m.addEventListener(_,qe,!1)):m[y]=null)},r.get=function(){let T=this;if(!T&&e===$&&(T=$),!T)return null;const m=T[y];if(m)return m;if(u){let S=u&&u.call(this);if(S)return r.set.call(this,S),"function"==typeof T.removeAttribute&&T.removeAttribute(n),S}return null},he(e,n,r),e[c]=!0}function Ye(e,n,i){if(n)for(let r=0;rfunction(f,_){const y=i(f,_);return y.cbIdx>=0&&"function"==typeof _[y.cbIdx]?Me(y.name,_[y.cbIdx],y,c):u.apply(f,_)})}function ae(e,n){e[x("OriginalDelegate")]=n}let $e=!1,He=!1;function mt(){if($e)return He;$e=!0;try{const e=pe.navigator.userAgent;(-1!==e.indexOf("MSIE ")||-1!==e.indexOf("Trident/")||-1!==e.indexOf("Edge/"))&&(He=!0)}catch{}return He}Zone.__load_patch("ZoneAwarePromise",(e,n,i)=>{const r=Object.getOwnPropertyDescriptor,c=Object.defineProperty,f=i.symbol,_=[],y=!0===e[f("DISABLE_WRAPPING_UNCAUGHT_PROMISE_REJECTION")],T=f("Promise"),m=f("then");i.onUnhandledError=l=>{if(i.showUncaughtError()){const s=l&&l.rejection;s?console.error("Unhandled Promise rejection:",s instanceof Error?s.message:s,"; Zone:",l.zone.name,"; Task:",l.task&&l.task.source,"; Value:",s,s instanceof Error?s.stack:void 0):console.error(l)}},i.microtaskDrainDone=()=>{for(;_.length;){const l=_.shift();try{l.zone.runGuarded(()=>{throw l.throwOriginal?l.rejection:l})}catch(s){Z(s)}}};const D=f("unhandledPromiseRejectionHandler");function Z(l){i.onUnhandledError(l);try{const s=n[D];"function"==typeof s&&s.call(this,l)}catch{}}function B(l){return l&&l.then}function V(l){return l}function E(l){return t.reject(l)}const d=f("state"),L=f("value"),z=f("finally"),j=f("parentPromiseValue"),q=f("parentPromiseState"),X=null,A=!0,Y=!1;function M(l,s){return a=>{try{G(l,s,a)}catch(h){G(l,!1,h)}}}const le=f("currentTaskTrace");function G(l,s,a){const h=function(){let l=!1;return function(a){return function(){l||(l=!0,a.apply(null,arguments))}}}();if(l===a)throw new TypeError("Promise resolved with itself");if(l[d]===X){let w=null;try{("object"==typeof a||"function"==typeof a)&&(w=a&&a.then)}catch(C){return h(()=>{G(l,!1,C)})(),l}if(s!==Y&&a instanceof t&&a.hasOwnProperty(d)&&a.hasOwnProperty(L)&&a[d]!==X)re(a),G(l,a[d],a[L]);else if(s!==Y&&"function"==typeof w)try{w.call(a,h(M(l,s)),h(M(l,!1)))}catch(C){h(()=>{G(l,!1,C)})()}else{l[d]=s;const C=l[L];if(l[L]=a,l[z]===z&&s===A&&(l[d]=l[q],l[L]=l[j]),s===Y&&a instanceof Error){const k=n.currentTask&&n.currentTask.data&&n.currentTask.data.__creationTrace__;k&&c(a,le,{configurable:!0,enumerable:!1,writable:!0,value:k})}for(let k=0;k{try{const b=l[L],N=!!a&&z===a[z];N&&(a[j]=b,a[q]=C);const H=s.run(k,void 0,N&&k!==E&&k!==V?[]:[b]);G(a,!0,H)}catch(b){G(a,!1,b)}},a)}const p=function(){};class t{static toString(){return"function ZoneAwarePromise() { [native code] }"}static resolve(s){return G(new this(null),A,s)}static reject(s){return G(new this(null),Y,s)}static race(s){let a,h,w=new this((b,N)=>{a=b,h=N});function C(b){a(b)}function k(b){h(b)}for(let b of s)B(b)||(b=this.resolve(b)),b.then(C,k);return w}static all(s){return t.allWithCallback(s)}static allSettled(s){return(this&&this.prototype instanceof t?this:t).allWithCallback(s,{thenCallback:h=>({status:"fulfilled",value:h}),errorCallback:h=>({status:"rejected",reason:h})})}static allWithCallback(s,a){let h,w,C=new this((H,U)=>{h=H,w=U}),k=2,b=0;const N=[];for(let H of s){B(H)||(H=this.resolve(H));const U=b;try{H.then(Q=>{N[U]=a?a.thenCallback(Q):Q,k--,0===k&&h(N)},Q=>{a?(N[U]=a.errorCallback(Q),k--,0===k&&h(N)):w(Q)})}catch(Q){w(Q)}k++,b++}return k-=2,0===k&&h(N),C}constructor(s){const a=this;if(!(a instanceof t))throw new Error("Must be an instanceof Promise.");a[d]=X,a[L]=[];try{s&&s(M(a,A),M(a,Y))}catch(h){G(a,!1,h)}}get[Symbol.toStringTag](){return"Promise"}get[Symbol.species](){return t}then(s,a){let h=this.constructor[Symbol.species];(!h||"function"!=typeof h)&&(h=this.constructor||t);const w=new h(p),C=n.current;return this[d]==X?this[L].push(C,w,s,a):F(this,C,w,s,a),w}catch(s){return this.then(null,s)}finally(s){let a=this.constructor[Symbol.species];(!a||"function"!=typeof a)&&(a=t);const h=new a(p);h[z]=z;const w=n.current;return this[d]==X?this[L].push(w,h,s,s):F(this,w,h,s,s),h}}t.resolve=t.resolve,t.reject=t.reject,t.race=t.race,t.all=t.all;const o=e[T]=e.Promise;e.Promise=t;const g=f("thenPatched");function P(l){const s=l.prototype,a=r(s,"then");if(a&&(!1===a.writable||!a.configurable))return;const h=s.then;s[m]=h,l.prototype.then=function(w,C){return new t((b,N)=>{h.call(this,b,N)}).then(w,C)},l[g]=!0}return i.patchThen=P,o&&(P(o),ce(e,"fetch",l=>function K(l){return function(s,a){let h=l.apply(s,a);if(h instanceof t)return h;let w=h.constructor;return w[g]||P(w),h}}(l))),Promise[n.__symbol__("uncaughtPromiseErrors")]=_,t}),Zone.__load_patch("toString",e=>{const n=Function.prototype.toString,i=x("OriginalDelegate"),r=x("Promise"),c=x("Error"),u=function(){if("function"==typeof this){const T=this[i];if(T)return"function"==typeof T?n.call(T):Object.prototype.toString.call(T);if(this===Promise){const m=e[r];if(m)return n.call(m)}if(this===Error){const m=e[c];if(m)return n.call(m)}}return n.call(this)};u[i]=n,Function.prototype.toString=u;const f=Object.prototype.toString;Object.prototype.toString=function(){return"function"==typeof Promise&&this instanceof Promise?"[object Promise]":f.call(this)}});let me=!1;if(typeof window<"u")try{const e=Object.defineProperty({},"passive",{get:function(){me=!0}});window.addEventListener("test",e,e),window.removeEventListener("test",e,e)}catch{me=!1}const Et={useG:!0},ee={},Ke={},Je=new RegExp("^"+ke+"(\\w+)(true|false)$"),xe=x("propagationStopped");function Qe(e,n){const i=(n?n(e):e)+ie,r=(n?n(e):e)+se,c=ke+i,u=ke+r;ee[e]={},ee[e][ie]=c,ee[e][se]=u}function Tt(e,n,i){const r=i&&i.add||Se,c=i&&i.rm||Oe,u=i&&i.listeners||"eventListeners",f=i&&i.rmAll||"removeAllListeners",_=x(r),y="."+r+":",S=function(E,d,L){if(E.isRemoved)return;const z=E.callback;"object"==typeof z&&z.handleEvent&&(E.callback=q=>z.handleEvent(q),E.originalDelegate=z),E.invoke(E,d,[L]);const j=E.options;j&&"object"==typeof j&&j.once&&d[c].call(d,L.type,E.originalDelegate?E.originalDelegate:E.callback,j)},D=function(E){if(!(E=E||e.event))return;const d=this||E.target||e,L=d[ee[E.type][ie]];if(L)if(1===L.length)S(L[0],d,E);else{const z=L.slice();for(let j=0;jfunction(c,u){c[xe]=!0,r&&r.apply(c,u)})}function yt(e,n,i,r,c){const u=Zone.__symbol__(r);if(n[u])return;const f=n[u]=n[r];n[r]=function(_,y,T){return y&&y.prototype&&c.forEach(function(m){const S=`${i}.${r}::`+m,D=y.prototype;if(D.hasOwnProperty(m)){const Z=e.ObjectGetOwnPropertyDescriptor(D,m);Z&&Z.value?(Z.value=e.wrapWithCurrentZone(Z.value,S),e._redefineProperty(y.prototype,m,Z)):D[m]&&(D[m]=e.wrapWithCurrentZone(D[m],S))}else D[m]&&(D[m]=e.wrapWithCurrentZone(D[m],S))}),f.call(n,_,y,T)},e.attachOriginToPatched(n[r],f)}const Ve=["absolutedeviceorientation","afterinput","afterprint","appinstalled","beforeinstallprompt","beforeprint","beforeunload","devicelight","devicemotion","deviceorientation","deviceorientationabsolute","deviceproximity","hashchange","languagechange","message","mozbeforepaint","offline","online","paint","pageshow","pagehide","popstate","rejectionhandled","storage","unhandledrejection","unload","userproximity","vrdisplayconnected","vrdisplaydisconnected","vrdisplaypresentchange"],wt=["encrypted","waitingforkey","msneedkey","mozinterruptbegin","mozinterruptend"],tt=["load"],nt=["blur","error","focus","load","resize","scroll","messageerror"],Dt=["bounce","finish","start"],rt=["loadstart","progress","abort","error","load","progress","timeout","loadend","readystatechange"],Ee=["upgradeneeded","complete","abort","success","error","blocked","versionchange","close"],St=["close","error","open","message"],Ot=["error","message"],Te=["abort","animationcancel","animationend","animationiteration","auxclick","beforeinput","blur","cancel","canplay","canplaythrough","change","compositionstart","compositionupdate","compositionend","cuechange","click","close","contextmenu","curechange","dblclick","drag","dragend","dragenter","dragexit","dragleave","dragover","drop","durationchange","emptied","ended","error","focus","focusin","focusout","gotpointercapture","input","invalid","keydown","keypress","keyup","load","loadstart","loadeddata","loadedmetadata","lostpointercapture","mousedown","mouseenter","mouseleave","mousemove","mouseout","mouseover","mouseup","mousewheel","orientationchange","pause","play","playing","pointercancel","pointerdown","pointerenter","pointerleave","pointerlockchange","mozpointerlockchange","webkitpointerlockerchange","pointerlockerror","mozpointerlockerror","webkitpointerlockerror","pointermove","pointout","pointerover","pointerup","progress","ratechange","reset","resize","scroll","seeked","seeking","select","selectionchange","selectstart","show","sort","stalled","submit","suspend","timeupdate","volumechange","touchcancel","touchmove","touchstart","touchend","transitioncancel","transitionend","waiting","wheel"].concat(["webglcontextrestored","webglcontextlost","webglcontextcreationerror"],["autocomplete","autocompleteerror"],["toggle"],["afterscriptexecute","beforescriptexecute","DOMContentLoaded","freeze","fullscreenchange","mozfullscreenchange","webkitfullscreenchange","msfullscreenchange","fullscreenerror","mozfullscreenerror","webkitfullscreenerror","msfullscreenerror","readystatechange","visibilitychange","resume"],Ve,["beforecopy","beforecut","beforepaste","copy","cut","paste","dragstart","loadend","animationstart","search","transitionrun","transitionstart","webkitanimationend","webkitanimationiteration","webkitanimationstart","webkittransitionend"],["activate","afterupdate","ariarequest","beforeactivate","beforedeactivate","beforeeditfocus","beforeupdate","cellchange","controlselect","dataavailable","datasetchanged","datasetcomplete","errorupdate","filterchange","layoutcomplete","losecapture","move","moveend","movestart","propertychange","resizeend","resizestart","rowenter","rowexit","rowsdelete","rowsinserted","command","compassneedscalibration","deactivate","help","mscontentzoom","msmanipulationstatechanged","msgesturechange","msgesturedoubletap","msgestureend","msgesturehold","msgesturestart","msgesturetap","msgotpointercapture","msinertiastart","mslostpointercapture","mspointercancel","mspointerdown","mspointerenter","mspointerhover","mspointerleave","mspointermove","mspointerout","mspointerover","mspointerup","pointerout","mssitemodejumplistitemremoved","msthumbnailclick","stop","storagecommit"]);function ot(e,n,i){if(!i||0===i.length)return n;const r=i.filter(u=>u.target===e);if(!r||0===r.length)return n;const c=r[0].ignoreProperties;return n.filter(u=>-1===c.indexOf(u))}function W(e,n,i,r){e&&Ye(e,ot(e,n,i),r)}Zone.__load_patch("util",(e,n,i)=>{i.patchOnProperties=Ye,i.patchMethod=ce,i.bindArguments=Ae,i.patchMacroTask=_t;const r=n.__symbol__("BLACK_LISTED_EVENTS"),c=n.__symbol__("UNPATCHED_EVENTS");e[c]&&(e[r]=e[c]),e[r]&&(n[r]=n[c]=e[r]),i.patchEventPrototype=gt,i.patchEventTarget=Tt,i.isIEOrEdge=mt,i.ObjectDefineProperty=he,i.ObjectGetOwnPropertyDescriptor=ue,i.ObjectCreate=Be,i.ArraySlice=ut,i.patchClass=ve,i.wrapWithCurrentZone=Le,i.filterProperties=ot,i.attachOriginToPatched=ae,i._redefineProperty=Object.defineProperty,i.patchCallbacks=yt,i.getGlobalObjects=()=>({globalSources:Ke,zoneSymbolEventNames:ee,eventNames:Te,isBrowser:je,isMix:We,isNode:Re,TRUE_STR:se,FALSE_STR:ie,ZONE_SYMBOL_PREFIX:ke,ADD_EVENT_LISTENER_STR:Se,REMOVE_EVENT_LISTENER_STR:Oe})});const Ne=x("zoneTask");function ge(e,n,i,r){let c=null,u=null;i+=r;const f={};function _(T){const m=T.data;return m.args[0]=function(){return T.invoke.apply(this,arguments)},m.handleId=c.apply(e,m.args),T}function y(T){return u.call(e,T.data.handleId)}c=ce(e,n+=r,T=>function(m,S){if("function"==typeof S[0]){const D={isPeriodic:"Interval"===r,delay:"Timeout"===r||"Interval"===r?S[1]||0:void 0,args:S},Z=S[0];S[0]=function(){try{return Z.apply(this,arguments)}finally{D.isPeriodic||("number"==typeof D.handleId?delete f[D.handleId]:D.handleId&&(D.handleId[Ne]=null))}};const B=Me(n,S[0],D,_,y);if(!B)return B;const V=B.data.handleId;return"number"==typeof V?f[V]=B:V&&(V[Ne]=B),V&&V.ref&&V.unref&&"function"==typeof V.ref&&"function"==typeof V.unref&&(B.ref=V.ref.bind(V),B.unref=V.unref.bind(V)),"number"==typeof V||V?V:B}return T.apply(e,S)}),u=ce(e,i,T=>function(m,S){const D=S[0];let Z;"number"==typeof D?Z=f[D]:(Z=D&&D[Ne],Z||(Z=D)),Z&&"string"==typeof Z.type?"notScheduled"!==Z.state&&(Z.cancelFn&&Z.data.isPeriodic||0===Z.runCount)&&("number"==typeof D?delete f[D]:D&&(D[Ne]=null),Z.zone.cancelTask(Z)):T.apply(e,S)})}Zone.__load_patch("legacy",e=>{const n=e[Zone.__symbol__("legacyPatch")];n&&n()}),Zone.__load_patch("queueMicrotask",(e,n,i)=>{i.patchMethod(e,"queueMicrotask",r=>function(c,u){n.current.scheduleMicroTask("queueMicrotask",u[0])})}),Zone.__load_patch("timers",e=>{const n="set",i="clear";ge(e,n,i,"Timeout"),ge(e,n,i,"Interval"),ge(e,n,i,"Immediate")}),Zone.__load_patch("requestAnimationFrame",e=>{ge(e,"request","cancel","AnimationFrame"),ge(e,"mozRequest","mozCancel","AnimationFrame"),ge(e,"webkitRequest","webkitCancel","AnimationFrame")}),Zone.__load_patch("blocking",(e,n)=>{const i=["alert","prompt","confirm"];for(let r=0;rfunction(y,T){return n.current.run(u,e,T,_)})}),Zone.__load_patch("EventTarget",(e,n,i)=>{(function Mt(e,n){n.patchEventPrototype(e,n)})(e,i),function Lt(e,n){if(Zone[n.symbol("patchEventTarget")])return;const{eventNames:i,zoneSymbolEventNames:r,TRUE_STR:c,FALSE_STR:u,ZONE_SYMBOL_PREFIX:f}=n.getGlobalObjects();for(let y=0;y{ve("MutationObserver"),ve("WebKitMutationObserver")}),Zone.__load_patch("IntersectionObserver",(e,n,i)=>{ve("IntersectionObserver")}),Zone.__load_patch("FileReader",(e,n,i)=>{ve("FileReader")}),Zone.__load_patch("on_property",(e,n,i)=>{!function Zt(e,n){if(Re&&!We||Zone[e.symbol("patchEvents")])return;const i=typeof WebSocket<"u",r=n.__Zone_ignore_on_properties;if(je){const f=window,_=function pt(){try{const e=pe.navigator.userAgent;if(-1!==e.indexOf("MSIE ")||-1!==e.indexOf("Trident/"))return!0}catch{}return!1}()?[{target:f,ignoreProperties:["error"]}]:[];W(f,Te.concat(["messageerror"]),r&&r.concat(_),de(f)),W(Document.prototype,Te,r),typeof f.SVGElement<"u"&&W(f.SVGElement.prototype,Te,r),W(Element.prototype,Te,r),W(HTMLElement.prototype,Te,r),W(HTMLMediaElement.prototype,wt,r),W(HTMLFrameSetElement.prototype,Ve.concat(nt),r),W(HTMLBodyElement.prototype,Ve.concat(nt),r),W(HTMLFrameElement.prototype,tt,r),W(HTMLIFrameElement.prototype,tt,r);const y=f.HTMLMarqueeElement;y&&W(y.prototype,Dt,r);const T=f.Worker;T&&W(T.prototype,Ot,r)}const c=n.XMLHttpRequest;c&&W(c.prototype,rt,r);const u=n.XMLHttpRequestEventTarget;u&&W(u&&u.prototype,rt,r),typeof IDBIndex<"u"&&(W(IDBIndex.prototype,Ee,r),W(IDBRequest.prototype,Ee,r),W(IDBOpenDBRequest.prototype,Ee,r),W(IDBDatabase.prototype,Ee,r),W(IDBTransaction.prototype,Ee,r),W(IDBCursor.prototype,Ee,r)),i&&W(WebSocket.prototype,St,r)}(i,e)}),Zone.__load_patch("customElements",(e,n,i)=>{!function It(e,n){const{isBrowser:i,isMix:r}=n.getGlobalObjects();(i||r)&&e.customElements&&"customElements"in e&&n.patchCallbacks(n,e.customElements,"customElements","define",["connectedCallback","disconnectedCallback","adoptedCallback","attributeChangedCallback"])}(e,i)}),Zone.__load_patch("XHR",(e,n)=>{!function y(T){const m=T.XMLHttpRequest;if(!m)return;const S=m.prototype;let Z=S[Ze],B=S[Ie];if(!Z){const v=T.XMLHttpRequestEventTarget;if(v){const M=v.prototype;Z=M[Ze],B=M[Ie]}}const V="readystatechange",E="scheduled";function d(v){const M=v.data,R=M.target;R[u]=!1,R[_]=!1;const J=R[c];Z||(Z=R[Ze],B=R[Ie]),J&&B.call(R,V,J);const le=R[c]=()=>{if(R.readyState===R.DONE)if(!M.aborted&&R[u]&&v.state===E){const te=R[n.__symbol__("loadfalse")];if(0!==R.status&&te&&te.length>0){const re=v.invoke;v.invoke=function(){const F=R[n.__symbol__("loadfalse")];for(let I=0;Ifunction(v,M){return v[r]=0==M[2],v[f]=M[1],j.apply(v,M)}),O=x("fetchTaskAborting"),X=x("fetchTaskScheduling"),A=ce(S,"send",()=>function(v,M){if(!0===n.current[X]||v[r])return A.apply(v,M);{const R={target:v,url:v[f],isPeriodic:!1,args:M,aborted:!1},J=Me("XMLHttpRequest.send",L,R,d,z);v&&!0===v[_]&&!R.aborted&&J.state===E&&J.invoke()}}),Y=ce(S,"abort",()=>function(v,M){const R=function D(v){return v[i]}(v);if(R&&"string"==typeof R.type){if(null==R.cancelFn||R.data&&R.data.aborted)return;R.zone.cancelTask(R)}else if(!0===n.current[O])return Y.apply(v,M)})}(e);const i=x("xhrTask"),r=x("xhrSync"),c=x("xhrListener"),u=x("xhrScheduled"),f=x("xhrURL"),_=x("xhrErrorBeforeScheduled")}),Zone.__load_patch("geolocation",e=>{e.navigator&&e.navigator.geolocation&&function dt(e,n){const i=e.constructor.name;for(let r=0;r{const y=function(){return _.apply(this,Ae(arguments,i+"."+c))};return ae(y,_),y})(u)}}}(e.navigator.geolocation,["getCurrentPosition","watchPosition"])}),Zone.__load_patch("PromiseRejectionEvent",(e,n)=>{function i(r){return function(c){et(e,r).forEach(f=>{const _=e.PromiseRejectionEvent;if(_){const y=new _(r,{promise:c.promise,reason:c.rejection});f.invoke(y)}})}}e.PromiseRejectionEvent&&(n[x("unhandledPromiseRejectionHandler")]=i("unhandledrejection"),n[x("rejectionHandledHandler")]=i("rejectionhandled"))})}},we=>{we(we.s=435)}]); - -"use strict";(self.webpackChunkcoverage_app=self.webpackChunkcoverage_app||[]).push([[179],{103:()=>{function ve(e){return"function"==typeof e}function Bo(e){const n=e(r=>{Error.call(r),r.stack=(new Error).stack});return n.prototype=Object.create(Error.prototype),n.prototype.constructor=n,n}const Ho=Bo(e=>function(n){e(this),this.message=n?`${n.length} errors occurred during unsubscription:\n${n.map((r,o)=>`${o+1}) ${r.toString()}`).join("\n ")}`:"",this.name="UnsubscriptionError",this.errors=n});function Lr(e,t){if(e){const n=e.indexOf(t);0<=n&&e.splice(n,1)}}class Nt{constructor(t){this.initialTeardown=t,this.closed=!1,this._parentage=null,this._teardowns=null}unsubscribe(){let t;if(!this.closed){this.closed=!0;const{_parentage:n}=this;if(n)if(this._parentage=null,Array.isArray(n))for(const i of n)i.remove(this);else n.remove(this);const{initialTeardown:r}=this;if(ve(r))try{r()}catch(i){t=i instanceof Ho?i.errors:[i]}const{_teardowns:o}=this;if(o){this._teardowns=null;for(const i of o)try{Lu(i)}catch(s){t=t??[],s instanceof Ho?t=[...t,...s.errors]:t.push(s)}}if(t)throw new Ho(t)}}add(t){var n;if(t&&t!==this)if(this.closed)Lu(t);else{if(t instanceof Nt){if(t.closed||t._hasParent(this))return;t._addParent(this)}(this._teardowns=null!==(n=this._teardowns)&&void 0!==n?n:[]).push(t)}}_hasParent(t){const{_parentage:n}=this;return n===t||Array.isArray(n)&&n.includes(t)}_addParent(t){const{_parentage:n}=this;this._parentage=Array.isArray(n)?(n.push(t),n):n?[n,t]:t}_removeParent(t){const{_parentage:n}=this;n===t?this._parentage=null:Array.isArray(n)&&Lr(n,t)}remove(t){const{_teardowns:n}=this;n&&Lr(n,t),t instanceof Nt&&t._removeParent(this)}}Nt.EMPTY=(()=>{const e=new Nt;return e.closed=!0,e})();const Pu=Nt.EMPTY;function ku(e){return e instanceof Nt||e&&"closed"in e&&ve(e.remove)&&ve(e.add)&&ve(e.unsubscribe)}function Lu(e){ve(e)?e():e.unsubscribe()}const wn={onUnhandledError:null,onStoppedNotification:null,Promise:void 0,useDeprecatedSynchronousErrorHandling:!1,useDeprecatedNextContext:!1},jo={setTimeout(...e){const{delegate:t}=jo;return(t?.setTimeout||setTimeout)(...e)},clearTimeout(e){const{delegate:t}=jo;return(t?.clearTimeout||clearTimeout)(e)},delegate:void 0};function Vu(e){jo.setTimeout(()=>{const{onUnhandledError:t}=wn;if(!t)throw e;t(e)})}function $o(){}const Hv=Ps("C",void 0,void 0);function Ps(e,t,n){return{kind:e,value:t,error:n}}let bn=null;function Uo(e){if(wn.useDeprecatedSynchronousErrorHandling){const t=!bn;if(t&&(bn={errorThrown:!1,error:null}),e(),t){const{errorThrown:n,error:r}=bn;if(bn=null,n)throw r}}else e()}class ks extends Nt{constructor(t){super(),this.isStopped=!1,t?(this.destination=t,ku(t)&&t.add(this)):this.destination=zv}static create(t,n,r){return new Ls(t,n,r)}next(t){this.isStopped?Bs(function $v(e){return Ps("N",e,void 0)}(t),this):this._next(t)}error(t){this.isStopped?Bs(function jv(e){return Ps("E",void 0,e)}(t),this):(this.isStopped=!0,this._error(t))}complete(){this.isStopped?Bs(Hv,this):(this.isStopped=!0,this._complete())}unsubscribe(){this.closed||(this.isStopped=!0,super.unsubscribe(),this.destination=null)}_next(t){this.destination.next(t)}_error(t){try{this.destination.error(t)}finally{this.unsubscribe()}}_complete(){try{this.destination.complete()}finally{this.unsubscribe()}}}class Ls extends ks{constructor(t,n,r){let o;if(super(),ve(t))o=t;else if(t){let i;({next:o,error:n,complete:r}=t),this&&wn.useDeprecatedNextContext?(i=Object.create(t),i.unsubscribe=()=>this.unsubscribe()):i=t,o=o?.bind(i),n=n?.bind(i),r=r?.bind(i)}this.destination={next:o?Vs(o):$o,error:Vs(n??Bu),complete:r?Vs(r):$o}}}function Vs(e,t){return(...n)=>{try{e(...n)}catch(r){wn.useDeprecatedSynchronousErrorHandling?function Uv(e){wn.useDeprecatedSynchronousErrorHandling&&bn&&(bn.errorThrown=!0,bn.error=e)}(r):Vu(r)}}}function Bu(e){throw e}function Bs(e,t){const{onStoppedNotification:n}=wn;n&&jo.setTimeout(()=>n(e,t))}const zv={closed:!0,next:$o,error:Bu,complete:$o},Hs="function"==typeof Symbol&&Symbol.observable||"@@observable";function Hu(e){return e}let ze=(()=>{class e{constructor(n){n&&(this._subscribe=n)}lift(n){const r=new e;return r.source=this,r.operator=n,r}subscribe(n,r,o){const i=function Wv(e){return e&&e instanceof ks||function Gv(e){return e&&ve(e.next)&&ve(e.error)&&ve(e.complete)}(e)&&ku(e)}(n)?n:new Ls(n,r,o);return Uo(()=>{const{operator:s,source:a}=this;i.add(s?s.call(i,a):a?this._subscribe(i):this._trySubscribe(i))}),i}_trySubscribe(n){try{return this._subscribe(n)}catch(r){n.error(r)}}forEach(n,r){return new(r=$u(r))((o,i)=>{let s;s=this.subscribe(a=>{try{n(a)}catch(l){i(l),s?.unsubscribe()}},i,o)})}_subscribe(n){var r;return null===(r=this.source)||void 0===r?void 0:r.subscribe(n)}[Hs](){return this}pipe(...n){return function ju(e){return 0===e.length?Hu:1===e.length?e[0]:function(n){return e.reduce((r,o)=>o(r),n)}}(n)(this)}toPromise(n){return new(n=$u(n))((r,o)=>{let i;this.subscribe(s=>i=s,s=>o(s),()=>r(i))})}}return e.create=t=>new e(t),e})();function $u(e){var t;return null!==(t=e??wn.Promise)&&void 0!==t?t:Promise}const qv=Bo(e=>function(){e(this),this.name="ObjectUnsubscribedError",this.message="object unsubscribed"});let js=(()=>{class e extends ze{constructor(){super(),this.closed=!1,this.observers=[],this.isStopped=!1,this.hasError=!1,this.thrownError=null}lift(n){const r=new Uu(this,this);return r.operator=n,r}_throwIfClosed(){if(this.closed)throw new qv}next(n){Uo(()=>{if(this._throwIfClosed(),!this.isStopped){const r=this.observers.slice();for(const o of r)o.next(n)}})}error(n){Uo(()=>{if(this._throwIfClosed(),!this.isStopped){this.hasError=this.isStopped=!0,this.thrownError=n;const{observers:r}=this;for(;r.length;)r.shift().error(n)}})}complete(){Uo(()=>{if(this._throwIfClosed(),!this.isStopped){this.isStopped=!0;const{observers:n}=this;for(;n.length;)n.shift().complete()}})}unsubscribe(){this.isStopped=this.closed=!0,this.observers=null}get observed(){var n;return(null===(n=this.observers)||void 0===n?void 0:n.length)>0}_trySubscribe(n){return this._throwIfClosed(),super._trySubscribe(n)}_subscribe(n){return this._throwIfClosed(),this._checkFinalizedStatuses(n),this._innerSubscribe(n)}_innerSubscribe(n){const{hasError:r,isStopped:o,observers:i}=this;return r||o?Pu:(i.push(n),new Nt(()=>Lr(i,n)))}_checkFinalizedStatuses(n){const{hasError:r,thrownError:o,isStopped:i}=this;r?n.error(o):i&&n.complete()}asObservable(){const n=new ze;return n.source=this,n}}return e.create=(t,n)=>new Uu(t,n),e})();class Uu extends js{constructor(t,n){super(),this.destination=t,this.source=n}next(t){var n,r;null===(r=null===(n=this.destination)||void 0===n?void 0:n.next)||void 0===r||r.call(n,t)}error(t){var n,r;null===(r=null===(n=this.destination)||void 0===n?void 0:n.error)||void 0===r||r.call(n,t)}complete(){var t,n;null===(n=null===(t=this.destination)||void 0===t?void 0:t.complete)||void 0===n||n.call(t)}_subscribe(t){var n,r;return null!==(r=null===(n=this.source)||void 0===n?void 0:n.subscribe(t))&&void 0!==r?r:Pu}}function Wn(e){return t=>{if(function Zv(e){return ve(e?.lift)}(t))return t.lift(function(n){try{return e(n,this)}catch(r){this.error(r)}});throw new TypeError("Unable to lift unknown Observable type")}}class qn extends ks{constructor(t,n,r,o,i){super(t),this.onFinalize=i,this._next=n?function(s){try{n(s)}catch(a){t.error(a)}}:super._next,this._error=o?function(s){try{o(s)}catch(a){t.error(a)}finally{this.unsubscribe()}}:super._error,this._complete=r?function(){try{r()}catch(s){t.error(s)}finally{this.unsubscribe()}}:super._complete}unsubscribe(){var t;const{closed:n}=this;super.unsubscribe(),!n&&(null===(t=this.onFinalize)||void 0===t||t.call(this))}}function $s(e,t){return Wn((n,r)=>{let o=0;n.subscribe(new qn(r,i=>{r.next(e.call(t,i,o++))}))})}function En(e){return this instanceof En?(this.v=e,this):new En(e)}function Kv(e,t,n){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var o,r=n.apply(e,t||[]),i=[];return o={},s("next"),s("throw"),s("return"),o[Symbol.asyncIterator]=function(){return this},o;function s(f){r[f]&&(o[f]=function(p){return new Promise(function(m,y){i.push([f,p,m,y])>1||a(f,p)})})}function a(f,p){try{!function l(f){f.value instanceof En?Promise.resolve(f.value.v).then(c,u):d(i[0][2],f)}(r[f](p))}catch(m){d(i[0][3],m)}}function c(f){a("next",f)}function u(f){a("throw",f)}function d(f,p){f(p),i.shift(),i.length&&a(i[0][0],i[0][1])}}function Jv(e){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var n,t=e[Symbol.asyncIterator];return t?t.call(e):(e=function Wu(e){var t="function"==typeof Symbol&&Symbol.iterator,n=t&&e[t],r=0;if(n)return n.call(e);if(e&&"number"==typeof e.length)return{next:function(){return e&&r>=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")}(e),n={},r("next"),r("throw"),r("return"),n[Symbol.asyncIterator]=function(){return this},n);function r(i){n[i]=e[i]&&function(s){return new Promise(function(a,l){!function o(i,s,a,l){Promise.resolve(l).then(function(c){i({value:c,done:a})},s)}(a,l,(s=e[i](s)).done,s.value)})}}}const qu=e=>e&&"number"==typeof e.length&&"function"!=typeof e;function Zu(e){return ve(e?.then)}function Qu(e){return ve(e[Hs])}function Yu(e){return Symbol.asyncIterator&&ve(e?.[Symbol.asyncIterator])}function Ku(e){return new TypeError(`You provided ${null!==e&&"object"==typeof e?"an invalid object":`'${e}'`} where a stream was expected. You can provide an Observable, Promise, ReadableStream, Array, AsyncIterable, or Iterable.`)}const Ju=function ey(){return"function"==typeof Symbol&&Symbol.iterator?Symbol.iterator:"@@iterator"}();function Xu(e){return ve(e?.[Ju])}function ed(e){return Kv(this,arguments,function*(){const n=e.getReader();try{for(;;){const{value:r,done:o}=yield En(n.read());if(o)return yield En(void 0);yield yield En(r)}}finally{n.releaseLock()}})}function td(e){return ve(e?.getReader)}function In(e){if(e instanceof ze)return e;if(null!=e){if(Qu(e))return function ty(e){return new ze(t=>{const n=e[Hs]();if(ve(n.subscribe))return n.subscribe(t);throw new TypeError("Provided object does not correctly implement Symbol.observable")})}(e);if(qu(e))return function ny(e){return new ze(t=>{for(let n=0;n{e.then(n=>{t.closed||(t.next(n),t.complete())},n=>t.error(n)).then(null,Vu)})}(e);if(Yu(e))return nd(e);if(Xu(e))return function oy(e){return new ze(t=>{for(const n of e)if(t.next(n),t.closed)return;t.complete()})}(e);if(td(e))return function iy(e){return nd(ed(e))}(e)}throw Ku(e)}function nd(e){return new ze(t=>{(function sy(e,t){var n,r,o,i;return function Qv(e,t,n,r){return new(n||(n=Promise))(function(i,s){function a(u){try{c(r.next(u))}catch(d){s(d)}}function l(u){try{c(r.throw(u))}catch(d){s(d)}}function c(u){u.done?i(u.value):function o(i){return i instanceof n?i:new n(function(s){s(i)})}(u.value).then(a,l)}c((r=r.apply(e,t||[])).next())})}(this,void 0,void 0,function*(){try{for(n=Jv(e);!(r=yield n.next()).done;)if(t.next(r.value),t.closed)return}catch(s){o={error:s}}finally{try{r&&!r.done&&(i=n.return)&&(yield i.call(n))}finally{if(o)throw o.error}}t.complete()})})(e,t).catch(n=>t.error(n))})}function sn(e,t,n,r=0,o=!1){const i=t.schedule(function(){n(),o?e.add(this.schedule(null,r)):this.unsubscribe()},r);if(e.add(i),!o)return i}function rd(e,t,n=1/0){return ve(t)?rd((r,o)=>$s((i,s)=>t(r,i,o,s))(In(e(r,o))),n):("number"==typeof t&&(n=t),Wn((r,o)=>function ay(e,t,n,r,o,i,s,a){const l=[];let c=0,u=0,d=!1;const f=()=>{d&&!l.length&&!c&&t.complete()},p=y=>c{i&&t.next(y),c++;let E=!1;In(n(y,u++)).subscribe(new qn(t,M=>{o?.(M),i?p(M):t.next(M)},()=>{E=!0},void 0,()=>{if(E)try{for(c--;l.length&&cm(M)):m(M)}f()}catch(M){t.error(M)}}))};return e.subscribe(new qn(t,p,()=>{d=!0,f()})),()=>{a?.()}}(r,o,e,n)))}const zs=new ze(e=>e.complete());function Gs(e){return e[e.length-1]}function od(e,t=0){return Wn((n,r)=>{n.subscribe(new qn(r,o=>sn(r,e,()=>r.next(o),t),()=>sn(r,e,()=>r.complete(),t),o=>sn(r,e,()=>r.error(o),t)))})}function id(e,t=0){return Wn((n,r)=>{r.add(e.schedule(()=>n.subscribe(r),t))})}function sd(e,t){if(!e)throw new Error("Iterable cannot be null");return new ze(n=>{sn(n,t,()=>{const r=e[Symbol.asyncIterator]();sn(n,t,()=>{r.next().then(o=>{o.done?n.complete():n.next(o.value)})},0,!0)})})}function Ws(e,t){return t?function yy(e,t){if(null!=e){if(Qu(e))return function py(e,t){return In(e).pipe(id(t),od(t))}(e,t);if(qu(e))return function my(e,t){return new ze(n=>{let r=0;return t.schedule(function(){r===e.length?n.complete():(n.next(e[r++]),n.closed||this.schedule())})})}(e,t);if(Zu(e))return function gy(e,t){return In(e).pipe(id(t),od(t))}(e,t);if(Yu(e))return sd(e,t);if(Xu(e))return function _y(e,t){return new ze(n=>{let r;return sn(n,t,()=>{r=e[Ju](),sn(n,t,()=>{let o,i;try{({value:o,done:i}=r.next())}catch(s){return void n.error(s)}i?n.complete():n.next(o)},0,!0)}),()=>ve(r?.return)&&r.return()})}(e,t);if(td(e))return function vy(e,t){return sd(ed(e),t)}(e,t)}throw Ku(e)}(e,t):In(e)}function Dy(...e){const t=function fy(e){return function uy(e){return e&&ve(e.schedule)}(Gs(e))?e.pop():void 0}(e),n=function hy(e,t){return"number"==typeof Gs(e)?e.pop():t}(e,1/0),r=e;return r.length?1===r.length?In(r[0]):function ly(e=1/0){return rd(Hu,e)}(n)(Ws(r,t)):zs}function qs(e,t,...n){return!0===t?(e(),null):!1===t?null:t(...n).pipe(function Cy(e){return e<=0?()=>zs:Wn((t,n)=>{let r=0;t.subscribe(new qn(n,o=>{++r<=e&&(n.next(o),e<=r&&n.complete())}))})}(1)).subscribe(()=>e())}function le(e){for(let t in e)if(e[t]===le)return t;throw Error("Could not find renamed property on target object.")}function Zs(e,t){for(const n in t)t.hasOwnProperty(n)&&!e.hasOwnProperty(n)&&(e[n]=t[n])}function ce(e){if("string"==typeof e)return e;if(Array.isArray(e))return"["+e.map(ce).join(", ")+"]";if(null==e)return""+e;if(e.overriddenName)return`${e.overriddenName}`;if(e.name)return`${e.name}`;const t=e.toString();if(null==t)return""+t;const n=t.indexOf("\n");return-1===n?t:t.substring(0,n)}function Qs(e,t){return null==e||""===e?null===t?"":t:null==t||""===t?e:e+" "+t}const by=le({__forward_ref__:le});function ue(e){return e.__forward_ref__=ue,e.toString=function(){return ce(this())},e}function k(e){return Ys(e)?e():e}function Ys(e){return"function"==typeof e&&e.hasOwnProperty(by)&&e.__forward_ref__===ue}function Ks(e){return e&&!!e.\u0275providers}const ad="https://g.co/ng/security#xss";class A extends Error{constructor(t,n){super(function zo(e,t){return`NG0${Math.abs(e)}${t?": "+t.trim():""}`}(t,n)),this.code=t}}function j(e){return"string"==typeof e?e:null==e?"":String(e)}function Go(e,t){throw new A(-201,!1)}function rt(e,t){null==e&&function ne(e,t,n,r){throw new Error(`ASSERTION ERROR: ${e}`+(null==r?"":` [Expected=> ${n} ${r} ${t} <=Actual]`))}(t,e,null,"!=")}function de(e){return{token:e.token,providedIn:e.providedIn||null,factory:e.factory,value:void 0}}function zt(e){return{providers:e.providers||[],imports:e.imports||[]}}function Wo(e){return ld(e,qo)||ld(e,ud)}function ld(e,t){return e.hasOwnProperty(t)?e[t]:null}function cd(e){return e&&(e.hasOwnProperty(Js)||e.hasOwnProperty(Ny))?e[Js]:null}const qo=le({\u0275prov:le}),Js=le({\u0275inj:le}),ud=le({ngInjectableDef:le}),Ny=le({ngInjectorDef:le});var V=(()=>((V=V||{})[V.Default=0]="Default",V[V.Host=1]="Host",V[V.Self=2]="Self",V[V.SkipSelf=4]="SkipSelf",V[V.Optional=8]="Optional",V))();let Xs;function ft(e){const t=Xs;return Xs=e,t}function dd(e,t,n){const r=Wo(e);return r&&"root"==r.providedIn?void 0===r.value?r.value=r.factory():r.value:n&V.Optional?null:void 0!==t?t:void Go(ce(e))}const fe=(()=>typeof globalThis<"u"&&globalThis||typeof global<"u"&&global||typeof window<"u"&&window||typeof self<"u"&&typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope&&self)(),Vr={},ea="__NG_DI_FLAG__",Zo="ngTempTokenPath",Ry=/\n/gm,fd="__source";let Br;function Zn(e){const t=Br;return Br=e,t}function ky(e,t=V.Default){if(void 0===Br)throw new A(-203,!1);return null===Br?dd(e,void 0,t):Br.get(e,t&V.Optional?null:void 0,t)}function re(e,t=V.Default){return(function Fy(){return Xs}()||ky)(k(e),t)}function Qo(e){return typeof e>"u"||"number"==typeof e?e:0|(e.optional&&8)|(e.host&&1)|(e.self&&2)|(e.skipSelf&&4)}function ta(e){const t=[];for(let n=0;n((yt=yt||{})[yt.OnPush=0]="OnPush",yt[yt.Default=1]="Default",yt))(),Ft=(()=>{return(e=Ft||(Ft={}))[e.Emulated=0]="Emulated",e[e.None=2]="None",e[e.ShadowDom=3]="ShadowDom",Ft;var e})();const Gt={},X=[],Yo=le({\u0275cmp:le}),na=le({\u0275dir:le}),ra=le({\u0275pipe:le}),pd=le({\u0275mod:le}),Wt=le({\u0275fac:le}),jr=le({__NG_ELEMENT_ID__:le});let jy=0;function ln(e){return an(()=>{const n=!0===e.standalone,r={},o={type:e.type,providersResolver:null,decls:e.decls,vars:e.vars,factory:null,template:e.template||null,consts:e.consts||null,ngContentSelectors:e.ngContentSelectors,hostBindings:e.hostBindings||null,hostVars:e.hostVars||0,hostAttrs:e.hostAttrs||null,contentQueries:e.contentQueries||null,declaredInputs:r,inputs:null,outputs:null,exportAs:e.exportAs||null,onPush:e.changeDetection===yt.OnPush,directiveDefs:null,pipeDefs:null,standalone:n,dependencies:n&&e.dependencies||null,getStandaloneInjector:null,selectors:e.selectors||X,viewQuery:e.viewQuery||null,features:e.features||null,data:e.data||{},encapsulation:e.encapsulation||Ft.Emulated,id:"c"+jy++,styles:e.styles||X,_:null,setInput:null,schemas:e.schemas||null,tView:null,findHostDirectiveDefs:null,hostDirectives:null},i=e.dependencies,s=e.features;return o.inputs=_d(e.inputs,r),o.outputs=_d(e.outputs),s&&s.forEach(a=>a(o)),o.directiveDefs=i?()=>("function"==typeof i?i():i).map(gd).filter(md):null,o.pipeDefs=i?()=>("function"==typeof i?i():i).map(Ge).filter(md):null,o})}function gd(e){return oe(e)||Pe(e)}function md(e){return null!==e}function cn(e){return an(()=>({type:e.type,bootstrap:e.bootstrap||X,declarations:e.declarations||X,imports:e.imports||X,exports:e.exports||X,transitiveCompileScopes:null,schemas:e.schemas||null,id:e.id||null}))}function _d(e,t){if(null==e)return Gt;const n={};for(const r in e)if(e.hasOwnProperty(r)){let o=e[r],i=o;Array.isArray(o)&&(i=o[1],o=o[0]),n[o]=r,t&&(t[o]=i)}return n}const $=ln;function Je(e){return{type:e.type,name:e.name,factory:null,pure:!1!==e.pure,standalone:!0===e.standalone,onDestroy:e.type.prototype.ngOnDestroy||null}}function oe(e){return e[Yo]||null}function Pe(e){return e[na]||null}function Ge(e){return e[ra]||null}const G=11;function Xe(e){return Array.isArray(e)&&"object"==typeof e[1]}function Ct(e){return Array.isArray(e)&&!0===e[1]}function sa(e){return 0!=(4&e.flags)}function ei(e){return e.componentOffset>-1}function ti(e){return 1==(1&e.flags)}function wt(e){return null!==e.template}function qy(e){return 0!=(256&e[2])}function xn(e,t){return e.hasOwnProperty(Wt)?e[Wt]:null}class Yy{constructor(t,n,r){this.previousValue=t,this.currentValue=n,this.firstChange=r}isFirstChange(){return this.firstChange}}function qt(){return Dd}function Dd(e){return e.type.prototype.ngOnChanges&&(e.setInput=Jy),Ky}function Ky(){const e=wd(this),t=e?.current;if(t){const n=e.previous;if(n===Gt)e.previous=t;else for(let r in t)n[r]=t[r];e.current=null,this.ngOnChanges(t)}}function Jy(e,t,n,r){const o=this.declaredInputs[n],i=wd(e)||function Xy(e,t){return e[Cd]=t}(e,{previous:Gt,current:null}),s=i.current||(i.current={}),a=i.previous,l=a[o];s[o]=new Yy(l&&l.currentValue,t,a===Gt),e[r]=t}qt.ngInherit=!0;const Cd="__ngSimpleChanges__";function wd(e){return e[Cd]||null}function Se(e){for(;Array.isArray(e);)e=e[0];return e}function ni(e,t){return Se(t[e])}function st(e,t){return Se(t[e.index])}function da(e,t){return e.data[t]}function at(e,t){const n=t[e];return Xe(n)?n:n[0]}function ri(e){return 64==(64&e[2])}function un(e,t){return null==t?null:e[t]}function bd(e){e[18]=0}function fa(e,t){e[5]+=t;let n=e,r=e[3];for(;null!==r&&(1===t&&1===n[5]||-1===t&&0===n[5]);)r[5]+=t,n=r,r=r[3]}const H={lFrame:Od(null),bindingsEnabled:!0};function Id(){return H.bindingsEnabled}function w(){return H.lFrame.lView}function J(){return H.lFrame.tView}function ie(e){return H.lFrame.contextLView=e,e[8]}function se(e){return H.lFrame.contextLView=null,e}function Oe(){let e=Md();for(;null!==e&&64===e.type;)e=e.parent;return e}function Md(){return H.lFrame.currentTNode}function Ot(e,t){const n=H.lFrame;n.currentTNode=e,n.isParent=t}function ha(){return H.lFrame.isParent}function pa(){H.lFrame.isParent=!1}function We(){const e=H.lFrame;let t=e.bindingRootIndex;return-1===t&&(t=e.bindingRootIndex=e.tView.bindingStartIndex),t}function Xn(){return H.lFrame.bindingIndex++}function Qt(e){const t=H.lFrame,n=t.bindingIndex;return t.bindingIndex=t.bindingIndex+e,n}function pD(e,t){const n=H.lFrame;n.bindingIndex=n.bindingRootIndex=e,ga(t)}function ga(e){H.lFrame.currentDirectiveIndex=e}function _a(e){H.lFrame.currentQueryIndex=e}function mD(e){const t=e[1];return 2===t.type?t.declTNode:1===t.type?e[6]:null}function Nd(e,t,n){if(n&V.SkipSelf){let o=t,i=e;for(;!(o=o.parent,null!==o||n&V.Host||(o=mD(i),null===o||(i=i[15],10&o.type))););if(null===o)return!1;t=o,e=i}const r=H.lFrame=Fd();return r.currentTNode=t,r.lView=e,!0}function va(e){const t=Fd(),n=e[1];H.lFrame=t,t.currentTNode=n.firstChild,t.lView=e,t.tView=n,t.contextLView=e,t.bindingIndex=n.bindingStartIndex,t.inI18n=!1}function Fd(){const e=H.lFrame,t=null===e?null:e.child;return null===t?Od(e):t}function Od(e){const t={currentTNode:null,isParent:!0,lView:null,tView:null,selectedIndex:-1,contextLView:null,elementDepthCount:0,currentNamespace:null,currentDirectiveIndex:-1,bindingRootIndex:-1,bindingIndex:-1,currentQueryIndex:0,parent:e,child:null,inI18n:!1};return null!==e&&(e.child=t),t}function Rd(){const e=H.lFrame;return H.lFrame=e.parent,e.currentTNode=null,e.lView=null,e}const Pd=Rd;function ya(){const e=Rd();e.isParent=!0,e.tView=null,e.selectedIndex=-1,e.contextLView=null,e.elementDepthCount=0,e.currentDirectiveIndex=-1,e.currentNamespace=null,e.bindingRootIndex=-1,e.bindingIndex=-1,e.currentQueryIndex=0}function qe(){return H.lFrame.selectedIndex}function Nn(e){H.lFrame.selectedIndex=e}function ye(){const e=H.lFrame;return da(e.tView,e.selectedIndex)}function oi(e,t){for(let n=t.directiveStart,r=t.directiveEnd;n=r)break}else t[l]<0&&(e[18]+=65536),(a>11>16&&(3&e[2])===t){e[2]+=2048;try{i.call(a)}finally{}}}else try{i.call(a)}finally{}}class Zr{constructor(t,n,r){this.factory=t,this.resolving=!1,this.canSeeViewProviders=n,this.injectImpl=r}}function wa(e,t,n){let r=0;for(;rt){s=i-1;break}}}for(;i>16}(e),r=t;for(;n>0;)r=r[15],n--;return r}let ba=!0;function ai(e){const t=ba;return ba=e,t}let xD=0;const Rt={};function li(e,t){const n=Ia(e,t);if(-1!==n)return n;const r=t[1];r.firstCreatePass&&(e.injectorIndex=t.length,Ea(r.data,e),Ea(t,null),Ea(r.blueprint,null));const o=ci(e,t),i=e.injectorIndex;if(jd(o)){const s=er(o),a=tr(o,t),l=a[1].data;for(let c=0;c<8;c++)t[i+c]=a[s+c]|l[s+c]}return t[i+8]=o,i}function Ea(e,t){e.push(0,0,0,0,0,0,0,0,t)}function Ia(e,t){return-1===e.injectorIndex||e.parent&&e.parent.injectorIndex===e.injectorIndex||null===t[e.injectorIndex+8]?-1:e.injectorIndex}function ci(e,t){if(e.parent&&-1!==e.parent.injectorIndex)return e.parent.injectorIndex;let n=0,r=null,o=t;for(;null!==o;){if(r=Yd(o),null===r)return-1;if(n++,o=o[15],-1!==r.injectorIndex)return r.injectorIndex|n<<16}return-1}function Ma(e,t,n){!function ND(e,t,n){let r;"string"==typeof n?r=n.charCodeAt(0)||0:n.hasOwnProperty(jr)&&(r=n[jr]),null==r&&(r=n[jr]=xD++);const o=255&r;t.data[e+(o>>5)]|=1<=0?255&t:PD:t}(n);if("function"==typeof i){if(!Nd(t,e,r))return r&V.Host?zd(o,0,r):Gd(t,n,r,o);try{const s=i(r);if(null!=s||r&V.Optional)return s;Go()}finally{Pd()}}else if("number"==typeof i){let s=null,a=Ia(e,t),l=-1,c=r&V.Host?t[16][6]:null;for((-1===a||r&V.SkipSelf)&&(l=-1===a?ci(e,t):t[a+8],-1!==l&&Qd(r,!1)?(s=t[1],a=er(l),t=tr(l,t)):a=-1);-1!==a;){const u=t[1];if(Zd(i,a,u.data)){const d=OD(a,t,n,s,r,c);if(d!==Rt)return d}l=t[a+8],-1!==l&&Qd(r,t[1].data[a+8]===c)&&Zd(i,a,t)?(s=u,a=er(l),t=tr(l,t)):a=-1}}return o}function OD(e,t,n,r,o,i){const s=t[1],a=s.data[e+8],u=function ui(e,t,n,r,o){const i=e.providerIndexes,s=t.data,a=1048575&i,l=e.directiveStart,u=i>>20,f=o?a+u:e.directiveEnd;for(let p=r?a:a+u;p=l&&m.type===n)return p}if(o){const p=s[l];if(p&&wt(p)&&p.type===n)return l}return null}(a,s,n,null==r?ei(a)&&ba:r!=s&&0!=(3&a.type),o&V.Host&&i===a);return null!==u?nr(t,s,u,a):Rt}function nr(e,t,n,r){let o=e[n];const i=t.data;if(function ID(e){return e instanceof Zr}(o)){const s=o;s.resolving&&function Ey(e,t){const n=t?`. Dependency path: ${t.join(" > ")} > ${e}`:"";throw new A(-200,`Circular dependency in DI detected for ${e}${n}`)}(function te(e){return"function"==typeof e?e.name||e.toString():"object"==typeof e&&null!=e&&"function"==typeof e.type?e.type.name||e.type.toString():j(e)}(i[n]));const a=ai(s.canSeeViewProviders);s.resolving=!0;const l=s.injectImpl?ft(s.injectImpl):null;Nd(e,r,V.Default);try{o=e[n]=s.factory(void 0,i,e,r),t.firstCreatePass&&n>=r.directiveStart&&function bD(e,t,n){const{ngOnChanges:r,ngOnInit:o,ngDoCheck:i}=t.type.prototype;if(r){const s=Dd(t);(n.preOrderHooks||(n.preOrderHooks=[])).push(e,s),(n.preOrderCheckHooks||(n.preOrderCheckHooks=[])).push(e,s)}o&&(n.preOrderHooks||(n.preOrderHooks=[])).push(0-e,o),i&&((n.preOrderHooks||(n.preOrderHooks=[])).push(e,i),(n.preOrderCheckHooks||(n.preOrderCheckHooks=[])).push(e,i))}(n,i[n],t)}finally{null!==l&&ft(l),ai(a),s.resolving=!1,Pd()}}return o}function Zd(e,t,n){return!!(n[t+(e>>5)]&1<{const t=e.prototype.constructor,n=t[Wt]||Sa(t),r=Object.prototype;let o=Object.getPrototypeOf(e.prototype).constructor;for(;o&&o!==r;){const i=o[Wt]||Sa(o);if(i&&i!==n)return i;o=Object.getPrototypeOf(o)}return i=>new i})}function Sa(e){return Ys(e)?()=>{const t=Sa(k(e));return t&&t()}:xn(e)}function Yd(e){const t=e[1],n=t.type;return 2===n?t.declTNode:1===n?e[6]:null}const ir="__parameters__";function ar(e,t,n){return an(()=>{const r=function Ta(e){return function(...n){if(e){const r=e(...n);for(const o in r)this[o]=r[o]}}}(t);function o(...i){if(this instanceof o)return r.apply(this,i),this;const s=new o(...i);return a.annotation=s,a;function a(l,c,u){const d=l.hasOwnProperty(ir)?l[ir]:Object.defineProperty(l,ir,{value:[]})[ir];for(;d.length<=u;)d.push(null);return(d[u]=d[u]||[]).push(s),l}}return n&&(o.prototype=Object.create(n.prototype)),o.prototype.ngMetadataName=e,o.annotationCls=o,o})}class B{constructor(t,n){this._desc=t,this.ngMetadataName="InjectionToken",this.\u0275prov=void 0,"number"==typeof n?this.__NG_ELEMENT_ID__=n:void 0!==n&&(this.\u0275prov=de({token:this,providedIn:n.providedIn||"root",factory:n.factory}))}get multi(){return this}toString(){return`InjectionToken ${this._desc}`}}function Fn(e,t){e.forEach(n=>Array.isArray(n)?Fn(n,t):t(n))}function Jd(e,t,n){t>=e.length?e.push(n):e.splice(t,0,n)}function di(e,t){return t>=e.length-1?e.pop():e.splice(t,1)[0]}function ct(e,t,n){let r=lr(e,t);return r>=0?e[1|r]=n:(r=~r,function HD(e,t,n,r){let o=e.length;if(o==t)e.push(n,r);else if(1===o)e.push(r,e[0]),e[0]=n;else{for(o--,e.push(e[o-1],e[o]);o>t;)e[o]=e[o-2],o--;e[t]=n,e[t+1]=r}}(e,r,t,n)),r}function Na(e,t){const n=lr(e,t);if(n>=0)return e[1|n]}function lr(e,t){return function tf(e,t,n){let r=0,o=e.length>>n;for(;o!==r;){const i=r+(o-r>>1),s=e[i<t?o=i:r=i+1}return~(o<((et=et||{})[et.Important=1]="Important",et[et.DashCase=2]="DashCase",et))();const La=new Map;let lC=0;const Ba="__ngContext__";function Be(e,t){Xe(t)?(e[Ba]=t[20],function uC(e){La.set(e[20],e)}(t)):e[Ba]=t}function ja(e,t){return undefined(e,t)}function ro(e){const t=e[3];return Ct(t)?t[3]:t}function $a(e){return bf(e[13])}function Ua(e){return bf(e[4])}function bf(e){for(;null!==e&&!Ct(e);)e=e[4];return e}function ur(e,t,n,r,o){if(null!=r){let i,s=!1;Ct(r)?i=r:Xe(r)&&(s=!0,r=r[0]);const a=Se(r);0===e&&null!==n?null==o?Tf(t,n,a):On(t,n,a,o||null,!0):1===e&&null!==n?On(t,n,a,o||null,!0):2===e?function Ya(e,t,n){const r=_i(e,t);r&&function NC(e,t,n,r){e.removeChild(t,n,r)}(e,r,t,n)}(t,a,s):3===e&&t.destroyNode(a),null!=i&&function RC(e,t,n,r,o){const i=n[7];i!==Se(n)&&ur(t,e,r,i,o);for(let a=10;a0&&(e[n-1][4]=r[4]);const i=di(e,10+t);!function bC(e,t){oo(e,t,t[G],2,null,null),t[0]=null,t[6]=null}(r[1],r);const s=i[19];null!==s&&s.detachView(i[1]),r[3]=null,r[4]=null,r[2]&=-65}return r}function Mf(e,t){if(!(128&t[2])){const n=t[G];n.destroyNode&&oo(e,t,n,3,null,null),function MC(e){let t=e[13];if(!t)return qa(e[1],e);for(;t;){let n=null;if(Xe(t))n=t[13];else{const r=t[10];r&&(n=r)}if(!n){for(;t&&!t[4]&&t!==e;)Xe(t)&&qa(t[1],t),t=t[3];null===t&&(t=e),Xe(t)&&qa(t[1],t),n=t&&t[4]}t=n}}(t)}}function qa(e,t){if(!(128&t[2])){t[2]&=-65,t[2]|=128,function xC(e,t){let n;if(null!=e&&null!=(n=e.destroyHooks))for(let r=0;r=0?r[o=s]():r[o=-s].unsubscribe(),i+=2}else{const s=r[o=n[i+1]];n[i].call(s)}if(null!==r){for(let i=o+1;i-1){const{encapsulation:i}=e.data[r.directiveStart+o];if(i===Ft.None||i===Ft.Emulated)return null}return st(r,n)}}(e,t.parent,n)}function On(e,t,n,r,o){e.insertBefore(t,n,r,o)}function Tf(e,t,n){e.appendChild(t,n)}function xf(e,t,n,r,o){null!==r?On(e,t,n,r,o):Tf(e,t,n)}function _i(e,t){return e.parentNode(t)}let Xa,Of=function Ff(e,t,n){return 40&e.type?st(e,n):null};function vi(e,t,n,r){const o=Sf(e,r,t),i=t[G],a=function Nf(e,t,n){return Of(e,t,n)}(r.parent||t[6],r,t);if(null!=o)if(Array.isArray(n))for(let l=0;l((Ee=Ee||{})[Ee.NONE=0]="NONE",Ee[Ee.HTML=1]="HTML",Ee[Ee.STYLE=2]="STYLE",Ee[Ee.SCRIPT=3]="SCRIPT",Ee[Ee.URL=4]="URL",Ee[Ee.RESOURCE_URL=5]="RESOURCE_URL",Ee))();function dr(e){const t=function ao(){const e=w();return e&&e[12]}();return t?t.sanitize(Ee.URL,e)||"":function io(e,t){const n=function WC(e){return e instanceof Uf&&e.getTypeName()||null}(e);if(null!=n&&n!==t){if("ResourceURL"===n&&"URL"===t)return!0;throw new Error(`Required a safe ${t}, got a ${n} (see ${ad})`)}return n===t}(e,"URL")?fn(e):function tl(e){return(e=String(e)).match(YC)?e:"unsafe:"+e}(j(e))}const Kf=new B("ENVIRONMENT_INITIALIZER"),Jf=new B("INJECTOR",-1),Xf=new B("INJECTOR_DEF_TYPES");class eh{get(t,n=Vr){if(n===Vr){const r=new Error(`NullInjectorError: No provider for ${ce(t)}!`);throw r.name="NullInjectorError",r}return n}}function uw(...e){return{\u0275providers:th(0,e),\u0275fromNgModule:!0}}function th(e,...t){const n=[],r=new Set;let o;return Fn(t,i=>{const s=i;il(s,n,[],r)&&(o||(o=[]),o.push(s))}),void 0!==o&&nh(o,n),n}function nh(e,t){for(let n=0;n{t.push(i)})}}function il(e,t,n,r){if(!(e=k(e)))return!1;let o=null,i=cd(e);const s=!i&&oe(e);if(i||s){if(s&&!s.standalone)return!1;o=e}else{const l=e.ngModule;if(i=cd(l),!i)return!1;o=l}const a=r.has(o);if(s){if(a)return!1;if(r.add(o),s.dependencies){const l="function"==typeof s.dependencies?s.dependencies():s.dependencies;for(const c of l)il(c,t,n,r)}}else{if(!i)return!1;{if(null!=i.imports&&!a){let c;r.add(o);try{Fn(i.imports,u=>{il(u,t,n,r)&&(c||(c=[]),c.push(u))})}finally{}void 0!==c&&nh(c,t)}if(!a){const c=xn(o)||(()=>new o);t.push({provide:o,useFactory:c,deps:X},{provide:Xf,useValue:o,multi:!0},{provide:Kf,useValue:()=>re(o),multi:!0})}const l=i.providers;null==l||a||sl(l,u=>{t.push(u)})}}return o!==e&&void 0!==e.providers}function sl(e,t){for(let n of e)Ks(n)&&(n=n.\u0275providers),Array.isArray(n)?sl(n,t):t(n)}const dw=le({provide:String,useValue:le});function al(e){return null!==e&&"object"==typeof e&&dw in e}function Pn(e){return"function"==typeof e}const ll=new B("Set Injector scope."),bi={},hw={};let cl;function Ei(){return void 0===cl&&(cl=new eh),cl}class fr{}class ih extends fr{constructor(t,n,r,o){super(),this.parent=n,this.source=r,this.scopes=o,this.records=new Map,this._ngOnDestroyHooks=new Set,this._onDestroyHooks=[],this._destroyed=!1,dl(t,s=>this.processProvider(s)),this.records.set(Jf,hr(void 0,this)),o.has("environment")&&this.records.set(fr,hr(void 0,this));const i=this.records.get(ll);null!=i&&"string"==typeof i.value&&this.scopes.add(i.value),this.injectorDefTypes=new Set(this.get(Xf.multi,X,V.Self))}get destroyed(){return this._destroyed}destroy(){this.assertNotDestroyed(),this._destroyed=!0;try{for(const t of this._ngOnDestroyHooks)t.ngOnDestroy();for(const t of this._onDestroyHooks)t()}finally{this.records.clear(),this._ngOnDestroyHooks.clear(),this.injectorDefTypes.clear(),this._onDestroyHooks.length=0}}onDestroy(t){this._onDestroyHooks.push(t)}runInContext(t){this.assertNotDestroyed();const n=Zn(this),r=ft(void 0);try{return t()}finally{Zn(n),ft(r)}}get(t,n=Vr,r=V.Default){this.assertNotDestroyed(),r=Qo(r);const o=Zn(this),i=ft(void 0);try{if(!(r&V.SkipSelf)){let a=this.records.get(t);if(void 0===a){const l=function vw(e){return"function"==typeof e||"object"==typeof e&&e instanceof B}(t)&&Wo(t);a=l&&this.injectableDefInScope(l)?hr(ul(t),bi):null,this.records.set(t,a)}if(null!=a)return this.hydrate(t,a)}return(r&V.Self?Ei():this.parent).get(t,n=r&V.Optional&&n===Vr?null:n)}catch(s){if("NullInjectorError"===s.name){if((s[Zo]=s[Zo]||[]).unshift(ce(t)),o)throw s;return function By(e,t,n,r){const o=e[Zo];throw t[fd]&&o.unshift(t[fd]),e.message=function Hy(e,t,n,r=null){e=e&&"\n"===e.charAt(0)&&"\u0275"==e.charAt(1)?e.slice(2):e;let o=ce(t);if(Array.isArray(t))o=t.map(ce).join(" -> ");else if("object"==typeof t){let i=[];for(let s in t)if(t.hasOwnProperty(s)){let a=t[s];i.push(s+":"+("string"==typeof a?JSON.stringify(a):ce(a)))}o=`{${i.join(", ")}}`}return`${n}${r?"("+r+")":""}[${o}]: ${e.replace(Ry,"\n ")}`}("\n"+e.message,o,n,r),e.ngTokenPath=o,e[Zo]=null,e}(s,t,"R3InjectorError",this.source)}throw s}finally{ft(i),Zn(o)}}resolveInjectorInitializers(){const t=Zn(this),n=ft(void 0);try{const r=this.get(Kf.multi,X,V.Self);for(const o of r)o()}finally{Zn(t),ft(n)}}toString(){const t=[],n=this.records;for(const r of n.keys())t.push(ce(r));return`R3Injector[${t.join(", ")}]`}assertNotDestroyed(){if(this._destroyed)throw new A(205,!1)}processProvider(t){let n=Pn(t=k(t))?t:k(t&&t.provide);const r=function gw(e){return al(e)?hr(void 0,e.useValue):hr(sh(e),bi)}(t);if(Pn(t)||!0!==t.multi)this.records.get(n);else{let o=this.records.get(n);o||(o=hr(void 0,bi,!0),o.factory=()=>ta(o.multi),this.records.set(n,o)),n=t,o.multi.push(t)}this.records.set(n,r)}hydrate(t,n){return n.value===bi&&(n.value=hw,n.value=n.factory()),"object"==typeof n.value&&n.value&&function _w(e){return null!==e&&"object"==typeof e&&"function"==typeof e.ngOnDestroy}(n.value)&&this._ngOnDestroyHooks.add(n.value),n.value}injectableDefInScope(t){if(!t.providedIn)return!1;const n=k(t.providedIn);return"string"==typeof n?"any"===n||this.scopes.has(n):this.injectorDefTypes.has(n)}}function ul(e){const t=Wo(e),n=null!==t?t.factory:xn(e);if(null!==n)return n;if(e instanceof B)throw new A(204,!1);if(e instanceof Function)return function pw(e){const t=e.length;if(t>0)throw function Xr(e,t){const n=[];for(let r=0;rn.factory(e):()=>new e}(e);throw new A(204,!1)}function sh(e,t,n){let r;if(Pn(e)){const o=k(e);return xn(o)||ul(o)}if(al(e))r=()=>k(e.useValue);else if(function oh(e){return!(!e||!e.useFactory)}(e))r=()=>e.useFactory(...ta(e.deps||[]));else if(function rh(e){return!(!e||!e.useExisting)}(e))r=()=>re(k(e.useExisting));else{const o=k(e&&(e.useClass||e.provide));if(!function mw(e){return!!e.deps}(e))return xn(o)||ul(o);r=()=>new o(...ta(e.deps))}return r}function hr(e,t,n=!1){return{factory:e,value:t,multi:n?[]:void 0}}function dl(e,t){for(const n of e)Array.isArray(n)?dl(n,t):n&&Ks(n)?dl(n.\u0275providers,t):t(n)}class yw{}class ah{}class Cw{resolveComponentFactory(t){throw function Dw(e){const t=Error(`No component factory found for ${ce(e)}. Did you add it to @NgModule.entryComponents?`);return t.ngComponent=e,t}(t)}}let Ii=(()=>{class e{}return e.NULL=new Cw,e})();function ww(){return pr(Oe(),w())}function pr(e,t){return new bt(st(e,t))}let bt=(()=>{class e{constructor(n){this.nativeElement=n}}return e.__NG_ELEMENT_ID__=ww,e})();class ch{}let kn=(()=>{class e{}return e.__NG_ELEMENT_ID__=()=>function Ew(){const e=w(),n=at(Oe().index,e);return(Xe(n)?n:e)[G]}(),e})(),Iw=(()=>{class e{}return e.\u0275prov=de({token:e,providedIn:"root",factory:()=>null}),e})();class Mi{constructor(t){this.full=t,this.major=t.split(".")[0],this.minor=t.split(".")[1],this.patch=t.split(".").slice(2).join(".")}}const Mw=new Mi("15.0.1"),fl={};function pl(e){return e.ngOriginalError}class gr{constructor(){this._console=console}handleError(t){const n=this._findOriginalError(t);this._console.error("ERROR",t),n&&this._console.error("ORIGINAL ERROR",n)}_findOriginalError(t){let n=t&&pl(t);for(;n&&pl(n);)n=pl(n);return n||null}}function gl(e){return e.ownerDocument.defaultView}function dh(e,t,n){let r=e.length;for(;;){const o=e.indexOf(t,n);if(-1===o)return o;if(0===o||e.charCodeAt(o-1)<=32){const i=t.length;if(o+i===r||e.charCodeAt(o+i)<=32)return o}n=o+1}}const fh="ng-template";function kw(e,t,n){let r=0;for(;ri?"":o[d+1].toLowerCase();const p=8&r?f:null;if(p&&-1!==dh(p,c,0)||2&r&&c!==f){if(Et(r))return!1;s=!0}}}}else{if(!s&&!Et(r)&&!Et(l))return!1;if(s&&Et(l))continue;s=!1,r=l|1&r}}return Et(r)||s}function Et(e){return 0==(1&e)}function Bw(e,t,n,r){if(null===t)return-1;let o=0;if(r||!n){let i=!1;for(;o-1)for(n++;n0?'="'+a+'"':"")+"]"}else 8&r?o+="."+s:4&r&&(o+=" "+s);else""!==o&&!Et(s)&&(t+=gh(i,o),o=""),r=s,i=i||!Et(r);n++}return""!==o&&(t+=gh(i,o)),t}const U={};function h(e){mh(J(),w(),qe()+e,!1)}function mh(e,t,n,r){if(!r)if(3==(3&t[2])){const i=e.preOrderCheckHooks;null!==i&&ii(t,i,n)}else{const i=e.preOrderHooks;null!==i&&si(t,i,0,n)}Nn(n)}function Dh(e,t=null,n=null,r){const o=Ch(e,t,n,r);return o.resolveInjectorInitializers(),o}function Ch(e,t=null,n=null,r,o=new Set){const i=[n||X,uw(e)];return r=r||("object"==typeof e?void 0:ce(e)),new ih(i,t||Ei(),r||null,o)}let hn=(()=>{class e{static create(n,r){if(Array.isArray(n))return Dh({name:""},r,n,"");{const o=n.name??"";return Dh({name:o},n.parent,n.providers,o)}}}return e.THROW_IF_NOT_FOUND=Vr,e.NULL=new eh,e.\u0275prov=de({token:e,providedIn:"any",factory:()=>re(Jf)}),e.__NG_ELEMENT_ID__=-1,e})();function S(e,t=V.Default){const n=w();return null===n?re(e,t):Wd(Oe(),n,k(e),t)}function Ai(e,t){return e<<17|t<<2}function It(e){return e>>17&32767}function Dl(e){return 2|e}function Jt(e){return(131068&e)>>2}function Cl(e,t){return-131069&e|t<<2}function wl(e){return 1|e}function Vh(e,t){const n=e.contentQueries;if(null!==n)for(let r=0;r22&&mh(e,t,22,!1),n(r,o)}finally{Nn(i)}}function Fl(e,t,n){if(sa(t)){const o=t.directiveEnd;for(let i=t.directiveStart;i0;){const n=e[--t];if("number"==typeof n&&n<0)return n}return 0})(s)!=a&&s.push(a),s.push(n,r,i)}}(e,t,r,lo(e,n,o.hostVars,U),o)}function Hb(e,t,n){const r=st(t,e),o=Hh(n),i=e[10],s=Oi(e,Ni(e,o,null,n.onPush?32:16,r,t,i,i.createRenderer(r,n),null,null,null));e[t.index]=s}function Pt(e,t,n,r,o,i){const s=st(e,t);!function Vl(e,t,n,r,o,i,s){if(null==i)e.removeAttribute(t,o,n);else{const a=null==s?j(i):s(i,r||"",o);e.setAttribute(t,o,a,n)}}(t[G],s,i,e.value,n,r,o)}function jb(e,t,n,r,o,i){const s=i[t];if(null!==s){const a=r.setInput;for(let l=0;l0&&Bl(n)}}function Bl(e){for(let r=$a(e);null!==r;r=Ua(r))for(let o=10;o0&&Bl(i)}const n=e[1].components;if(null!==n)for(let r=0;r0&&Bl(o)}}function Wb(e,t){const n=at(t,e),r=n[1];(function qb(e,t){for(let n=t.length;n-1&&(Wa(t,r),di(n,r))}this._attachedToViewContainer=!1}Mf(this._lView[1],this._lView)}onDestroy(t){!function jh(e,t,n,r){const o=Zh(t);null===n?o.push(r):(o.push(n),e.firstCreatePass&&Qh(e).push(r,o.length-1))}(this._lView[1],this._lView,null,t)}markForCheck(){Hl(this._cdRefInjectingView||this._lView)}detach(){this._lView[2]&=-65}reattach(){this._lView[2]|=64}detectChanges(){Ri(this._lView[1],this._lView,this.context)}checkNoChanges(){}attachToViewContainerRef(){if(this._appRef)throw new A(902,!1);this._attachedToViewContainer=!0}detachFromAppRef(){this._appRef=null,function IC(e,t){oo(e,t,t[G],2,null,null)}(this._lView[1],this._lView)}attachToAppRef(t){if(this._attachedToViewContainer)throw new A(902,!1);this._appRef=t}}class Zb extends co{constructor(t){super(t),this._view=t}detectChanges(){const t=this._view;Ri(t[1],t,t[8],!1)}checkNoChanges(){}get context(){return null}}class Ul extends Ii{constructor(t){super(),this.ngModule=t}resolveComponentFactory(t){const n=oe(t);return new uo(n,this.ngModule)}}function Jh(e){const t=[];for(let n in e)e.hasOwnProperty(n)&&t.push({propName:e[n],templateName:n});return t}class Yb{constructor(t,n){this.injector=t,this.parentInjector=n}get(t,n,r){r=Qo(r);const o=this.injector.get(t,fl,r);return o!==fl||n===fl?o:this.parentInjector.get(t,n,r)}}class uo extends ah{constructor(t,n){super(),this.componentDef=t,this.ngModule=n,this.componentType=t.type,this.selector=function Gw(e){return e.map(zw).join(",")}(t.selectors),this.ngContentSelectors=t.ngContentSelectors?t.ngContentSelectors:[],this.isBoundToModule=!!n}get inputs(){return Jh(this.componentDef.inputs)}get outputs(){return Jh(this.componentDef.outputs)}create(t,n,r,o){let i=(o=o||this.ngModule)instanceof fr?o:o?.injector;i&&null!==this.componentDef.getStandaloneInjector&&(i=this.componentDef.getStandaloneInjector(i)||i);const s=i?new Yb(t,i):t,a=s.get(ch,null);if(null===a)throw new A(407,!1);const l=s.get(Iw,null),c=a.createRenderer(null,this.componentDef),u=this.componentDef.selectors[0][0]||"div",d=r?function Mb(e,t,n){return e.selectRootElement(t,n===Ft.ShadowDom)}(c,r,this.componentDef.encapsulation):Ga(c,u,function Qb(e){const t=e.toLowerCase();return"svg"===t?"svg":"math"===t?"math":null}(u)),f=this.componentDef.onPush?288:272,p=Pl(0,null,null,1,0,null,null,null,null,null),m=Ni(null,p,null,f,null,null,a,c,l,s,null);let y,E;va(m);try{const M=this.componentDef;let N,C=null;M.findHostDirectiveDefs?(N=[],C=new Map,M.findHostDirectiveDefs(M,N,C),N.push(M)):N=[M];const O=function Xb(e,t){const n=e[1];return e[22]=t,vr(n,22,2,"#host",null)}(m,d),ee=function eE(e,t,n,r,o,i,s,a){const l=o[1];!function tE(e,t,n,r){for(const o of e)t.mergedAttrs=Yr(t.mergedAttrs,o.hostAttrs);null!==t.mergedAttrs&&(Pi(t,t.mergedAttrs,!0),null!==n&&Vf(r,n,t))}(r,e,t,s);const c=i.createRenderer(t,n),u=Ni(o,Hh(n),null,n.onPush?32:16,o[e.index],e,i,c,a||null,null,null);return l.firstCreatePass&&Ll(l,e,r.length-1),Oi(o,u),o[e.index]=u}(O,d,M,N,m,a,c);E=da(p,22),d&&function rE(e,t,n,r){if(r)wa(e,n,["ng-version",Mw.full]);else{const{attrs:o,classes:i}=function Ww(e){const t=[],n=[];let r=1,o=2;for(;r0&&Lf(e,n,i.join(" "))}}(c,M,d,r),void 0!==n&&function oE(e,t,n){const r=e.projection=[];for(let o=0;o=0;r--){const o=e[r];o.hostVars=t+=o.hostVars,o.hostAttrs=Yr(o.hostAttrs,n=Yr(n,o.hostAttrs))}}(r)}function zl(e){return e===Gt?{}:e===X?[]:e}function aE(e,t){const n=e.viewQuery;e.viewQuery=n?(r,o)=>{t(r,o),n(r,o)}:t}function lE(e,t){const n=e.contentQueries;e.contentQueries=n?(r,o,i)=>{t(r,o,i),n(r,o,i)}:t}function cE(e,t){const n=e.hostBindings;e.hostBindings=n?(r,o)=>{t(r,o),n(r,o)}:t}let Li=null;function Ln(){if(!Li){const e=fe.Symbol;if(e&&e.iterator)Li=e.iterator;else{const t=Object.getOwnPropertyNames(Map.prototype);for(let n=0;ns(Se(O[r.index])):r.index;let C=null;if(!s&&a&&(C=function EE(e,t,n,r){const o=e.cleanup;if(null!=o)for(let i=0;il?a[l]:null}"string"==typeof s&&(i+=2)}return null}(e,t,o,r.index)),null!==C)(C.__ngLastListenerFn__||C).__ngNextListenerFn__=i,C.__ngLastListenerFn__=i,f=!1;else{i=vp(r,t,u,i,!1);const O=n.listen(E,o,i);d.push(i,O),c&&c.push(o,N,M,M+1)}}else i=vp(r,t,u,i,!1);const p=r.outputs;let m;if(f&&null!==p&&(m=p[o])){const y=m.length;if(y)for(let E=0;E-1?at(e.index,t):t);let l=_p(t,0,r,s),c=i.__ngNextListenerFn__;for(;c;)l=_p(t,0,c,s)&&l,c=c.__ngNextListenerFn__;return o&&!1===l&&(s.preventDefault(),s.returnValue=!1),l}}function D(e=1){return function _D(e){return(H.lFrame.contextLView=function vD(e,t){for(;e>0;)t=t[15],e--;return t}(e,H.lFrame.contextLView))[8]}(e)}function Ar(e,t,n){return ql(e,"",t,"",n),Ar}function ql(e,t,n,r,o){const i=w(),s=Dr(i,t,n,r);return s!==U&&ut(J(),ye(),i,e,s,i[G],o,!1),ql}function Sp(e,t,n,r,o){const i=e[n+1],s=null===t;let a=r?It(i):Jt(i),l=!1;for(;0!==a&&(!1===l||s);){const u=e[a+1];xE(e[a],t)&&(l=!0,e[a+1]=r?wl(u):Dl(u)),a=r?It(u):Jt(u)}l&&(e[n+1]=r?Dl(i):wl(i))}function xE(e,t){return null===e||null==t||(Array.isArray(e)?e[1]:e)===t||!(!Array.isArray(e)||"string"!=typeof t)&&lr(e,t)>=0}const Te={textEnd:0,key:0,keyEnd:0,value:0,valueEnd:0};function Ap(e){return e.substring(Te.key,Te.keyEnd)}function Tp(e,t){const n=Te.textEnd;return n===t?-1:(t=Te.keyEnd=function RE(e,t,n){for(;t32;)t++;return t}(e,Te.key=t,n),Tr(e,t,n))}function Tr(e,t,n){for(;t=0;n=Tp(t,n))ct(e,Ap(t),!0)}function Pp(e,t){return t>=e.expandoStartIndex}function kp(e,t,n,r){const o=e.data;if(null===o[n+1]){const i=o[qe()],s=Pp(e,n);Hp(i,r)&&null===t&&!s&&(t=!1),t=function BE(e,t,n,r){const o=function ma(e){const t=H.lFrame.currentDirectiveIndex;return-1===t?null:e[t]}(e);let i=r?t.residualClasses:t.residualStyles;if(null===o)0===(r?t.classBindings:t.styleBindings)&&(n=po(n=Zl(null,e,t,n,r),t.attrs,r),i=null);else{const s=t.directiveStylingLast;if(-1===s||e[s]!==o)if(n=Zl(o,e,t,n,r),null===i){let l=function HE(e,t,n){const r=n?t.classBindings:t.styleBindings;if(0!==Jt(r))return e[It(r)]}(e,t,r);void 0!==l&&Array.isArray(l)&&(l=Zl(null,e,t,l[1],r),l=po(l,t.attrs,r),function jE(e,t,n,r){e[It(n?t.classBindings:t.styleBindings)]=r}(e,t,r,l))}else i=function $E(e,t,n){let r;const o=t.directiveEnd;for(let i=1+t.directiveStylingLast;i0)&&(c=!0)}else u=n;if(o)if(0!==l){const f=It(e[a+1]);e[r+1]=Ai(f,a),0!==f&&(e[f+1]=Cl(e[f+1],r)),e[a+1]=function fb(e,t){return 131071&e|t<<17}(e[a+1],r)}else e[r+1]=Ai(a,0),0!==a&&(e[a+1]=Cl(e[a+1],r)),a=r;else e[r+1]=Ai(l,0),0===a?a=r:e[l+1]=Cl(e[l+1],r),l=r;c&&(e[r+1]=Dl(e[r+1])),Sp(e,u,r,!0),Sp(e,u,r,!1),function TE(e,t,n,r,o){const i=o?e.residualClasses:e.residualStyles;null!=i&&"string"==typeof t&&lr(i,t)>=0&&(n[r+1]=wl(n[r+1]))}(t,u,e,r,i),s=Ai(a,l),i?t.classBindings=s:t.styleBindings=s}(o,i,t,n,s,r)}}function Zl(e,t,n,r,o){let i=null;const s=n.directiveEnd;let a=n.directiveStylingLast;for(-1===a?a=n.directiveStart:a++;a0;){const l=e[o],c=Array.isArray(l),u=c?l[1]:l,d=null===u;let f=n[o+1];f===U&&(f=d?X:void 0);let p=d?Na(f,r):u===r?f:void 0;if(c&&!ji(p)&&(p=Na(l,r)),ji(p)&&(a=p,s))return a;const m=e[o+1];o=s?It(m):Jt(m)}if(null!==t){let l=i?t.residualClasses:t.residualStyles;null!=l&&(a=Na(l,r))}return a}function ji(e){return void 0!==e}function Hp(e,t){return 0!=(e.flags&(t?8:16))}function b(e,t=""){const n=w(),r=J(),o=e+22,i=r.firstCreatePass?vr(r,o,1,t,null):r.data[o],s=n[o]=function za(e,t){return e.createText(t)}(n[G],t);vi(r,n,s,i),Ot(i,!1)}function F(e){return Z("",e,""),F}function Z(e,t,n){const r=w(),o=Dr(r,e,t,n);return o!==U&&function Xt(e,t,n){const r=ni(t,e);!function Ef(e,t,n){e.setValue(t,n)}(e[G],r,n)}(r,qe(),o),Z}function Ht(e,t,n){!function St(e,t,n,r){const o=J(),i=Qt(2);o.firstUpdatePass&&kp(o,null,i,r);const s=w();if(n!==U&&He(s,i,n)){const a=o.data[qe()];if(Hp(a,r)&&!Pp(o,i)){let l=r?a.classesWithoutHost:a.stylesWithoutHost;null!==l&&(n=Qs(l,n||"")),Wl(o,a,s,n,r)}else!function zE(e,t,n,r,o,i,s,a){o===U&&(o=X);let l=0,c=0,u=0>20;if(Pn(e)||!e.multi){const p=new Zr(l,o,S),m=Xl(a,t,o?u:u+f,d);-1===m?(Ma(li(c,s),i,a),Jl(i,e,t.length),t.push(a),c.directiveStart++,c.directiveEnd++,o&&(c.providerIndexes+=1048576),n.push(p),s.push(p)):(n[m]=p,s[m]=p)}else{const p=Xl(a,t,u+f,d),m=Xl(a,t,u,u+f),y=p>=0&&n[p],E=m>=0&&n[m];if(o&&!E||!o&&!y){Ma(li(c,s),i,a);const M=function cI(e,t,n,r,o){const i=new Zr(e,n,S);return i.multi=[],i.index=t,i.componentProviders=0,Og(i,o,r&&!n),i}(o?lI:aI,n.length,o,r,l);!o&&E&&(n[m].providerFactory=M),Jl(i,e,t.length,0),t.push(a),c.directiveStart++,c.directiveEnd++,o&&(c.providerIndexes+=1048576),n.push(M),s.push(M)}else Jl(i,e,p>-1?p:m,Og(n[o?m:p],l,!o&&r));!o&&r&&E&&n[m].componentProviders++}}}function Jl(e,t,n,r){const o=Pn(t),i=function fw(e){return!!e.useClass}(t);if(o||i){const l=(i?k(t.useClass):t).prototype.ngOnDestroy;if(l){const c=e.destroyHooks||(e.destroyHooks=[]);if(!o&&t.multi){const u=c.indexOf(n);-1===u?c.push(n,[r,l]):c[u+1].push(r,l)}else c.push(n,l)}}}function Og(e,t,n){return n&&e.componentProviders++,e.multi.push(t)-1}function Xl(e,t,n,r){for(let o=n;o{n.providersResolver=(r,o)=>function sI(e,t,n){const r=J();if(r.firstCreatePass){const o=wt(e);Kl(n,r.data,r.blueprint,o,!0),Kl(t,r.data,r.blueprint,o,!1)}}(r,o?o(e):e,t)}}class Fr{}class uI{}class Rg extends Fr{constructor(t,n){super(),this._parent=n,this._bootstrapComponents=[],this.destroyCbs=[],this.componentFactoryResolver=new Ul(this);const r=function ot(e,t){const n=e[pd]||null;if(!n&&!0===t)throw new Error(`Type ${ce(e)} does not have '\u0275mod' property.`);return n}(t);this._bootstrapComponents=function Kt(e){return e instanceof Function?e():e}(r.bootstrap),this._r3Injector=Ch(t,n,[{provide:Fr,useValue:this},{provide:Ii,useValue:this.componentFactoryResolver}],ce(t),new Set(["environment"])),this._r3Injector.resolveInjectorInitializers(),this.instance=this._r3Injector.get(t)}get injector(){return this._r3Injector}destroy(){const t=this._r3Injector;!t.destroyed&&t.destroy(),this.destroyCbs.forEach(n=>n()),this.destroyCbs=null}onDestroy(t){this.destroyCbs.push(t)}}class tc extends uI{constructor(t){super(),this.moduleType=t}create(t){return new Rg(this.moduleType,t)}}function Wi(e,t,n,r){return function $g(e,t,n,r,o,i){const s=t+n;return He(e,s,o)?kt(e,s+1,i?r.call(i,o):r(o)):Do(e,s+1)}(w(),We(),e,t,n,r)}function rc(e,t,n,r,o){return function Ug(e,t,n,r,o,i,s){const a=t+n;return Vn(e,a,o,i)?kt(e,a+2,s?r.call(s,o,i):r(o,i)):Do(e,a+2)}(w(),We(),e,t,n,r,o)}function Re(e,t,n,r,o,i){return zg(w(),We(),e,t,n,r,o,i)}function Do(e,t){const n=e[t];return n===U?void 0:n}function zg(e,t,n,r,o,i,s,a){const l=t+n;return function Vi(e,t,n,r,o){const i=Vn(e,t,n,r);return He(e,t+2,o)||i}(e,l,o,i,s)?kt(e,l+3,a?r.call(a,o,i,s):r(o,i,s)):Do(e,l+3)}function oc(e){return t=>{setTimeout(e,void 0,t)}}const je=class PI extends js{constructor(t=!1){super(),this.__isAsync=t}emit(t){super.next(t)}subscribe(t,n,r){let o=t,i=n||(()=>null),s=r;if(t&&"object"==typeof t){const l=t;o=l.next?.bind(l),i=l.error?.bind(l),s=l.complete?.bind(l)}this.__isAsync&&(i=oc(i),o&&(o=oc(o)),s&&(s=oc(s)));const a=super.subscribe({next:o,error:i,complete:s});return t instanceof Nt&&t.add(a),a}};let en=(()=>{class e{}return e.__NG_ELEMENT_ID__=BI,e})();const LI=en,VI=class extends LI{constructor(t,n,r){super(),this._declarationLView=t,this._declarationTContainer=n,this.elementRef=r}createEmbeddedView(t,n){const r=this._declarationTContainer.tViews,o=Ni(this._declarationLView,r,t,16,null,r.declTNode,null,null,null,null,n||null);o[17]=this._declarationLView[this._declarationTContainer.index];const s=this._declarationLView[19];return null!==s&&(o[19]=s.createEmbeddedView(r)),Nl(r,o,t),new co(o)}};function BI(){return function qi(e,t){return 4&e.type?new VI(t,e,pr(e,t)):null}(Oe(),w())}let jt=(()=>{class e{}return e.__NG_ELEMENT_ID__=HI,e})();function HI(){return function Kg(e,t){let n;const r=t[e.index];if(Ct(r))n=r;else{let o;if(8&e.type)o=Se(r);else{const i=t[G];o=i.createComment("");const s=st(e,t);On(i,_i(i,s),o,function FC(e,t){return e.nextSibling(t)}(i,s),!1)}t[e.index]=n=qh(r,t,o,e),Oi(t,n)}return new Qg(n,e,t)}(Oe(),w())}const jI=jt,Qg=class extends jI{constructor(t,n,r){super(),this._lContainer=t,this._hostTNode=n,this._hostLView=r}get element(){return pr(this._hostTNode,this._hostLView)}get injector(){return new rr(this._hostTNode,this._hostLView)}get parentInjector(){const t=ci(this._hostTNode,this._hostLView);if(jd(t)){const n=tr(t,this._hostLView),r=er(t);return new rr(n[1].data[r+8],n)}return new rr(null,this._hostLView)}clear(){for(;this.length>0;)this.remove(this.length-1)}get(t){const n=Yg(this._lContainer);return null!==n&&n[t]||null}get length(){return this._lContainer.length-10}createEmbeddedView(t,n,r){let o,i;"number"==typeof r?o=r:null!=r&&(o=r.index,i=r.injector);const s=t.createEmbeddedView(n||{},i);return this.insert(s,o),s}createComponent(t,n,r,o,i){const s=t&&!function Jr(e){return"function"==typeof e}(t);let a;if(s)a=n;else{const d=n||{};a=d.index,r=d.injector,o=d.projectableNodes,i=d.environmentInjector||d.ngModuleRef}const l=s?t:new uo(oe(t)),c=r||this.parentInjector;if(!i&&null==l.ngModule){const f=(s?c:this.parentInjector).get(fr,null);f&&(i=f)}const u=l.create(c,o,void 0,i);return this.insert(u.hostView,a),u}insert(t,n){const r=t._lView,o=r[1];if(function sD(e){return Ct(e[3])}(r)){const u=this.indexOf(t);if(-1!==u)this.detach(u);else{const d=r[3],f=new Qg(d,d[6],d[3]);f.detach(f.indexOf(t))}}const i=this._adjustIndex(n),s=this._lContainer;!function SC(e,t,n,r){const o=10+r,i=n.length;r>0&&(n[o-1][4]=t),r{class e{constructor(n){this.appInits=n,this.resolve=Qi,this.reject=Qi,this.initialized=!1,this.done=!1,this.donePromise=new Promise((r,o)=>{this.resolve=r,this.reject=o})}runInitializers(){if(this.initialized)return;const n=[],r=()=>{this.done=!0,this.resolve()};if(this.appInits)for(let o=0;o{i.subscribe({complete:a,error:l})});n.push(s)}}Promise.all(n).then(()=>{r()}).catch(o=>{this.reject(o)}),0===n.length&&r(),this.initialized=!0}}return e.\u0275fac=function(n){return new(n||e)(re(Cm,8))},e.\u0275prov=de({token:e,factory:e.\u0275fac,providedIn:"root"}),e})();const bo=new B("AppId",{providedIn:"root",factory:function wm(){return`${mc()}${mc()}${mc()}`}});function mc(){return String.fromCharCode(97+Math.floor(25*Math.random()))}const bm=new B("Platform Initializer"),Em=new B("Platform ID",{providedIn:"platform",factory:()=>"unknown"}),DM=new B("appBootstrapListener"),tn=new B("LocaleId",{providedIn:"root",factory:()=>function Ly(e,t=V.Default){return re(e,Qo(t))}(tn,V.Optional|V.SkipSelf)||function CM(){return typeof $localize<"u"&&$localize.locale||Nr}()}),MM=(()=>Promise.resolve(0))();function _c(e){typeof Zone>"u"?MM.then(()=>{e&&e.apply(null,null)}):Zone.current.scheduleMicroTask("scheduleMicrotask",e)}class $e{constructor({enableLongStackTrace:t=!1,shouldCoalesceEventChangeDetection:n=!1,shouldCoalesceRunChangeDetection:r=!1}){if(this.hasPendingMacrotasks=!1,this.hasPendingMicrotasks=!1,this.isStable=!0,this.onUnstable=new je(!1),this.onMicrotaskEmpty=new je(!1),this.onStable=new je(!1),this.onError=new je(!1),typeof Zone>"u")throw new A(908,!1);Zone.assertZonePatched();const o=this;o._nesting=0,o._outer=o._inner=Zone.current,Zone.TaskTrackingZoneSpec&&(o._inner=o._inner.fork(new Zone.TaskTrackingZoneSpec)),t&&Zone.longStackTraceZoneSpec&&(o._inner=o._inner.fork(Zone.longStackTraceZoneSpec)),o.shouldCoalesceEventChangeDetection=!r&&n,o.shouldCoalesceRunChangeDetection=r,o.lastRequestAnimationFrameId=-1,o.nativeRequestAnimationFrame=function SM(){let e=fe.requestAnimationFrame,t=fe.cancelAnimationFrame;if(typeof Zone<"u"&&e&&t){const n=e[Zone.__symbol__("OriginalDelegate")];n&&(e=n);const r=t[Zone.__symbol__("OriginalDelegate")];r&&(t=r)}return{nativeRequestAnimationFrame:e,nativeCancelAnimationFrame:t}}().nativeRequestAnimationFrame,function xM(e){const t=()=>{!function TM(e){e.isCheckStableRunning||-1!==e.lastRequestAnimationFrameId||(e.lastRequestAnimationFrameId=e.nativeRequestAnimationFrame.call(fe,()=>{e.fakeTopEventTask||(e.fakeTopEventTask=Zone.root.scheduleEventTask("fakeTopEventTask",()=>{e.lastRequestAnimationFrameId=-1,yc(e),e.isCheckStableRunning=!0,vc(e),e.isCheckStableRunning=!1},void 0,()=>{},()=>{})),e.fakeTopEventTask.invoke()}),yc(e))}(e)};e._inner=e._inner.fork({name:"angular",properties:{isAngularZone:!0},onInvokeTask:(n,r,o,i,s,a)=>{try{return Sm(e),n.invokeTask(o,i,s,a)}finally{(e.shouldCoalesceEventChangeDetection&&"eventTask"===i.type||e.shouldCoalesceRunChangeDetection)&&t(),Am(e)}},onInvoke:(n,r,o,i,s,a,l)=>{try{return Sm(e),n.invoke(o,i,s,a,l)}finally{e.shouldCoalesceRunChangeDetection&&t(),Am(e)}},onHasTask:(n,r,o,i)=>{n.hasTask(o,i),r===o&&("microTask"==i.change?(e._hasPendingMicrotasks=i.microTask,yc(e),vc(e)):"macroTask"==i.change&&(e.hasPendingMacrotasks=i.macroTask))},onHandleError:(n,r,o,i)=>(n.handleError(o,i),e.runOutsideAngular(()=>e.onError.emit(i)),!1)})}(o)}static isInAngularZone(){return typeof Zone<"u"&&!0===Zone.current.get("isAngularZone")}static assertInAngularZone(){if(!$e.isInAngularZone())throw new A(909,!1)}static assertNotInAngularZone(){if($e.isInAngularZone())throw new A(909,!1)}run(t,n,r){return this._inner.run(t,n,r)}runTask(t,n,r,o){const i=this._inner,s=i.scheduleEventTask("NgZoneEvent: "+o,t,AM,Qi,Qi);try{return i.runTask(s,n,r)}finally{i.cancelTask(s)}}runGuarded(t,n,r){return this._inner.runGuarded(t,n,r)}runOutsideAngular(t){return this._outer.run(t)}}const AM={};function vc(e){if(0==e._nesting&&!e.hasPendingMicrotasks&&!e.isStable)try{e._nesting++,e.onMicrotaskEmpty.emit(null)}finally{if(e._nesting--,!e.hasPendingMicrotasks)try{e.runOutsideAngular(()=>e.onStable.emit(null))}finally{e.isStable=!0}}}function yc(e){e.hasPendingMicrotasks=!!(e._hasPendingMicrotasks||(e.shouldCoalesceEventChangeDetection||e.shouldCoalesceRunChangeDetection)&&-1!==e.lastRequestAnimationFrameId)}function Sm(e){e._nesting++,e.isStable&&(e.isStable=!1,e.onUnstable.emit(null))}function Am(e){e._nesting--,vc(e)}class NM{constructor(){this.hasPendingMicrotasks=!1,this.hasPendingMacrotasks=!1,this.isStable=!0,this.onUnstable=new je,this.onMicrotaskEmpty=new je,this.onStable=new je,this.onError=new je}run(t,n,r){return t.apply(n,r)}runGuarded(t,n,r){return t.apply(n,r)}runOutsideAngular(t){return t()}runTask(t,n,r,o){return t.apply(n,r)}}const Tm=new B(""),Ki=new B("");let wc,Dc=(()=>{class e{constructor(n,r,o){this._ngZone=n,this.registry=r,this._pendingCount=0,this._isZoneStable=!0,this._didWork=!1,this._callbacks=[],this.taskTrackingZone=null,wc||(function FM(e){wc=e}(o),o.addToWindow(r)),this._watchAngularEvents(),n.run(()=>{this.taskTrackingZone=typeof Zone>"u"?null:Zone.current.get("TaskTrackingZone")})}_watchAngularEvents(){this._ngZone.onUnstable.subscribe({next:()=>{this._didWork=!0,this._isZoneStable=!1}}),this._ngZone.runOutsideAngular(()=>{this._ngZone.onStable.subscribe({next:()=>{$e.assertNotInAngularZone(),_c(()=>{this._isZoneStable=!0,this._runCallbacksIfReady()})}})})}increasePendingRequestCount(){return this._pendingCount+=1,this._didWork=!0,this._pendingCount}decreasePendingRequestCount(){if(this._pendingCount-=1,this._pendingCount<0)throw new Error("pending async requests below zero");return this._runCallbacksIfReady(),this._pendingCount}isStable(){return this._isZoneStable&&0===this._pendingCount&&!this._ngZone.hasPendingMacrotasks}_runCallbacksIfReady(){if(this.isStable())_c(()=>{for(;0!==this._callbacks.length;){let n=this._callbacks.pop();clearTimeout(n.timeoutId),n.doneCb(this._didWork)}this._didWork=!1});else{let n=this.getPendingTasks();this._callbacks=this._callbacks.filter(r=>!r.updateCb||!r.updateCb(n)||(clearTimeout(r.timeoutId),!1)),this._didWork=!0}}getPendingTasks(){return this.taskTrackingZone?this.taskTrackingZone.macroTasks.map(n=>({source:n.source,creationLocation:n.creationLocation,data:n.data})):[]}addCallback(n,r,o){let i=-1;r&&r>0&&(i=setTimeout(()=>{this._callbacks=this._callbacks.filter(s=>s.timeoutId!==i),n(this._didWork,this.getPendingTasks())},r)),this._callbacks.push({doneCb:n,timeoutId:i,updateCb:o})}whenStable(n,r,o){if(o&&!this.taskTrackingZone)throw new Error('Task tracking zone is required when passing an update callback to whenStable(). Is "zone.js/plugins/task-tracking" loaded?');this.addCallback(n,r,o),this._runCallbacksIfReady()}getPendingRequestCount(){return this._pendingCount}registerApplication(n){this.registry.registerApplication(n,this)}unregisterApplication(n){this.registry.unregisterApplication(n)}findProviders(n,r,o){return[]}}return e.\u0275fac=function(n){return new(n||e)(re($e),re(Cc),re(Ki))},e.\u0275prov=de({token:e,factory:e.\u0275fac}),e})(),Cc=(()=>{class e{constructor(){this._applications=new Map}registerApplication(n,r){this._applications.set(n,r)}unregisterApplication(n){this._applications.delete(n)}unregisterAllApplications(){this._applications.clear()}getTestability(n){return this._applications.get(n)||null}getAllTestabilities(){return Array.from(this._applications.values())}getAllRootElements(){return Array.from(this._applications.keys())}findTestabilityInTree(n,r=!0){return wc?.findTestabilityInTree(this,n,r)??null}}return e.\u0275fac=function(n){return new(n||e)},e.\u0275prov=de({token:e,factory:e.\u0275fac,providedIn:"platform"}),e})(),mn=null;const xm=new B("AllowMultipleToken"),bc=new B("PlatformDestroyListeners");function Fm(e,t,n=[]){const r=`Platform: ${t}`,o=new B(r);return(i=[])=>{let s=Ec();if(!s||s.injector.get(xm,!1)){const a=[...n,...i,{provide:o,useValue:!0}];e?e(a):function PM(e){if(mn&&!mn.get(xm,!1))throw new A(400,!1);mn=e;const t=e.get(Rm);(function Nm(e){const t=e.get(bm,null);t&&t.forEach(n=>n())})(e)}(function Om(e=[],t){return hn.create({name:t,providers:[{provide:ll,useValue:"platform"},{provide:bc,useValue:new Set([()=>mn=null])},...e]})}(a,r))}return function LM(e){const t=Ec();if(!t)throw new A(401,!1);return t}()}}function Ec(){return mn?.get(Rm)??null}let Rm=(()=>{class e{constructor(n){this._injector=n,this._modules=[],this._destroyListeners=[],this._destroyed=!1}bootstrapModuleFactory(n,r){const o=function km(e,t){let n;return n="noop"===e?new NM:("zone.js"===e?void 0:e)||new $e(t),n}(r?.ngZone,function Pm(e){return{enableLongStackTrace:!1,shouldCoalesceEventChangeDetection:!(!e||!e.ngZoneEventCoalescing)||!1,shouldCoalesceRunChangeDetection:!(!e||!e.ngZoneRunCoalescing)||!1}}(r)),i=[{provide:$e,useValue:o}];return o.run(()=>{const s=hn.create({providers:i,parent:this.injector,name:n.moduleType.name}),a=n.create(s),l=a.injector.get(gr,null);if(!l)throw new A(402,!1);return o.runOutsideAngular(()=>{const c=o.onError.subscribe({next:u=>{l.handleError(u)}});a.onDestroy(()=>{Ji(this._modules,a),c.unsubscribe()})}),function Lm(e,t,n){try{const r=n();return Bi(r)?r.catch(o=>{throw t.runOutsideAngular(()=>e.handleError(o)),o}):r}catch(r){throw t.runOutsideAngular(()=>e.handleError(r)),r}}(l,o,()=>{const c=a.injector.get(Yi);return c.runInitializers(),c.donePromise.then(()=>(function cg(e){rt(e,"Expected localeId to be defined"),"string"==typeof e&&(lg=e.toLowerCase().replace(/_/g,"-"))}(a.injector.get(tn,Nr)||Nr),this._moduleDoBootstrap(a),a))})})}bootstrapModule(n,r=[]){const o=Vm({},r);return function OM(e,t,n){const r=new tc(n);return Promise.resolve(r)}(0,0,n).then(i=>this.bootstrapModuleFactory(i,o))}_moduleDoBootstrap(n){const r=n.injector.get(Ic);if(n._bootstrapComponents.length>0)n._bootstrapComponents.forEach(o=>r.bootstrap(o));else{if(!n.instance.ngDoBootstrap)throw new A(403,!1);n.instance.ngDoBootstrap(r)}this._modules.push(n)}onDestroy(n){this._destroyListeners.push(n)}get injector(){return this._injector}destroy(){if(this._destroyed)throw new A(404,!1);this._modules.slice().forEach(r=>r.destroy()),this._destroyListeners.forEach(r=>r());const n=this._injector.get(bc,null);n&&(n.forEach(r=>r()),n.clear()),this._destroyed=!0}get destroyed(){return this._destroyed}}return e.\u0275fac=function(n){return new(n||e)(re(hn))},e.\u0275prov=de({token:e,factory:e.\u0275fac,providedIn:"platform"}),e})();function Vm(e,t){return Array.isArray(t)?t.reduce(Vm,e):{...e,...t}}let Ic=(()=>{class e{constructor(n,r,o){this._zone=n,this._injector=r,this._exceptionHandler=o,this._bootstrapListeners=[],this._views=[],this._runningTick=!1,this._stable=!0,this._destroyed=!1,this._destroyListeners=[],this.componentTypes=[],this.components=[],this._onMicrotaskEmptySubscription=this._zone.onMicrotaskEmpty.subscribe({next:()=>{this._zone.run(()=>{this.tick()})}});const i=new ze(a=>{this._stable=this._zone.isStable&&!this._zone.hasPendingMacrotasks&&!this._zone.hasPendingMicrotasks,this._zone.runOutsideAngular(()=>{a.next(this._stable),a.complete()})}),s=new ze(a=>{let l;this._zone.runOutsideAngular(()=>{l=this._zone.onStable.subscribe(()=>{$e.assertNotInAngularZone(),_c(()=>{!this._stable&&!this._zone.hasPendingMacrotasks&&!this._zone.hasPendingMicrotasks&&(this._stable=!0,a.next(!0))})})});const c=this._zone.onUnstable.subscribe(()=>{$e.assertInAngularZone(),this._stable&&(this._stable=!1,this._zone.runOutsideAngular(()=>{a.next(!1)}))});return()=>{l.unsubscribe(),c.unsubscribe()}});this.isStable=Dy(i,s.pipe(function wy(e={}){const{connector:t=(()=>new js),resetOnError:n=!0,resetOnComplete:r=!0,resetOnRefCountZero:o=!0}=e;return i=>{let s=null,a=null,l=null,c=0,u=!1,d=!1;const f=()=>{a?.unsubscribe(),a=null},p=()=>{f(),s=l=null,u=d=!1},m=()=>{const y=s;p(),y?.unsubscribe()};return Wn((y,E)=>{c++,!d&&!u&&f();const M=l=l??t();E.add(()=>{c--,0===c&&!d&&!u&&(a=qs(m,o))}),M.subscribe(E),s||(s=new Ls({next:N=>M.next(N),error:N=>{d=!0,f(),a=qs(p,n,N),M.error(N)},complete:()=>{u=!0,f(),a=qs(p,r),M.complete()}}),Ws(y).subscribe(s))})(i)}}()))}get destroyed(){return this._destroyed}get injector(){return this._injector}bootstrap(n,r){const o=n instanceof ah;if(!this._injector.get(Yi).done)throw!o&&function $r(e){const t=oe(e)||Pe(e)||Ge(e);return null!==t&&t.standalone}(n),new A(405,false);let s;s=o?n:this._injector.get(Ii).resolveComponentFactory(n),this.componentTypes.push(s.componentType);const a=function RM(e){return e.isBoundToModule}(s)?void 0:this._injector.get(Fr),c=s.create(hn.NULL,[],r||s.selector,a),u=c.location.nativeElement,d=c.injector.get(Tm,null);return d?.registerApplication(u),c.onDestroy(()=>{this.detachView(c.hostView),Ji(this.components,c),d?.unregisterApplication(u)}),this._loadComponent(c),c}tick(){if(this._runningTick)throw new A(101,!1);try{this._runningTick=!0;for(let n of this._views)n.detectChanges()}catch(n){this._zone.runOutsideAngular(()=>this._exceptionHandler.handleError(n))}finally{this._runningTick=!1}}attachView(n){const r=n;this._views.push(r),r.attachToAppRef(this)}detachView(n){const r=n;Ji(this._views,r),r.detachFromAppRef()}_loadComponent(n){this.attachView(n.hostView),this.tick(),this.components.push(n),this._injector.get(DM,[]).concat(this._bootstrapListeners).forEach(o=>o(n))}ngOnDestroy(){if(!this._destroyed)try{this._destroyListeners.forEach(n=>n()),this._views.slice().forEach(n=>n.destroy()),this._onMicrotaskEmptySubscription.unsubscribe()}finally{this._destroyed=!0,this._views=[],this._bootstrapListeners=[],this._destroyListeners=[]}}onDestroy(n){return this._destroyListeners.push(n),()=>Ji(this._destroyListeners,n)}destroy(){if(this._destroyed)throw new A(406,!1);const n=this._injector;n.destroy&&!n.destroyed&&n.destroy()}get viewCount(){return this._views.length}warnIfDestroyed(){}}return e.\u0275fac=function(n){return new(n||e)(re($e),re(fr),re(gr))},e.\u0275prov=de({token:e,factory:e.\u0275fac,providedIn:"root"}),e})();function Ji(e,t){const n=e.indexOf(t);n>-1&&e.splice(n,1)}let jm=(()=>{class e{}return e.__NG_ELEMENT_ID__=BM,e})();function BM(e){return function HM(e,t,n){if(ei(e)&&!n){const r=at(e.index,t);return new co(r,r)}return 47&e.type?new co(t[16],t):null}(Oe(),w(),16==(16&e))}class zm{constructor(){}supports(t){return fo(t)}create(t){return new WM(t)}}const GM=(e,t)=>t;class WM{constructor(t){this.length=0,this._linkedRecords=null,this._unlinkedRecords=null,this._previousItHead=null,this._itHead=null,this._itTail=null,this._additionsHead=null,this._additionsTail=null,this._movesHead=null,this._movesTail=null,this._removalsHead=null,this._removalsTail=null,this._identityChangesHead=null,this._identityChangesTail=null,this._trackByFn=t||GM}forEachItem(t){let n;for(n=this._itHead;null!==n;n=n._next)t(n)}forEachOperation(t){let n=this._itHead,r=this._removalsHead,o=0,i=null;for(;n||r;){const s=!r||n&&n.currentIndex{s=this._trackByFn(o,a),null!==n&&Object.is(n.trackById,s)?(r&&(n=this._verifyReinsertion(n,a,s,o)),Object.is(n.item,a)||this._addIdentityChange(n,a)):(n=this._mismatch(n,a,s,o),r=!0),n=n._next,o++}),this.length=o;return this._truncate(n),this.collection=t,this.isDirty}get isDirty(){return null!==this._additionsHead||null!==this._movesHead||null!==this._removalsHead||null!==this._identityChangesHead}_reset(){if(this.isDirty){let t;for(t=this._previousItHead=this._itHead;null!==t;t=t._next)t._nextPrevious=t._next;for(t=this._additionsHead;null!==t;t=t._nextAdded)t.previousIndex=t.currentIndex;for(this._additionsHead=this._additionsTail=null,t=this._movesHead;null!==t;t=t._nextMoved)t.previousIndex=t.currentIndex;this._movesHead=this._movesTail=null,this._removalsHead=this._removalsTail=null,this._identityChangesHead=this._identityChangesTail=null}}_mismatch(t,n,r,o){let i;return null===t?i=this._itTail:(i=t._prev,this._remove(t)),null!==(t=null===this._unlinkedRecords?null:this._unlinkedRecords.get(r,null))?(Object.is(t.item,n)||this._addIdentityChange(t,n),this._reinsertAfter(t,i,o)):null!==(t=null===this._linkedRecords?null:this._linkedRecords.get(r,o))?(Object.is(t.item,n)||this._addIdentityChange(t,n),this._moveAfter(t,i,o)):t=this._addAfter(new qM(n,r),i,o),t}_verifyReinsertion(t,n,r,o){let i=null===this._unlinkedRecords?null:this._unlinkedRecords.get(r,null);return null!==i?t=this._reinsertAfter(i,t._prev,o):t.currentIndex!=o&&(t.currentIndex=o,this._addToMoves(t,o)),t}_truncate(t){for(;null!==t;){const n=t._next;this._addToRemovals(this._unlink(t)),t=n}null!==this._unlinkedRecords&&this._unlinkedRecords.clear(),null!==this._additionsTail&&(this._additionsTail._nextAdded=null),null!==this._movesTail&&(this._movesTail._nextMoved=null),null!==this._itTail&&(this._itTail._next=null),null!==this._removalsTail&&(this._removalsTail._nextRemoved=null),null!==this._identityChangesTail&&(this._identityChangesTail._nextIdentityChange=null)}_reinsertAfter(t,n,r){null!==this._unlinkedRecords&&this._unlinkedRecords.remove(t);const o=t._prevRemoved,i=t._nextRemoved;return null===o?this._removalsHead=i:o._nextRemoved=i,null===i?this._removalsTail=o:i._prevRemoved=o,this._insertAfter(t,n,r),this._addToMoves(t,r),t}_moveAfter(t,n,r){return this._unlink(t),this._insertAfter(t,n,r),this._addToMoves(t,r),t}_addAfter(t,n,r){return this._insertAfter(t,n,r),this._additionsTail=null===this._additionsTail?this._additionsHead=t:this._additionsTail._nextAdded=t,t}_insertAfter(t,n,r){const o=null===n?this._itHead:n._next;return t._next=o,t._prev=n,null===o?this._itTail=t:o._prev=t,null===n?this._itHead=t:n._next=t,null===this._linkedRecords&&(this._linkedRecords=new Gm),this._linkedRecords.put(t),t.currentIndex=r,t}_remove(t){return this._addToRemovals(this._unlink(t))}_unlink(t){null!==this._linkedRecords&&this._linkedRecords.remove(t);const n=t._prev,r=t._next;return null===n?this._itHead=r:n._next=r,null===r?this._itTail=n:r._prev=n,t}_addToMoves(t,n){return t.previousIndex===n||(this._movesTail=null===this._movesTail?this._movesHead=t:this._movesTail._nextMoved=t),t}_addToRemovals(t){return null===this._unlinkedRecords&&(this._unlinkedRecords=new Gm),this._unlinkedRecords.put(t),t.currentIndex=null,t._nextRemoved=null,null===this._removalsTail?(this._removalsTail=this._removalsHead=t,t._prevRemoved=null):(t._prevRemoved=this._removalsTail,this._removalsTail=this._removalsTail._nextRemoved=t),t}_addIdentityChange(t,n){return t.item=n,this._identityChangesTail=null===this._identityChangesTail?this._identityChangesHead=t:this._identityChangesTail._nextIdentityChange=t,t}}class qM{constructor(t,n){this.item=t,this.trackById=n,this.currentIndex=null,this.previousIndex=null,this._nextPrevious=null,this._prev=null,this._next=null,this._prevDup=null,this._nextDup=null,this._prevRemoved=null,this._nextRemoved=null,this._nextAdded=null,this._nextMoved=null,this._nextIdentityChange=null}}class ZM{constructor(){this._head=null,this._tail=null}add(t){null===this._head?(this._head=this._tail=t,t._nextDup=null,t._prevDup=null):(this._tail._nextDup=t,t._prevDup=this._tail,t._nextDup=null,this._tail=t)}get(t,n){let r;for(r=this._head;null!==r;r=r._nextDup)if((null===n||n<=r.currentIndex)&&Object.is(r.trackById,t))return r;return null}remove(t){const n=t._prevDup,r=t._nextDup;return null===n?this._head=r:n._nextDup=r,null===r?this._tail=n:r._prevDup=n,null===this._head}}class Gm{constructor(){this.map=new Map}put(t){const n=t.trackById;let r=this.map.get(n);r||(r=new ZM,this.map.set(n,r)),r.add(t)}get(t,n){const o=this.map.get(t);return o?o.get(t,n):null}remove(t){const n=t.trackById;return this.map.get(n).remove(t)&&this.map.delete(n),t}get isEmpty(){return 0===this.map.size}clear(){this.map.clear()}}function Wm(e,t,n){const r=e.previousIndex;if(null===r)return r;let o=0;return n&&r{if(n&&n.key===o)this._maybeAddToChanges(n,r),this._appendAfter=n,n=n._next;else{const i=this._getOrCreateRecordForKey(o,r);n=this._insertBeforeOrAppend(n,i)}}),n){n._prev&&(n._prev._next=null),this._removalsHead=n;for(let r=n;null!==r;r=r._nextRemoved)r===this._mapHead&&(this._mapHead=null),this._records.delete(r.key),r._nextRemoved=r._next,r.previousValue=r.currentValue,r.currentValue=null,r._prev=null,r._next=null}return this._changesTail&&(this._changesTail._nextChanged=null),this._additionsTail&&(this._additionsTail._nextAdded=null),this.isDirty}_insertBeforeOrAppend(t,n){if(t){const r=t._prev;return n._next=t,n._prev=r,t._prev=n,r&&(r._next=n),t===this._mapHead&&(this._mapHead=n),this._appendAfter=t,t}return this._appendAfter?(this._appendAfter._next=n,n._prev=this._appendAfter):this._mapHead=n,this._appendAfter=n,null}_getOrCreateRecordForKey(t,n){if(this._records.has(t)){const o=this._records.get(t);this._maybeAddToChanges(o,n);const i=o._prev,s=o._next;return i&&(i._next=s),s&&(s._prev=i),o._next=null,o._prev=null,o}const r=new YM(t);return this._records.set(t,r),r.currentValue=n,this._addToAdditions(r),r}_reset(){if(this.isDirty){let t;for(this._previousMapHead=this._mapHead,t=this._previousMapHead;null!==t;t=t._next)t._nextPrevious=t._next;for(t=this._changesHead;null!==t;t=t._nextChanged)t.previousValue=t.currentValue;for(t=this._additionsHead;null!=t;t=t._nextAdded)t.previousValue=t.currentValue;this._changesHead=this._changesTail=null,this._additionsHead=this._additionsTail=null,this._removalsHead=null}}_maybeAddToChanges(t,n){Object.is(n,t.currentValue)||(t.previousValue=t.currentValue,t.currentValue=n,this._addToChanges(t))}_addToAdditions(t){null===this._additionsHead?this._additionsHead=this._additionsTail=t:(this._additionsTail._nextAdded=t,this._additionsTail=t)}_addToChanges(t){null===this._changesHead?this._changesHead=this._changesTail=t:(this._changesTail._nextChanged=t,this._changesTail=t)}_forEach(t,n){t instanceof Map?t.forEach(n):Object.keys(t).forEach(r=>n(t[r],r))}}class YM{constructor(t){this.key=t,this.previousValue=null,this.currentValue=null,this._nextPrevious=null,this._next=null,this._prev=null,this._nextAdded=null,this._nextRemoved=null,this._nextChanged=null}}function Zm(){return new ts([new zm])}let ts=(()=>{class e{constructor(n){this.factories=n}static create(n,r){if(null!=r){const o=r.factories.slice();n=n.concat(o)}return new e(n)}static extend(n){return{provide:e,useFactory:r=>e.create(n,r||Zm()),deps:[[e,new pi,new hi]]}}find(n){const r=this.factories.find(o=>o.supports(n));if(null!=r)return r;throw new A(901,!1)}}return e.\u0275prov=de({token:e,providedIn:"root",factory:Zm}),e})();function Qm(){return new Eo([new qm])}let Eo=(()=>{class e{constructor(n){this.factories=n}static create(n,r){if(r){const o=r.factories.slice();n=n.concat(o)}return new e(n)}static extend(n){return{provide:e,useFactory:r=>e.create(n,r||Qm()),deps:[[e,new pi,new hi]]}}find(n){const r=this.factories.find(o=>o.supports(n));if(r)return r;throw new A(901,!1)}}return e.\u0275prov=de({token:e,providedIn:"root",factory:Qm}),e})();const XM=Fm(null,"core",[]);let e1=(()=>{class e{constructor(n){}}return e.\u0275fac=function(n){return new(n||e)(re(Ic))},e.\u0275mod=cn({type:e}),e.\u0275inj=zt({}),e})();let ns=null;function jn(){return ns}class r1{}const rn=new B("DocumentToken");let So=(()=>{class e{constructor(n,r,o,i){this._iterableDiffers=n,this._keyValueDiffers=r,this._ngEl=o,this._renderer=i,this._iterableDiffer=null,this._keyValueDiffer=null,this._initialClasses=[],this._rawClass=null}set klass(n){this._removeClasses(this._initialClasses),this._initialClasses="string"==typeof n?n.split(/\s+/):[],this._applyClasses(this._initialClasses),this._applyClasses(this._rawClass)}set ngClass(n){this._removeClasses(this._rawClass),this._applyClasses(this._initialClasses),this._iterableDiffer=null,this._keyValueDiffer=null,this._rawClass="string"==typeof n?n.split(/\s+/):n,this._rawClass&&(fo(this._rawClass)?this._iterableDiffer=this._iterableDiffers.find(this._rawClass).create():this._keyValueDiffer=this._keyValueDiffers.find(this._rawClass).create())}ngDoCheck(){if(this._iterableDiffer){const n=this._iterableDiffer.diff(this._rawClass);n&&this._applyIterableChanges(n)}else if(this._keyValueDiffer){const n=this._keyValueDiffer.diff(this._rawClass);n&&this._applyKeyValueChanges(n)}}_applyKeyValueChanges(n){n.forEachAddedItem(r=>this._toggleClass(r.key,r.currentValue)),n.forEachChangedItem(r=>this._toggleClass(r.key,r.currentValue)),n.forEachRemovedItem(r=>{r.previousValue&&this._toggleClass(r.key,!1)})}_applyIterableChanges(n){n.forEachAddedItem(r=>{if("string"!=typeof r.item)throw new Error(`NgClass can only toggle CSS classes expressed as strings, got ${ce(r.item)}`);this._toggleClass(r.item,!0)}),n.forEachRemovedItem(r=>this._toggleClass(r.item,!1))}_applyClasses(n){n&&(Array.isArray(n)||n instanceof Set?n.forEach(r=>this._toggleClass(r,!0)):Object.keys(n).forEach(r=>this._toggleClass(r,!!n[r])))}_removeClasses(n){n&&(Array.isArray(n)||n instanceof Set?n.forEach(r=>this._toggleClass(r,!1)):Object.keys(n).forEach(r=>this._toggleClass(r,!1)))}_toggleClass(n,r){(n=n.trim())&&n.split(/\s+/g).forEach(o=>{r?this._renderer.addClass(this._ngEl.nativeElement,o):this._renderer.removeClass(this._ngEl.nativeElement,o)})}}return e.\u0275fac=function(n){return new(n||e)(S(ts),S(Eo),S(bt),S(kn))},e.\u0275dir=$({type:e,selectors:[["","ngClass",""]],inputs:{klass:["class","klass"],ngClass:"ngClass"},standalone:!0}),e})();class z1{constructor(t,n,r,o){this.$implicit=t,this.ngForOf=n,this.index=r,this.count=o}get first(){return 0===this.index}get last(){return this.index===this.count-1}get even(){return this.index%2==0}get odd(){return!this.even}}let Hc=(()=>{class e{constructor(n,r,o){this._viewContainer=n,this._template=r,this._differs=o,this._ngForOf=null,this._ngForOfDirty=!0,this._differ=null}set ngForOf(n){this._ngForOf=n,this._ngForOfDirty=!0}set ngForTrackBy(n){this._trackByFn=n}get ngForTrackBy(){return this._trackByFn}set ngForTemplate(n){n&&(this._template=n)}ngDoCheck(){if(this._ngForOfDirty){this._ngForOfDirty=!1;const n=this._ngForOf;!this._differ&&n&&(this._differ=this._differs.find(n).create(this.ngForTrackBy))}if(this._differ){const n=this._differ.diff(this._ngForOf);n&&this._applyChanges(n)}}_applyChanges(n){const r=this._viewContainer;n.forEachOperation((o,i,s)=>{if(null==o.previousIndex)r.createEmbeddedView(this._template,new z1(o.item,this._ngForOf,-1,-1),null===s?void 0:s);else if(null==s)r.remove(null===i?void 0:i);else if(null!==i){const a=r.get(i);r.move(a,s),a_(a,o)}});for(let o=0,i=r.length;o{a_(r.get(o.currentIndex),o)})}static ngTemplateContextGuard(n,r){return!0}}return e.\u0275fac=function(n){return new(n||e)(S(jt),S(en),S(ts))},e.\u0275dir=$({type:e,selectors:[["","ngFor","","ngForOf",""]],inputs:{ngForOf:"ngForOf",ngForTrackBy:"ngForTrackBy",ngForTemplate:"ngForTemplate"},standalone:!0}),e})();function a_(e,t){e.context.$implicit=t.item}let Pr=(()=>{class e{constructor(n,r){this._viewContainer=n,this._context=new W1,this._thenTemplateRef=null,this._elseTemplateRef=null,this._thenViewRef=null,this._elseViewRef=null,this._thenTemplateRef=r}set ngIf(n){this._context.$implicit=this._context.ngIf=n,this._updateView()}set ngIfThen(n){l_("ngIfThen",n),this._thenTemplateRef=n,this._thenViewRef=null,this._updateView()}set ngIfElse(n){l_("ngIfElse",n),this._elseTemplateRef=n,this._elseViewRef=null,this._updateView()}_updateView(){this._context.$implicit?this._thenViewRef||(this._viewContainer.clear(),this._elseViewRef=null,this._thenTemplateRef&&(this._thenViewRef=this._viewContainer.createEmbeddedView(this._thenTemplateRef,this._context))):this._elseViewRef||(this._viewContainer.clear(),this._thenViewRef=null,this._elseTemplateRef&&(this._elseViewRef=this._viewContainer.createEmbeddedView(this._elseTemplateRef,this._context)))}static ngTemplateContextGuard(n,r){return!0}}return e.\u0275fac=function(n){return new(n||e)(S(jt),S(en))},e.\u0275dir=$({type:e,selectors:[["","ngIf",""]],inputs:{ngIf:"ngIf",ngIfThen:"ngIfThen",ngIfElse:"ngIfElse"},standalone:!0}),e})();class W1{constructor(){this.$implicit=null,this.ngIf=null}}function l_(e,t){if(t&&!t.createEmbeddedView)throw new Error(`${e} must be a TemplateRef, but received '${ce(t)}'.`)}let d_=(()=>{class e{transform(n,r,o){if(null==n)return null;if(!this.supports(n))throw function xt(e,t){return new A(2100,!1)}();return n.slice(r,o)}supports(n){return"string"==typeof n||Array.isArray(n)}}return e.\u0275fac=function(n){return new(n||e)},e.\u0275pipe=Je({name:"slice",type:e,pure:!1,standalone:!0}),e})(),DS=(()=>{class e{}return e.\u0275fac=function(n){return new(n||e)},e.\u0275mod=cn({type:e}),e.\u0275inj=zt({}),e})();class JS extends r1{constructor(){super(...arguments),this.supportsDOMEvents=!0}}class qc extends JS{static makeCurrent(){!function n1(e){ns||(ns=e)}(new qc)}onAndCancel(t,n,r){return t.addEventListener(n,r,!1),()=>{t.removeEventListener(n,r,!1)}}dispatchEvent(t,n){t.dispatchEvent(n)}remove(t){t.parentNode&&t.parentNode.removeChild(t)}createElement(t,n){return(n=n||this.getDefaultDocument()).createElement(t)}createHtmlDocument(){return document.implementation.createHTMLDocument("fakeTitle")}getDefaultDocument(){return document}isElementNode(t){return t.nodeType===Node.ELEMENT_NODE}isShadowRoot(t){return t instanceof DocumentFragment}getGlobalEventTarget(t,n){return"window"===n?window:"document"===n?t:"body"===n?t.body:null}getBaseHref(t){const n=function XS(){return To=To||document.querySelector("base"),To?To.getAttribute("href"):null}();return null==n?null:function eA(e){hs=hs||document.createElement("a"),hs.setAttribute("href",e);const t=hs.pathname;return"/"===t.charAt(0)?t:`/${t}`}(n)}resetBaseElement(){To=null}getUserAgent(){return window.navigator.userAgent}getCookie(t){return function $1(e,t){t=encodeURIComponent(t);for(const n of e.split(";")){const r=n.indexOf("="),[o,i]=-1==r?[n,""]:[n.slice(0,r),n.slice(r+1)];if(o.trim()===t)return decodeURIComponent(i)}return null}(document.cookie,t)}}let hs,To=null;const y_=new B("TRANSITION_ID"),nA=[{provide:Cm,useFactory:function tA(e,t,n){return()=>{n.get(Yi).donePromise.then(()=>{const r=jn(),o=t.querySelectorAll(`style[ng-transition="${e}"]`);for(let i=0;i{class e{build(){return new XMLHttpRequest}}return e.\u0275fac=function(n){return new(n||e)},e.\u0275prov=de({token:e,factory:e.\u0275fac}),e})();const ps=new B("EventManagerPlugins");let gs=(()=>{class e{constructor(n,r){this._zone=r,this._eventNameToPlugin=new Map,n.forEach(o=>o.manager=this),this._plugins=n.slice().reverse()}addEventListener(n,r,o){return this._findPluginFor(r).addEventListener(n,r,o)}addGlobalEventListener(n,r,o){return this._findPluginFor(r).addGlobalEventListener(n,r,o)}getZone(){return this._zone}_findPluginFor(n){const r=this._eventNameToPlugin.get(n);if(r)return r;const o=this._plugins;for(let i=0;i{class e{constructor(){this._stylesSet=new Set}addStyles(n){const r=new Set;n.forEach(o=>{this._stylesSet.has(o)||(this._stylesSet.add(o),r.add(o))}),this.onStylesAdded(r)}onStylesAdded(n){}getAllStyles(){return Array.from(this._stylesSet)}}return e.\u0275fac=function(n){return new(n||e)},e.\u0275prov=de({token:e,factory:e.\u0275fac}),e})(),xo=(()=>{class e extends C_{constructor(n){super(),this._doc=n,this._hostNodes=new Map,this._hostNodes.set(n.head,[])}_addStylesToHost(n,r,o){n.forEach(i=>{const s=this._doc.createElement("style");s.textContent=i,o.push(r.appendChild(s))})}addHost(n){const r=[];this._addStylesToHost(this._stylesSet,n,r),this._hostNodes.set(n,r)}removeHost(n){const r=this._hostNodes.get(n);r&&r.forEach(w_),this._hostNodes.delete(n)}onStylesAdded(n){this._hostNodes.forEach((r,o)=>{this._addStylesToHost(n,o,r)})}ngOnDestroy(){this._hostNodes.forEach(n=>n.forEach(w_))}}return e.\u0275fac=function(n){return new(n||e)(re(rn))},e.\u0275prov=de({token:e,factory:e.\u0275fac}),e})();function w_(e){jn().remove(e)}const Zc={svg:"http://www.w3.org/2000/svg",xhtml:"http://www.w3.org/1999/xhtml",xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/",math:"http://www.w3.org/1998/MathML/"},Qc=/%COMP%/g;function ms(e,t,n){for(let r=0;r{if("__ngUnwrap__"===t)return e;!1===e(t)&&(t.preventDefault(),t.returnValue=!1)}}let Yc=(()=>{class e{constructor(n,r,o){this.eventManager=n,this.sharedStylesHost=r,this.appId=o,this.rendererByCompId=new Map,this.defaultRenderer=new Kc(n)}createRenderer(n,r){if(!n||!r)return this.defaultRenderer;switch(r.encapsulation){case Ft.Emulated:{let o=this.rendererByCompId.get(r.id);return o||(o=new uA(this.eventManager,this.sharedStylesHost,r,this.appId),this.rendererByCompId.set(r.id,o)),o.applyToHost(n),o}case 1:case Ft.ShadowDom:return new dA(this.eventManager,this.sharedStylesHost,n,r);default:if(!this.rendererByCompId.has(r.id)){const o=ms(r.id,r.styles,[]);this.sharedStylesHost.addStyles(o),this.rendererByCompId.set(r.id,this.defaultRenderer)}return this.defaultRenderer}}begin(){}end(){}}return e.\u0275fac=function(n){return new(n||e)(re(gs),re(xo),re(bo))},e.\u0275prov=de({token:e,factory:e.\u0275fac}),e})();class Kc{constructor(t){this.eventManager=t,this.data=Object.create(null),this.destroyNode=null}destroy(){}createElement(t,n){return n?document.createElementNS(Zc[n]||n,t):document.createElement(t)}createComment(t){return document.createComment(t)}createText(t){return document.createTextNode(t)}appendChild(t,n){(S_(t)?t.content:t).appendChild(n)}insertBefore(t,n,r){t&&(S_(t)?t.content:t).insertBefore(n,r)}removeChild(t,n){t&&t.removeChild(n)}selectRootElement(t,n){let r="string"==typeof t?document.querySelector(t):t;if(!r)throw new Error(`The selector "${t}" did not match any elements`);return n||(r.textContent=""),r}parentNode(t){return t.parentNode}nextSibling(t){return t.nextSibling}setAttribute(t,n,r,o){if(o){n=o+":"+n;const i=Zc[o];i?t.setAttributeNS(i,n,r):t.setAttribute(n,r)}else t.setAttribute(n,r)}removeAttribute(t,n,r){if(r){const o=Zc[r];o?t.removeAttributeNS(o,n):t.removeAttribute(`${r}:${n}`)}else t.removeAttribute(n)}addClass(t,n){t.classList.add(n)}removeClass(t,n){t.classList.remove(n)}setStyle(t,n,r,o){o&(et.DashCase|et.Important)?t.style.setProperty(n,r,o&et.Important?"important":""):t.style[n]=r}removeStyle(t,n,r){r&et.DashCase?t.style.removeProperty(n):t.style[n]=""}setProperty(t,n,r){t[n]=r}setValue(t,n){t.nodeValue=n}listen(t,n,r){return"string"==typeof t?this.eventManager.addGlobalEventListener(t,n,I_(r)):this.eventManager.addEventListener(t,n,I_(r))}}function S_(e){return"TEMPLATE"===e.tagName&&void 0!==e.content}class uA extends Kc{constructor(t,n,r,o){super(t),this.component=r;const i=ms(o+"-"+r.id,r.styles,[]);n.addStyles(i),this.contentAttr=function aA(e){return"_ngcontent-%COMP%".replace(Qc,e)}(o+"-"+r.id),this.hostAttr=function lA(e){return"_nghost-%COMP%".replace(Qc,e)}(o+"-"+r.id)}applyToHost(t){super.setAttribute(t,this.hostAttr,"")}createElement(t,n){const r=super.createElement(t,n);return super.setAttribute(r,this.contentAttr,""),r}}class dA extends Kc{constructor(t,n,r,o){super(t),this.sharedStylesHost=n,this.hostEl=r,this.shadowRoot=r.attachShadow({mode:"open"}),this.sharedStylesHost.addHost(this.shadowRoot);const i=ms(o.id,o.styles,[]);for(let s=0;s{class e extends D_{constructor(n){super(n)}supports(n){return!0}addEventListener(n,r,o){return n.addEventListener(r,o,!1),()=>this.removeEventListener(n,r,o)}removeEventListener(n,r,o){return n.removeEventListener(r,o)}}return e.\u0275fac=function(n){return new(n||e)(re(rn))},e.\u0275prov=de({token:e,factory:e.\u0275fac}),e})();const A_=["alt","control","meta","shift"],hA={"\b":"Backspace","\t":"Tab","\x7f":"Delete","\x1b":"Escape",Del:"Delete",Esc:"Escape",Left:"ArrowLeft",Right:"ArrowRight",Up:"ArrowUp",Down:"ArrowDown",Menu:"ContextMenu",Scroll:"ScrollLock",Win:"OS"},pA={alt:e=>e.altKey,control:e=>e.ctrlKey,meta:e=>e.metaKey,shift:e=>e.shiftKey};let gA=(()=>{class e extends D_{constructor(n){super(n)}supports(n){return null!=e.parseEventName(n)}addEventListener(n,r,o){const i=e.parseEventName(r),s=e.eventCallback(i.fullKey,o,this.manager.getZone());return this.manager.getZone().runOutsideAngular(()=>jn().onAndCancel(n,i.domEventName,s))}static parseEventName(n){const r=n.toLowerCase().split("."),o=r.shift();if(0===r.length||"keydown"!==o&&"keyup"!==o)return null;const i=e._normalizeKey(r.pop());let s="",a=r.indexOf("code");if(a>-1&&(r.splice(a,1),s="code."),A_.forEach(c=>{const u=r.indexOf(c);u>-1&&(r.splice(u,1),s+=c+".")}),s+=i,0!=r.length||0===i.length)return null;const l={};return l.domEventName=o,l.fullKey=s,l}static matchEventFullKeyCode(n,r){let o=hA[n.key]||n.key,i="";return r.indexOf("code.")>-1&&(o=n.code,i="code."),!(null==o||!o)&&(o=o.toLowerCase()," "===o?o="space":"."===o&&(o="dot"),A_.forEach(s=>{s!==o&&(0,pA[s])(n)&&(i+=s+".")}),i+=o,i===r)}static eventCallback(n,r,o){return i=>{e.matchEventFullKeyCode(i,n)&&o.runGuarded(()=>r(i))}}static _normalizeKey(n){return"esc"===n?"escape":n}}return e.\u0275fac=function(n){return new(n||e)(re(rn))},e.\u0275prov=de({token:e,factory:e.\u0275fac}),e})();const yA=Fm(XM,"browser",[{provide:Em,useValue:"browser"},{provide:bm,useValue:function mA(){qc.makeCurrent()},multi:!0},{provide:rn,useFactory:function vA(){return function HC(e){Xa=e}(document),document},deps:[]}]),N_=new B(""),F_=[{provide:Ki,useClass:class rA{addToWindow(t){fe.getAngularTestability=(r,o=!0)=>{const i=t.findTestabilityInTree(r,o);if(null==i)throw new Error("Could not find testability for element.");return i},fe.getAllAngularTestabilities=()=>t.getAllTestabilities(),fe.getAllAngularRootElements=()=>t.getAllRootElements(),fe.frameworkStabilizers||(fe.frameworkStabilizers=[]),fe.frameworkStabilizers.push(r=>{const o=fe.getAllAngularTestabilities();let i=o.length,s=!1;const a=function(l){s=s||l,i--,0==i&&r(s)};o.forEach(function(l){l.whenStable(a)})})}findTestabilityInTree(t,n,r){return null==n?null:t.getTestability(n)??(r?jn().isShadowRoot(n)?this.findTestabilityInTree(t,n.host,!0):this.findTestabilityInTree(t,n.parentElement,!0):null)}},deps:[]},{provide:Tm,useClass:Dc,deps:[$e,Cc,Ki]},{provide:Dc,useClass:Dc,deps:[$e,Cc,Ki]}],O_=[{provide:ll,useValue:"root"},{provide:gr,useFactory:function _A(){return new gr},deps:[]},{provide:ps,useClass:fA,multi:!0,deps:[rn,$e,Em]},{provide:ps,useClass:gA,multi:!0,deps:[rn]},{provide:Yc,useClass:Yc,deps:[gs,xo,bo]},{provide:ch,useExisting:Yc},{provide:C_,useExisting:xo},{provide:xo,useClass:xo,deps:[rn]},{provide:gs,useClass:gs,deps:[ps,$e]},{provide:class IS{},useClass:oA,deps:[]},[]];let DA=(()=>{class e{constructor(n){}static withServerTransition(n){return{ngModule:e,providers:[{provide:bo,useValue:n.appId},{provide:y_,useExisting:bo},nA]}}}return e.\u0275fac=function(n){return new(n||e)(re(N_,12))},e.\u0275mod=cn({type:e}),e.\u0275inj=zt({providers:[...O_,...F_],imports:[DS,e1]}),e})();typeof window<"u"&&window;const{isArray:xA}=Array,{getPrototypeOf:NA,prototype:FA,keys:OA}=Object;const{isArray:kA}=Array;function BA(e,t){return e.reduce((n,r,o)=>(n[r]=t[o],n),{})}function HA(...e){const t=function dy(e){return ve(Gs(e))?e.pop():void 0}(e),{args:n,keys:r}=function RA(e){if(1===e.length){const t=e[0];if(xA(t))return{args:t,keys:null};if(function PA(e){return e&&"object"==typeof e&&NA(e)===FA}(t)){const n=OA(t);return{args:n.map(r=>t[r]),keys:n}}}return{args:e,keys:null}}(e),o=new ze(i=>{const{length:s}=n;if(!s)return void i.complete();const a=new Array(s);let l=s,c=s;for(let u=0;u{d||(d=!0,c--),a[u]=f},()=>l--,void 0,()=>{(!l||!d)&&(c||i.next(r?BA(r,a):a),i.complete())}))}});return t?o.pipe(function VA(e){return $s(t=>function LA(e,t){return kA(t)?e(...t):e(t)}(e,t))}(t)):o}let k_=(()=>{class e{constructor(n,r){this._renderer=n,this._elementRef=r,this.onChange=o=>{},this.onTouched=()=>{}}setProperty(n,r){this._renderer.setProperty(this._elementRef.nativeElement,n,r)}registerOnTouched(n){this.onTouched=n}registerOnChange(n){this.onChange=n}setDisabledState(n){this.setProperty("disabled",n)}}return e.\u0275fac=function(n){return new(n||e)(S(kn),S(bt))},e.\u0275dir=$({type:e}),e})(),$n=(()=>{class e extends k_{}return e.\u0275fac=function(){let t;return function(r){return(t||(t=Ve(e)))(r||e)}}(),e.\u0275dir=$({type:e,features:[ae]}),e})();const $t=new B("NgValueAccessor"),$A={provide:$t,useExisting:ue(()=>No),multi:!0},zA=new B("CompositionEventMode");let No=(()=>{class e extends k_{constructor(n,r,o){super(n,r),this._compositionMode=o,this._composing=!1,null==this._compositionMode&&(this._compositionMode=!function UA(){const e=jn()?jn().getUserAgent():"";return/android (\d+)/.test(e.toLowerCase())}())}writeValue(n){this.setProperty("value",n??"")}_handleInput(n){(!this._compositionMode||this._compositionMode&&!this._composing)&&this.onChange(n)}_compositionStart(){this._composing=!0}_compositionEnd(n){this._composing=!1,this._compositionMode&&this.onChange(n)}}return e.\u0275fac=function(n){return new(n||e)(S(kn),S(bt),S(zA,8))},e.\u0275dir=$({type:e,selectors:[["input","formControlName","",3,"type","checkbox"],["textarea","formControlName",""],["input","formControl","",3,"type","checkbox"],["textarea","formControl",""],["input","ngModel","",3,"type","checkbox"],["textarea","ngModel",""],["","ngDefaultControl",""]],hostBindings:function(n,r){1&n&&q("input",function(i){return r._handleInput(i.target.value)})("blur",function(){return r.onTouched()})("compositionstart",function(){return r._compositionStart()})("compositionend",function(i){return r._compositionEnd(i.target.value)})},features:[_e([$A]),ae]}),e})();const Ue=new B("NgValidators"),yn=new B("NgAsyncValidators");function q_(e){return null!=e}function Z_(e){return Bi(e)?Ws(e):e}function Q_(e){let t={};return e.forEach(n=>{t=null!=n?{...t,...n}:t}),0===Object.keys(t).length?null:t}function Y_(e,t){return t.map(n=>n(e))}function K_(e){return e.map(t=>function qA(e){return!e.validate}(t)?t:n=>t.validate(n))}function eu(e){return null!=e?function J_(e){if(!e)return null;const t=e.filter(q_);return 0==t.length?null:function(n){return Q_(Y_(n,t))}}(K_(e)):null}function tu(e){return null!=e?function X_(e){if(!e)return null;const t=e.filter(q_);return 0==t.length?null:function(n){return HA(Y_(n,t).map(Z_)).pipe($s(Q_))}}(K_(e)):null}function ev(e,t){return null===e?[t]:Array.isArray(e)?[...e,t]:[e,t]}function nu(e){return e?Array.isArray(e)?e:[e]:[]}function vs(e,t){return Array.isArray(e)?e.includes(t):e===t}function rv(e,t){const n=nu(t);return nu(e).forEach(o=>{vs(n,o)||n.push(o)}),n}function ov(e,t){return nu(t).filter(n=>!vs(e,n))}class iv{constructor(){this._rawValidators=[],this._rawAsyncValidators=[],this._onDestroyCallbacks=[]}get value(){return this.control?this.control.value:null}get valid(){return this.control?this.control.valid:null}get invalid(){return this.control?this.control.invalid:null}get pending(){return this.control?this.control.pending:null}get disabled(){return this.control?this.control.disabled:null}get enabled(){return this.control?this.control.enabled:null}get errors(){return this.control?this.control.errors:null}get pristine(){return this.control?this.control.pristine:null}get dirty(){return this.control?this.control.dirty:null}get touched(){return this.control?this.control.touched:null}get status(){return this.control?this.control.status:null}get untouched(){return this.control?this.control.untouched:null}get statusChanges(){return this.control?this.control.statusChanges:null}get valueChanges(){return this.control?this.control.valueChanges:null}get path(){return null}_setValidators(t){this._rawValidators=t||[],this._composedValidatorFn=eu(this._rawValidators)}_setAsyncValidators(t){this._rawAsyncValidators=t||[],this._composedAsyncValidatorFn=tu(this._rawAsyncValidators)}get validator(){return this._composedValidatorFn||null}get asyncValidator(){return this._composedAsyncValidatorFn||null}_registerOnDestroy(t){this._onDestroyCallbacks.push(t)}_invokeOnDestroyCallbacks(){this._onDestroyCallbacks.forEach(t=>t()),this._onDestroyCallbacks=[]}reset(t){this.control&&this.control.reset(t)}hasError(t,n){return!!this.control&&this.control.hasError(t,n)}getError(t,n){return this.control?this.control.getError(t,n):null}}class Ke extends iv{get formDirective(){return null}get path(){return null}}class Dn extends iv{constructor(){super(...arguments),this._parent=null,this.name=null,this.valueAccessor=null}}class sv{constructor(t){this._cd=t}get isTouched(){return!!this._cd?.control?.touched}get isUntouched(){return!!this._cd?.control?.untouched}get isPristine(){return!!this._cd?.control?.pristine}get isDirty(){return!!this._cd?.control?.dirty}get isValid(){return!!this._cd?.control?.valid}get isInvalid(){return!!this._cd?.control?.invalid}get isPending(){return!!this._cd?.control?.pending}get isSubmitted(){return!!this._cd?.submitted}}let ru=(()=>{class e extends sv{constructor(n){super(n)}}return e.\u0275fac=function(n){return new(n||e)(S(Dn,2))},e.\u0275dir=$({type:e,selectors:[["","formControlName",""],["","ngModel",""],["","formControl",""]],hostVars:14,hostBindings:function(n,r){2&n&&Hi("ng-untouched",r.isUntouched)("ng-touched",r.isTouched)("ng-pristine",r.isPristine)("ng-dirty",r.isDirty)("ng-valid",r.isValid)("ng-invalid",r.isInvalid)("ng-pending",r.isPending)},features:[ae]}),e})();const Fo="VALID",Ds="INVALID",kr="PENDING",Oo="DISABLED";function Cs(e){return null!=e&&!Array.isArray(e)&&"object"==typeof e}class uv{constructor(t,n){this._pendingDirty=!1,this._hasOwnPendingAsyncValidator=!1,this._pendingTouched=!1,this._onCollectionChange=()=>{},this._parent=null,this.pristine=!0,this.touched=!1,this._onDisabledChange=[],this._assignValidators(t),this._assignAsyncValidators(n)}get validator(){return this._composedValidatorFn}set validator(t){this._rawValidators=this._composedValidatorFn=t}get asyncValidator(){return this._composedAsyncValidatorFn}set asyncValidator(t){this._rawAsyncValidators=this._composedAsyncValidatorFn=t}get parent(){return this._parent}get valid(){return this.status===Fo}get invalid(){return this.status===Ds}get pending(){return this.status==kr}get disabled(){return this.status===Oo}get enabled(){return this.status!==Oo}get dirty(){return!this.pristine}get untouched(){return!this.touched}get updateOn(){return this._updateOn?this._updateOn:this.parent?this.parent.updateOn:"change"}setValidators(t){this._assignValidators(t)}setAsyncValidators(t){this._assignAsyncValidators(t)}addValidators(t){this.setValidators(rv(t,this._rawValidators))}addAsyncValidators(t){this.setAsyncValidators(rv(t,this._rawAsyncValidators))}removeValidators(t){this.setValidators(ov(t,this._rawValidators))}removeAsyncValidators(t){this.setAsyncValidators(ov(t,this._rawAsyncValidators))}hasValidator(t){return vs(this._rawValidators,t)}hasAsyncValidator(t){return vs(this._rawAsyncValidators,t)}clearValidators(){this.validator=null}clearAsyncValidators(){this.asyncValidator=null}markAsTouched(t={}){this.touched=!0,this._parent&&!t.onlySelf&&this._parent.markAsTouched(t)}markAllAsTouched(){this.markAsTouched({onlySelf:!0}),this._forEachChild(t=>t.markAllAsTouched())}markAsUntouched(t={}){this.touched=!1,this._pendingTouched=!1,this._forEachChild(n=>{n.markAsUntouched({onlySelf:!0})}),this._parent&&!t.onlySelf&&this._parent._updateTouched(t)}markAsDirty(t={}){this.pristine=!1,this._parent&&!t.onlySelf&&this._parent.markAsDirty(t)}markAsPristine(t={}){this.pristine=!0,this._pendingDirty=!1,this._forEachChild(n=>{n.markAsPristine({onlySelf:!0})}),this._parent&&!t.onlySelf&&this._parent._updatePristine(t)}markAsPending(t={}){this.status=kr,!1!==t.emitEvent&&this.statusChanges.emit(this.status),this._parent&&!t.onlySelf&&this._parent.markAsPending(t)}disable(t={}){const n=this._parentMarkedDirty(t.onlySelf);this.status=Oo,this.errors=null,this._forEachChild(r=>{r.disable({...t,onlySelf:!0})}),this._updateValue(),!1!==t.emitEvent&&(this.valueChanges.emit(this.value),this.statusChanges.emit(this.status)),this._updateAncestors({...t,skipPristineCheck:n}),this._onDisabledChange.forEach(r=>r(!0))}enable(t={}){const n=this._parentMarkedDirty(t.onlySelf);this.status=Fo,this._forEachChild(r=>{r.enable({...t,onlySelf:!0})}),this.updateValueAndValidity({onlySelf:!0,emitEvent:t.emitEvent}),this._updateAncestors({...t,skipPristineCheck:n}),this._onDisabledChange.forEach(r=>r(!1))}_updateAncestors(t){this._parent&&!t.onlySelf&&(this._parent.updateValueAndValidity(t),t.skipPristineCheck||this._parent._updatePristine(),this._parent._updateTouched())}setParent(t){this._parent=t}getRawValue(){return this.value}updateValueAndValidity(t={}){this._setInitialStatus(),this._updateValue(),this.enabled&&(this._cancelExistingSubscription(),this.errors=this._runValidator(),this.status=this._calculateStatus(),(this.status===Fo||this.status===kr)&&this._runAsyncValidator(t.emitEvent)),!1!==t.emitEvent&&(this.valueChanges.emit(this.value),this.statusChanges.emit(this.status)),this._parent&&!t.onlySelf&&this._parent.updateValueAndValidity(t)}_updateTreeValidity(t={emitEvent:!0}){this._forEachChild(n=>n._updateTreeValidity(t)),this.updateValueAndValidity({onlySelf:!0,emitEvent:t.emitEvent})}_setInitialStatus(){this.status=this._allControlsDisabled()?Oo:Fo}_runValidator(){return this.validator?this.validator(this):null}_runAsyncValidator(t){if(this.asyncValidator){this.status=kr,this._hasOwnPendingAsyncValidator=!0;const n=Z_(this.asyncValidator(this));this._asyncValidationSubscription=n.subscribe(r=>{this._hasOwnPendingAsyncValidator=!1,this.setErrors(r,{emitEvent:t})})}}_cancelExistingSubscription(){this._asyncValidationSubscription&&(this._asyncValidationSubscription.unsubscribe(),this._hasOwnPendingAsyncValidator=!1)}setErrors(t,n={}){this.errors=t,this._updateControlsErrors(!1!==n.emitEvent)}get(t){let n=t;return null==n||(Array.isArray(n)||(n=n.split(".")),0===n.length)?null:n.reduce((r,o)=>r&&r._find(o),this)}getError(t,n){const r=n?this.get(n):this;return r&&r.errors?r.errors[t]:null}hasError(t,n){return!!this.getError(t,n)}get root(){let t=this;for(;t._parent;)t=t._parent;return t}_updateControlsErrors(t){this.status=this._calculateStatus(),t&&this.statusChanges.emit(this.status),this._parent&&this._parent._updateControlsErrors(t)}_initObservables(){this.valueChanges=new je,this.statusChanges=new je}_calculateStatus(){return this._allControlsDisabled()?Oo:this.errors?Ds:this._hasOwnPendingAsyncValidator||this._anyControlsHaveStatus(kr)?kr:this._anyControlsHaveStatus(Ds)?Ds:Fo}_anyControlsHaveStatus(t){return this._anyControls(n=>n.status===t)}_anyControlsDirty(){return this._anyControls(t=>t.dirty)}_anyControlsTouched(){return this._anyControls(t=>t.touched)}_updatePristine(t={}){this.pristine=!this._anyControlsDirty(),this._parent&&!t.onlySelf&&this._parent._updatePristine(t)}_updateTouched(t={}){this.touched=this._anyControlsTouched(),this._parent&&!t.onlySelf&&this._parent._updateTouched(t)}_registerOnCollectionChange(t){this._onCollectionChange=t}_setUpdateStrategy(t){Cs(t)&&null!=t.updateOn&&(this._updateOn=t.updateOn)}_parentMarkedDirty(t){return!t&&!(!this._parent||!this._parent.dirty)&&!this._parent._anyControlsDirty()}_find(t){return null}_assignValidators(t){this._rawValidators=Array.isArray(t)?t.slice():t,this._composedValidatorFn=function tT(e){return Array.isArray(e)?eu(e):e||null}(this._rawValidators)}_assignAsyncValidators(t){this._rawAsyncValidators=Array.isArray(t)?t.slice():t,this._composedAsyncValidatorFn=function nT(e){return Array.isArray(e)?tu(e):e||null}(this._rawAsyncValidators)}}const Ro=new B("CallSetDisabledState",{providedIn:"root",factory:()=>uu}),uu="always";function Po(e,t,n=uu){(function du(e,t){const n=function tv(e){return e._rawValidators}(e);null!==t.validator?e.setValidators(ev(n,t.validator)):"function"==typeof n&&e.setValidators([n]);const r=function nv(e){return e._rawAsyncValidators}(e);null!==t.asyncValidator?e.setAsyncValidators(ev(r,t.asyncValidator)):"function"==typeof r&&e.setAsyncValidators([r]);const o=()=>e.updateValueAndValidity();Es(t._rawValidators,o),Es(t._rawAsyncValidators,o)})(e,t),t.valueAccessor.writeValue(e.value),(e.disabled||"always"===n)&&t.valueAccessor.setDisabledState?.(e.disabled),function iT(e,t){t.valueAccessor.registerOnChange(n=>{e._pendingValue=n,e._pendingChange=!0,e._pendingDirty=!0,"change"===e.updateOn&&dv(e,t)})}(e,t),function aT(e,t){const n=(r,o)=>{t.valueAccessor.writeValue(r),o&&t.viewToModelUpdate(r)};e.registerOnChange(n),t._registerOnDestroy(()=>{e._unregisterOnChange(n)})}(e,t),function sT(e,t){t.valueAccessor.registerOnTouched(()=>{e._pendingTouched=!0,"blur"===e.updateOn&&e._pendingChange&&dv(e,t),"submit"!==e.updateOn&&e.markAsTouched()})}(e,t),function oT(e,t){if(t.valueAccessor.setDisabledState){const n=r=>{t.valueAccessor.setDisabledState(r)};e.registerOnDisabledChange(n),t._registerOnDestroy(()=>{e._unregisterOnDisabledChange(n)})}}(e,t)}function Es(e,t){e.forEach(n=>{n.registerOnValidatorChange&&n.registerOnValidatorChange(t)})}function dv(e,t){e._pendingDirty&&e.markAsDirty(),e.setValue(e._pendingValue,{emitModelToViewChange:!1}),t.viewToModelUpdate(e._pendingValue),e._pendingChange=!1}function pv(e,t){const n=e.indexOf(t);n>-1&&e.splice(n,1)}function gv(e){return"object"==typeof e&&null!==e&&2===Object.keys(e).length&&"value"in e&&"disabled"in e}const mv=class extends uv{constructor(t=null,n,r){super(function au(e){return(Cs(e)?e.validators:e)||null}(n),function lu(e,t){return(Cs(t)?t.asyncValidators:e)||null}(r,n)),this.defaultValue=null,this._onChange=[],this._pendingChange=!1,this._applyFormState(t),this._setUpdateStrategy(n),this._initObservables(),this.updateValueAndValidity({onlySelf:!0,emitEvent:!!this.asyncValidator}),Cs(n)&&(n.nonNullable||n.initialValueIsDefault)&&(this.defaultValue=gv(t)?t.value:t)}setValue(t,n={}){this.value=this._pendingValue=t,this._onChange.length&&!1!==n.emitModelToViewChange&&this._onChange.forEach(r=>r(this.value,!1!==n.emitViewToModelChange)),this.updateValueAndValidity(n)}patchValue(t,n={}){this.setValue(t,n)}reset(t=this.defaultValue,n={}){this._applyFormState(t),this.markAsPristine(n),this.markAsUntouched(n),this.setValue(this.value,n),this._pendingChange=!1}_updateValue(){}_anyControls(t){return!1}_allControlsDisabled(){return this.disabled}registerOnChange(t){this._onChange.push(t)}_unregisterOnChange(t){pv(this._onChange,t)}registerOnDisabledChange(t){this._onDisabledChange.push(t)}_unregisterOnDisabledChange(t){pv(this._onDisabledChange,t)}_forEachChild(t){}_syncPendingControls(){return!("submit"!==this.updateOn||(this._pendingDirty&&this.markAsDirty(),this._pendingTouched&&this.markAsTouched(),!this._pendingChange)||(this.setValue(this._pendingValue,{onlySelf:!0,emitModelToViewChange:!1}),0))}_applyFormState(t){gv(t)?(this.value=this._pendingValue=t.value,t.disabled?this.disable({onlySelf:!0,emitEvent:!1}):this.enable({onlySelf:!0,emitEvent:!1})):this.value=this._pendingValue=t}},gT={provide:Dn,useExisting:ue(()=>Ms)},yv=(()=>Promise.resolve())();let Ms=(()=>{class e extends Dn{constructor(n,r,o,i,s,a){super(),this._changeDetectorRef=s,this.callSetDisabledState=a,this.control=new mv,this._registered=!1,this.update=new je,this._parent=n,this._setValidators(r),this._setAsyncValidators(o),this.valueAccessor=function pu(e,t){if(!t)return null;let n,r,o;return Array.isArray(t),t.forEach(i=>{i.constructor===No?n=i:function uT(e){return Object.getPrototypeOf(e.constructor)===$n}(i)?r=i:o=i}),o||r||n||null}(0,i)}ngOnChanges(n){if(this._checkForErrors(),!this._registered||"name"in n){if(this._registered&&(this._checkName(),this.formDirective)){const r=n.name.previousValue;this.formDirective.removeControl({name:r,path:this._getPath(r)})}this._setUpControl()}"isDisabled"in n&&this._updateDisabled(n),function hu(e,t){if(!e.hasOwnProperty("model"))return!1;const n=e.model;return!!n.isFirstChange()||!Object.is(t,n.currentValue)}(n,this.viewModel)&&(this._updateValue(this.model),this.viewModel=this.model)}ngOnDestroy(){this.formDirective&&this.formDirective.removeControl(this)}get path(){return this._getPath(this.name)}get formDirective(){return this._parent?this._parent.formDirective:null}viewToModelUpdate(n){this.viewModel=n,this.update.emit(n)}_setUpControl(){this._setUpdateStrategy(),this._isStandalone()?this._setUpStandalone():this.formDirective.addControl(this),this._registered=!0}_setUpdateStrategy(){this.options&&null!=this.options.updateOn&&(this.control._updateOn=this.options.updateOn)}_isStandalone(){return!this._parent||!(!this.options||!this.options.standalone)}_setUpStandalone(){Po(this.control,this,this.callSetDisabledState),this.control.updateValueAndValidity({emitEvent:!1})}_checkForErrors(){this._isStandalone()||this._checkParentType(),this._checkName()}_checkParentType(){}_checkName(){this.options&&this.options.name&&(this.name=this.options.name),this._isStandalone()}_updateValue(n){yv.then(()=>{this.control.setValue(n,{emitViewToModelChange:!1}),this._changeDetectorRef?.markForCheck()})}_updateDisabled(n){const r=n.isDisabled.currentValue,o=0!==r&&function xc(e){return"boolean"==typeof e?e:null!=e&&"false"!==e}(r);yv.then(()=>{o&&!this.control.disabled?this.control.disable():!o&&this.control.disabled&&this.control.enable(),this._changeDetectorRef?.markForCheck()})}_getPath(n){return this._parent?function ws(e,t){return[...t.path,e]}(n,this._parent):[n]}}return e.\u0275fac=function(n){return new(n||e)(S(Ke,9),S(Ue,10),S(yn,10),S($t,10),S(jm,8),S(Ro,8))},e.\u0275dir=$({type:e,selectors:[["","ngModel","",3,"formControlName","",3,"formControl",""]],inputs:{name:"name",isDisabled:["disabled","isDisabled"],model:["ngModel","model"],options:["ngModelOptions","options"]},outputs:{update:"ngModelChange"},exportAs:["ngModel"],features:[_e([gT]),ae,qt]}),e})(),Cv=(()=>{class e{}return e.\u0275fac=function(n){return new(n||e)},e.\u0275mod=cn({type:e}),e.\u0275inj=zt({}),e})();const DT={provide:$t,useExisting:ue(()=>mu),multi:!0};let mu=(()=>{class e extends $n{writeValue(n){this.setProperty("value",parseFloat(n))}registerOnChange(n){this.onChange=r=>{n(""==r?null:parseFloat(r))}}}return e.\u0275fac=function(){let t;return function(r){return(t||(t=Ve(e)))(r||e)}}(),e.\u0275dir=$({type:e,selectors:[["input","type","range","formControlName",""],["input","type","range","formControl",""],["input","type","range","ngModel",""]],hostBindings:function(n,r){1&n&&q("change",function(i){return r.onChange(i.target.value)})("input",function(i){return r.onChange(i.target.value)})("blur",function(){return r.onTouched()})},features:[_e([DT]),ae]}),e})();const MT={provide:$t,useExisting:ue(()=>Lo),multi:!0};function Sv(e,t){return null==e?`${t}`:(t&&"object"==typeof t&&(t="Object"),`${e}: ${t}`.slice(0,50))}let Lo=(()=>{class e extends $n{constructor(){super(...arguments),this._optionMap=new Map,this._idCounter=0,this._compareWith=Object.is}set compareWith(n){this._compareWith=n}writeValue(n){this.value=n;const o=Sv(this._getOptionId(n),n);this.setProperty("value",o)}registerOnChange(n){this.onChange=r=>{this.value=this._getOptionValue(r),n(this.value)}}_registerOption(){return(this._idCounter++).toString()}_getOptionId(n){for(const r of Array.from(this._optionMap.keys()))if(this._compareWith(this._optionMap.get(r),n))return r;return null}_getOptionValue(n){const r=function ST(e){return e.split(":")[0]}(n);return this._optionMap.has(r)?this._optionMap.get(r):n}}return e.\u0275fac=function(){let t;return function(r){return(t||(t=Ve(e)))(r||e)}}(),e.\u0275dir=$({type:e,selectors:[["select","formControlName","",3,"multiple",""],["select","formControl","",3,"multiple",""],["select","ngModel","",3,"multiple",""]],hostBindings:function(n,r){1&n&&q("change",function(i){return r.onChange(i.target.value)})("blur",function(){return r.onTouched()})},inputs:{compareWith:"compareWith"},features:[_e([MT]),ae]}),e})(),Du=(()=>{class e{constructor(n,r,o){this._element=n,this._renderer=r,this._select=o,this._select&&(this.id=this._select._registerOption())}set ngValue(n){null!=this._select&&(this._select._optionMap.set(this.id,n),this._setElementValue(Sv(this.id,n)),this._select.writeValue(this._select.value))}set value(n){this._setElementValue(n),this._select&&this._select.writeValue(this._select.value)}_setElementValue(n){this._renderer.setProperty(this._element.nativeElement,"value",n)}ngOnDestroy(){this._select&&(this._select._optionMap.delete(this.id),this._select.writeValue(this._select.value))}}return e.\u0275fac=function(n){return new(n||e)(S(bt),S(kn),S(Lo,9))},e.\u0275dir=$({type:e,selectors:[["option"]],inputs:{ngValue:"ngValue",value:"value"}}),e})();const AT={provide:$t,useExisting:ue(()=>Cu),multi:!0};function Av(e,t){return null==e?`${t}`:("string"==typeof t&&(t=`'${t}'`),t&&"object"==typeof t&&(t="Object"),`${e}: ${t}`.slice(0,50))}let Cu=(()=>{class e extends $n{constructor(){super(...arguments),this._optionMap=new Map,this._idCounter=0,this._compareWith=Object.is}set compareWith(n){this._compareWith=n}writeValue(n){let r;if(this.value=n,Array.isArray(n)){const o=n.map(i=>this._getOptionId(i));r=(i,s)=>{i._setSelected(o.indexOf(s.toString())>-1)}}else r=(o,i)=>{o._setSelected(!1)};this._optionMap.forEach(r)}registerOnChange(n){this.onChange=r=>{const o=[],i=r.selectedOptions;if(void 0!==i){const s=i;for(let a=0;a{class e{constructor(n,r,o){this._element=n,this._renderer=r,this._select=o,this._select&&(this.id=this._select._registerOption(this))}set ngValue(n){null!=this._select&&(this._value=n,this._setElementValue(Av(this.id,n)),this._select.writeValue(this._select.value))}set value(n){this._select?(this._value=n,this._setElementValue(Av(this.id,n)),this._select.writeValue(this._select.value)):this._setElementValue(n)}_setElementValue(n){this._renderer.setProperty(this._element.nativeElement,"value",n)}_setSelected(n){this._renderer.setProperty(this._element.nativeElement,"selected",n)}ngOnDestroy(){this._select&&(this._select._optionMap.delete(this.id),this._select.writeValue(this._select.value))}}return e.\u0275fac=function(n){return new(n||e)(S(bt),S(kn),S(Cu,9))},e.\u0275dir=$({type:e,selectors:[["option"]],inputs:{ngValue:"ngValue",value:"value"}}),e})(),VT=(()=>{class e{}return e.\u0275fac=function(n){return new(n||e)},e.\u0275mod=cn({type:e}),e.\u0275inj=zt({imports:[Cv]}),e})(),BT=(()=>{class e{static withConfig(n){return{ngModule:e,providers:[{provide:Ro,useValue:n.callSetDisabledState??uu}]}}}return e.\u0275fac=function(n){return new(n||e)},e.\u0275mod=cn({type:e}),e.\u0275inj=zt({imports:[VT]}),e})();class Vv{constructor(){this.riskHotspotsSettings=null,this.coverageInfoSettings=null}}class jT{constructor(){this.groupingMaximum=0,this.grouping=0,this.historyComparisionDate="",this.historyComparisionType="",this.filter="",this.sortBy="name",this.sortOrder="asc",this.collapseStates=[]}}class $T{constructor(t){this.et="",this.et=t.et,this.cl=t.cl,this.ucl=t.ucl,this.cal=t.cal,this.tl=t.tl,this.lcq=t.lcq,this.cb=t.cb,this.tb=t.tb,this.bcq=t.bcq,this.cm=t.cm,this.tm=t.tm,this.mcq=t.mcq}get coverageRatioText(){return 0===this.tl?"-":this.cl+"/"+this.cal}get branchCoverageRatioText(){return 0===this.tb?"-":this.cb+"/"+this.tb}get methodCoverageRatioText(){return 0===this.tm?"-":this.cm+"/"+this.tm}}class zn{static roundNumber(t,n){return Math.floor(t*Math.pow(10,n))/Math.pow(10,n)}static getNthOrLastIndexOf(t,n,r){let o=0,i=-1,s=-1;for(;o{this.historicCoverages.push(new $T(r))})}get coverage(){return 0===this.coverableLines?"-"!==this.coverageByMethod?parseFloat(this.coverageByMethod):NaN:zn.roundNumber(100*this.coveredLines/this.coverableLines,1)}get coverageType(){return 0===this.coverableLines?"-"!==this.coverageByMethod?this._coverageType:"":this._coverageType}visible(t,n){if(""!==t&&-1===this.name.toLowerCase().indexOf(t.toLowerCase()))return!1;if(""===n||null===this.currentHistoricCoverage)return!0;if("allChanges"===n){if(this.coveredLines===this.currentHistoricCoverage.cl&&this.uncoveredLines===this.currentHistoricCoverage.ucl&&this.coverableLines===this.currentHistoricCoverage.cal&&this.totalLines===this.currentHistoricCoverage.tl&&this.coveredBranches===this.currentHistoricCoverage.cb&&this.totalBranches===this.currentHistoricCoverage.tb&&this.coveredMethods===this.currentHistoricCoverage.cm&&this.totalMethods===this.currentHistoricCoverage.tm)return!1}else if("lineCoverageIncreaseOnly"===n){let r=this.coverage;if(isNaN(r)||r<=this.currentHistoricCoverage.lcq)return!1}else if("lineCoverageDecreaseOnly"===n){let r=this.coverage;if(isNaN(r)||r>=this.currentHistoricCoverage.lcq)return!1}else if("branchCoverageIncreaseOnly"===n){let r=this.branchCoverage;if(isNaN(r)||r<=this.currentHistoricCoverage.bcq)return!1}else if("branchCoverageDecreaseOnly"===n){let r=this.branchCoverage;if(isNaN(r)||r>=this.currentHistoricCoverage.bcq)return!1}else if("methodCoverageIncreaseOnly"===n){let r=this.methodCoverage;if(isNaN(r)||r<=this.currentHistoricCoverage.mcq)return!1}else if("methodCoverageDecreaseOnly"===n){let r=this.methodCoverage;if(isNaN(r)||r>=this.currentHistoricCoverage.mcq)return!1}return!0}updateCurrentHistoricCoverage(t){if(this.currentHistoricCoverage=null,""!==t)for(let n=0;n-1&&null===n}visible(t,n){if(""!==t&&this.name.toLowerCase().indexOf(t.toLowerCase())>-1)return!0;for(let r=0;r0,this.redVisible=!isNaN(t)&&100-Math.round(t)>0,this.greenClass="covered"+Math.round(t),this.redClass="covered"+(100-Math.round(t))}static#e=this.\u0275fac=function(n){return new(n||Vo)};static#t=this.\u0275cmp=ln({type:Vo,selectors:[["coverage-bar"]],inputs:{percentage:"percentage"},decls:4,vars:3,consts:[[1,"coverage"],["class","gray covered100",4,"ngIf"],[3,"class",4,"ngIf"],[1,"gray","covered100"]],template:function(n,r){1&n&&(v(0,"table",0),I(1,zT,1,0,"td",1),I(2,GT,1,3,"td",2),I(3,WT,1,3,"td",2),_()),2&n&&(h(1),g("ngIf",r.grayVisible),h(1),g("ngIf",r.greenVisible),h(1),g("ngIf",r.redVisible))},dependencies:[Pr],encapsulation:2,changeDetection:0})}const qT=["codeelement-row",""];function ZT(e,t){if(1&e&&(v(0,"th",2),b(1),_()),2&e){const n=D();h(1),F(n.element.coveredBranches)}}function QT(e,t){if(1&e&&(v(0,"th",2),b(1),_()),2&e){const n=D();h(1),F(n.element.totalBranches)}}function YT(e,t){if(1&e&&(v(0,"th",3),b(1),_()),2&e){const n=D();g("title",n.element.branchCoverageRatioText),h(1),F(n.element.branchCoveragePercentage)}}function KT(e,t){if(1&e&&(v(0,"th",2),R(1,"coverage-bar",4),_()),2&e){const n=D();h(1),g("percentage",n.element.branchCoverage)}}function JT(e,t){if(1&e&&(v(0,"th",2),b(1),_()),2&e){const n=D();h(1),F(n.element.coveredMethods)}}function XT(e,t){if(1&e&&(v(0,"th",2),b(1),_()),2&e){const n=D();h(1),F(n.element.totalMethods)}}function ex(e,t){if(1&e&&(v(0,"th",3),b(1),_()),2&e){const n=D();g("title",n.element.methodCoverageRatioText),h(1),F(n.element.methodCoveragePercentage)}}function tx(e,t){if(1&e&&(v(0,"th",2),R(1,"coverage-bar",4),_()),2&e){const n=D();h(1),g("percentage",n.element.methodCoverage)}}const nx=function(e,t){return{"icon-plus":e,"icon-minus":t}};class Ss{constructor(){this.collapsed=!1,this.branchCoverageAvailable=!1,this.methodCoverageAvailable=!1}static#e=this.\u0275fac=function(n){return new(n||Ss)};static#t=this.\u0275cmp=ln({type:Ss,selectors:[["","codeelement-row",""]],inputs:{element:"element",collapsed:"collapsed",branchCoverageAvailable:"branchCoverageAvailable",methodCoverageAvailable:"methodCoverageAvailable"},attrs:qT,decls:24,vars:20,consts:[["href","#",3,"click"],[3,"ngClass"],[1,"right"],[1,"right",3,"title"],[3,"percentage"],["class","right",4,"ngIf"],["class","right",3,"title",4,"ngIf"]],template:function(n,r){1&n&&(v(0,"th")(1,"a",0),q("click",function(i){return r.element.toggleCollapse(i)}),R(2,"i",1),b(3),_()(),v(4,"th",2),b(5),_(),v(6,"th",2),b(7),_(),v(8,"th",2),b(9),_(),v(10,"th",2),b(11),_(),v(12,"th",3),b(13),_(),v(14,"th",2),R(15,"coverage-bar",4),_(),I(16,ZT,2,1,"th",5),I(17,QT,2,1,"th",5),I(18,YT,2,2,"th",6),I(19,KT,2,1,"th",5),I(20,JT,2,1,"th",5),I(21,XT,2,1,"th",5),I(22,ex,2,2,"th",6),I(23,tx,2,1,"th",5)),2&n&&(h(2),g("ngClass",rc(17,nx,r.element.collapsed,!r.element.collapsed)),h(1),Z(" ",r.element.name,""),h(2),F(r.element.coveredLines),h(2),F(r.element.uncoveredLines),h(2),F(r.element.coverableLines),h(2),F(r.element.totalLines),h(1),g("title",r.element.coverageRatioText),h(1),F(r.element.coveragePercentage),h(2),g("percentage",r.element.coverage),h(1),g("ngIf",r.branchCoverageAvailable),h(1),g("ngIf",r.branchCoverageAvailable),h(1),g("ngIf",r.branchCoverageAvailable),h(1),g("ngIf",r.branchCoverageAvailable),h(1),g("ngIf",r.methodCoverageAvailable),h(1),g("ngIf",r.methodCoverageAvailable),h(1),g("ngIf",r.methodCoverageAvailable),h(1),g("ngIf",r.methodCoverageAvailable))},dependencies:[So,Pr,Vo],encapsulation:2,changeDetection:0})}const rx=["coverage-history-chart",""];class As{constructor(){this.path=null,this._historicCoverages=[]}get historicCoverages(){return this._historicCoverages}set historicCoverages(t){if(this._historicCoverages=t,t.length>1){let n="";for(let r=0;r1),h(1),g("ngIf",null!==n.clazz.currentHistoricCoverage),h(1),g("ngIf",null===n.clazz.currentHistoricCoverage)}}function Ax(e,t){if(1&e&&(v(0,"td",2),R(1,"coverage-bar",5),_()),2&e){const n=D();h(1),g("percentage",n.clazz.branchCoverage)}}function Tx(e,t){if(1&e&&(Y(0),v(1,"div"),b(2),_(),v(3,"div",9),b(4),_(),K()),2&e){const n=D(2);h(1),Ht("currenthistory ",n.getClassName(n.clazz.coveredMethods,n.clazz.currentHistoricCoverage.cm),""),h(1),Z(" ",n.clazz.coveredMethods," "),h(1),g("title",n.clazz.currentHistoricCoverage.et),h(1),Z(" ",n.clazz.currentHistoricCoverage.cm," ")}}function xx(e,t){if(1&e&&(Y(0),b(1),K()),2&e){const n=D(2);h(1),Z(" ",n.clazz.coveredMethods," ")}}function Nx(e,t){if(1&e&&(v(0,"td",2),I(1,Tx,5,6,"ng-container",1),I(2,xx,2,1,"ng-container",1),_()),2&e){const n=D();h(1),g("ngIf",null!==n.clazz.currentHistoricCoverage),h(1),g("ngIf",null===n.clazz.currentHistoricCoverage)}}function Fx(e,t){if(1&e&&(Y(0),v(1,"div",10),b(2),_(),v(3,"div",9),b(4),_(),K()),2&e){const n=D(2);h(2),F(n.clazz.totalMethods),h(1),g("title",n.clazz.currentHistoricCoverage.et),h(1),F(n.clazz.currentHistoricCoverage.tm)}}function Ox(e,t){if(1&e&&(Y(0),b(1),K()),2&e){const n=D(2);h(1),Z(" ",n.clazz.totalMethods," ")}}function Rx(e,t){if(1&e&&(v(0,"td",2),I(1,Fx,5,3,"ng-container",1),I(2,Ox,2,1,"ng-container",1),_()),2&e){const n=D();h(1),g("ngIf",null!==n.clazz.currentHistoricCoverage),h(1),g("ngIf",null===n.clazz.currentHistoricCoverage)}}function Px(e,t){if(1&e&&R(0,"div",15),2&e){const n=D(2);Ar("title",n.translations.history+": "+n.translations.methodCoverage),g("historicCoverages",n.clazz.methodCoverageHistory)("ngClass",Wi(3,Iu,null!==n.clazz.currentHistoricCoverage))}}function kx(e,t){if(1&e&&(Y(0),v(1,"div"),b(2),_(),v(3,"div",9),b(4),_(),K()),2&e){const n=D(2);h(1),Ht("currenthistory ",n.getClassName(n.clazz.methodCoverage,n.clazz.currentHistoricCoverage.mcq),""),h(1),Z(" ",n.clazz.methodCoveragePercentage," "),h(1),g("title",n.clazz.currentHistoricCoverage.et+": "+n.clazz.currentHistoricCoverage.methodCoverageRatioText),h(1),Z("",n.clazz.currentHistoricCoverage.mcq,"%")}}function Lx(e,t){if(1&e&&(Y(0),b(1),K()),2&e){const n=D(2);h(1),Z(" ",n.clazz.methodCoveragePercentage," ")}}function Vx(e,t){if(1&e&&(v(0,"td",3),I(1,Px,1,5,"div",14),I(2,kx,5,6,"ng-container",1),I(3,Lx,2,1,"ng-container",1),_()),2&e){const n=D();g("title",n.clazz.methodCoverageRatioText),h(1),g("ngIf",n.clazz.methodCoverageHistory.length>1),h(1),g("ngIf",null!==n.clazz.currentHistoricCoverage),h(1),g("ngIf",null===n.clazz.currentHistoricCoverage)}}function Bx(e,t){if(1&e&&(v(0,"td",2),R(1,"coverage-bar",5),_()),2&e){const n=D();h(1),g("percentage",n.clazz.methodCoverage)}}class Ts{constructor(){this.translations={},this.branchCoverageAvailable=!1,this.methodCoverageAvailable=!1,this.historyComparisionDate=""}getClassName(t,n){return t>n?"lightgreen":t1),h(1),g("ngIf",null!==r.clazz.currentHistoricCoverage),h(1),g("ngIf",null===r.clazz.currentHistoricCoverage),h(2),g("percentage",r.clazz.coverage),h(1),g("ngIf",r.branchCoverageAvailable),h(1),g("ngIf",r.branchCoverageAvailable),h(1),g("ngIf",r.branchCoverageAvailable),h(1),g("ngIf",r.branchCoverageAvailable),h(1),g("ngIf",r.methodCoverageAvailable),h(1),g("ngIf",r.methodCoverageAvailable),h(1),g("ngIf",r.methodCoverageAvailable),h(1),g("ngIf",r.methodCoverageAvailable))},dependencies:[So,Pr,As,Vo],encapsulation:2,changeDetection:0})}function Hx(e,t){if(1&e&&(Y(0),b(1),K()),2&e){const n=D(2);h(1),F(n.translations.noGrouping)}}function jx(e,t){if(1&e&&(Y(0),b(1),K()),2&e){const n=D(2);h(1),F(n.translations.byAssembly)}}function $x(e,t){if(1&e&&(Y(0),b(1),K()),2&e){const n=D(2);h(1),F(n.translations.byNamespace+" "+n.settings.grouping)}}function Ux(e,t){if(1&e&&(v(0,"option",31),b(1),_()),2&e){const n=t.$implicit;g("value",n),h(1),F(n)}}function zx(e,t){1&e&&R(0,"br")}function Gx(e,t){if(1&e&&(v(0,"option",39),b(1),_()),2&e){const n=D(4);h(1),Z(" ",n.translations.branchCoverageIncreaseOnly," ")}}function Wx(e,t){if(1&e&&(v(0,"option",40),b(1),_()),2&e){const n=D(4);h(1),Z(" ",n.translations.branchCoverageDecreaseOnly," ")}}function qx(e,t){if(1&e&&(v(0,"option",41),b(1),_()),2&e){const n=D(4);h(1),Z(" ",n.translations.methodCoverageIncreaseOnly," ")}}function Zx(e,t){if(1&e&&(v(0,"option",42),b(1),_()),2&e){const n=D(4);h(1),Z(" ",n.translations.methodCoverageDecreaseOnly," ")}}function Qx(e,t){if(1&e){const n=dt();v(0,"div")(1,"select",28),q("ngModelChange",function(o){return ie(n),se(D(3).settings.historyComparisionType=o)}),v(2,"option",29),b(3),_(),v(4,"option",32),b(5),_(),v(6,"option",33),b(7),_(),v(8,"option",34),b(9),_(),I(10,Gx,2,1,"option",35),I(11,Wx,2,1,"option",36),I(12,qx,2,1,"option",37),I(13,Zx,2,1,"option",38),_()()}if(2&e){const n=D(3);h(1),g("ngModel",n.settings.historyComparisionType),h(2),F(n.translations.filter),h(2),F(n.translations.allChanges),h(2),F(n.translations.lineCoverageIncreaseOnly),h(2),F(n.translations.lineCoverageDecreaseOnly),h(1),g("ngIf",n.branchCoverageAvailable),h(1),g("ngIf",n.branchCoverageAvailable),h(1),g("ngIf",n.methodCoverageAvailable),h(1),g("ngIf",n.methodCoverageAvailable)}}function Yx(e,t){if(1&e){const n=dt();Y(0),v(1,"div"),b(2),v(3,"select",28),q("ngModelChange",function(o){return ie(n),se(D(2).settings.historyComparisionDate=o)})("ngModelChange",function(){return ie(n),se(D(2).updateCurrentHistoricCoverage())}),v(4,"option",29),b(5),_(),I(6,Ux,2,2,"option",30),_()(),I(7,zx,1,0,"br",0),I(8,Qx,14,9,"div",0),K()}if(2&e){const n=D(2);h(2),Z(" ",n.translations.compareHistory," "),h(1),g("ngModel",n.settings.historyComparisionDate),h(2),F(n.translations.date),h(1),g("ngForOf",n.historicCoverageExecutionTimes),h(1),g("ngIf",""!==n.settings.historyComparisionDate),h(1),g("ngIf",""!==n.settings.historyComparisionDate)}}function Kx(e,t){1&e&&R(0,"col",10)}function Jx(e,t){1&e&&R(0,"col",13)}function Xx(e,t){1&e&&R(0,"col",14)}function eN(e,t){1&e&&R(0,"col",15)}function tN(e,t){1&e&&R(0,"col",10)}function nN(e,t){1&e&&R(0,"col",13)}function rN(e,t){1&e&&R(0,"col",14)}function oN(e,t){1&e&&R(0,"col",15)}function iN(e,t){if(1&e&&(v(0,"th",43),b(1),_()),2&e){const n=D(2);h(1),F(n.translations.branchCoverage)}}function sN(e,t){if(1&e&&(v(0,"th",43),b(1),_()),2&e){const n=D(2);h(1),F(n.translations.methodCoverage)}}const vt=function(e,t,n){return{"icon-up-dir_active":e,"icon-down-dir_active":t,"icon-down-dir":n}};function aN(e,t){if(1&e){const n=dt();v(0,"th",5)(1,"a",2),q("click",function(o){return ie(n),se(D(2).updateSorting("covered_branches",o))}),R(2,"i",23),b(3),_()()}if(2&e){const n=D(2);h(2),g("ngClass",Re(2,vt,"covered_branches"===n.settings.sortBy&&"desc"===n.settings.sortOrder,"covered_branches"===n.settings.sortBy&&"asc"===n.settings.sortOrder,"covered_branches"!==n.settings.sortBy)),h(1),F(n.translations.covered)}}function lN(e,t){if(1&e){const n=dt();v(0,"th",5)(1,"a",2),q("click",function(o){return ie(n),se(D(2).updateSorting("total_branches",o))}),R(2,"i",23),b(3),_()()}if(2&e){const n=D(2);h(2),g("ngClass",Re(2,vt,"total_branches"===n.settings.sortBy&&"desc"===n.settings.sortOrder,"total_branches"===n.settings.sortBy&&"asc"===n.settings.sortOrder,"total_branches"!==n.settings.sortBy)),h(1),F(n.translations.total)}}function cN(e,t){if(1&e){const n=dt();v(0,"th",24)(1,"a",2),q("click",function(o){return ie(n),se(D(2).updateSorting("branchcoverage",o))}),R(2,"i",23),b(3),_()()}if(2&e){const n=D(2);h(2),g("ngClass",Re(2,vt,"branchcoverage"===n.settings.sortBy&&"desc"===n.settings.sortOrder,"branchcoverage"===n.settings.sortBy&&"asc"===n.settings.sortOrder,"branchcoverage"!==n.settings.sortBy)),h(1),F(n.translations.percentage)}}function uN(e,t){if(1&e){const n=dt();v(0,"th",5)(1,"a",2),q("click",function(o){return ie(n),se(D(2).updateSorting("covered_methods",o))}),R(2,"i",23),b(3),_()()}if(2&e){const n=D(2);h(2),g("ngClass",Re(2,vt,"covered_methods"===n.settings.sortBy&&"desc"===n.settings.sortOrder,"covered_methods"===n.settings.sortBy&&"asc"===n.settings.sortOrder,"covered_methods"!==n.settings.sortBy)),h(1),F(n.translations.covered)}}function dN(e,t){if(1&e){const n=dt();v(0,"th",5)(1,"a",2),q("click",function(o){return ie(n),se(D(2).updateSorting("total_methods",o))}),R(2,"i",23),b(3),_()()}if(2&e){const n=D(2);h(2),g("ngClass",Re(2,vt,"total_methods"===n.settings.sortBy&&"desc"===n.settings.sortOrder,"total_methods"===n.settings.sortBy&&"asc"===n.settings.sortOrder,"total_methods"!==n.settings.sortBy)),h(1),F(n.translations.total)}}function fN(e,t){if(1&e){const n=dt();v(0,"th",24)(1,"a",2),q("click",function(o){return ie(n),se(D(2).updateSorting("methodcoverage",o))}),R(2,"i",23),b(3),_()()}if(2&e){const n=D(2);h(2),g("ngClass",Re(2,vt,"methodcoverage"===n.settings.sortBy&&"desc"===n.settings.sortOrder,"methodcoverage"===n.settings.sortBy&&"asc"===n.settings.sortOrder,"methodcoverage"!==n.settings.sortBy)),h(1),F(n.translations.percentage)}}function hN(e,t){if(1&e&&R(0,"tr",45),2&e){const n=D().$implicit,r=D(2);g("element",n)("collapsed",n.collapsed)("branchCoverageAvailable",r.branchCoverageAvailable)("methodCoverageAvailable",r.methodCoverageAvailable)}}function pN(e,t){if(1&e&&R(0,"tr",47),2&e){const n=D().$implicit,r=D(3);g("clazz",n)("translations",r.translations)("branchCoverageAvailable",r.branchCoverageAvailable)("methodCoverageAvailable",r.methodCoverageAvailable)("historyComparisionDate",r.settings.historyComparisionDate)}}function gN(e,t){if(1&e&&(Y(0),I(1,pN,1,5,"tr",46),K()),2&e){const n=t.$implicit,r=D().$implicit,o=D(2);h(1),g("ngIf",!r.collapsed&&n.visible(o.settings.filter,o.settings.historyComparisionType))}}function mN(e,t){if(1&e&&R(0,"tr",50),2&e){const n=D().$implicit,r=D(5);g("clazz",n)("translations",r.translations)("branchCoverageAvailable",r.branchCoverageAvailable)("methodCoverageAvailable",r.methodCoverageAvailable)("historyComparisionDate",r.settings.historyComparisionDate)}}function _N(e,t){if(1&e&&(Y(0),I(1,mN,1,5,"tr",49),K()),2&e){const n=t.$implicit,r=D(2).$implicit,o=D(3);h(1),g("ngIf",!r.collapsed&&n.visible(o.settings.filter,o.settings.historyComparisionType))}}function vN(e,t){if(1&e&&(Y(0),R(1,"tr",48),I(2,_N,2,1,"ng-container",27),K()),2&e){const n=D().$implicit,r=D(3);h(1),g("element",n)("collapsed",n.collapsed)("branchCoverageAvailable",r.branchCoverageAvailable)("methodCoverageAvailable",r.methodCoverageAvailable),h(1),g("ngForOf",n.classes)}}function yN(e,t){if(1&e&&(Y(0),I(1,vN,3,5,"ng-container",0),K()),2&e){const n=t.$implicit,r=D().$implicit,o=D(2);h(1),g("ngIf",!r.collapsed&&n.visible(o.settings.filter,o.settings.historyComparisionType))}}function DN(e,t){if(1&e&&(Y(0),I(1,hN,1,4,"tr",44),I(2,gN,2,1,"ng-container",27),I(3,yN,2,1,"ng-container",27),K()),2&e){const n=t.$implicit,r=D(2);h(1),g("ngIf",n.visible(r.settings.filter,r.settings.historyComparisionType)),h(1),g("ngForOf",n.classes),h(1),g("ngForOf",n.subElements)}}function CN(e,t){if(1&e){const n=dt();v(0,"div")(1,"div",1)(2,"div")(3,"a",2),q("click",function(o){return ie(n),se(D().collapseAll(o))}),b(4),_(),b(5," | "),v(6,"a",2),q("click",function(o){return ie(n),se(D().expandAll(o))}),b(7),_()(),v(8,"div",3),I(9,Hx,2,1,"ng-container",0),I(10,jx,2,1,"ng-container",0),I(11,$x,2,1,"ng-container",0),R(12,"br"),b(13),v(14,"input",4),q("ngModelChange",function(o){return ie(n),se(D().settings.grouping=o)})("ngModelChange",function(){return ie(n),se(D().updateCoverageInfo())}),_()(),v(15,"div",3),I(16,Yx,9,6,"ng-container",0),_(),v(17,"div",5)(18,"span"),b(19),_(),v(20,"input",6),q("ngModelChange",function(o){return ie(n),se(D().settings.filter=o)}),_()()(),v(21,"div",7)(22,"table",8)(23,"colgroup"),R(24,"col",9)(25,"col",10)(26,"col",11)(27,"col",12)(28,"col",13)(29,"col",14)(30,"col",15),I(31,Kx,1,0,"col",16),I(32,Jx,1,0,"col",17),I(33,Xx,1,0,"col",18),I(34,eN,1,0,"col",19),I(35,tN,1,0,"col",16),I(36,nN,1,0,"col",17),I(37,rN,1,0,"col",18),I(38,oN,1,0,"col",19),_(),v(39,"thead")(40,"tr",20),R(41,"th"),v(42,"th",21),b(43),_(),I(44,iN,2,1,"th",22),I(45,sN,2,1,"th",22),_(),v(46,"tr")(47,"th")(48,"a",2),q("click",function(o){return ie(n),se(D().updateSorting("name",o))}),R(49,"i",23),b(50),_()(),v(51,"th",5)(52,"a",2),q("click",function(o){return ie(n),se(D().updateSorting("covered",o))}),R(53,"i",23),b(54),_()(),v(55,"th",5)(56,"a",2),q("click",function(o){return ie(n),se(D().updateSorting("uncovered",o))}),R(57,"i",23),b(58),_()(),v(59,"th",5)(60,"a",2),q("click",function(o){return ie(n),se(D().updateSorting("coverable",o))}),R(61,"i",23),b(62),_()(),v(63,"th",5)(64,"a",2),q("click",function(o){return ie(n),se(D().updateSorting("total",o))}),R(65,"i",23),b(66),_()(),v(67,"th",24)(68,"a",2),q("click",function(o){return ie(n),se(D().updateSorting("coverage",o))}),R(69,"i",23),b(70),_()(),I(71,aN,4,6,"th",25),I(72,lN,4,6,"th",25),I(73,cN,4,6,"th",26),I(74,uN,4,6,"th",25),I(75,dN,4,6,"th",25),I(76,fN,4,6,"th",26),_()(),v(77,"tbody"),I(78,DN,4,3,"ng-container",27),_()()()()}if(2&e){const n=D();h(4),F(n.translations.collapseAll),h(3),F(n.translations.expandAll),h(2),g("ngIf",-1===n.settings.grouping),h(1),g("ngIf",0===n.settings.grouping),h(1),g("ngIf",n.settings.grouping>0),h(2),Z(" ",n.translations.grouping," "),h(1),g("max",n.settings.groupingMaximum)("ngModel",n.settings.grouping),h(2),g("ngIf",n.historicCoverageExecutionTimes.length>0),h(3),Z("",n.translations.filter," "),h(1),g("ngModel",n.settings.filter),h(11),g("ngIf",n.branchCoverageAvailable),h(1),g("ngIf",n.branchCoverageAvailable),h(1),g("ngIf",n.branchCoverageAvailable),h(1),g("ngIf",n.branchCoverageAvailable),h(1),g("ngIf",n.methodCoverageAvailable),h(1),g("ngIf",n.methodCoverageAvailable),h(1),g("ngIf",n.methodCoverageAvailable),h(1),g("ngIf",n.methodCoverageAvailable),h(5),F(n.translations.coverage),h(1),g("ngIf",n.branchCoverageAvailable),h(1),g("ngIf",n.methodCoverageAvailable),h(4),g("ngClass",Re(41,vt,"name"===n.settings.sortBy&&"desc"===n.settings.sortOrder,"name"===n.settings.sortBy&&"asc"===n.settings.sortOrder,"name"!==n.settings.sortBy)),h(1),F(n.translations.name),h(3),g("ngClass",Re(45,vt,"covered"===n.settings.sortBy&&"desc"===n.settings.sortOrder,"covered"===n.settings.sortBy&&"asc"===n.settings.sortOrder,"covered"!==n.settings.sortBy)),h(1),F(n.translations.covered),h(3),g("ngClass",Re(49,vt,"uncovered"===n.settings.sortBy&&"desc"===n.settings.sortOrder,"uncovered"===n.settings.sortBy&&"asc"===n.settings.sortOrder,"uncovered"!==n.settings.sortBy)),h(1),F(n.translations.uncovered),h(3),g("ngClass",Re(53,vt,"coverable"===n.settings.sortBy&&"desc"===n.settings.sortOrder,"coverable"===n.settings.sortBy&&"asc"===n.settings.sortOrder,"coverable"!==n.settings.sortBy)),h(1),F(n.translations.coverable),h(3),g("ngClass",Re(57,vt,"total"===n.settings.sortBy&&"desc"===n.settings.sortOrder,"total"===n.settings.sortBy&&"asc"===n.settings.sortOrder,"total"!==n.settings.sortBy)),h(1),F(n.translations.total),h(3),g("ngClass",Re(61,vt,"coverage"===n.settings.sortBy&&"desc"===n.settings.sortOrder,"coverage"===n.settings.sortBy&&"asc"===n.settings.sortOrder,"coverage"!==n.settings.sortBy)),h(1),F(n.translations.percentage),h(1),g("ngIf",n.branchCoverageAvailable),h(1),g("ngIf",n.branchCoverageAvailable),h(1),g("ngIf",n.branchCoverageAvailable),h(1),g("ngIf",n.methodCoverageAvailable),h(1),g("ngIf",n.methodCoverageAvailable),h(1),g("ngIf",n.methodCoverageAvailable),h(2),g("ngForOf",n.codeElements)}}class xs{constructor(t){this.queryString="",this.historicCoverageExecutionTimes=[],this.branchCoverageAvailable=!1,this.methodCoverageAvailable=!1,this.codeElements=[],this.translations={},this.settings=new jT,this.window=t.nativeWindow}ngOnInit(){this.historicCoverageExecutionTimes=this.window.historicCoverageExecutionTimes,this.branchCoverageAvailable=this.window.branchCoverageAvailable,this.methodCoverageAvailable=this.window.methodCoverageAvailable,this.translations=this.window.translations;let t=!1;if(void 0!==this.window.history&&void 0!==this.window.history.replaceState&&null!==this.window.history.state&&null!=this.window.history.state.coverageInfoSettings)console.log("Coverage info: Restoring from history",this.window.history.state.coverageInfoSettings),t=!0,this.settings=JSON.parse(JSON.stringify(this.window.history.state.coverageInfoSettings));else{let r=0,o=this.window.assemblies;for(let i=0;i-1&&(this.queryString=window.location.href.substr(n)),this.updateCoverageInfo(),t&&this.restoreCollapseState()}onDonBeforeUnlodad(){if(this.saveCollapseState(),void 0!==this.window.history&&void 0!==this.window.history.replaceState){console.log("Coverage info: Updating history",this.settings);let t=new Vv;null!==window.history.state&&(t=JSON.parse(JSON.stringify(this.window.history.state))),t.coverageInfoSettings=JSON.parse(JSON.stringify(this.settings)),window.history.replaceState(t,"")}}updateCoverageInfo(){let t=(new Date).getTime(),n=this.window.assemblies,r=[],o=0;if(0===this.settings.grouping)for(let a=0;a{for(let r=0;r{for(let o=0;ot&&(r[o].collapsed=this.settings.collapseStates[t]),t++,n(r[o].subElements)};n(this.codeElements)}static#e=this.\u0275fac=function(n){return new(n||xs)(S(Gn))};static#t=this.\u0275cmp=ln({type:xs,selectors:[["coverage-info"]],hostBindings:function(n,r){1&n&&q("beforeunload",function(){return r.onDonBeforeUnlodad()},0,gl)},decls:1,vars:1,consts:[[4,"ngIf"],[1,"customizebox"],["href","#",3,"click"],[1,"center"],["type","range","step","1","min","-1",3,"max","ngModel","ngModelChange"],[1,"right"],["type","text",3,"ngModel","ngModelChange"],[1,"table-responsive"],[1,"overview","table-fixed","stripped"],[1,"column-min-200"],[1,"column90"],[1,"column105"],[1,"column100"],[1,"column70"],[1,"column98"],[1,"column112"],["class","column90",4,"ngIf"],["class","column70",4,"ngIf"],["class","column98",4,"ngIf"],["class","column112",4,"ngIf"],[1,"header"],["colspan","6",1,"center"],["class","center","colspan","4",4,"ngIf"],[1,"icon-down-dir",3,"ngClass"],["colspan","2",1,"center"],["class","right",4,"ngIf"],["class","center","colspan","2",4,"ngIf"],[4,"ngFor","ngForOf"],[3,"ngModel","ngModelChange"],["value",""],[3,"value",4,"ngFor","ngForOf"],[3,"value"],["value","allChanges"],["value","lineCoverageIncreaseOnly"],["value","lineCoverageDecreaseOnly"],["value","branchCoverageIncreaseOnly",4,"ngIf"],["value","branchCoverageDecreaseOnly",4,"ngIf"],["value","methodCoverageIncreaseOnly",4,"ngIf"],["value","methodCoverageDecreaseOnly",4,"ngIf"],["value","branchCoverageIncreaseOnly"],["value","branchCoverageDecreaseOnly"],["value","methodCoverageIncreaseOnly"],["value","methodCoverageDecreaseOnly"],["colspan","4",1,"center"],["codeelement-row","",3,"element","collapsed","branchCoverageAvailable","methodCoverageAvailable",4,"ngIf"],["codeelement-row","",3,"element","collapsed","branchCoverageAvailable","methodCoverageAvailable"],["class-row","",3,"clazz","translations","branchCoverageAvailable","methodCoverageAvailable","historyComparisionDate",4,"ngIf"],["class-row","",3,"clazz","translations","branchCoverageAvailable","methodCoverageAvailable","historyComparisionDate"],["codeelement-row","",1,"namespace",3,"element","collapsed","branchCoverageAvailable","methodCoverageAvailable"],["class","namespace","class-row","",3,"clazz","translations","branchCoverageAvailable","methodCoverageAvailable","historyComparisionDate",4,"ngIf"],["class-row","",1,"namespace",3,"clazz","translations","branchCoverageAvailable","methodCoverageAvailable","historyComparisionDate"]],template:function(n,r){1&n&&I(0,CN,79,65,"div",0),2&n&&g("ngIf",r.codeElements.length>0)},dependencies:[So,Hc,Pr,Du,wu,No,mu,Lo,ru,Ms,Ss,Ts],encapsulation:2})}class wN{constructor(){this.assembly="",this.numberOfRiskHotspots=10,this.filter="",this.sortBy="",this.sortOrder="asc"}}function bN(e,t){if(1&e&&(v(0,"option",15),b(1),_()),2&e){const n=t.$implicit;g("value",n),h(1),F(n)}}function EN(e,t){if(1&e&&(v(0,"span"),b(1),_()),2&e){const n=D(2);h(1),F(n.translations.top)}}function IN(e,t){1&e&&(v(0,"option",22),b(1,"20"),_())}function MN(e,t){1&e&&(v(0,"option",23),b(1,"50"),_())}function SN(e,t){1&e&&(v(0,"option",24),b(1,"100"),_())}function AN(e,t){if(1&e&&(v(0,"option",15),b(1),_()),2&e){const n=D(3);g("value",n.totalNumberOfRiskHotspots),h(1),F(n.translations.all)}}function TN(e,t){if(1&e){const n=dt();v(0,"select",16),q("ngModelChange",function(o){return ie(n),se(D(2).settings.numberOfRiskHotspots=o)}),v(1,"option",17),b(2,"10"),_(),I(3,IN,2,0,"option",18),I(4,MN,2,0,"option",19),I(5,SN,2,0,"option",20),I(6,AN,2,2,"option",21),_()}if(2&e){const n=D(2);g("ngModel",n.settings.numberOfRiskHotspots),h(3),g("ngIf",n.totalNumberOfRiskHotspots>10),h(1),g("ngIf",n.totalNumberOfRiskHotspots>20),h(1),g("ngIf",n.totalNumberOfRiskHotspots>50),h(1),g("ngIf",n.totalNumberOfRiskHotspots>100)}}function xN(e,t){1&e&&R(0,"col",25)}const Ns=function(e,t,n){return{"icon-up-dir_active":e,"icon-down-dir_active":t,"icon-down-dir":n}};function NN(e,t){if(1&e){const n=dt();v(0,"th")(1,"a",12),q("click",function(o){const s=ie(n).index;return se(D(2).updateSorting(""+s,o))}),R(2,"i",13),b(3),_(),v(4,"a",26),R(5,"i",27),_()()}if(2&e){const n=t.$implicit,r=t.index,o=D(2);h(2),g("ngClass",Re(3,Ns,o.settings.sortBy===""+r&&"desc"===o.settings.sortOrder,o.settings.sortBy===""+r&&"asc"===o.settings.sortOrder,o.settings.sortBy!==""+r)),h(1),F(n.name),h(1),Ar("href",n.explanationUrl,dr)}}const FN=function(e,t){return{lightred:e,lightgreen:t}};function ON(e,t){if(1&e&&(v(0,"td",30),b(1),_()),2&e){const n=t.$implicit;g("ngClass",rc(2,FN,n.exceeded,!n.exceeded)),h(1),F(n.value)}}function RN(e,t){if(1&e&&(v(0,"tr")(1,"td"),b(2),_(),v(3,"td")(4,"a",26),b(5),_()(),v(6,"td",28)(7,"a",26),b(8),_()(),I(9,ON,2,5,"td",29),_()),2&e){const n=t.$implicit,r=D(2);h(2),F(n.assembly),h(2),g("href",n.reportPath+r.queryString,dr),h(1),F(n.class),h(1),g("title",n.methodName),h(1),g("href",n.reportPath+r.queryString+"#file"+n.fileIndex+"_line"+n.line,dr),h(1),Z(" ",n.methodShortName," "),h(1),g("ngForOf",n.metrics)}}function PN(e,t){if(1&e){const n=dt();v(0,"div")(1,"div",1)(2,"div")(3,"select",2),q("ngModelChange",function(o){return ie(n),se(D().settings.assembly=o)})("ngModelChange",function(){return ie(n),se(D().updateRiskHotpots())}),v(4,"option",3),b(5),_(),I(6,bN,2,2,"option",4),_()(),v(7,"div",5),I(8,EN,2,1,"span",0),I(9,TN,7,5,"select",6),_(),R(10,"div",5),v(11,"div",7)(12,"span"),b(13),_(),v(14,"input",8),q("ngModelChange",function(o){return ie(n),se(D().settings.filter=o)})("ngModelChange",function(){return ie(n),se(D().updateRiskHotpots())}),_()()(),v(15,"div",9)(16,"table",10)(17,"colgroup"),R(18,"col")(19,"col")(20,"col"),I(21,xN,1,0,"col",11),_(),v(22,"thead")(23,"tr")(24,"th")(25,"a",12),q("click",function(o){return ie(n),se(D().updateSorting("assembly",o))}),R(26,"i",13),b(27),_()(),v(28,"th")(29,"a",12),q("click",function(o){return ie(n),se(D().updateSorting("class",o))}),R(30,"i",13),b(31),_()(),v(32,"th")(33,"a",12),q("click",function(o){return ie(n),se(D().updateSorting("method",o))}),R(34,"i",13),b(35),_()(),I(36,NN,6,7,"th",14),_()(),v(37,"tbody"),I(38,RN,10,7,"tr",14),function qg(e,t){const n=J();let r;const o=e+22;n.firstCreatePass?(r=function xI(e,t){if(t)for(let n=t.length-1;n>=0;n--){const r=t[n];if(e===r.name)return r}}(t,n.pipeRegistry),n.data[o]=r,r.onDestroy&&(n.destroyHooks||(n.destroyHooks=[])).push(o,r.onDestroy)):r=n.data[o];const i=r.factory||(r.factory=xn(r.type)),s=ft(S);try{const a=ai(!1),l=i();return ai(a),function DE(e,t,n,r){n>=e.data.length&&(e.data[n]=null,e.blueprint[n]=null),t[n]=r}(n,w(),o,l),l}finally{ft(s)}}(39,"slice"),_()()()()}if(2&e){const n=D();h(3),g("ngModel",n.settings.assembly),h(2),F(n.translations.assembly),h(1),g("ngForOf",n.assemblies),h(2),g("ngIf",n.totalNumberOfRiskHotspots>10),h(1),g("ngIf",n.totalNumberOfRiskHotspots>10),h(4),Z("",n.translations.filter," "),h(1),g("ngModel",n.settings.filter),h(7),g("ngForOf",n.riskHotspotMetrics),h(5),g("ngClass",Re(20,Ns,"assembly"===n.settings.sortBy&&"desc"===n.settings.sortOrder,"assembly"===n.settings.sortBy&&"asc"===n.settings.sortOrder,"assembly"!==n.settings.sortBy)),h(1),F(n.translations.assembly),h(3),g("ngClass",Re(24,Ns,"class"===n.settings.sortBy&&"desc"===n.settings.sortOrder,"class"===n.settings.sortBy&&"asc"===n.settings.sortOrder,"class"!==n.settings.sortBy)),h(1),F(n.translations.class),h(3),g("ngClass",Re(28,Ns,"method"===n.settings.sortBy&&"desc"===n.settings.sortOrder,"method"===n.settings.sortBy&&"asc"===n.settings.sortOrder,"method"!==n.settings.sortBy)),h(1),F(n.translations.method),h(1),g("ngForOf",n.riskHotspotMetrics),h(2),g("ngForOf",function Zg(e,t,n,r,o){const i=e+22,s=w(),a=function Jn(e,t){return e[t]}(s,i);return function Co(e,t){return e[1].data[t].pure}(s,i)?zg(s,We(),t,a.transform,n,r,o,a):a.transform(n,r,o)}(39,16,n.riskHotspots,0,n.settings.numberOfRiskHotspots))}}class Fs{constructor(t){this.queryString="",this.riskHotspotMetrics=[],this.riskHotspots=[],this.totalNumberOfRiskHotspots=0,this.assemblies=[],this.translations={},this.settings=new wN,this.window=t.nativeWindow}ngOnInit(){this.riskHotspotMetrics=this.window.riskHotspotMetrics,this.translations=this.window.translations,void 0!==this.window.history&&void 0!==this.window.history.replaceState&&null!==this.window.history.state&&null!=this.window.history.state.riskHotspotsSettings&&(console.log("Risk hotspots: Restoring from history",this.window.history.state.riskHotspotsSettings),this.settings=JSON.parse(JSON.stringify(this.window.history.state.riskHotspotsSettings)));const t=window.location.href.indexOf("?");t>-1&&(this.queryString=window.location.href.substr(t)),this.updateRiskHotpots()}onDonBeforeUnlodad(){if(void 0!==this.window.history&&void 0!==this.window.history.replaceState){console.log("Risk hotspots: Updating history",this.settings);let t=new Vv;null!==window.history.state&&(t=JSON.parse(JSON.stringify(this.window.history.state))),t.riskHotspotsSettings=JSON.parse(JSON.stringify(this.settings)),window.history.replaceState(t,"")}}updateRiskHotpots(){const t=this.window.riskHotspots;if(this.totalNumberOfRiskHotspots=t.length,0===this.assemblies.length){let i=[];for(let s=0;s0)},dependencies:[So,Hc,Pr,Du,wu,No,Lo,ru,Ms,d_],encapsulation:2})}class Os{static#e=this.\u0275fac=function(n){return new(n||Os)};static#t=this.\u0275mod=cn({type:Os,bootstrap:[Fs,xs]});static#n=this.\u0275inj=zt({providers:[Gn],imports:[DA,BT]})}yA().bootstrapModule(Os).catch(e=>console.error(e))}},ve=>{ve(ve.s=103)}]); \ No newline at end of file diff --git a/.vscode/ReportGenerator/Html_Dark/1d194f36/report.css b/.vscode/ReportGenerator/Html_Dark/1d194f36/report.css deleted file mode 100644 index 46c1f1d..0000000 --- a/.vscode/ReportGenerator/Html_Dark/1d194f36/report.css +++ /dev/null @@ -1,735 +0,0 @@ -html { font-family: sans-serif; margin: 0; padding: 0; font-size: 0.9em; background-color: #d6d6d6; height: 100%; } -body { margin: 0; padding: 0; height: 100%; color: #000; } -h1 { font-family: 'Century Gothic', sans-serif; font-size: 1.2em; font-weight: normal; color: #fff; background-color: #6f6f6f; padding: 10px; margin: 20px -20px 20px -20px; } -h1:first-of-type { margin-top: 0; } -h2 { font-size: 1.0em; font-weight: bold; margin: 10px 0 15px 0; padding: 0; } -h3 { font-size: 1.0em; font-weight: bold; margin: 0 0 10px 0; padding: 0; display: inline-block; } -a { color: #c00; text-decoration: none; } -a:hover { color: #000; text-decoration: none; } -h1 a.back { color: #fff; background-color: #949494; display: inline-block; margin: -12px 5px -10px -10px; padding: 10px; border-right: 1px solid #fff; } -h1 a.back:hover { background-color: #ccc; } -h1 a.button { color: #000; background-color: #bebebe; margin: -5px 0 0 10px; padding: 5px 8px 5px 8px; border: 1px solid #fff; font-size: 0.9em; border-radius: 3px; float:right; } -h1 a.button:hover { background-color: #ccc; } -h1 a.button i { position: relative; top: 1px; } - -.container { margin: auto; max-width: 1650px; width: 90%; background-color: #fff; display: flex; box-shadow: 0 0 60px #7d7d7d; min-height: 100%; } -.containerleft { padding: 0 20px 20px 20px; flex: 1; min-width: 1%; } -.containerright { width: 340px; min-width: 340px; background-color: #e5e5e5; height: 100%; } -.containerrightfixed { position: fixed; padding: 0 20px 20px 20px; border-left: 1px solid #6f6f6f; width: 300px; overflow-y: auto; height: 100%; top: 0; bottom: 0; } -.containerrightfixed h1 { background-color: #c00; } -.containerrightfixed label, .containerright a { white-space: nowrap; overflow: hidden; display: inline-block; width: 100%; max-width: 300px; text-overflow: ellipsis; } -.containerright a { margin-bottom: 3px; } - -@media screen and (max-width:1200px){ - .container { box-shadow: none; width: 100%; } - .containerright { display: none; } -} - -.footer { font-size: 0.7em; text-align: center; margin-top: 35px; } - -.card-group { display: flex; flex-wrap: wrap; margin-top: -15px; margin-left: -15px; } -.card-group + .card-group { margin-top: 0; } -.card-group .card { margin-top: 15px; margin-left: 15px; display: flex; flex-direction: column; background-color: #e4e4e4; background: radial-gradient(circle, #fefefe 0%, #f6f6f6 100%); border: 1px solid #c1c1c1; padding: 15px; color: #6f6f6f; max-width: 100% } -.card-group .card .card-header { font-size: 1.5rem; font-family: 'Century Gothic', sans-serif; margin-bottom: 15px; flex-grow: 1; } -.card-group .card .card-body { display: flex; flex-direction: row; gap: 15px; flex-grow: 1; } -.card-group .card .card-body div.table { display: flex; flex-direction: column; } -.card-group .card .large { font-size: 5rem; line-height: 5rem; font-weight: bold; align-self: flex-end; border-left-width: 4px; padding-left: 10px; } -.card-group .card table { align-self: flex-end; border-collapse: collapse; } -.card-group .card table tr { border-bottom: 1px solid #c1c1c1; } -.card-group .card table tr:hover { background-color: #c1c1c1; } -.card-group .card table tr:last-child { border-bottom: none; } -.card-group .card table th, .card-group .card table td { padding: 2px; } -.card-group td.limit-width { max-width: 200px; text-overflow: ellipsis; overflow: hidden; } -.card-group td.overflow-wrap { overflow-wrap: anywhere; } - -.pro-button { color: #fff; background-color: #20A0D2; background-image: linear-gradient(50deg, #1c7ed6 0%, #23b8cf 100%); padding: 10px; border-radius: 3px; font-weight: bold; display: inline-block; } -.pro-button:hover { color: #fff; background-color: #1C8EB7; background-image: linear-gradient(50deg, #1A6FBA 0%, #1EA1B5 100%); } - -th { text-align: left; } -.table-fixed { table-layout: fixed; } -.table-responsive { overflow-x: auto; } -.overview { border: 1px solid #c1c1c1; border-collapse: collapse; width: 100%; word-wrap: break-word; } -.overview th { border: 1px solid #c1c1c1; border-collapse: collapse; padding: 2px 4px 2px 4px; background-color: #ddd; } -.overview tr.namespace th { background-color: #dcdcdc; } -.overview thead th { background-color: #d1d1d1; } -.overview th a { color: #000; } -.overview tr.namespace a { margin-left: 15px; display: block; } -.overview td { border: 1px solid #c1c1c1; border-collapse: collapse; padding: 2px 5px 2px 5px; } -.overview tr.header th { background-color: #d1d1d1; } -.overview tr.header th:nth-child(2n+1) { background-color: #ddd; } -.overview tr.header th:first-child { border-left: 1px solid #fff; border-top: 1px solid #fff; background-color: #fff; } - -div.currenthistory { margin: -2px -5px 0 -5px; padding: 2px 5px 2px 5px; height: 16px; } -.coverage { border-collapse: collapse; font-size: 5px; height: 10px; } -.coverage td { padding: 0; border: none; } -.stripped tr:nth-child(2n+1) { background-color: #F3F3F3; } - -.customizebox { font-size: 0.75em; margin-bottom: 7px; } -.customizebox>div { width: 25%; display: inline-block; } -.customizebox div.right input { width: 150px; } -#namespaceslider { width: 200px; display: inline-block; margin-left: 8px; } - -.percentagebar { - padding-left: 3px; -} -a.percentagebar { - padding-left: 6px; -} -.percentagebarundefined { - border-left: 2px solid #fff; -} -.percentagebar0 { - border-left: 2px solid #c10909; -} -.percentagebar10 { - border-left: 2px solid; - border-image: linear-gradient(to bottom, #c10909 90%, #0aad0a 90%, #0aad0a 100%) 1; -} -.percentagebar20 { - border-left: 2px solid; - border-image: linear-gradient(to bottom, #c10909 80%, #0aad0a 80%, #0aad0a 100%) 1; -} -.percentagebar30 { - border-left: 2px solid; - border-image: linear-gradient(to bottom, #c10909 70%, #0aad0a 70%, #0aad0a 100%) 1; -} -.percentagebar40 { - border-left: 2px solid; - border-image: linear-gradient(to bottom, #c10909 60%, #0aad0a 60%, #0aad0a 100%) 1; -} -.percentagebar50 { - border-left: 2px solid; - border-image: linear-gradient(to bottom, #c10909 50%, #0aad0a 50%, #0aad0a 100%) 1; -} -.percentagebar60 { - border-left: 2px solid; - border-image: linear-gradient(to bottom, #c10909 40%, #0aad0a 40%, #0aad0a 100%) 1; -} -.percentagebar70 { - border-left: 2px solid; - border-image: linear-gradient(to bottom, #c10909 30%, #0aad0a 30%, #0aad0a 100%) 1; -} -.percentagebar80 { - border-left: 2px solid; - border-image: linear-gradient(to bottom, #c10909 20%, #0aad0a 20%, #0aad0a 100%) 1; -} -.percentagebar90 { - border-left: 2px solid; - border-image: linear-gradient(to bottom, #c10909 10%, #0aad0a 10%, #0aad0a 100%) 1; -} -.percentagebar100 { - border-left: 2px solid #0aad0a; -} - -.hidden, .ng-hide { display: none; } -.right { text-align: right; } -.center { text-align: center; } -.rightmargin { padding-right: 8px; } -.leftmargin { padding-left: 5px; } -.green { background-color: #0aad0a; } -.lightgreen { background-color: #dcf4dc; } -.red { background-color: #c10909; } -.lightred { background-color: #f7dede; } -.orange { background-color: #FFA500; } -.lightorange { background-color: #FFEFD5; } -.gray { background-color: #dcdcdc; } -.lightgray { color: #888888; } -.lightgraybg { background-color: #dadada; } - -code { font-family: Consolas, monospace; font-size: 0.9em; } - -.toggleZoom { text-align:right; } - -.ct-chart { position: relative; } -.ct-chart .ct-line { stroke-width: 2px !important; } -.ct-chart .ct-point { stroke-width: 6px !important; transition: stroke-width .2s; } -.ct-chart .ct-point:hover { stroke-width: 10px !important; } -.ct-chart .ct-series.ct-series-a .ct-line, .ct-chart .ct-series.ct-series-a .ct-point { stroke: #c00 !important;} -.ct-chart .ct-series.ct-series-b .ct-line, .ct-chart .ct-series.ct-series-b .ct-point { stroke: #1c2298 !important;} -.ct-chart .ct-series.ct-series-c .ct-line, .ct-chart .ct-series.ct-series-c .ct-point { stroke: #0aad0a !important;} - -.tinylinecoveragechart, .tinybranchcoveragechart, .tinymethodcoveragechart { background-color: #fff; margin-left: -3px; float: left; border: 1px solid #c1c1c1; width: 30px; height: 18px; } -.historiccoverageoffset { margin-top: 7px; } - -.tinylinecoveragechart .ct-line, .tinybranchcoveragechart .ct-line, .tinymethodcoveragechart .ct-line { stroke-width: 1px !important; } -.tinybranchcoveragechart .ct-series.ct-series-a .ct-line { stroke: #1c2298 !important; } -.tinymethodcoveragechart .ct-series.ct-series-a .ct-line { stroke: #0aad0a !important; } - -.linecoverage { background-color: #c00; width: 10px; height: 8px; border: 1px solid #000; display: inline-block; } -.branchcoverage { background-color: #1c2298; width: 10px; height: 8px; border: 1px solid #000; display: inline-block; } -.codeelementcoverage { background-color: #0aad0a; width: 10px; height: 8px; border: 1px solid #000; display: inline-block; } - -.tooltip { position: absolute; display: none; padding: 5px; background: #F4C63D; color: #453D3F; pointer-events: none; z-index: 1; min-width: 250px; } - -.column-min-200 { min-width: 200px; } -.column60 { width: 60px; } -.column70 { width: 70px; } -.column90 { width: 90px; } -.column98 { width: 98px; } -.column100 { width: 100px; } -.column105 { width: 105px; } -.column112 { width: 112px; } - -.cardpercentagebar { border-left-style: solid; } -.cardpercentagebar0 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 0%, #0aad0a 0%) 1; } -.cardpercentagebar1 { border-image: linear-gradient(to bottom, #c10909 1%, #c10909 1%, #0aad0a 1%) 1; } -.cardpercentagebar2 { border-image: linear-gradient(to bottom, #c10909 2%, #c10909 2%, #0aad0a 2%) 1; } -.cardpercentagebar3 { border-image: linear-gradient(to bottom, #c10909 3%, #c10909 3%, #0aad0a 3%) 1; } -.cardpercentagebar4 { border-image: linear-gradient(to bottom, #c10909 4%, #c10909 4%, #0aad0a 4%) 1; } -.cardpercentagebar5 { border-image: linear-gradient(to bottom, #c10909 5%, #c10909 5%, #0aad0a 5%) 1; } -.cardpercentagebar6 { border-image: linear-gradient(to bottom, #c10909 6%, #c10909 6%, #0aad0a 6%) 1; } -.cardpercentagebar7 { border-image: linear-gradient(to bottom, #c10909 7%, #c10909 7%, #0aad0a 7%) 1; } -.cardpercentagebar8 { border-image: linear-gradient(to bottom, #c10909 8%, #c10909 8%, #0aad0a 8%) 1; } -.cardpercentagebar9 { border-image: linear-gradient(to bottom, #c10909 9%, #c10909 9%, #0aad0a 9%) 1; } -.cardpercentagebar10 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 10%, #0aad0a 10%) 1; } -.cardpercentagebar11 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 11%, #0aad0a 11%) 1; } -.cardpercentagebar12 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 12%, #0aad0a 12%) 1; } -.cardpercentagebar13 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 13%, #0aad0a 13%) 1; } -.cardpercentagebar14 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 14%, #0aad0a 14%) 1; } -.cardpercentagebar15 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 15%, #0aad0a 15%) 1; } -.cardpercentagebar16 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 16%, #0aad0a 16%) 1; } -.cardpercentagebar17 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 17%, #0aad0a 17%) 1; } -.cardpercentagebar18 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 18%, #0aad0a 18%) 1; } -.cardpercentagebar19 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 19%, #0aad0a 19%) 1; } -.cardpercentagebar20 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 20%, #0aad0a 20%) 1; } -.cardpercentagebar21 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 21%, #0aad0a 21%) 1; } -.cardpercentagebar22 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 22%, #0aad0a 22%) 1; } -.cardpercentagebar23 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 23%, #0aad0a 23%) 1; } -.cardpercentagebar24 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 24%, #0aad0a 24%) 1; } -.cardpercentagebar25 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 25%, #0aad0a 25%) 1; } -.cardpercentagebar26 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 26%, #0aad0a 26%) 1; } -.cardpercentagebar27 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 27%, #0aad0a 27%) 1; } -.cardpercentagebar28 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 28%, #0aad0a 28%) 1; } -.cardpercentagebar29 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 29%, #0aad0a 29%) 1; } -.cardpercentagebar30 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 30%, #0aad0a 30%) 1; } -.cardpercentagebar31 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 31%, #0aad0a 31%) 1; } -.cardpercentagebar32 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 32%, #0aad0a 32%) 1; } -.cardpercentagebar33 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 33%, #0aad0a 33%) 1; } -.cardpercentagebar34 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 34%, #0aad0a 34%) 1; } -.cardpercentagebar35 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 35%, #0aad0a 35%) 1; } -.cardpercentagebar36 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 36%, #0aad0a 36%) 1; } -.cardpercentagebar37 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 37%, #0aad0a 37%) 1; } -.cardpercentagebar38 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 38%, #0aad0a 38%) 1; } -.cardpercentagebar39 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 39%, #0aad0a 39%) 1; } -.cardpercentagebar40 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 40%, #0aad0a 40%) 1; } -.cardpercentagebar41 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 41%, #0aad0a 41%) 1; } -.cardpercentagebar42 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 42%, #0aad0a 42%) 1; } -.cardpercentagebar43 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 43%, #0aad0a 43%) 1; } -.cardpercentagebar44 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 44%, #0aad0a 44%) 1; } -.cardpercentagebar45 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 45%, #0aad0a 45%) 1; } -.cardpercentagebar46 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 46%, #0aad0a 46%) 1; } -.cardpercentagebar47 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 47%, #0aad0a 47%) 1; } -.cardpercentagebar48 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 48%, #0aad0a 48%) 1; } -.cardpercentagebar49 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 49%, #0aad0a 49%) 1; } -.cardpercentagebar50 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 50%, #0aad0a 50%) 1; } -.cardpercentagebar51 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 51%, #0aad0a 51%) 1; } -.cardpercentagebar52 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 52%, #0aad0a 52%) 1; } -.cardpercentagebar53 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 53%, #0aad0a 53%) 1; } -.cardpercentagebar54 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 54%, #0aad0a 54%) 1; } -.cardpercentagebar55 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 55%, #0aad0a 55%) 1; } -.cardpercentagebar56 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 56%, #0aad0a 56%) 1; } -.cardpercentagebar57 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 57%, #0aad0a 57%) 1; } -.cardpercentagebar58 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 58%, #0aad0a 58%) 1; } -.cardpercentagebar59 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 59%, #0aad0a 59%) 1; } -.cardpercentagebar60 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 60%, #0aad0a 60%) 1; } -.cardpercentagebar61 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 61%, #0aad0a 61%) 1; } -.cardpercentagebar62 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 62%, #0aad0a 62%) 1; } -.cardpercentagebar63 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 63%, #0aad0a 63%) 1; } -.cardpercentagebar64 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 64%, #0aad0a 64%) 1; } -.cardpercentagebar65 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 65%, #0aad0a 65%) 1; } -.cardpercentagebar66 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 66%, #0aad0a 66%) 1; } -.cardpercentagebar67 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 67%, #0aad0a 67%) 1; } -.cardpercentagebar68 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 68%, #0aad0a 68%) 1; } -.cardpercentagebar69 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 69%, #0aad0a 69%) 1; } -.cardpercentagebar70 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 70%, #0aad0a 70%) 1; } -.cardpercentagebar71 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 71%, #0aad0a 71%) 1; } -.cardpercentagebar72 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 72%, #0aad0a 72%) 1; } -.cardpercentagebar73 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 73%, #0aad0a 73%) 1; } -.cardpercentagebar74 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 74%, #0aad0a 74%) 1; } -.cardpercentagebar75 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 75%, #0aad0a 75%) 1; } -.cardpercentagebar76 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 76%, #0aad0a 76%) 1; } -.cardpercentagebar77 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 77%, #0aad0a 77%) 1; } -.cardpercentagebar78 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 78%, #0aad0a 78%) 1; } -.cardpercentagebar79 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 79%, #0aad0a 79%) 1; } -.cardpercentagebar80 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 80%, #0aad0a 80%) 1; } -.cardpercentagebar81 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 81%, #0aad0a 81%) 1; } -.cardpercentagebar82 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 82%, #0aad0a 82%) 1; } -.cardpercentagebar83 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 83%, #0aad0a 83%) 1; } -.cardpercentagebar84 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 84%, #0aad0a 84%) 1; } -.cardpercentagebar85 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 85%, #0aad0a 85%) 1; } -.cardpercentagebar86 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 86%, #0aad0a 86%) 1; } -.cardpercentagebar87 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 87%, #0aad0a 87%) 1; } -.cardpercentagebar88 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 88%, #0aad0a 88%) 1; } -.cardpercentagebar89 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 89%, #0aad0a 89%) 1; } -.cardpercentagebar90 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 90%, #0aad0a 90%) 1; } -.cardpercentagebar91 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 91%, #0aad0a 91%) 1; } -.cardpercentagebar92 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 92%, #0aad0a 92%) 1; } -.cardpercentagebar93 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 93%, #0aad0a 93%) 1; } -.cardpercentagebar94 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 94%, #0aad0a 94%) 1; } -.cardpercentagebar95 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 95%, #0aad0a 95%) 1; } -.cardpercentagebar96 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 96%, #0aad0a 96%) 1; } -.cardpercentagebar97 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 97%, #0aad0a 97%) 1; } -.cardpercentagebar98 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 98%, #0aad0a 98%) 1; } -.cardpercentagebar99 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 99%, #0aad0a 99%) 1; } -.cardpercentagebar100 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 100%, #0aad0a 100%) 1; } - -.covered0 { width: 0px; } -.covered1 { width: 1px; } -.covered2 { width: 2px; } -.covered3 { width: 3px; } -.covered4 { width: 4px; } -.covered5 { width: 5px; } -.covered6 { width: 6px; } -.covered7 { width: 7px; } -.covered8 { width: 8px; } -.covered9 { width: 9px; } -.covered10 { width: 10px; } -.covered11 { width: 11px; } -.covered12 { width: 12px; } -.covered13 { width: 13px; } -.covered14 { width: 14px; } -.covered15 { width: 15px; } -.covered16 { width: 16px; } -.covered17 { width: 17px; } -.covered18 { width: 18px; } -.covered19 { width: 19px; } -.covered20 { width: 20px; } -.covered21 { width: 21px; } -.covered22 { width: 22px; } -.covered23 { width: 23px; } -.covered24 { width: 24px; } -.covered25 { width: 25px; } -.covered26 { width: 26px; } -.covered27 { width: 27px; } -.covered28 { width: 28px; } -.covered29 { width: 29px; } -.covered30 { width: 30px; } -.covered31 { width: 31px; } -.covered32 { width: 32px; } -.covered33 { width: 33px; } -.covered34 { width: 34px; } -.covered35 { width: 35px; } -.covered36 { width: 36px; } -.covered37 { width: 37px; } -.covered38 { width: 38px; } -.covered39 { width: 39px; } -.covered40 { width: 40px; } -.covered41 { width: 41px; } -.covered42 { width: 42px; } -.covered43 { width: 43px; } -.covered44 { width: 44px; } -.covered45 { width: 45px; } -.covered46 { width: 46px; } -.covered47 { width: 47px; } -.covered48 { width: 48px; } -.covered49 { width: 49px; } -.covered50 { width: 50px; } -.covered51 { width: 51px; } -.covered52 { width: 52px; } -.covered53 { width: 53px; } -.covered54 { width: 54px; } -.covered55 { width: 55px; } -.covered56 { width: 56px; } -.covered57 { width: 57px; } -.covered58 { width: 58px; } -.covered59 { width: 59px; } -.covered60 { width: 60px; } -.covered61 { width: 61px; } -.covered62 { width: 62px; } -.covered63 { width: 63px; } -.covered64 { width: 64px; } -.covered65 { width: 65px; } -.covered66 { width: 66px; } -.covered67 { width: 67px; } -.covered68 { width: 68px; } -.covered69 { width: 69px; } -.covered70 { width: 70px; } -.covered71 { width: 71px; } -.covered72 { width: 72px; } -.covered73 { width: 73px; } -.covered74 { width: 74px; } -.covered75 { width: 75px; } -.covered76 { width: 76px; } -.covered77 { width: 77px; } -.covered78 { width: 78px; } -.covered79 { width: 79px; } -.covered80 { width: 80px; } -.covered81 { width: 81px; } -.covered82 { width: 82px; } -.covered83 { width: 83px; } -.covered84 { width: 84px; } -.covered85 { width: 85px; } -.covered86 { width: 86px; } -.covered87 { width: 87px; } -.covered88 { width: 88px; } -.covered89 { width: 89px; } -.covered90 { width: 90px; } -.covered91 { width: 91px; } -.covered92 { width: 92px; } -.covered93 { width: 93px; } -.covered94 { width: 94px; } -.covered95 { width: 95px; } -.covered96 { width: 96px; } -.covered97 { width: 97px; } -.covered98 { width: 98px; } -.covered99 { width: 99px; } -.covered100 { width: 100px; } - - @media print { - html, body { background-color: #fff; } - .container { max-width: 100%; width: 100%; padding: 0; } - .overview colgroup col:first-child { width: 300px; } -} - -.icon-up-dir_active { - background-image: url(icon_up-dir.svg), url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB3aWR0aD0iMTc5MiIgaGVpZ2h0PSIxNzkyIiB2aWV3Qm94PSIwIDAgMTc5MiAxNzkyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGZpbGw9IiNjMDAiIGQ9Ik0xNDA4IDEyMTZxMCAyNi0xOSA0NXQtNDUgMTloLTg5NnEtMjYgMC00NS0xOXQtMTktNDUgMTktNDVsNDQ4LTQ0OHExOS0xOSA0NS0xOXQ0NSAxOWw0NDggNDQ4cTE5IDE5IDE5IDQ1eiIvPjwvc3ZnPg==); - background-repeat: no-repeat; - background-size: contain; - padding-left: 15px; - height: 0.9em; - display: inline-block; - position: relative; - top: 3px; -} -.icon-down-dir_active { - background-image: url(icon_up-dir_active.svg), url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB3aWR0aD0iMTc5MiIgaGVpZ2h0PSIxNzkyIiB2aWV3Qm94PSIwIDAgMTc5MiAxNzkyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGZpbGw9IiNjMDAiIGQ9Ik0xNDA4IDcwNHEwIDI2LTE5IDQ1bC00NDggNDQ4cS0xOSAxOS00NSAxOXQtNDUtMTlsLTQ0OC00NDhxLTE5LTE5LTE5LTQ1dDE5LTQ1IDQ1LTE5aDg5NnEyNiAwIDQ1IDE5dDE5IDQ1eiIvPjwvc3ZnPg==); - background-repeat: no-repeat; - background-size: contain; - padding-left: 15px; - height: 0.9em; - display: inline-block; - position: relative; - top: 3px; -} -.icon-down-dir { - background-image: url(icon_down-dir_active.svg), url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB3aWR0aD0iMTc5MiIgaGVpZ2h0PSIxNzkyIiB2aWV3Qm94PSIwIDAgMTc5MiAxNzkyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGQ9Ik0xNDA4IDcwNHEwIDI2LTE5IDQ1bC00NDggNDQ4cS0xOSAxOS00NSAxOXQtNDUtMTlsLTQ0OC00NDhxLTE5LTE5LTE5LTQ1dDE5LTQ1IDQ1LTE5aDg5NnEyNiAwIDQ1IDE5dDE5IDQ1eiIvPjwvc3ZnPg==); - background-repeat: no-repeat; - background-size: contain; - padding-left: 15px; - height: 0.9em; - display: inline-block; - position: relative; - top: 3px; -} -.icon-info-circled { - background-image: url(icon_info-circled.svg), url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB3aWR0aD0iMTc5MiIgaGVpZ2h0PSIxNzkyIiB2aWV3Qm94PSIwIDAgMTc5MiAxNzkyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxjaXJjbGUgY3g9Ijg5NiIgY3k9Ijg5NiIgcj0iNzUwIiBmaWxsPSIjZmZmIiAvPjxwYXRoIGZpbGw9IiMyOEE1RkYiIGQ9Ik0xMTUyIDEzNzZ2LTE2MHEwLTE0LTktMjN0LTIzLTloLTk2di01MTJxMC0xNC05LTIzdC0yMy05aC0zMjBxLTE0IDAtMjMgOXQtOSAyM3YxNjBxMCAxNCA5IDIzdDIzIDloOTZ2MzIwaC05NnEtMTQgMC0yMyA5dC05IDIzdjE2MHEwIDE0IDkgMjN0MjMgOWg0NDhxMTQgMCAyMy05dDktMjN6bS0xMjgtODk2di0xNjBxMC0xNC05LTIzdC0yMy05aC0xOTJxLTE0IDAtMjMgOXQtOSAyM3YxNjBxMCAxNCA5IDIzdDIzIDloMTkycTE0IDAgMjMtOXQ5LTIzem02NDAgNDE2cTAgMjA5LTEwMyAzODUuNXQtMjc5LjUgMjc5LjUtMzg1LjUgMTAzLTM4NS41LTEwMy0yNzkuNS0yNzkuNS0xMDMtMzg1LjUgMTAzLTM4NS41IDI3OS41LTI3OS41IDM4NS41LTEwMyAzODUuNSAxMDMgMjc5LjUgMjc5LjUgMTAzIDM4NS41eiIvPjwvc3ZnPg==); - background-repeat: no-repeat; - background-size: contain; - padding-left: 15px; - height: 0.9em; - display: inline-block; -} -.icon-plus { - background-image: url(icon_plus.svg), url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB3aWR0aD0iMTc5MiIgaGVpZ2h0PSIxNzkyIiB2aWV3Qm94PSIwIDAgMTc5MiAxNzkyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGQ9Ik0xNjAwIDczNnYxOTJxMCA0MC0yOCA2OHQtNjggMjhoLTQxNnY0MTZxMCA0MC0yOCA2OHQtNjggMjhoLTE5MnEtNDAgMC02OC0yOHQtMjgtNjh2LTQxNmgtNDE2cS00MCAwLTY4LTI4dC0yOC02OHYtMTkycTAtNDAgMjgtNjh0NjgtMjhoNDE2di00MTZxMC00MCAyOC02OHQ2OC0yOGgxOTJxNDAgMCA2OCAyOHQyOCA2OHY0MTZoNDE2cTQwIDAgNjggMjh0MjggNjh6Ii8+PC9zdmc+); - background-repeat: no-repeat; - background-size: contain; - padding-left: 15px; - height: 0.9em; - display: inline-block; - position: relative; - top: 3px; -} -.icon-minus { - background-image: url(icon_minus.svg), url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB3aWR0aD0iMTc5MiIgaGVpZ2h0PSIxNzkyIiB2aWV3Qm94PSIwIDAgMTc5MiAxNzkyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGZpbGw9IiNjMDAiIGQ9Ik0xNjAwIDczNnYxOTJxMCA0MC0yOCA2OHQtNjggMjhoLTEyMTZxLTQwIDAtNjgtMjh0LTI4LTY4di0xOTJxMC00MCAyOC02OHQ2OC0yOGgxMjE2cTQwIDAgNjggMjh0MjggNjh6Ii8+PC9zdmc+); - background-repeat: no-repeat; - background-size: contain; - padding-left: 15px; - height: 0.9em; - display: inline-block; - position: relative; - top: 3px; -} -.icon-wrench { - background-image: url(icon_wrench.svg), url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB3aWR0aD0iMTc5MiIgaGVpZ2h0PSIxNzkyIiB2aWV3Qm94PSIwIDAgMTc5MiAxNzkyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGQ9Ik00NDggMTQ3MnEwLTI2LTE5LTQ1dC00NS0xOS00NSAxOS0xOSA0NSAxOSA0NSA0NSAxOSA0NS0xOSAxOS00NXptNjQ0LTQyMGwtNjgyIDY4MnEtMzcgMzctOTAgMzctNTIgMC05MS0zN2wtMTA2LTEwOHEtMzgtMzYtMzgtOTAgMC01MyAzOC05MWw2ODEtNjgxcTM5IDk4IDExNC41IDE3My41dDE3My41IDExNC41em02MzQtNDM1cTAgMzktMjMgMTA2LTQ3IDEzNC0xNjQuNSAyMTcuNXQtMjU4LjUgODMuNXEtMTg1IDAtMzE2LjUtMTMxLjV0LTEzMS41LTMxNi41IDEzMS41LTMxNi41IDMxNi41LTEzMS41cTU4IDAgMTIxLjUgMTYuNXQxMDcuNSA0Ni41cTE2IDExIDE2IDI4dC0xNiAyOGwtMjkzIDE2OXYyMjRsMTkzIDEwN3E1LTMgNzktNDguNXQxMzUuNS04MSA3MC41LTM1LjVxMTUgMCAyMy41IDEwdDguNSAyNXoiLz48L3N2Zz4=); - background-repeat: no-repeat; - background-size: contain; - padding-left: 20px; - height: 0.9em; - display: inline-block; -} -.icon-fork { - background-image: url(icon_fork.svg), url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB3aWR0aD0iMTc5MiIgaGVpZ2h0PSIxNzkyIiB2aWV3Qm94PSIwIDAgMTc5MiAxNzkyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxyZWN0IHdpZHRoPSIxNzkyIiBoZWlnaHQ9IjE3OTIiIHN0eWxlPSJmaWxsOiNmZmYiIC8+PHBhdGggZD0iTTY3MiAxNDcycTAtNDAtMjgtNjh0LTY4LTI4LTY4IDI4LTI4IDY4IDI4IDY4IDY4IDI4IDY4LTI4IDI4LTY4em0wLTExNTJxMC00MC0yOC02OHQtNjgtMjgtNjggMjgtMjggNjggMjggNjggNjggMjggNjgtMjggMjgtNjh6bTY0MCAxMjhxMC00MC0yOC02OHQtNjgtMjgtNjggMjgtMjggNjggMjggNjggNjggMjggNjgtMjggMjgtNjh6bTk2IDBxMCA1Mi0yNiA5Ni41dC03MCA2OS41cS0yIDI4Ny0yMjYgNDE0LTY3IDM4LTIwMyA4MS0xMjggNDAtMTY5LjUgNzF0LTQxLjUgMTAwdjI2cTQ0IDI1IDcwIDY5LjV0MjYgOTYuNXEwIDgwLTU2IDEzNnQtMTM2IDU2LTEzNi01Ni01Ni0xMzZxMC01MiAyNi05Ni41dDcwLTY5LjV2LTgyMHEtNDQtMjUtNzAtNjkuNXQtMjYtOTYuNXEwLTgwIDU2LTEzNnQxMzYtNTYgMTM2IDU2IDU2IDEzNnEwIDUyLTI2IDk2LjV0LTcwIDY5LjV2NDk3cTU0LTI2IDE1NC01NyA1NS0xNyA4Ny41LTI5LjV0NzAuNS0zMSA1OS0zOS41IDQwLjUtNTEgMjgtNjkuNSA4LjUtOTEuNXEtNDQtMjUtNzAtNjkuNXQtMjYtOTYuNXEwLTgwIDU2LTEzNnQxMzYtNTYgMTM2IDU2IDU2IDEzNnoiLz48L3N2Zz4=); - background-repeat: no-repeat; - background-size: contain; - padding-left: 20px; - height: 0.9em; - display: inline-block; -} -.icon-cube { - background-image: url(icon_cube.svg), url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB3aWR0aD0iMTc5MiIgaGVpZ2h0PSIxNzkyIiB2aWV3Qm94PSIwIDAgMTc5MiAxNzkyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGQ9Ik04OTYgMTYyOWw2NDAtMzQ5di02MzZsLTY0MCAyMzN2NzUyem0tNjQtODY1bDY5OC0yNTQtNjk4LTI1NC02OTggMjU0em04MzItMjUydjc2OHEwIDM1LTE4IDY1dC00OSA0N2wtNzA0IDM4NHEtMjggMTYtNjEgMTZ0LTYxLTE2bC03MDQtMzg0cS0zMS0xNy00OS00N3QtMTgtNjV2LTc2OHEwLTQwIDIzLTczdDYxLTQ3bDcwNC0yNTZxMjItOCA0NC04dDQ0IDhsNzA0IDI1NnEzOCAxNCA2MSA0N3QyMyA3M3oiLz48L3N2Zz4=); - background-repeat: no-repeat; - background-size: contain; - padding-left: 20px; - height: 0.9em; - display: inline-block; -} -.icon-search-plus { - background-image: url(icon_search-plus.svg), url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB3aWR0aD0iMTc5MiIgaGVpZ2h0PSIxNzkyIiB2aWV3Qm94PSIwIDAgMTc5MiAxNzkyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGZpbGw9IiM2ZjZmNmYiIGQ9Ik0xMDg4IDgwMHY2NHEwIDEzLTkuNSAyMi41dC0yMi41IDkuNWgtMjI0djIyNHEwIDEzLTkuNSAyMi41dC0yMi41IDkuNWgtNjRxLTEzIDAtMjIuNS05LjV0LTkuNS0yMi41di0yMjRoLTIyNHEtMTMgMC0yMi41LTkuNXQtOS41LTIyLjV2LTY0cTAtMTMgOS41LTIyLjV0MjIuNS05LjVoMjI0di0yMjRxMC0xMyA5LjUtMjIuNXQyMi41LTkuNWg2NHExMyAwIDIyLjUgOS41dDkuNSAyMi41djIyNGgyMjRxMTMgMCAyMi41IDkuNXQ5LjUgMjIuNXptMTI4IDMycTAtMTg1LTEzMS41LTMxNi41dC0zMTYuNS0xMzEuNS0zMTYuNSAxMzEuNS0xMzEuNSAzMTYuNSAxMzEuNSAzMTYuNSAzMTYuNSAxMzEuNSAzMTYuNS0xMzEuNSAxMzEuNS0zMTYuNXptNTEyIDgzMnEwIDUzLTM3LjUgOTAuNXQtOTAuNSAzNy41cS01NCAwLTkwLTM4bC0zNDMtMzQycS0xNzkgMTI0LTM5OSAxMjQtMTQzIDAtMjczLjUtNTUuNXQtMjI1LTE1MC0xNTAtMjI1LTU1LjUtMjczLjUgNTUuNS0yNzMuNSAxNTAtMjI1IDIyNS0xNTAgMjczLjUtNTUuNSAyNzMuNSA1NS41IDIyNSAxNTAgMTUwIDIyNSA1NS41IDI3My41cTAgMjIwLTEyNCAzOTlsMzQzIDM0M3EzNyAzNyAzNyA5MHoiLz48L3N2Zz4=); - background-repeat: no-repeat; - background-size: contain; - padding-left: 20px; - height: 0.9em; - display: inline-block; -} -.icon-search-minus { - background-image: url(icon_search-minus.svg), url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB3aWR0aD0iMTc5MiIgaGVpZ2h0PSIxNzkyIiB2aWV3Qm94PSIwIDAgMTc5MiAxNzkyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGZpbGw9IiM2ZjZmNmYiIGQ9Ik0xMDg4IDgwMHY2NHEwIDEzLTkuNSAyMi41dC0yMi41IDkuNWgtNTc2cS0xMyAwLTIyLjUtOS41dC05LjUtMjIuNXYtNjRxMC0xMyA5LjUtMjIuNXQyMi41LTkuNWg1NzZxMTMgMCAyMi41IDkuNXQ5LjUgMjIuNXptMTI4IDMycTAtMTg1LTEzMS41LTMxNi41dC0zMTYuNS0xMzEuNS0zMTYuNSAxMzEuNS0xMzEuNSAzMTYuNSAxMzEuNSAzMTYuNSAzMTYuNSAxMzEuNSAzMTYuNS0xMzEuNSAxMzEuNS0zMTYuNXptNTEyIDgzMnEwIDUzLTM3LjUgOTAuNXQtOTAuNSAzNy41cS01NCAwLTkwLTM4bC0zNDMtMzQycS0xNzkgMTI0LTM5OSAxMjQtMTQzIDAtMjczLjUtNTUuNXQtMjI1LTE1MC0xNTAtMjI1LTU1LjUtMjczLjUgNTUuNS0yNzMuNSAxNTAtMjI1IDIyNS0xNTAgMjczLjUtNTUuNSAyNzMuNSA1NS41IDIyNSAxNTAgMTUwIDIyNSA1NS41IDI3My41cTAgMjIwLTEyNCAzOTlsMzQzIDM0M3EzNyAzNyAzNyA5MHoiLz48L3N2Zz4=); - background-repeat: no-repeat; - background-size: contain; - padding-left: 20px; - height: 0.9em; - display: inline-block; -} -.icon-star { - background-image: url(icon_star.svg), url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB3aWR0aD0iMTc5MiIgaGVpZ2h0PSIxNzkyIiB2aWV3Qm94PSIwIDAgMTc5MiAxNzkyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGQ9Ik0xNzI4IDY0N3EwIDIyLTI2IDQ4bC0zNjMgMzU0IDg2IDUwMHExIDcgMSAyMCAwIDIxLTEwLjUgMzUuNXQtMzAuNSAxNC41cS0xOSAwLTQwLTEybC00NDktMjM2LTQ0OSAyMzZxLTIyIDEyLTQwIDEyLTIxIDAtMzEuNS0xNC41dC0xMC41LTM1LjVxMC02IDItMjBsODYtNTAwLTM2NC0zNTRxLTI1LTI3LTI1LTQ4IDAtMzcgNTYtNDZsNTAyLTczIDIyNS00NTVxMTktNDEgNDktNDF0NDkgNDFsMjI1IDQ1NSA1MDIgNzNxNTYgOSA1NiA0NnoiIGZpbGw9IiMwMDAiLz48L3N2Zz4=); - background-repeat: no-repeat; - background-size: contain; - padding-left: 20px; - height: 0.9em; - display: inline-block; -} -.icon-sponsor { - background-image: url(icon_sponsor.svg), url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB3aWR0aD0iMTc5MiIgaGVpZ2h0PSIxNzkyIiB2aWV3Qm94PSIwIDAgMTc5MiAxNzkyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGQ9Ik04OTYgMTY2NHEtMjYgMC00NC0xOGwtNjI0LTYwMnEtMTAtOC0yNy41LTI2dC01NS41LTY1LjUtNjgtOTcuNS01My41LTEyMS0yMy41LTEzOHEwLTIyMCAxMjctMzQ0dDM1MS0xMjRxNjIgMCAxMjYuNSAyMS41dDEyMCA1OCA5NS41IDY4LjUgNzYgNjhxMzYtMzYgNzYtNjh0OTUuNS02OC41IDEyMC01OCAxMjYuNS0yMS41cTIyNCAwIDM1MSAxMjR0MTI3IDM0NHEwIDIyMS0yMjkgNDUwbC02MjMgNjAwcS0xOCAxOC00NCAxOHoiIGZpbGw9IiNlYTRhYWEiLz48L3N2Zz4=); - background-repeat: no-repeat; - background-size: contain; - padding-left: 20px; - height: 0.9em; - display: inline-block; -} - - - -@media screen { - html { - background-color: #333; - color: #fff; - } - - body { - color: #fff; - } - - h1 { - background-color: #555453; - color: #fff; - } - - .container { - background-color: #333; - box-shadow: 0 0 60px #0c0c0c; - } - - .containerrightfixed { - background-color: #3D3C3C; - border-left: 1px solid #515050; - } - - .containerrightfixed h1 { - background-color: #484747; - } - - .card-group .card { - background-color: #333; - background: radial-gradient(circle, #444 0%, #333 100%); - border: 1px solid #545454; - color: #fff; - } - - .card-group .card table tr { - border-bottom: 1px solid #545454; - } - - .card-group .card table tr:hover { - background-color: #2E2D2C; - } - - .overview tr:hover { - background-color: #2E2D2C; - } - - .overview th { - background-color: #444; - border: 1px solid #3B3A39; - } - - .overview tr.namespace th { - background-color: #444; - } - - .overview thead th { - background-color: #444; - } - - .overview th a { - color: #fff; - color: rgba(255, 255, 255, 0.95); - } - - .overview th a:hover { - color: #0078d4; - } - - .overview td { - border: 1px solid #3B3A39; - } - - .overview .coverage td { - border: none; - } - - .overview tr.header th { - background-color: #444; - } - - .overview tr.header th:nth-child(2n+1) { - background-color: #3a3a3a; - } - - .overview tr.header th:first-child { - border-left: 1px solid #333; - border-top: 1px solid #333; - background-color: #333; - } - - .stripped tr:nth-child(2n+1) { - background-color: #3c3c3c; - } - - input, select { - background-color: #333; - color: #fff; - border: 1px solid #A19F9D; - } - - a { - color: #fff; - color: rgba(255, 255, 255, 0.95); - } - - a:hover { - color: #0078d4; - } - - h1 a.back { - background-color: #4a4846; - } - - h1 a.button { - color: #fff; - background-color: #565656; - border-color: #c1c1c1; - } - - h1 a.button:hover { - background-color: #8d8d8d; - } - - .gray { - background-color: #484747; - } - - .lightgray { - color: #ebebeb; - } - - .lightgraybg { - background-color: #474747; - } - - .lightgreen { - background-color: #406540; - } - - .lightorange { - background-color: #ab7f36; - } - - .lightred { - background-color: #954848; - } - - .ct-label { - color: #fff !important; - } - - .ct-grid { - stroke: #fff !important; - } - - .ct-chart .ct-series.ct-series-a .ct-line, .ct-chart .ct-series.ct-series-a .ct-point { - stroke: #0078D4 !important; - } - - .ct-chart .ct-series.ct-series-b .ct-line, .ct-chart .ct-series.ct-series-b .ct-point { - stroke: #6dc428 !important; - } - - .ct-chart .ct-series.ct-series-c .ct-line, .ct-chart .ct-series.ct-series-c .ct-point { - stroke: #e58f1d !important; - } - - .linecoverage { - background-color: #0078D4; - } - - .branchcoverage { - background-color: #6dc428; - } - - .codeelementcoverage { - background-color: #e58f1d; - } - - .tinylinecoveragechart, .tinybranchcoveragechart, .tinymethodcoveragechart { - background-color: #333; - } - - .tinybranchcoveragechart .ct-series.ct-series-a .ct-line { - stroke: #6dc428 !important; - } - - .tinymethodcoveragechart .ct-series.ct-series-a .ct-line { - stroke: #e58f1d !important; - } - - .icon-down-dir { - background-image: url(icon_down-dir_active_dark.svg), url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48c3ZnIHdpZHRoPSIxNzkyIiBoZWlnaHQ9IjE3OTIiIHZpZXdCb3g9IjAgMCAxNzkyIDE3OTIiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZmlsbD0iI0JGQkZDMCIgZD0iTTE0MDggNzA0cTAgMjYtMTkgNDVsLTQ0OCA0NDhxLTE5IDE5LTQ1IDE5dC00NS0xOWwtNDQ4LTQ0OHEtMTktMTktMTktNDV0MTktNDUgNDUtMTloODk2cTI2IDAgNDUgMTl0MTkgNDV6Ii8+PC9zdmc+); - } - - .icon-info-circled { - background-image: url(icon_info-circled_dark.svg), url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB3aWR0aD0iMTc5MiIgaGVpZ2h0PSIxNzkyIiB2aWV3Qm94PSIwIDAgMTc5MiAxNzkyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxjaXJjbGUgY3g9Ijg5NiIgY3k9Ijg5NiIgcj0iNzUwIiBmaWxsPSIjZmZmIiAvPjxwYXRoIGZpbGw9IiMyOEE1RkYiIGQ9Ik0xMTUyIDEzNzZ2LTE2MHEwLTE0LTktMjN0LTIzLTloLTk2di01MTJxMC0xNC05LTIzdC0yMy05aC0zMjBxLTE0IDAtMjMgOXQtOSAyM3YxNjBxMCAxNCA5IDIzdDIzIDloOTZ2MzIwaC05NnEtMTQgMC0yMyA5dC05IDIzdjE2MHEwIDE0IDkgMjN0MjMgOWg0NDhxMTQgMCAyMy05dDktMjN6bS0xMjgtODk2di0xNjBxMC0xNC05LTIzdC0yMy05aC0xOTJxLTE0IDAtMjMgOXQtOSAyM3YxNjBxMCAxNCA5IDIzdDIzIDloMTkycTE0IDAgMjMtOXQ5LTIzem02NDAgNDE2cTAgMjA5LTEwMyAzODUuNXQtMjc5LjUgMjc5LjUtMzg1LjUgMTAzLTM4NS41LTEwMy0yNzkuNS0yNzkuNS0xMDMtMzg1LjUgMTAzLTM4NS41IDI3OS41LTI3OS41IDM4NS41LTEwMyAzODUuNSAxMDMgMjc5LjUgMjc5LjUgMTAzIDM4NS41eiIvPjwvc3ZnPg==); - } - - .icon-plus { - background-image: url(icon_plus_dark.svg), url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48c3ZnIHdpZHRoPSIxNzkyIiBoZWlnaHQ9IjE3OTIiIHZpZXdCb3g9IjAgMCAxNzkyIDE3OTIiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZmlsbD0iI0JGQkZDMCIgZD0iTTE2MDAgNzM2djE5MnEwIDQwLTI4IDY4dC02OCAyOGgtNDE2djQxNnEwIDQwLTI4IDY4dC02OCAyOGgtMTkycS00MCAwLTY4LTI4dC0yOC02OHYtNDE2aC00MTZxLTQwIDAtNjgtMjh0LTI4LTY4di0xOTJxMC00MCAyOC02OHQ2OC0yOGg0MTZ2LTQxNnEwLTQwIDI4LTY4dDY4LTI4aDE5MnE0MCAwIDY4IDI4dDI4IDY4djQxNmg0MTZxNDAgMCA2OCAyOHQyOCA2OHoiLz48L3N2Zz4=); - } - - .icon-minus { - background-image: url(icon_minus_dark.svg), url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48c3ZnIHdpZHRoPSIxNzkyIiBoZWlnaHQ9IjE3OTIiIHZpZXdCb3g9IjAgMCAxNzkyIDE3OTIiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZmlsbD0iI0JGQkZDMCIgZD0iTTE2MDAgNzM2djE5MnEwIDQwLTI4IDY4dC02OCAyOGgtMTIxNnEtNDAgMC02OC0yOHQtMjgtNjh2LTE5MnEwLTQwIDI4LTY4dDY4LTI4aDEyMTZxNDAgMCA2OCAyOHQyOCA2OHoiLz48L3N2Zz4=); - } - - .icon-wrench { - background-image: url(icon_wrench_dark.svg), url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48c3ZnIHdpZHRoPSIxNzkyIiBoZWlnaHQ9IjE3OTIiIHZpZXdCb3g9IjAgMCAxNzkyIDE3OTIiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZmlsbD0iI0JEQkRCRiIgZD0iTTQ0OCAxNDcycTAtMjYtMTktNDV0LTQ1LTE5LTQ1IDE5LTE5IDQ1IDE5IDQ1IDQ1IDE5IDQ1LTE5IDE5LTQ1em02NDQtNDIwbC02ODIgNjgycS0zNyAzNy05MCAzNy01MiAwLTkxLTM3bC0xMDYtMTA4cS0zOC0zNi0zOC05MCAwLTUzIDM4LTkxbDY4MS02ODFxMzkgOTggMTE0LjUgMTczLjV0MTczLjUgMTE0LjV6bTYzNC00MzVxMCAzOS0yMyAxMDYtNDcgMTM0LTE2NC41IDIxNy41dC0yNTguNSA4My41cS0xODUgMC0zMTYuNS0xMzEuNXQtMTMxLjUtMzE2LjUgMTMxLjUtMzE2LjUgMzE2LjUtMTMxLjVxNTggMCAxMjEuNSAxNi41dDEwNy41IDQ2LjVxMTYgMTEgMTYgMjh0LTE2IDI4bC0yOTMgMTY5djIyNGwxOTMgMTA3cTUtMyA3OS00OC41dDEzNS41LTgxIDcwLjUtMzUuNXExNSAwIDIzLjUgMTB0OC41IDI1eiIvPjwvc3ZnPg==); - } - - .icon-fork { - background-image: url(icon_fork_dark.svg), url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48c3ZnIHdpZHRoPSIxNzkyIiBoZWlnaHQ9IjE3OTIiIHZpZXdCb3g9IjAgMCAxNzkyIDE3OTIiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZmlsbD0iI0JGQkZDMCIgZD0iTTY3MiAxNDcycTAtNDAtMjgtNjh0LTY4LTI4LTY4IDI4LTI4IDY4IDI4IDY4IDY4IDI4IDY4LTI4IDI4LTY4em0wLTExNTJxMC00MC0yOC02OHQtNjgtMjgtNjggMjgtMjggNjggMjggNjggNjggMjggNjgtMjggMjgtNjh6bTY0MCAxMjhxMC00MC0yOC02OHQtNjgtMjgtNjggMjgtMjggNjggMjggNjggNjggMjggNjgtMjggMjgtNjh6bTk2IDBxMCA1Mi0yNiA5Ni41dC03MCA2OS41cS0yIDI4Ny0yMjYgNDE0LTY3IDM4LTIwMyA4MS0xMjggNDAtMTY5LjUgNzF0LTQxLjUgMTAwdjI2cTQ0IDI1IDcwIDY5LjV0MjYgOTYuNXEwIDgwLTU2IDEzNnQtMTM2IDU2LTEzNi01Ni01Ni0xMzZxMC01MiAyNi05Ni41dDcwLTY5LjV2LTgyMHEtNDQtMjUtNzAtNjkuNXQtMjYtOTYuNXEwLTgwIDU2LTEzNnQxMzYtNTYgMTM2IDU2IDU2IDEzNnEwIDUyLTI2IDk2LjV0LTcwIDY5LjV2NDk3cTU0LTI2IDE1NC01NyA1NS0xNyA4Ny41LTI5LjV0NzAuNS0zMSA1OS0zOS41IDQwLjUtNTEgMjgtNjkuNSA4LjUtOTEuNXEtNDQtMjUtNzAtNjkuNXQtMjYtOTYuNXEwLTgwIDU2LTEzNnQxMzYtNTYgMTM2IDU2IDU2IDEzNnoiLz48L3N2Zz4=); - } - - .icon-cube { - background-image: url(icon_cube_dark.svg), url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48c3ZnIHdpZHRoPSIxNzkyIiBoZWlnaHQ9IjE3OTIiIHZpZXdCb3g9IjAgMCAxNzkyIDE3OTIiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZmlsbD0iI0JGQkZDMCIgZD0iTTg5NiAxNjI5bDY0MC0zNDl2LTYzNmwtNjQwIDIzM3Y3NTJ6bS02NC04NjVsNjk4LTI1NC02OTgtMjU0LTY5OCAyNTR6bTgzMi0yNTJ2NzY4cTAgMzUtMTggNjV0LTQ5IDQ3bC03MDQgMzg0cS0yOCAxNi02MSAxNnQtNjEtMTZsLTcwNC0zODRxLTMxLTE3LTQ5LTQ3dC0xOC02NXYtNzY4cTAtNDAgMjMtNzN0NjEtNDdsNzA0LTI1NnEyMi04IDQ0LTh0NDQgOGw3MDQgMjU2cTM4IDE0IDYxIDQ3dDIzIDczeiIvPjwvc3ZnPg==); - } - - .icon-search-plus { - background-image: url(icon_search-plus_dark.svg), url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48c3ZnIHdpZHRoPSIxNzkyIiBoZWlnaHQ9IjE3OTIiIHZpZXdCb3g9IjAgMCAxNzkyIDE3OTIiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZmlsbD0iI0JGQkZDMCIgZD0iTTEwODggODAwdjY0cTAgMTMtOS41IDIyLjV0LTIyLjUgOS41aC0yMjR2MjI0cTAgMTMtOS41IDIyLjV0LTIyLjUgOS41aC02NHEtMTMgMC0yMi41LTkuNXQtOS41LTIyLjV2LTIyNGgtMjI0cS0xMyAwLTIyLjUtOS41dC05LjUtMjIuNXYtNjRxMC0xMyA5LjUtMjIuNXQyMi41LTkuNWgyMjR2LTIyNHEwLTEzIDkuNS0yMi41dDIyLjUtOS41aDY0cTEzIDAgMjIuNSA5LjV0OS41IDIyLjV2MjI0aDIyNHExMyAwIDIyLjUgOS41dDkuNSAyMi41em0xMjggMzJxMC0xODUtMTMxLjUtMzE2LjV0LTMxNi41LTEzMS41LTMxNi41IDEzMS41LTEzMS41IDMxNi41IDEzMS41IDMxNi41IDMxNi41IDEzMS41IDMxNi41LTEzMS41IDEzMS41LTMxNi41em01MTIgODMycTAgNTMtMzcuNSA5MC41dC05MC41IDM3LjVxLTU0IDAtOTAtMzhsLTM0My0zNDJxLTE3OSAxMjQtMzk5IDEyNC0xNDMgMC0yNzMuNS01NS41dC0yMjUtMTUwLTE1MC0yMjUtNTUuNS0yNzMuNSA1NS41LTI3My41IDE1MC0yMjUgMjI1LTE1MCAyNzMuNS01NS41IDI3My41IDU1LjUgMjI1IDE1MCAxNTAgMjI1IDU1LjUgMjczLjVxMCAyMjAtMTI0IDM5OWwzNDMgMzQzcTM3IDM3IDM3IDkweiIvPjwvc3ZnPg==); - } - - .icon-search-minus { - background-image: url(icon_search-minus_dark.svg), url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48c3ZnIHdpZHRoPSIxNzkyIiBoZWlnaHQ9IjE3OTIiIHZpZXdCb3g9IjAgMCAxNzkyIDE3OTIiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZmlsbD0iI0JGQkZDMCIgZD0iTTEwODggODAwdjY0cTAgMTMtOS41IDIyLjV0LTIyLjUgOS41aC01NzZxLTEzIDAtMjIuNS05LjV0LTkuNS0yMi41di02NHEwLTEzIDkuNS0yMi41dDIyLjUtOS41aDU3NnExMyAwIDIyLjUgOS41dDkuNSAyMi41em0xMjggMzJxMC0xODUtMTMxLjUtMzE2LjV0LTMxNi41LTEzMS41LTMxNi41IDEzMS41LTEzMS41IDMxNi41IDEzMS41IDMxNi41IDMxNi41IDEzMS41IDMxNi41LTEzMS41IDEzMS41LTMxNi41em01MTIgODMycTAgNTMtMzcuNSA5MC41dC05MC41IDM3LjVxLTU0IDAtOTAtMzhsLTM0My0zNDJxLTE3OSAxMjQtMzk5IDEyNC0xNDMgMC0yNzMuNS01NS41dC0yMjUtMTUwLTE1MC0yMjUtNTUuNS0yNzMuNSA1NS41LTI3My41IDE1MC0yMjUgMjI1LTE1MCAyNzMuNS01NS41IDI3My41IDU1LjUgMjI1IDE1MCAxNTAgMjI1IDU1LjUgMjczLjVxMCAyMjAtMTI0IDM5OWwzNDMgMzQzcTM3IDM3IDM3IDkweiIvPjwvc3ZnPg==); - } - - .icon-star { - background-image: url(icon_star_dark.svg), url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB3aWR0aD0iMTc5MiIgaGVpZ2h0PSIxNzkyIiB2aWV3Qm94PSIwIDAgMTc5MiAxNzkyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGQ9Ik0xNzI4IDY0N3EwIDIyLTI2IDQ4bC0zNjMgMzU0IDg2IDUwMHExIDcgMSAyMCAwIDIxLTEwLjUgMzUuNXQtMzAuNSAxNC41cS0xOSAwLTQwLTEybC00NDktMjM2LTQ0OSAyMzZxLTIyIDEyLTQwIDEyLTIxIDAtMzEuNS0xNC41dC0xMC41LTM1LjVxMC02IDItMjBsODYtNTAwLTM2NC0zNTRxLTI1LTI3LTI1LTQ4IDAtMzcgNTYtNDZsNTAyLTczIDIyNS00NTVxMTktNDEgNDktNDF0NDkgNDFsMjI1IDQ1NSA1MDIgNzNxNTYgOSA1NiA0NnoiIGZpbGw9IiNmZmYiLz48L3N2Zz4=); - } -} - -.ct-double-octave:after,.ct-golden-section:after,.ct-major-eleventh:after,.ct-major-second:after,.ct-major-seventh:after,.ct-major-sixth:after,.ct-major-tenth:after,.ct-major-third:after,.ct-major-twelfth:after,.ct-minor-second:after,.ct-minor-seventh:after,.ct-minor-sixth:after,.ct-minor-third:after,.ct-octave:after,.ct-perfect-fifth:after,.ct-perfect-fourth:after,.ct-square:after{content:"";clear:both}.ct-label{fill:rgba(0,0,0,.4);color:rgba(0,0,0,.4);font-size:.75rem;line-height:1}.ct-chart-bar .ct-label,.ct-chart-line .ct-label{display:block;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex}.ct-chart-donut .ct-label,.ct-chart-pie .ct-label{dominant-baseline:central}.ct-label.ct-horizontal.ct-start{-webkit-box-align:flex-end;-webkit-align-items:flex-end;-ms-flex-align:flex-end;align-items:flex-end;-webkit-box-pack:flex-start;-webkit-justify-content:flex-start;-ms-flex-pack:flex-start;justify-content:flex-start;text-align:left;text-anchor:start}.ct-label.ct-horizontal.ct-end{-webkit-box-align:flex-start;-webkit-align-items:flex-start;-ms-flex-align:flex-start;align-items:flex-start;-webkit-box-pack:flex-start;-webkit-justify-content:flex-start;-ms-flex-pack:flex-start;justify-content:flex-start;text-align:left;text-anchor:start}.ct-label.ct-vertical.ct-start{-webkit-box-align:flex-end;-webkit-align-items:flex-end;-ms-flex-align:flex-end;align-items:flex-end;-webkit-box-pack:flex-end;-webkit-justify-content:flex-end;-ms-flex-pack:flex-end;justify-content:flex-end;text-align:right;text-anchor:end}.ct-label.ct-vertical.ct-end{-webkit-box-align:flex-end;-webkit-align-items:flex-end;-ms-flex-align:flex-end;align-items:flex-end;-webkit-box-pack:flex-start;-webkit-justify-content:flex-start;-ms-flex-pack:flex-start;justify-content:flex-start;text-align:left;text-anchor:start}.ct-chart-bar .ct-label.ct-horizontal.ct-start{-webkit-box-align:flex-end;-webkit-align-items:flex-end;-ms-flex-align:flex-end;align-items:flex-end;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;text-align:center;text-anchor:start}.ct-chart-bar .ct-label.ct-horizontal.ct-end{-webkit-box-align:flex-start;-webkit-align-items:flex-start;-ms-flex-align:flex-start;align-items:flex-start;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;text-align:center;text-anchor:start}.ct-chart-bar.ct-horizontal-bars .ct-label.ct-horizontal.ct-start{-webkit-box-align:flex-end;-webkit-align-items:flex-end;-ms-flex-align:flex-end;align-items:flex-end;-webkit-box-pack:flex-start;-webkit-justify-content:flex-start;-ms-flex-pack:flex-start;justify-content:flex-start;text-align:left;text-anchor:start}.ct-chart-bar.ct-horizontal-bars .ct-label.ct-horizontal.ct-end{-webkit-box-align:flex-start;-webkit-align-items:flex-start;-ms-flex-align:flex-start;align-items:flex-start;-webkit-box-pack:flex-start;-webkit-justify-content:flex-start;-ms-flex-pack:flex-start;justify-content:flex-start;text-align:left;text-anchor:start}.ct-chart-bar.ct-horizontal-bars .ct-label.ct-vertical.ct-start{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:flex-end;-webkit-justify-content:flex-end;-ms-flex-pack:flex-end;justify-content:flex-end;text-align:right;text-anchor:end}.ct-chart-bar.ct-horizontal-bars .ct-label.ct-vertical.ct-end{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:flex-start;-webkit-justify-content:flex-start;-ms-flex-pack:flex-start;justify-content:flex-start;text-align:left;text-anchor:end}.ct-grid{stroke:rgba(0,0,0,.2);stroke-width:1px;stroke-dasharray:2px}.ct-grid-background{fill:none}.ct-point{stroke-width:10px;stroke-linecap:round}.ct-line{fill:none;stroke-width:4px}.ct-area{stroke:none;fill-opacity:.1}.ct-bar{fill:none;stroke-width:10px}.ct-slice-donut{fill:none;stroke-width:60px}.ct-series-a .ct-bar,.ct-series-a .ct-line,.ct-series-a .ct-point,.ct-series-a .ct-slice-donut{stroke:#d70206}.ct-series-a .ct-area,.ct-series-a .ct-slice-donut-solid,.ct-series-a .ct-slice-pie{fill:#d70206}.ct-series-b .ct-bar,.ct-series-b .ct-line,.ct-series-b .ct-point,.ct-series-b .ct-slice-donut{stroke:#f05b4f}.ct-series-b .ct-area,.ct-series-b .ct-slice-donut-solid,.ct-series-b .ct-slice-pie{fill:#f05b4f}.ct-series-c .ct-bar,.ct-series-c .ct-line,.ct-series-c .ct-point,.ct-series-c .ct-slice-donut{stroke:#f4c63d}.ct-series-c .ct-area,.ct-series-c .ct-slice-donut-solid,.ct-series-c .ct-slice-pie{fill:#f4c63d}.ct-series-d .ct-bar,.ct-series-d .ct-line,.ct-series-d .ct-point,.ct-series-d .ct-slice-donut{stroke:#d17905}.ct-series-d .ct-area,.ct-series-d .ct-slice-donut-solid,.ct-series-d .ct-slice-pie{fill:#d17905}.ct-series-e .ct-bar,.ct-series-e .ct-line,.ct-series-e .ct-point,.ct-series-e .ct-slice-donut{stroke:#453d3f}.ct-series-e .ct-area,.ct-series-e .ct-slice-donut-solid,.ct-series-e .ct-slice-pie{fill:#453d3f}.ct-series-f .ct-bar,.ct-series-f .ct-line,.ct-series-f .ct-point,.ct-series-f .ct-slice-donut{stroke:#59922b}.ct-series-f .ct-area,.ct-series-f .ct-slice-donut-solid,.ct-series-f .ct-slice-pie{fill:#59922b}.ct-series-g .ct-bar,.ct-series-g .ct-line,.ct-series-g .ct-point,.ct-series-g .ct-slice-donut{stroke:#0544d3}.ct-series-g .ct-area,.ct-series-g .ct-slice-donut-solid,.ct-series-g .ct-slice-pie{fill:#0544d3}.ct-series-h .ct-bar,.ct-series-h .ct-line,.ct-series-h .ct-point,.ct-series-h .ct-slice-donut{stroke:#6b0392}.ct-series-h .ct-area,.ct-series-h .ct-slice-donut-solid,.ct-series-h .ct-slice-pie{fill:#6b0392}.ct-series-i .ct-bar,.ct-series-i .ct-line,.ct-series-i .ct-point,.ct-series-i .ct-slice-donut{stroke:#f05b4f}.ct-series-i .ct-area,.ct-series-i .ct-slice-donut-solid,.ct-series-i .ct-slice-pie{fill:#f05b4f}.ct-series-j .ct-bar,.ct-series-j .ct-line,.ct-series-j .ct-point,.ct-series-j .ct-slice-donut{stroke:#dda458}.ct-series-j .ct-area,.ct-series-j .ct-slice-donut-solid,.ct-series-j .ct-slice-pie{fill:#dda458}.ct-series-k .ct-bar,.ct-series-k .ct-line,.ct-series-k .ct-point,.ct-series-k .ct-slice-donut{stroke:#eacf7d}.ct-series-k .ct-area,.ct-series-k .ct-slice-donut-solid,.ct-series-k .ct-slice-pie{fill:#eacf7d}.ct-series-l .ct-bar,.ct-series-l .ct-line,.ct-series-l .ct-point,.ct-series-l .ct-slice-donut{stroke:#86797d}.ct-series-l .ct-area,.ct-series-l .ct-slice-donut-solid,.ct-series-l .ct-slice-pie{fill:#86797d}.ct-series-m .ct-bar,.ct-series-m .ct-line,.ct-series-m .ct-point,.ct-series-m .ct-slice-donut{stroke:#b2c326}.ct-series-m .ct-area,.ct-series-m .ct-slice-donut-solid,.ct-series-m .ct-slice-pie{fill:#b2c326}.ct-series-n .ct-bar,.ct-series-n .ct-line,.ct-series-n .ct-point,.ct-series-n .ct-slice-donut{stroke:#6188e2}.ct-series-n .ct-area,.ct-series-n .ct-slice-donut-solid,.ct-series-n .ct-slice-pie{fill:#6188e2}.ct-series-o .ct-bar,.ct-series-o .ct-line,.ct-series-o .ct-point,.ct-series-o .ct-slice-donut{stroke:#a748ca}.ct-series-o .ct-area,.ct-series-o .ct-slice-donut-solid,.ct-series-o .ct-slice-pie{fill:#a748ca}.ct-square{display:block;position:relative;width:100%}.ct-square:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:100%}.ct-square:after{display:table}.ct-square>svg{display:block;position:absolute;top:0;left:0}.ct-minor-second{display:block;position:relative;width:100%}.ct-minor-second:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:93.75%}.ct-minor-second:after{display:table}.ct-minor-second>svg{display:block;position:absolute;top:0;left:0}.ct-major-second{display:block;position:relative;width:100%}.ct-major-second:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:88.8888888889%}.ct-major-second:after{display:table}.ct-major-second>svg{display:block;position:absolute;top:0;left:0}.ct-minor-third{display:block;position:relative;width:100%}.ct-minor-third:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:83.3333333333%}.ct-minor-third:after{display:table}.ct-minor-third>svg{display:block;position:absolute;top:0;left:0}.ct-major-third{display:block;position:relative;width:100%}.ct-major-third:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:80%}.ct-major-third:after{display:table}.ct-major-third>svg{display:block;position:absolute;top:0;left:0}.ct-perfect-fourth{display:block;position:relative;width:100%}.ct-perfect-fourth:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:75%}.ct-perfect-fourth:after{display:table}.ct-perfect-fourth>svg{display:block;position:absolute;top:0;left:0}.ct-perfect-fifth{display:block;position:relative;width:100%}.ct-perfect-fifth:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:66.6666666667%}.ct-perfect-fifth:after{display:table}.ct-perfect-fifth>svg{display:block;position:absolute;top:0;left:0}.ct-minor-sixth{display:block;position:relative;width:100%}.ct-minor-sixth:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:62.5%}.ct-minor-sixth:after{display:table}.ct-minor-sixth>svg{display:block;position:absolute;top:0;left:0}.ct-golden-section{display:block;position:relative;width:100%}.ct-golden-section:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:61.804697157%}.ct-golden-section:after{display:table}.ct-golden-section>svg{display:block;position:absolute;top:0;left:0}.ct-major-sixth{display:block;position:relative;width:100%}.ct-major-sixth:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:60%}.ct-major-sixth:after{display:table}.ct-major-sixth>svg{display:block;position:absolute;top:0;left:0}.ct-minor-seventh{display:block;position:relative;width:100%}.ct-minor-seventh:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:56.25%}.ct-minor-seventh:after{display:table}.ct-minor-seventh>svg{display:block;position:absolute;top:0;left:0}.ct-major-seventh{display:block;position:relative;width:100%}.ct-major-seventh:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:53.3333333333%}.ct-major-seventh:after{display:table}.ct-major-seventh>svg{display:block;position:absolute;top:0;left:0}.ct-octave{display:block;position:relative;width:100%}.ct-octave:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:50%}.ct-octave:after{display:table}.ct-octave>svg{display:block;position:absolute;top:0;left:0}.ct-major-tenth{display:block;position:relative;width:100%}.ct-major-tenth:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:40%}.ct-major-tenth:after{display:table}.ct-major-tenth>svg{display:block;position:absolute;top:0;left:0}.ct-major-eleventh{display:block;position:relative;width:100%}.ct-major-eleventh:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:37.5%}.ct-major-eleventh:after{display:table}.ct-major-eleventh>svg{display:block;position:absolute;top:0;left:0}.ct-major-twelfth{display:block;position:relative;width:100%}.ct-major-twelfth:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:33.3333333333%}.ct-major-twelfth:after{display:table}.ct-major-twelfth>svg{display:block;position:absolute;top:0;left:0}.ct-double-octave{display:block;position:relative;width:100%}.ct-double-octave:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:25%}.ct-double-octave:after{display:table}.ct-double-octave>svg{display:block;position:absolute;top:0;left:0} \ No newline at end of file